Numpy 神经网络权值在线性单位内爆炸

Numpy 神经网络权值在线性单位内爆炸,numpy,neural-network,backpropagation,Numpy,Neural Network,Backpropagation,我目前正在使用numpy用Python实现一个简单的神经网络和backprop算法。我已经用中心差测试了我的backprop方法,得到的梯度是相等的 然而,该网络无法逼近简单的正弦曲线。该网络有一个隐藏层(100个神经元)和一个线性激活函数的输出层。每个单元也有一个偏置输入。训练采用简单梯度下降法,学习率为0.2 问题来自梯度,每一个历元的梯度都变大,但我不知道为什么?此外,如果我降低学习率,问题就不会改变 编辑:我已将代码上载到pastebin:看起来您没有使用正则化。如果你训练你的网络足够长

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

然而,该网络无法逼近简单的正弦曲线。该网络有一个隐藏层(100个神经元)和一个线性激活函数的输出层。每个单元也有一个偏置输入。训练采用简单梯度下降法,学习率为0.2

问题来自梯度,每一个历元的梯度都变大,但我不知道为什么?此外,如果我降低学习率,问题就不会改变


编辑:我已将代码上载到pastebin:

看起来您没有使用正则化。如果你训练你的网络足够长的时间,它将开始学习EXACT数据而不是抽象模式


有两种方法可以使你的人际网络正常化,比如:停止训练,给大梯度带来高成本,或者更复杂,比如辍学。如果你搜索网页/书籍,你可能会找到很多选择。

有两件事你可以尝试,也许可以结合使用:

  • 使用较小的学习率。如果它太高,你可能会在当前方向上超出最小值很多,因此你的体重会继续变大

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


  • 太高的学习率可能无法收敛,甚至出现分歧,这就是问题所在

    由于这个原因,梯度可能会发散:当超过最小值的位置时,结果点不仅可以再远一点,甚至可以比最初的距离更远,还可以在另一侧。重复这个过程,它将继续发散。换句话说,与学习率相比,最佳位置周围的变化率可能太大

    资料来源:我对以下视频的理解(观看时间接近7:30)。

    我也有类似的问题(使用不同的库DL4J),即使是在非常简单的目标函数的情况下。当我从负对数似然变为泊松或L2时,我开始得到不错的结果。(当我加入指数学习率衰减后,我的结果要好得多。)

    这是一个很好的、表达清晰的问题。不幸的是,对于这个网站来说,这感觉与主题无关。如果它关闭了,考虑过度装配不会是问题,但是我的网络提供了太大的输出。所以我得到的不是[-1,1]中的值,而是大于1e60的值。我已经试过了。不幸的是,梯度会“爆炸”,只是速度较慢。如果台阶太大,梯度应该振荡吗?但它变得越来越大。我看到了一些类似的东西,试图训练一个网络来做线性回归。我确实在中添加了学习率衰减,这使我达到了目标(我的测试数据的斜率为.5),但我担心添加衰减会掩盖网络中的一个缺陷,权重应该收敛并保持自然收敛,特别是在学习率极低的情况下。