反向传播详解

引入

反向传播算法可谓是深度学习算法中最为重要的方法,常用于优化人工神经网络中的各种参数,这里列出其详细推导过程,以备不测。

符号定义

定义如下几个符号:

  • $w_{kj}^l$表示第l-1层的第k个节点连接到第l层的第j个节点的权重
  • $b_j^l$表示第l层的第j个节点的偏置,所有连接到该节点的链接都公用该偏置
  • $z_j^l$表示第l层第j个节点的输入:即

$$
z_j^l=\sum_k{w_{kj}^la_k^{j-1}+b_j^l}
$$

  • $a_j^l$表示第l层第j个节点的输出,即

$$
a_j^l=f(z_j^l)=f(\sum_k{w_{kj}^la_k^{j-1}+b_j^l})
$$

上式中的f即为激活函数。

公式推导

反向传播算法的主要思想即利用人工神经网络和实际标签产生的误差,利用梯度下降算法,来最小化该误差。

假设误差为C,即:
$$
C = g(a,y)
$$
其中a为输出,y为真实标签,g为判定他俩之间误差大小的函数。

公式一:最后一层的误差

假设神经网络有L层,则最后一层的误差定义为:
$$
\delta_j^L=\frac {\partial C}{\partial z_j^L}\\
=\frac {\partial C}{\partial a_j^L} \frac{\partial a_j^L}{\partial z_j^L}
$$
我们为什么要用a作为中间项呢?因为误差仅仅是输出项a的函数

该式的第一项由具体的$C=g(a,y)$求导得知,第二项由激活函数求导得知。由此,可以算得最后一层的误差

公式二:任意一层的误差

对于任意的第l层而言,可以通过第l+1层的误差得知,这便是反向传播的意义。
$$
\delta_j^l=\frac {\partial C}{\partial z_j^l}\\
=\sum_k {\frac {\partial C} {\partial z_k^{l+1}} \frac {\partial z_k^{l+1}} {\partial a_j^l} \frac {\partial a_j^l} {\partial z_j^l}}\\
= \sum_k {\delta_K^{L+1} \frac {\partial \sum_{p=1}^{|maxP|} {w_{pk}^{l+1}a_p^l+b_k^{l+1}}} {\partial a_j^l} f’(z_j^l)}\\
= \sum_k{\delta_k^{L+1}w_{kj}^{l+1}f’(z_j^l)}
$$
最后的结果仅仅和后一层的误差,后一层的权重,激活函数的导数这三项有关,于是由后向前,便可以求得任意一层的误差。

公式三:权重的梯度

该公式是主要的起作用部分,用于进行梯度下降。
$$
\frac {\partial C} {\partial w_{kj}^l}=\frac {\partial C} {\partial z_j^l} \frac {\partial z_j^l} {\partial w_{kj}^l}\\
= \delta_j^l\frac {\partial \sum_{p=1}^{|maxP|}{w_{pj}^la_{k}^{l-1}+b_j^l}} {\partial w_{kj}^l}\\
=\delta_j^la_k^{l-1}
$$
可以看出,该公式可有公式二以及中间层的输出推出,于是可有得到对重建权重的迭代下降梯度

公式四:偏置的梯度

该公式与公式三极为相似:
$$
\frac {\partial C} {\partial b_j^l}=\frac {\partial C} {\partial z_j^l} \frac {\partial z_j^l} {\partial b_j^l}\\
= \delta_j^l\frac {\partial \sum_{p=1}^{|maxP|}{w_{pj}^la_{k}^{l-1}+b_j^l}} {\partial b_j^l}\\
=\delta_j^l
$$
仅仅与公式二的结果有关。

最终算法

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读


本文结束啦感谢您的阅读
生活不易,求打赏
0%