神经网络不学习,收敛于一个输出
Posted
技术标签:
【中文标题】神经网络不学习,收敛于一个输出【英文标题】:Neural Network Not Learning, Converging on one output 【发布时间】:2014-06-24 22:50:57 【问题描述】:我正在尝试对神经网络进行编程,现在我正在对其进行测试。我已将其简化为 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 中手动测试所有内容,一切似乎都按我预期的方式工作(前向传播、增量计算等)
【问题讨论】:
【参考方案1】:如果您尝试训练它进行 XOR,那么您应该使用所有四个训练示例 (0,0->0) 等。不要将计算网络输出等同于反向传播,反向传播是指计算错误值隐藏层神经元。
反向传播本身就是一种算法,多层感知器使用它来(松散地说)“推断”隐藏层神经元的错误值。反向传播适用于单个隐藏层神经元,方法是将来自该神经元的每个权重与它们所连接的神经元的误差值相加。
在所有四个示例上训练您的网络,它不应该花费超过 10,000 个 epoch,因为它也能很好地收敛,但 1000 个可能没问题。
另一个注意事项:无论学习问题如何,神经网络(以及几乎所有机器学习算法)在使用更多数据(训练示例)时总是会表现得更好。
【讨论】:
以上是关于神经网络不学习,收敛于一个输出的主要内容,如果未能解决你的问题,请参考以下文章