神经网络反向传播Backpropagation(李弘毅机器学习)

神经网络反向传播Backpropagation

一、深度学习三部曲:

  1. 定义一个函数model
  2. 评估这个函数model
  3. 选出最好的函数

二、定义神经网络
本次学习使用的是全连接前馈神经网络(Fully Connect Feedforward Network)
在这里插入图片描述
以上图为例,此处所采用的sigmoid函数是 1 + 1 / e − z 1+1/e^{-z} 1+1/ez。也就是节点的activation是sigmoid函数。从上图可以看出我们输入1对应的权重为1和-1,下一层节点对应的bias(偏置值)为1,输入-1对应的权重为-2和1,下一层节点对应的偏置值为0。我们可以通过11+(-1)(-2)+1=4,然后对sigmoid(4)进行计算得到0.98.
依次类推,第二个节点也可以这样计算。因此我们将其写成如上的矩阵表示形式。
在这里插入图片描述
由此一来,我们可以将算出的激活值当作下一层的输入进行类似的计算。即可以得到y=f(x)= σ \sigma σ( w 1 x + b 1 w_{1}x+b_{1} w1x+b1)。对于多层运算,我们将 σ ( w 2 ( w 1 + b 1 ) + b 2 ) \sigma(w_{2}(w_{1}+b_{1})+b_{2}) σ(w2(w1+b1)+b2)依次类推得到上图所示。
三、评估函数好坏
这里,我们定义交叉熵(Cross Entropy)来评估。
首先定义真实值(target)和训练值的交叉熵:
l ( y , y ^ ) l(y,\hat{y}) l(y,y^)=- ∑ i = 1 10 \sum_{i=1}^{10} i=110 y i ^ \hat{y_{i}} yi^ln y i y_{i} yi
对于整个网络来说,total loss:L= ∑ n = 1 N l n \sum_{n=1}^{N} l^{n} n=1Nln
在这里插入图片描述
在这里,我们通过最小化total loss来求得评估model。如何评估呢,我们就通过梯度下降(Gradient Descent)
四、选择最好的函数Model
通过梯度下降最小化total loss选择最好的函数。
在这里插入图片描述

这里,我们需要计算梯度: ∂ l ∂ w \frac{\partial l}{\partial w} wl
也就是后向传播(Backpropagation)的问题。根据链式法则(chain rule),我们将求解 ∂ l ∂ w \frac{\partial l}{\partial w} wl的问题进行分解: ∂ l ∂ w \frac{\partial l}{\partial w} wl= ∂ l ∂ z \frac{\partial l}{\partial z} zl ∂ z ∂ w \frac{\partial z}{\partial w} wz。显然,我们就可以分成两部分进行求解:首先是forward pass(前向传播),也就是对于 ∂ z ∂ w \frac{\partial z}{\partial w} wz的求解。对于 z = w 1 x + b 1 z=w_{1}x+b_{1} z=w1x+b1来说,z是第一层sigmoid函数的输入。那么 ∂ z ∂ w 1 = x 1 \frac{\partial z}{\partial w_{1}}=x_{1} w1z=x1,也就是输入,那么我们很容易可以计算出 ∂ z ∂ w \frac{\partial z}{\partial w} wz,也就是每个权重的那个输入端的值。
在这里插入图片描述
计算完 ∂ z ∂ w \frac{\partial z}{\partial w} wz,我们开始计算 ∂ l ∂ z \frac{\partial l}{\partial z} zl,也就是后向传播(backford pass)
相比之下, ∂ l ∂ z \frac{\partial l}{\partial z} zl的计算就要难很多。首先我们利用链式法则,进行分解: ∂ l ∂ z \frac{\partial l}{\partial z} zl= ∂ a ∂ z \frac{\partial a}{\partial z} za ∂ l ∂ a \frac{\partial l}{\partial a} al其中a=sigmoid(z)= σ ( z ) \sigma{(z)} σ(z)。同样,我们分别对每个部分进行求解。 ∂ a ∂ z \frac{\partial a}{\partial z} za= σ ( z ) ˊ \acute{\sigma(z)} σ(z)ˊ( σ ( z ) \sigma{(z)} σ(z)d的一阶导数)。 ∂ l ∂ a \frac{\partial l}{\partial a} al则就比较复杂。我们再次利用链式法则, ∂ l ∂ a \frac{\partial l}{\partial a} al= ∂ z ˊ ∂ a \frac{\partial \acute{z}}{\partial a} azˊ ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl+ ∂ z ˊ ˊ ∂ a \frac{\partial \acute{\acute{z}}}{\partial a} azˊˊ ∂ l ∂ z ˊ ˊ \frac{\partial l}{\partial \acute{\acute{z}}} zˊˊl。而 ∂ z ˊ ∂ a \frac{\partial \acute{z}}{\partial a} azˊ其实就是w,因此 z ˊ = w 3 a + b 3 \acute{z}=w_{3}a+b_{3} zˊ=w3a+b3, ∂ z ˊ ˊ ∂ a \frac{\partial \acute{\acute{z}}}{\partial a} azˊˊ同理。因此 ∂ l ∂ z \frac{\partial l}{\partial z} zl= σ ( z ) ˊ \acute{\sigma(z)} σ(z)ˊ w 3 w_{3} w3 ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl+ w 4 w_{4} w4 ∂ l ∂ z ˊ ˊ \frac{\partial l}{\partial \acute{\acute{z}}} zˊˊl)。
在这里插入图片描述
为了理解这个过程,我们可以假设 ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl ∂ l ∂ z ˊ ˊ \frac{\partial l}{\partial \acute{\acute{z}}} zˊˊl都是已知的,那么我们就可以得到 ∂ l ∂ z \frac{\partial l}{\partial z} zl,根据Forward pass我们已经计算得出了 ∂ z ∂ w \frac{\partial z}{\partial w} wz,两者相乘,我们就可以得到 ∂ l ∂ w \frac{\partial l}{\partial w} wl了。
在这里插入图片描述
但事实是 ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl ∂ l ∂ z ˊ ˊ \frac{\partial l}{\partial \acute{\acute{z}}} zˊˊl都是并不是已知的。那如何求解呢。我们分两种情况:第一种情况是 z ˊ \acute{z} zˊ z ˊ ˊ \acute{\acute{z}} zˊˊ对应的是输出层,也就是说经过一个sigmoid函数就可以输出结果了。这个情况,我们可以再次进行链式法则: ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl= ∂ l ∂ y 1 \frac{\partial l}{\partial y_{1}} y1l ∂ y 1 ∂ z ˊ \frac{\partial y_{1}}{\partial \acute{z}} zˊy1。我们可以简单快速的计算出 ∂ l ∂ y 1 \frac{\partial l}{\partial y_{1}} y1l,而 ∂ y 1 ∂ z ˊ \frac{\partial y_{1}}{\partial \acute{z}} zˊy1就是一个 σ ( z ˊ ) ˊ \acute{\sigma( \acute{z})} σ(zˊ)ˊ。这样我们就可以计算出最终答案。
在这里插入图片描述
第二种情况就比较复杂,我们需要一步步展开。就是一层一层计算,和第一种情况一样,我们算出结果来之后: ∂ l ∂ z ˊ \frac{\partial l}{\partial \acute{z}} zˊl= σ ( z ˊ ) ˊ \acute{\sigma(\acute{z})} σ(zˊ)ˊ w 5 w_{5} w5 ∂ l ∂ z a \frac{\partial l}{\partial z_{a}} zal+ w 6 w_{6} w6 ∂ l ∂ z b ) \frac{\partial l}{\partial z_{b}}) zbl)。依次类推计算。
在这里插入图片描述
这样计算非常麻烦,于是我们想到可以采用第一种情况的方法进行计算。也就是如下倒推:
在这里插入图片描述
也就是从末尾计算出相应的值,然后累乘就可以。
五、总结
当我们使用Backpropagation计算出所有的 ∂ l ∂ w \frac{\partial l}{\partial w} wl就可以采用梯度下降的办法进行计算。利用梯度值更新参数w,直到收敛。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值