深度学习-后向传播算法


深度学习的第一步,一定要理解后向传播算法。

前向传播

C w j C ( w + ϵ e j ) C ( w ) ϵ \frac{ ∂C }{ ∂wj }≈C(w+ϵej)−C(w)ϵ
计算损失函数C关于每个权重wj 的梯度,都需要对于每一个样本计算损失函数C(w+ϵej) ,当网络神经元增加,权重数量增加,比如一百万个,就需要计算一百万次损失函数,计算量是惊人的。

为什么需要反向传播

高效。基本上相当于两次前向传播的计算量(详情见下面算法部分,一次前向+一次后向梯度运算)。

后向传播

反向传播涉及的基础知识点包括:梯度下降和链式法则。

梯度下降1

一种最优化方法,按照梯度的反方向(下降最快的方向)进行迭代更新。 [这里可以进一步了解方向倒数,梯度以及最优化方法SGD, BGD, 牛顿法, 拟牛顿法(BFGS, LBFGS), Momentum, NAG, Adagrad, Rmsprop, Adadelta, Adam, NAdam等。]
在这里插入图片描述

链式法则

链式规则

一次前向传播2

一次前向传播

后向传播

后向传播更新

反向传播的问题及解决方案

梯度消失和梯度饱和、合适的学习率、批大小、epoch 数量等。
解决方案有:

  1. 激活函数方向。如relu, leaky relu, elu等
  2. fine tuning, 预训练微调
  3. 合适的初始化。如glorot, xavier, he等
  4. 添加正则。如LN,BN,WN,CN等
  5. 梯度剪切clip
  6. 残差结构resnet,短连接
  7. LSTM(有短连接的存在,gate不容易爆炸或消失)
  8. 使用线性后向传播3。如下图,线性反向传播算法在传递损失函数的梯度时,因为是线性函数,所以不需要另外再求梯度。
    在这里插入图片描述

  1. Gradient descent ↩︎

    扫描二维码关注公众号,回复: 9037509 查看本文章
  2. Deep learning, Ian Goodfellow ↩︎

  3. Linear Backprop in non-linear networks ↩︎

发布了10 篇原创文章 · 获赞 0 · 访问量 284

猜你喜欢

转载自blog.csdn.net/eyeshere/article/details/100914648
今日推荐