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

神经网络反向传播Backpropagation

一、深度学习三部曲:

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

二、定义神经网络
本次学习使用的是全连接前馈神经网络(Fully Connect Feedforward Network)
在这里插入图片描述
以上图为例,此处所采用的sigmoid函数是 1 + 1 / e z 1+1/e^{-z} 。也就是节点的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} )。对于多层运算,我们将 σ ( w 2 ( w 1 + b 1 ) + b 2 ) \sigma(w_{2}(w_{1}+b_{1})+b_{2}) 依次类推得到上图所示。
三、评估函数好坏
这里,我们定义交叉熵(Cross Entropy)来评估。
首先定义真实值(target)和训练值的交叉熵:
l ( y , y ^ ) l(y,\hat{y}) =- i = 1 10 \sum_{i=1}^{10} y i ^ \hat{y_{i}} ln y i y_{i}
对于整个网络来说,total loss:L= n = 1 N l n \sum_{n=1}^{N} l^{n}
在这里插入图片描述
在这里,我们通过最小化total loss来求得评估model。如何评估呢,我们就通过梯度下降(Gradient Descent)
四、选择最好的函数Model
通过梯度下降最小化total loss选择最好的函数。
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/BRAVE_NO1/article/details/83479605