反向传播是神经网络最常用的训练算法。它使梯度下降法可用于多层神经网络。许多机器学习代码库(例如 Keras)会自动处理反向传播算法,因此您无需自行执行任何底层计算。请观看以下视频,从概念上大致了解反向传播算法的工作原理:
神经网络训练的最佳实践
本部分介绍了反向传播的失败情况,以及正则化神经网络的最常用方法。
梯度消失
较低神经网络层(更接近输入层)的梯度可能会变得很小。在深度网络(包含多个隐藏层的网络)中,计算这些梯度可能涉及对许多小项进行乘法。
当较低层的梯度值接近 0 时,梯度会被称为“消失”。具有消失梯度的层训练速度非常慢,或者根本无法训练。
ReLU 激活函数有助于防止梯度消失。
爆炸式渐变
如果网络中的权重非常大,则较低层的梯度涉及许多大项的乘积。在这种情况下,可能会出现梯度爆炸:梯度太大而无法收敛。
批处理归一化有助于防止梯度爆炸,降低学习率也有助于防止梯度爆炸。
死 ReLU 单元
一旦 ReLU 单元的加权和低于 0,ReLU 单元可能会卡住。它会输出 0,对网络的输出没有任何贡献,并且在反向传播期间梯度无法再流经它。由于梯度源被切断,ReLU 的输入可能永远不会发生足够的变化,无法使加权和重新高于 0。
降低学习率有助于防止 ReLU 单元死亡。
Dropout 正规化
还有一种正则化形式,称为Dropout 正则化,对神经网络很有用。其工作原理是,在一个梯度步长中随机“丢弃”网络中的单元激活。丢弃的样本越多,正则化效果就越强:
- 0.0 = 不进行 dropout 正规化。
- 1.0 = 舍弃所有节点。模型学不到任何规律。
- 0.0 和 1.0 之间的值更有用。