追着幸福跑|为什么深度神经网络这么难训练?| 赠书( 四 )


追着幸福跑|为什么深度神经网络这么难训练?| 赠书, 这样就解开了之前的疑惑:第2个隐藏层的神经元确实比第1个隐藏层的学得快 。
如果添加更多隐藏层 , 会如何呢?如果有3个隐藏层 , 比如一个[784,30,30,30,10]神经网络 , 那么对应的学习速度分别是0.012、0.060和0.283 , 其中前面两个隐藏层的学习速度还是慢于最后的隐藏层 。 假设再增加一个包含30个神经元的隐藏层 , 那么对应的学习速度分别是0.003、0.017、0.070和0.285 。 还是相同的模式:前面的隐藏层比后面的隐藏层学习得更慢 。
这就是训练开始时的学习速度 , 即刚刚初始化之后的情况 。 那么随着训练的推进 , 学习速度会发生怎样的变化呢?以只有两个隐藏层的神经网络为例 , 其学习速度的变化如图5-6所示 。
追着幸福跑|为什么深度神经网络这么难训练?| 赠书这些结果产生自对1000幅训练图像应用梯度下降算法 , 训练了500轮 。 这与通常的训练方式不同 , 没有使用小批量方式 , 仅仅使用了1000幅训练图像 , 而不是全部的50 000幅图像 。 这并不是什么新尝试 , 也不是敷衍了事 , 而显示了使用小批量随机梯度下降会让结果包含更多噪声(尽管在平均噪声时结果很相似) 。 可以使用确定好的参数对结果进行平滑处理 , 以便看清楚真实情况 。
如图5-6所示 , 两个隐藏层一开始速度便不同 , 二者的学习速度在触底前迅速下降 。 此外 , 第1层的学习速度比第2层慢得多 。
更复杂的神经网络情况如何呢?下面进行类似的试验 , 但这次神经网络有3个隐藏层([784,30,30,30,10]) , 如图5-7所示 。
追着幸福跑|为什么深度神经网络这么难训练?| 赠书同样 , 前面的隐藏层比后面的隐藏层学习得更慢 。 最后一个试验用到4个隐藏层([784,30,30,30,30,10]) , 看看情况如何 , 如图5-8所示 。
追着幸福跑|为什么深度神经网络这么难训练?| 赠书同样的情况出现了 , 前面的隐藏层慢于后面的隐藏层 。 其中隐藏层1的学习速度跟隐藏层4的差了两个数量级 , 即前者是后者的1/100 , 难怪之前训练这些神经网络时出现了问题 。
这就有了重要发现:至少在某些深度神经网络中 , 梯度在隐藏层反向传播时倾向于变小 。 这意味着前面的隐藏层中的神经元比后面的隐藏层中的神经元学习得更慢 。 本节只研究了一个神经网络 , 其实多数神经网络存在这个现象 , 即梯度消失问题 。
为何会出现梯度消失问题呢?如何避免它呢?在训练深度神经网络时如何处理这个问题呢?实际上 , 这个问题并非不可避免 , 然而替代方法并不完美 , 也会出现问题:前面的层中的梯度会变得非常大!这被称为梯度爆炸问题 , 它不比梯度消失问题容易处理 。 一般而言 , 深度神经网络中的梯度是不稳定的 , 在前面的层中可能消失 , 可能“爆炸” 。 这种不稳定性是基于梯度学习的深度神经网络存在的根本问题 , 也就是需要理解的地方 。 如果可能 , 应该采取恰当的措施解决该问题 。
关于梯度消失(或不稳定) , 一种观点是确定这真的成问题 。 暂时换一个话题 , 假设要最小化一元函数
追着幸福跑|为什么深度神经网络这么难训练?| 赠书 , 如果其导数
追着幸福跑|为什么深度神经网络这么难训练?| 赠书很小 , 这难道不是一个好消息吗?是否意味着已经接近极值点了?同样 , 深度神经网络中前面隐藏层的小梯度是否表示不用费力调整权重和偏置了?


推荐阅读