我目前正在使用numpy在Python中实现一个简单的神经网络和backprop算法。我已经使用中心差异测试了我的backprop方法,结果渐变是相等的。
但是,网络无法逼近简单的正弦曲线。该网络具有一个具有tanh激活功能的隐藏层(100个神经元)和具有线性激活功能的输出层。每个单元也有一个偏置输入。训练通过简单的梯度下降完成,学习率为0.2。
问题来自于渐变,每个时代都变大了,但我不知道为什么?此外,如果我降低学习率,问题就不会改变。
编辑:我已将代码上传到pastebin:http://pastebin.com/R7tviZUJ
答案 0 :(得分:1)
您可以尝试两种方法,可能是组合使用:
使用较小的学习率。如果它太高,你可能会在当前方向上超过最小值,因此你的重量会不断增大。
使用较小的初始权重。这与第一项有关。较小的学习率也可以解决这个问题。
答案 1 :(得分:1)
我有一个类似的问题(使用不同的库,DL4J),即使是非常简单的目标函数。 In my case, the issue turned out to be the cost function.当我从负对数似然变为泊松或L2时,我开始得到不错的结果。 (一旦我加上指数学习速率衰减,我的结果会好很多。)
答案 2 :(得分:0)
看起来你不使用正规化。如果你训练你的网络足够长,它将开始学习精确数据而不是抽象模式。
有一些方法可以规范您的网络,例如:停止培训,将大量成本投入到大型渐变中,或者更复杂,例如辍学。如果你搜索网页/书籍,你可能会找到许多选项。