笔记:ML-LHY-7 Backpropagation

这节课主要说了神经网络的一种求梯度方式:反向传播。原来只理解在链式求导上,而这节课阐述了反向传播实际也是在反向求一个神经网络
pdf 视频

梯度下降

不过是求线性回归、逻辑回归还是神经网络都是使用梯度下降方法:)
那么神经网络求梯度如下
网络参数:
θ = { w 1 , w 2 , ⋯   , b 1 , b 2 , ⋯   } \theta=\left\{w_{1}, w_{2}, \cdots, b_{1}, b_{2}, \cdots\right\} θ={w1,w2,,b1,b2,}
梯度为:
∇ L ( θ ) = [ ∂ L ( θ ) / ∂ w 1 ∂ L ( θ ) / ∂ w 2 ⋮ ∂ L ( θ ) / ∂ b 1 ∂ L ( θ ) / ∂ b 2 ⋮ ] \begin{array}{l} \nabla \mathrm{L}(\theta) =\\ {\left[\begin{array}{c} \partial \mathrm{L}(\theta) / \partial w_{1} \\ \partial \mathrm{L}(\theta) / \partial w_{2} \\ \vdots \\ \partial \mathrm{L}(\theta) / \partial b_{1} \\ \partial \mathrm{L}(\theta) / \partial b_{2} \\ \vdots \end{array}\right]} \end{array} L(θ)=L(θ)/w1L(θ)/w2L(θ)/b1L(θ)/b2

然后更新:
 Compute  ∇ L ( θ 0 ) θ 1 = θ 0 − η ∇ L ( θ 0 )  Compute  ∇ L ( θ 1 ) θ 2 = θ 1 − η ∇ L ( θ 1 ) \begin{array}{ll} \text { Compute } \nabla \mathrm{L}\left(\theta^{0}\right) & \theta^{1}=\theta^{0}-\eta \nabla \mathrm{L}\left(\theta^{0}\right) \\ \text { Compute } \nabla \mathrm{L}\left(\theta^{1}\right) & \theta^{2}=\theta^{1}-\eta \nabla \mathrm{L}\left(\theta^{1}\right) \end{array}  Compute L(θ0) Compute L(θ1)θ1=θ0ηL(θ0)θ2=θ1ηL(θ1)

但是这样做,参数太多了,因为是全连接,多层,很可能达到百万级参数,直接求太多参数了
但是有个有效的方法,反向传播(Backpropagation)。
个人认为和动态规划思想有点类似,共用底层的计算,稍后会介绍,实际上最底层的计算就是靠近输出层的梯度。

链式求导回顾

只有一条分支:
y = g ( x ) z = h ( y ) y=g(x) \quad z=h(y) y=g(x)z=h(y)

Δ x → Δ y → Δ z \Delta x \rightarrow \Delta y \rightarrow \Delta z ΔxΔyΔz

d z d x = d z d y d y d x \frac{d z}{d x}=\frac{d z}{d y} \frac{d y}{d x} dxdz=dydzdxdy

多条分支:
x = g ( s ) y = h ( s ) z = k ( x , y ) x=g(s) \quad y=h(s) \quad z=k(x, y) x=g(s)y=h(s)z=k(x,y)

在这里插入图片描述
d z d s = ∂ z ∂ x d x d s + ∂ z ∂ y d y d s \frac{d z}{d s}=\frac{\partial z}{\partial x} \frac{d x}{d s}+\frac{\partial z}{\partial y} \frac{d y}{d s} dsdz=xzdsdx+yzdsdy

反向传播

具体要求什么?要求梯度,损失的定义是交叉熵C之和:

在这里插入图片描述
L ( θ ) = ∑ n = 1 N C n ( θ ) L(\theta)=\sum_{n=1}^{N} C^{n}(\theta) L(θ)=n=1NCn(θ)
对一个w求偏导:
∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ C n ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N} \frac{\partial C^{n}(\theta)}{\partial w} wL(θ)=n=1NwCn(θ)

之前已经说过直接对C求w的偏导参数太多,可以拆成以下2步:(Forward pass) X (Backward pass)
利用链式求导:
∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \frac{\partial C}{\partial w}= \quad \frac{\partial z}{\partial w} \frac{\partial C}{\partial z} wC=wzzC
∂ z ∂ w \frac{\partial z}{\partial w} wz就是Forward pass要求的

∂ C ∂ z \frac{\partial C}{\partial z} zC就是Backward pass要求得

在这里插入图片描述

Forward pass

对所有参数计算 ∂ z / ∂ w \partial z / \partial w z/w

∂ z / ∂ w 1 = x 1 ∂ z / ∂ w 2 = x 2 \begin{array}{l} \partial z / \partial w_{1}= x_{1} \\ \partial z / \partial w_{2}= x_{2} \end{array} z/w1=x1z/w2=x2

在这里插入图片描述
为什么叫Forward pass可以看到,计算方向是Forward

Backward pass

对每个激活函数的输入z求 ∂ C / ∂ z \partial C / \partial z C/z

在这里插入图片描述

∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a \frac{\partial C}{\partial z}=\frac{\partial a}{\partial z} \frac{\partial C}{\partial a} zC=zaaC
拆分:
∂ a ∂ z = σ ′ ( z ) \frac{\partial a}{\partial z} = \sigma^{\prime}(z) za=σ(z)

在这里插入图片描述
∂ 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+azzC

所以:

∂ 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+w4zC]

这里回答了为什么可以把反向传播中Backward pass看做在求反向神经网络:

在这里插入图片描述

还剩最后一个问题就是 ∂ C ∂ z ′ \frac{\partial C}{\partial z^{\prime}} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z^{\prime \prime}} zC不知道,但是如果 z ′ z^{\prime} z z ′ ′ z^{\prime\prime} z的下一层就是输出层的话是可以直接计算的

∂ C ∂ z ′ = ∂ y 1 ∂ z ′ ∂ C ∂ y 1 ∂ C ∂ z ′ ′ = ∂ y 2 ∂ z ′ ′ ∂ C ∂ y z \frac{\partial C}{\partial z^{\prime}}=\frac{\partial y_{1}}{\partial z^{\prime}} \frac{\partial C}{\partial y_{1}} \quad \frac{\partial C}{\partial z^{\prime \prime}}=\frac{\partial y_{2}}{\partial z^{\prime \prime}} \frac{\partial C}{\partial y_{z}} zC=zy1y1CzC=zy2yzC
同理,如果在中间呢?一样可以计算(实际上可以由下一层计算,就还是套用上面公式,只不过把下一层做输入,输出到这层作为这层的输入。。。递推公式啦):
在这里插入图片描述
比如求 ∂ C ∂ z ′ \frac{\partial C}{\partial z^{\prime}} zC
在这里插入图片描述
这样一直往后推,直到输出层,此时就可以算出来来了,实际上没必要从中间推导,知道原理,从后玩前反向计算就很顺了:

在这里插入图片描述

总结

别忘了为什么要拆分:
∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \frac{\partial C}{\partial w}= \quad \frac{\partial z}{\partial w} \frac{\partial C}{\partial z} wC=wzzC

既然各自都求得,那么乘起来就得到 ∂ C ∂ w \frac{\partial C}{\partial w} wC
在这里插入图片描述

以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值