训练神经网络:最佳实践

本部分介绍了反向传播算法的失败情形,以及正则化神经网络的最常用方法。

失败案例

有很多常见做法会导致反向传播算法出错。

梯度消失

较低层(更接近输入)的渐变可能会变得非常小。在深度网络中,计算这些梯度可能涉及许多小项的乘积。

当较低层的梯度消失为 0 时,这些层的训练速度非常慢,或根本不训练。

ReLU 激活函数有助于防止梯度消失。

分解渐变

如果网络中的权重非常大,则较低层的梯度会涉及许多大项的乘积。在这种情况下,您可以让渐变效果呈爆炸式增长:渐变因过大而无法收敛。

批量归一化有助于防止梯度爆炸,因为可以降低学习速率。

ReLU 单元无效

一旦 ReLU 单元的加权和低于 0,ReLU 单元可能会卡住。它会输出 0 激活,对网络的输出没有任何影响,并且在反向传播期间,梯度无法再流过它。如果梯度来源被切断,ReLU 的输入可能永远不会变化足以使加权和恢复到 0 以上。

降低学习速率有助于防止 ReLU 单元消失。

Dropout 正规化

这是称为丢弃的另一种形式的正则化,可用于神经网络。其工作原理是,在一个梯度步长中随机“丢弃”网络中的单元激活。丢弃得越多,正则化效果就越强:

  • 0.0 = 无丢弃正则化。
  • 1.0 = 丢弃所有内容。模型学不到任何东西。
  • 介于 0.0 和 1.0 之间的值 = 更有用。