Machine learning 神经网络不学习,收敛于一个输出

Machine learning 神经网络不学习,收敛于一个输出,machine-learning,neural-network,Machine Learning,Neural Network,我正在尝试编程一个神经网络,现在我正在测试它。我将其简化为2个培训示例,其中包含2个输入和1个输入 Input : Output 1,0 : 1 1,1 : 0 我循环向前和向后传播1000次,网络输出总是收敛到1或0,这取决于初始化的随机权重的起始位置。无论我输入什么,输出都是一样的。它不学习 我不知道如何在不超载的情况下寻求帮助,您将看到我所有的代码,因此我将发布我正在做的事情: Create random initial weights For i = 1 to 10

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

Input : Output
1,0   :   1  
1,1   :   0
我循环向前和向后传播1000次,网络输出总是收敛到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手工测试所有东西,所有东西似乎都按照我预期的方式工作(正向道具、增量计算等)

如果您试图训练它执行异或,那么您应该使用所有四个训练示例(0,0->0)等。不要将计算网络输出等同于反向传播,反向传播指的是计算隐藏层神经元的误差值

反向传播是其自身的一种算法,多层感知器使用它(粗略地说)“推断”隐藏层神经元的错误值。反向传播适用于单个隐层神经元,方法是将该神经元向前的每个权重与它们所连接的神经元的误差值相加

在所有四个例子上训练你的网络,它不应该超过10000个时代,因为它太收敛了,但是1000个可能就可以了

另一个注意事项:不管学习问题是什么,神经网络(以及几乎所有的机器学习算法)总是会在有更多数据(训练示例)的情况下表现更好