[note]李宏毅Deep Learning 之 BackPropagation笔记


中文名:反向传播算法

用于Gradient Descent 来train 一个neural network时用到

BackPropagation的核心是通过链式法则改变微分形式,并用forward pass 与 backward pass求出对应微分

Gradient Descent

在进行Gradient Descent 步骤的时候,我们需要计算 ∇ L \nabla L L ,也就是要计算L对各个parameter的偏微分,如果我们的parameter非常多,我们的layers也比较多(例如在做语音识别模型的时候可能有7,8层)

To compute the gradients efficiently,we use backpropagation

Math premise

数学前置知识:Chain Rule

不懂的自行学习Calculus

Back Propagation

这里 C n C^n Cn 代表预测值 y n y^n yn 与 真实值 y ^ n \hat y^n y^n 的距离

对公式整体取偏微分可以得到右式

我们先取三角形中的neuron出来考虑

我们想要计算 ∂ C ∂ w \frac { \partial C } { \partial w } wC ,根据一阶微分形式不变性可得 $\frac { \partial C } { \partial w } = \frac { \partial z } { \partial w } \frac { \partial C } { \partial z } $

我们将前面的 ∂ z ∂ w \frac {\partial z}{\partial w} wz 称为Forward Pass:commute ∂ z ∂ w \frac {\partial z}{\partial w} wz for all parameters,这个很容易计算即是前面feature的值

将后面的 ∂ C ∂ z \frac { \partial C } { \partial z} zC 称为Backward Pass:commute ∂ C ∂ z \frac { \partial C } { \partial z} zC for all activation function inputs z

forward pass

forward pass 计算起来很简单

也就是说Forward pass 过程就是将input输入进neural network中计算每一个neuron 的Output即可

backward pass

如何计算 ∂ C ∂ z \frac { \partial C } { \partial z} zC ?

我们同样使用一阶微分形式不变性$\frac { \partial C } { \partial z } = \frac { \partial a } { \partial z } \frac { \partial C } { \partial a } $

∂ a ∂ z \frac{\partial a}{\partial z} za 就是Activation function的微分(假如是sigmoid function就是 σ ′ ( z ) \sigma ^ { \prime }(z) σ(z)

那么 ∂ C ∂ a \frac{\partial C}{\partial a} aC 计算则是利用Chain rule表示为 ∂ C ∂ a = ∂ z ′ ∂ a ∂ C ∂ z ′ + ∂ z ′ ′ ∂ a ∂ C ∂ z ′ ′ \frac { \partial C } { \partial a } = \frac { \partial z ^ { \prime } } { \partial a } \frac { \partial C } { \partial z ^ { \prime } } + \frac { \partial z ^ { \prime \prime } } { \partial a } \frac { \partial C } { \partial z ^ { \prime \prime } } aC=azzC+az′′z′′C

这里两项的原因是因为a的下一项只有两个neuron,如果有n个则是n个的summation

在这里插入图片描述

也就是说现在如果我们知道?的两个值就可以得出 ∂ C ∂ z \frac { \partial C } { \partial z} zC 的值了

∂ C ∂ z = σ ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac { \partial C } { \partial z } = \sigma ^ { \prime } ( z ) \left[ w _ { 3 } \frac { \partial C } { \partial z ^ { \prime } } + w _ { 4 } \frac { \partial C } { \partial z ^ { \prime \prime } } \right] zC=σ(z)[w3zC+w4z′′C]

在这里我们注意到,每次我们想要计算当前这个neuron的C关于z的偏微分的时候,我们需要求出下一层的C的偏微分,也就是说,我们需要从后往前来反复求偏微分就可以了,这就是为什么叫做backpropagation,这在ppt中叫做Compute ∂ C ∂ z \frac{\partial C}{\partial z} zC reversely

Summary

因此我们的Back Propagation一共分为两步:

  1. forward pass 求出z的预测值并求出 ∂ z ∂ w \frac{\partial z}{\partial w} wz 的值

  2. backward pass逆向顺序过程求出对应的偏微分

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值