神经网络不学习,在一个输出上汇聚

时间:2014-05-07 19:29:01

标签: machine-learning neural-network

我正在尝试编程神经网络,我现在正在测试它。我已将其简化为2个训练样例,包含2个输入和1个输入。

Input : Output
1,0   :   1  
1,1   :   0

我循环前进和后向传播1,000次,网络输出总是收敛到1或0,具体取决于初始化随机权重的开始位置。无论我输入什么输入,输出都是一样的。它没有学习。

我不确定如何寻求帮助而不会超载您的所有代码,所以我会发布我正在做的事情:

Create random initial weights
For i = 1 to 1000
 For j = 1 to Samples in Training Set (2)
  Set activations (Sigmoid function)
  Forward-prop
  delta = sum of (deltas in next layer * weights connecting this node with next deltas) * act*(1-act)
  Weights = Weights + lambda(.05) * delta * x(i)

有什么我似乎做错了吗?我应该发布一些/所有代码吗?关于我还应该测试什么的任何建议?我一直在Excel中手动测试所有东西,一切似乎都按照我预期的方式工作(前向道路,三角洲计算等)

1 个答案:

答案 0 :(得分:0)

如果你试图训练它做XOR而不是你应该使用所有四个训练例子(0,0-> 0)等等。不要将计算网络的输出等同于反向传播,反向传播是指计算误差值隐藏层神经元。

反向传播是一种自身内部的算法,多层感知器使用它(松散地说)“推断”隐藏层神经元的错误值。反向传播适用于单个隐藏层神经元,它通过将每个权重从这个神经元向它们连接到的神经元的误差值求和。

在所有四个示例中训练您的网络,它不应该超过10,000个时期,因为它太融合,但1000可能没问题。

另一个注意事项:无论学习问题如何,神经网络(以及几乎所有的机器学习算法)总能在更多数据(训练示例)中表现更好。