神经网络权重以线性单位爆炸

时间:2013-11-12 11:34:34

标签: numpy neural-network backpropagation

我目前正在使用numpy在Python中实现一个简单的神经网络和backprop算法。我已经使用中心差异测试了我的backprop方法,结果渐变是相等的。

但是,网络无法逼近简单的正弦曲线。该网络具有一个具有tanh激活功能的隐藏层(100个神经元)和具有线性激活功能的输出层。每个单元也有一个偏置输入。训练通过简单的梯度下降完成,学习率为0.2。

问题来自于渐变,每个时代都变大了,但我不知道为什么?此外,如果我降低学习率,问题就不会改变。

编辑:我已将代码上传到pastebin:http://pastebin.com/R7tviZUJ

3 个答案:

答案 0 :(得分:1)

您可以尝试两种方法,可能是组合使用:

  1. 使用较小的学习率。如果它太高,你可能会在当前方向上超过最小值,因此你的重量会不断增大。

  2. 使用较小的初始权重。这与第一项有关。较小的学习率也可以解决这个问题。

答案 1 :(得分:1)

我有一个类似的问题(使用不同的库,DL4J),即使是非常简单的目标函数。 In my case, the issue turned out to be the cost function.当我从负对数似然变为泊松或L2时,我开始得到不错的结果。 (一旦我加上指数学习速率衰减,我的结果会好很多。)

答案 2 :(得分:0)

看起来你不使用正规化。如果你训练你的网络足够长,它将开始学习精确数据而不是抽象模式。

有一些方法可以规范您的网络,例如:停止培训,将大量成本投入到大型渐变中,或者更复杂,例如辍学。如果你搜索网页/书籍,你可能会找到许多选项。