深度学习-后向传播算法
深度学习的第一步,一定要理解后向传播算法。
前向传播
计算损失函数C关于每个权重wj 的梯度,都需要对于每一个样本计算损失函数C(w+ϵej) ,当网络神经元增加,权重数量增加,比如一百万个,就需要计算一百万次损失函数,计算量是惊人的。
为什么需要反向传播
高效。基本上相当于两次前向传播的计算量(详情见下面算法部分,一次前向+一次后向梯度运算)。
后向传播
反向传播涉及的基础知识点包括:梯度下降和链式法则。
梯度下降1
一种最优化方法,按照梯度的反方向(下降最快的方向)进行迭代更新。 [这里可以进一步了解方向倒数,梯度以及最优化方法SGD, BGD, 牛顿法, 拟牛顿法(BFGS, LBFGS), Momentum, NAG, Adagrad, Rmsprop, Adadelta, Adam, NAdam等。]
链式法则
一次前向传播2
后向传播
反向传播的问题及解决方案
梯度消失和梯度饱和、合适的学习率、批大小、epoch 数量等。
解决方案有:
- 激活函数方向。如relu, leaky relu, elu等
- fine tuning, 预训练微调
- 合适的初始化。如glorot, xavier, he等
- 添加正则。如LN,BN,WN,CN等
- 梯度剪切clip
- 残差结构resnet,短连接
- LSTM(有短连接的存在,gate不容易爆炸或消失)
- 使用线性后向传播3。如下图,线性反向传播算法在传递损失函数的梯度时,因为是线性函数,所以不需要另外再求梯度。
-
扫描二维码关注公众号,回复: 9037509 查看本文章
Deep learning, Ian Goodfellow ↩︎