Machine Learning —— Backpropagation

Machine Learning —— Backpropagation

Gradient Descent

gradient descent的使用方法,跟前面讲到的linear Regression或者是Logistic Regression是一模一样的,唯一的区别就在于当它用在neural network的时候,neural network的parameter θ ∗ = w 1 , w 2 , . . . , b 1 , b 2 , . . \theta^*=w_1,w_2,...,b_1,b_2,.. θ=w1,w2,...,b1,b2,..,可能会有将近million个参数,如何有效地把这个近百万维的vector给计算出来,这就是Backpropagation要做的事情

Backpropagation并不是一个和gradient descent不同的training的方法,它就是gradient descent,它只是一个比较有效率的算法,让你在计算这个gradient的vector的时候更有效率

Chain Rule(链式法则)

对整个neural network,我们定义了一个loss function: L ( θ ) = ∑ n = 1 N l n ( θ ) L(\theta)=\sum\limits_{n=1}^Nl^n(\theta) L(θ)=n=1Nln(θ)
在这里插入图片描述
L ( θ ) L(\theta) L(θ)对某一个参数w做偏微分,表达式如下:

∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ l n ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w}=\sum\limits_{n=1}^N\frac{\partial l^n(\theta)}{\partial w} wL(θ)=n=1Nwln(θ)

我们先考虑某一个neuron,先拿出上图中被红色三角形圈住的neuron,假设只有两个input x 1 , x 2 x_1,x_2 x1,x2,通过这个neural,可以得到 z = b + w 1 x 1 + w 2 x 2 z=b+w_1x_1+w_2x_2 z=b+w1x1+w2x2,然后经过activation function从这个neuron中output出来,作为后续neuron的input,再经过了非常非常多的事情以后,会得到最终的output y 1 , y 2 y_1,y_2 y1,y2

按照chain rule,可以把拆分成两项 ∂ l ( θ ) ∂ w \frac{\partial l(\theta)}{\partial w} wl(θ)拆分成两项, ∂ l ( θ ) ∂ w = ∂ z ∂ w ∂ l ∂ z \frac{\partial l(\theta)}{\partial w}=\frac{\partial z}{\partial w}\frac{\partial l}{\partial z} wl(θ)=wzzl

计算前面这一项 ∂ z ∂ w \frac{\partial z}{\partial w} wz的过程我们称之为Forward pass;计算后一项 ∂ l ∂ z \frac{\partial l}{\partial z} zl的过程称之为Backward pass
在这里插入图片描述

Forward pass

∂ z ∂ w \frac{\partial z}{\partial w} wz就是看w前连接的input是什么,微分后的 ∂ z ∂ w \frac{\partial z}{\partial w} wz就是什么,因此只要计算出neural network里面每一个neuron的output就可以知道任意的z对w的偏微分
在这里插入图片描述

Backward pass

计算 ∂ l ∂ z \frac{\partial l}{\partial z} zl这项会比较复杂

公式推导

在这里插入图片描述

z通过activation function得到a,这个neural的output是 a = σ ( z ) a=\sigma(z) a=σ(z),接下来a会乘上某一个weight w 3 w_3 w3,再加上其它一堆value得到 z ′ z' z z ′ z' z是下一个neural activation function的input,然后a又会乘上某一个weight w 4 w_4 w4,再加上其它一堆value得到 z ′ ′ z'' z,我们在考虑下一步:

∂ l ∂ z = ∂ a ∂ z ∂ l ∂ a \frac{\partial l}{\partial z}=\frac{\partial a}{\partial z}\frac{\partial l}{\partial a} zl=zaal

这里的 ∂ a ∂ z \frac{\partial a}{\partial z} za实际上是activation function的微分(在这里就是sigmoid function的微分),接下来就是计算 ∂ l ∂ a \frac{\partial l}{\partial a} al,根据chain rule可以得到:

∂ l ∂ a = ∂ z ′ ∂ a ∂ l ∂ z ′ + ∂ z ′ ′ ∂ a ∂ 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''} al=azzl+azzl

上式中 ∂ z ′ ∂ a = w 3 , ∂ z ′ ‘ ’ ∂ a = w 4 \frac{\partial z'}{\partial a}=w_3,\frac{\partial z'‘’}{\partial a}=w_4 az=w3,az=w4,但是如何计算 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl

首先我们假设已通过某种方法把 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl计算出来了,然后回过头去就可以把 ∂ l ∂ z \frac{\partial l}{\partial z} zl给轻易计算出:

∂ l ∂ z = ∂ a ∂ z ∂ l ∂ a = σ ′ ( z ) [ w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ ] \frac{\partial l}{\partial z}=\frac{\partial a}{\partial z}\frac{\partial l}{\partial a}=\sigma'(z)[w_3\frac{\partial l}{\partial z'}+w_4\frac{\partial l}{\partial z''}] zl=zaal=σ(z)[w3zl+w4zl]

另一种观点

我们可以从另外一个观点来看待这个式子

现在有另外一个neuron,它不在我们原来的network里面,在下图中它被画成三角形,这个neuron的input就是 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl,那input ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl乘上 w 3 w_3 w3 ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl乘上 w 4 w_4 w4,两者相加再乘上activation function的微分 σ ′ ( z ) \sigma'(z) σ(z),就可以得到output ∂ l ∂ z \frac{\partial l}{\partial z} zl
在这里插入图片描述

两种情况

现在我们需要解决的问题是,怎么计算 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl,假设有两个不同的case:

case1:Output Layer

假设蓝色的这个neuron已经是hidden layer的最后一层了,也就是说连接在 ∂ z ′ \partial z' z ∂ z ′ ′ \partial z'' z后的两个红色的neuron已经是output layer,它的output就已经是整个network的output了,这个时候计算就比较简单:

∂ l ∂ z ′ = ∂ y 1 ∂ z ′ ∂ l ∂ y 1 \frac{\partial l}{\partial z'}=\frac{\partial y_1}{\partial z'}\frac{\partial l}{\partial y_1} zl=zy1y1l

  • ∂ y 1 ∂ z ′ \frac{\partial y_1}{\partial z'} zy1就是output layer的activation function(softmax)对 z ′ z' z的偏微分
  • ∂ l ∂ y 1 \frac{\partial l}{\partial y_1} y1l是loss对 y 1 y_1 y1的偏微分,取决于loss function怎么定义,也就是output和target之间是怎么evaluate的,可以用cross entropy,用不同的定义得到的值不一样

这时就可以把 l l l w 1 w_1 w1 w 2 w_2 w2的偏微分计算出来了
在这里插入图片描述

case2:Not Output Layer

假设现在红色的neural并不是整个network的output,那么 z ′ z' z经过红色neuron的activation function得到 a ′ a' a,然后output a ′ a' a w 5 、 w 6 w_5、w_6 w5w6相乘并加上一堆其它东西分别得到 z a z_a za z b z_b zb,如下图所示
在这里插入图片描述
根据之前的推导证明类比,如果知道 ∂ l ∂ z a \frac{\partial l}{\partial z_a} zal ∂ l ∂ z b \frac{\partial l}{\partial z_b} zbl,我们可以计算 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl即:

∂ l ∂ z ′ = σ ′ ( z ′ ) [ w 5 ∂ l ∂ z a + w 6 ∂ l ∂ z b ] \frac{\partial l}{\partial z'}=\sigma'(z')[w_5\frac{\partial l}{\partial z_a}+w_6\frac{\partial l}{\partial z_b}] zl=σ(z)[w5zal+w6zbl]
在这里插入图片描述
知道 z ′ z' z z ′ ′ z'' z就可以知道 z z z,知道 z a z_a za z b z_b zb就可以知道 z ′ z' z…以此类推,直到找到output layer

当我们从output layer的 ∂ l ∂ z \frac{\partial l}{\partial z} zl开始计算,可以发现它的计算量和network的Feedforward path一样

假设现在有6个neural,每一个neuron的activation function的input分别是 z 1 、 z 2 、 z 3 、 z 4 、 z 5 、 z 6 z_1、z_2、z_3、z_4、z_5、z_6 z1z2z3z4z5z6,如果我们反过来先计算 z 5 、 z 6 z_5、z_6 z5z6的偏微分的话 ∂ l ∂ z 5 、 ∂ l ∂ z 6 \frac{\partial l}{\partial z_5}、\frac{\partial l}{\partial z_6} z5lz6l,然后就可以计算 ∂ l ∂ z 3 、 ∂ l ∂ z 4 \frac{\partial l}{\partial z_3}、\frac{\partial l}{\partial z_4} z3lz4l,最后可以得到 ∂ l ∂ z 1 、 ∂ l ∂ z 2 \frac{\partial l}{\partial z_1}、\frac{\partial l}{\partial z_2} z1lz2l,这个过程就叫做Backward pass
在这里插入图片描述

Summary

  • Forward pass:每一个neuron的activation function的output,就是它所连接的weight的 ∂ z ∂ w \frac{\partial z}{\partial w} wz

  • Backward pass:建立一个与原来方向相反的neural network,它的三角形neuron的output就是 ∂ l ∂ z \frac{\partial l}{\partial z} zl

  • 把通过forward pass得到的 ∂ z ∂ w \frac{\partial z}{\partial w} wz和通过backforward pass得到的 ∂ l ∂ z \frac{\partial l}{\partial z} zl相乘即可得到 ∂ l ∂ w \frac{\partial l}{\partial w} wl

    ∂ l ∂ w = ∂ l ∂ z ∣ f o r w a r d p a s s ⋅ ∂ l ∂ z ∣ b a c k w a r d p a s s \frac{\partial l}{\partial w}=\frac{\partial l}{\partial z}|_{forward pass}\cdot\frac{\partial l}{\partial z}|_{backward pass} wl=zlforwardpasszlbackwardpass
    在这里插入图片描述

参考

https://sakura-gh.github.io/ML-notes/ML-notes-html/9_Backpropagation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值