如何使用 MLP 训练乘数?

How to train a multiplier with MLP?

我是神经网络的新手。我试图了解多层感知器可以学习实现什么样的解决方案。

是否可以通过给出离散数量的示例来训练 MLP 进行乘法运算?

我可以教它如何对某些数字(当然是来自训练数据集的数字)进行乘法运算,但它无法正确估计其他乘法。

我使用了 1 个隐藏层(TanH,10 个单元)和 1 个输出层(Identity),隐藏层和输出层都有偏差,并使用 Momentum 优化器进行训练。

数据集

0, 5 = 0
1, 1 = 1
2, 3 = 6
3, 7 = 21
4, 3 = 12
5, 9 = 45 
7,7 = 49
13,13 = 169

它给出了该数据集的正确结果,但是例如计算 5 * 5 给出了错误的数字,例如 32

我是不是对 MLP 期望太高了?我应该给网络什么数据集(或层设置)才能乘以任何给定的数字?

是的,您期望过高了。 MLP 不足以 "smart" 从少数特定示例中抽象出方法。它是基于输入的权重的线性组合;从这些示例中推断二次关系是一个比 MLP 术语更深层次的概念。

一般来说,如果您的研究尚未针对给定问题找到标准解决方案 class,那么您将不得不进行大量实验。我的第一个想法是尝试使用 RNN 来执行此操作,希望将乘法抽象捕捉为反馈循环的 side-effect。