李宏毅机器学习系列-反向传播

李宏毅机器学习系列-反向传播

梯度下降法

我们只到梯度下降法是用来进行模型学习参数的,神经网络的学习同样需要梯度下降法,我们设网络的参数 θ \theta θ为:
在这里插入图片描述
他也是这样不停的更新的:
在这里插入图片描述
我们计算每个参数的梯度来进行更新,我们采用比较高效的反向传播来进行梯度的计算:
在这里插入图片描述

链式求导法则

在说反向传播之前,先讲下链式求导法则,简单的理解就像一个链条一样,一个接着一个求导数,然后连乘起来,通俗的说,就是蝴蝶效应,很微小的变化可能会被传递到很远。比如这个函数,x是y的输入,y是z的输入,那么x的变化不仅会影响y也会影响z:
在这里插入图片描述
如果有两歌输入或者多个输入呢,把输入的影响加起来即可:
在这里插入图片描述

反向传播

反向传播主要用于进行高效的梯度计算,计算损失对每个参数的梯度,我们的损失是所有样本的误差之和:
在这里插入图片描述

我们拿上面的输入和隐藏层的第一个单元做例子:
在这里插入图片描述
根据链式法则,我们求损失l关于w的微分,可以化为:
在这里插入图片描述
如果我们要得到w的两个微分的话,直接微分可以得到值,也就是前面输入值:
在这里插入图片描述
我们叫正向传递,意思应该就是从前面传过来的值。

比如下图,每个w参数的微分就等于前面的输入值:
在这里插入图片描述
再来看看损失l对z的微分,因为有激活函数 σ \sigma σ的作用,所以也可以链式法则分解:
在这里插入图片描述
但是损失l对于a的微分是基于后面层,如果没有层了,那直接就是l对a的微分,如果有,那还要考虑后面的值,比如:
在这里插入图片描述
假设后面还有很多层,我们知道 ∂ l ∂ z ′ , ∂ l ∂ z ′ ′ , ∂ z ′ ∂ a = w 3 , ∂ z ′ ′ ∂ a = w 4 \frac{\partial {l}}{\partial z'},\frac{\partial l}{\partial z''},\frac{\partial {z'}}{\partial a}=w_3,\frac{\partial {z''}}{\partial a}=w_4 zl,zl,az=w3,az=w4,则
∂ l ∂ a = ∂ z ′ ∂ a ∂ l ∂ z ′ + ∂ z ′ ′ ∂ a ∂ l ∂ z ′ ′ = w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ \frac{\partial {l}}{\partial a}=\frac{\partial {z'}}{\partial a} \frac{\partial {l}}{\partial z'} + \frac{\partial {z''}}{\partial a} \frac{\partial {l}}{\partial z''} = w_3 \frac{\partial {l}}{\partial z'}+w_4 \frac{\partial {l}}{\partial z''} al=azzl+azzl=w3zl+w4zl

∂ l ∂ z = ∂ l ∂ a ∂ a ∂ z = ( w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ ) σ ′ ( z ) \frac{\partial {l}}{\partial z}=\frac{\partial {l}}{\partial a} \frac{\partial {a}}{\partial z} = (w_3 \frac{\partial {l}}{\partial z'}+w_4 \frac{\partial {l}}{\partial z''})\sigma'(z) zl=alza=(w3zl+w4zl)σ(z)
即:
在这里插入图片描述
因为z是前面计算出来,已经确定了,所以 σ ′ ( z ) 是 常 数 \sigma'(z)是常数 σ(z),那整个式子可以看成从右边向左边的计算,三角形的标志就是说后面的线性加权之后再乘以 σ ′ ( z ) \sigma ' (z) σ(z)
在这里插入图片描述
相对于正向传递的从左到右,这个从右到左的就是反向传递了。
因此我们要求的 ∂ l ∂ w = ∂ z ∂ w ∂ l ∂ z \frac{\partial {l}}{\partial w}=\frac{\partial {z}}{\partial w} \frac{\partial {l}}{\partial z} wl=wzzl就变成了两部分相乘了,一个是正向传递的输入 ∂ z ∂ w \frac{\partial {z}}{\partial w} wz=x,一个是反向传递的微分 ∂ l ∂ z \frac{\partial {l}}{\partial z} zl

大多数情况下,后面可能还有很多层,但是思路是一样的,我们先来看后面没有层的,也就是输出y,可以直接算出来:
在这里插入图片描述
后面不是直接输出层的:
在这里插入图片描述
但是可以用反向传递计算,比如下面的 ∂ l ∂ z ′ = ( w 5 ∂ l ∂ z a + w 6 ∂ l ∂ z b ) σ ′ ( z ′ ) \frac{\partial {l}}{\partial z'}=(w_5\frac{\partial {l}}{\partial z_a} + w_6\frac{\partial {l}}{\partial z_b})\sigma '(z') zl=(w5zal+w6zbl)σ(z)
在这里插入图片描述
所以我们可以用这个思路,先前向传递求出 z , ∂ z ∂ w = a z ,\frac{\partial {z}}{\partial w}=a zwz=a,然后反向传递求出线性加权乘以 σ ′ ( z ) \sigma '(z) σ(z),得 ∂ l ∂ z \frac{\partial {l}}{\partial z} zl,然后乘以a即可得 ∂ l ∂ w \frac{\partial {l}}{\partial w} wl,即结果为前向传递和反向传递的乘积:
在这里插入图片描述

总结

本篇主要介绍了反向传播算法,用比较简答的例子展现了某个参数的微分可以看做前向传递和反向传递的结果的乘积,因此可以很有效率的计算微分,其实只要先前向传播一遍,得到各个点的输入,然后反向传递即可计算各个点的微分,思维导图:
在这里插入图片描述
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值