【深度学习】BP算法-误差逆传播算法详解

前些开始准备找实习找工作了,复习机器学习算法的时候发现BP算法又忘了,这次写博客记录一下,由于我矩阵知识不是很好,所以这篇文章没有以矩阵运算的方式来讲解。本文表面是原创,实际上参考了很多很多文章,感谢互联网提供了一个知识分享平台吧(还好某度的百家号平台没有技术相关的文章,百家号的文章都不咋地)

符号与神经网络结构说明

在这里插入图片描述

L L : 当前神经网络的总层数
n l n^{l} : 第 l l 层神经元拥有的神经元个数
α i l \alpha^{l}_{i} : 第 l l 层神经网络中的第 i i 个神经元的输入
β i l \beta^{l}_{i} : 第 l l 层神经网络中的第 i i 个神经元的输出
w i j l w^{l}_{ij} : 第 l l 层神经网络中的第 i i 个神经元的到第 l + 1 l+1 层神经网络中的第 j j 个神经元的权重
b j l b^{l}_{j} : 第 l l 层神经网络中的激活阈值(想不出来叫啥了)
E E : 神经网络的总损失
f f : 激活函数
M M : 总样本数
x i j x_{ij} : 第 i i 个样本的第 j j 个属性值(特征值,whatever)
y i j y_{ij} : 第 i i 个样本的第 j j 个输出的真实值
y ^ i j \hat{y}_{ij} : 神经网络对于第 i i 个样本在第 j j 个输出的预测值,也就是 β j L \beta^{L}_{j}

一些准备知识

神经网络内部的运算

  • 神经元的输入与输出的关系: β i l = f ( α i l ) \beta^{l}_{i}=f(\alpha^{l}_{i})
  • l l 层神经元与第 l + 1 l+1 层神经元之间的关系: α j l + 1 = k = 1 n l w k j l β k l + b i j l \alpha^{l+1}_{j}=\sum_{k=1}^{n^{l}}w^{l}_{kj}\beta^{l}_{k}+b^{l}_{ij}
  • 常用的均方损失: E = m = 1 M 1 2 k n L ( y m k y ^ m k ) 2 E=\sum_{m=1}^{M}\frac{1}{2}\sum_{k}^{n^L}(y_{mk}-\hat{y}_{mk})^2

求导的链式法则

  • 如果 y = g ( x ) , z = h ( y ) y=g(x),z=h(y) ,那么有 z x = z y y x \frac{\partial z}{\partial x}=\frac{\partial z}{\partial y}\frac{\partial y}{\partial x}
  • 如果 y 1 = g ( x ) , y 2 = h ( x ) , z = k ( y 1 , y 2 ) y_1=g(x),y_2=h(x),z=k(y_1,y_2) ,那么有 z x = z y 1 y 1 x + z y 2 y 2 x \frac{\partial z}{\partial x}=\frac{\partial z}{\partial y_1}\frac{\partial y_1}{\partial x}+\frac{\partial z}{\partial y_2}\frac{\partial y_2}{\partial x}

BP算法

请结合图看,重点关注第 l l 层第 i i 个和第 l + 1 l+1 层第 j j 个神经元之间的权重更新
由于梯度下降方法,权重一定是按下式更新的 w i j l = w i j l η E w i j l w^{l}_{ij}=w^{l}_{ij}-\eta\frac{\partial E}{\partial w^{l}_{ij}} 因此求 E w i j l \frac{\partial E}{\partial w^{l}_{ij}} 就是BP算法的核心

由链式法则可知 E w i j l = E α j l + 1 α j l + 1 w i j l ( 1 ) \frac{\partial E}{\partial w^{l}_{ij}}=\frac{\partial E}{\partial \alpha^{l+1}_{j}} \frac{\partial \alpha^{l+1}_{j}}{\partial w^{l}_{ij}} \qquad(1)

l l 层神经元与第 l + 1 l+1 层神经元之间的关系: α j l + 1 = k = 1 n l w k j l β k l + b i j l \alpha^{l+1}_{j}=\sum_{k=1}^{n^{l}}w^{l}_{kj}\beta^{l}_{k}+b^{l}_{ij} 可知 α j l + 1 w i j l = β i l ( 2 ) \frac{\partial \alpha^{l+1}_{j}}{\partial w^{l}_{ij}}=\beta_{i}^{l} \qquad(2)

又由(2)带入(1)可得 E w i j l = E α j l + 1 β i l ( 3 ) \frac{\partial E}{\partial w^{l}_{ij}}=\frac{\partial E}{\partial \alpha^{l+1}_{j}} \beta_{i}^{l} \qquad(3)

由链式法则可知 E α j l + 1 = E β j l + 1 β j l + 1 α j l + 1 ( 4 ) \frac{\partial E}{\partial \alpha^{l+1}_{j}}=\frac{\partial E}{\partial \beta^{l+1}_{j}} \frac{\partial \beta^{l+1}_{j}}{\partial \alpha^{l+1}_{j}} \qquad(4)

神经元的输入与输出的关系: β i l = f ( α i l ) \beta^{l}_{i}=f(\alpha^{l}_{i}) 可知 β j l + 1 α j l + 1 = f ( α j l + 1 ) ( 5 ) \frac{\partial \beta^{l+1}_{j}}{\partial \alpha^{l+1}_{j}}=f'(\alpha^{l+1}_{j}) \qquad(5)

由于 E E 是第 l + 2 l+2 层神经元的输入 α 1 l + 2 , α 2 l + 2 , . . . , α n l + 1 l + 2 \alpha_{1}^{l+2},\alpha_{2}^{l+2},...,\alpha_{n^{l+1}}^{l+2} 的函数,所以由链式法则第二条有 E β j l + 1 = k = 1 n l + 2 E α k l + 2 α k l + 2 β j l + 1 = k = 1 n l + 2 E α k l + 2 w j k l + 1 ( 6 ) \frac{\partial E}{\partial \beta^{l+1}_{j}}=\sum_{k=1}^{n^{l+2}}\frac{\partial E}{\partial \alpha^{l+2}_{k}} \frac{\partial \alpha^{l+2}_{k}}{\partial \beta^{l+1}_{j}}=\sum_{k=1}^{n^{l+2}}\frac{\partial E}{\partial \alpha^{l+2}_{k}} w_{jk}^{l+1} \qquad(6)

将(5)(6)带入(4)可得 E α j l + 1 = f ( α j l + 1 ) k = 1 n l + 2 E α k l + 2 w j k l + 1 ( 7 ) \frac{\partial E}{\partial \alpha^{l+1}_{j}}=f'(\alpha^{l+1}_{j})\sum_{k=1}^{n^{l+2}}\frac{\partial E}{\partial \alpha^{l+2}_{k}} w_{jk}^{l+1} \qquad(7)

到这里可以看出, w , f , α j l + 1 w,f',\alpha_j^{l+1} 都已知,如果知道了第 l + 2 l+2 层的所有 E α j l + 2 \frac{\partial E}{\partial \alpha^{l+2}_{j}} ,就能求得第 l + 1 l+1 层的所有 E α j l + 1 \frac{\partial E}{\partial \alpha^{l+1}_{j}} ,由(3)(7)就能得到 E w i j l = β i l f ( α j l + 1 ) k = 1 n l + 2 E α k l + 2 w j k l + 1 ( 8 ) \frac{\partial E}{\partial w^{l}_{ij}}=\beta_{i}^{l} f'(\alpha^{l+1}_{j})\sum_{k=1}^{n^{l+2}}\frac{\partial E}{\partial \alpha^{l+2}_{k}} w_{jk}^{l+1} \qquad(8)

而对于输出层来说 E α j L = E β j L β j L α j L \frac{\partial E}{\partial \alpha^{L}_{j}}=\frac{\partial E}{\partial \beta^{L}_{j}} \frac{\beta^{L}_{j}}{\partial \alpha^{L}_{j}}

然后由(7)我们就可以得到上一层的 E α j L 1 \frac{\partial E}{\partial \alpha^{L-1}_{j}} ,由(8)就可以的得到这一层的梯度

有了上面的基础,求 E b j l \frac{\partial E}{\partial b^{l}_{j}} 就非常简单了,因为他就等于 E b j l = E α j l + 1 α j l + 1 b j l = E α j l + 1 1 \frac{\partial E}{\partial b^{l}_{j}}=\frac{\partial E}{\partial \alpha^{l+1}_{j}} \frac{\partial \alpha^{l+1}_{j}}{\partial b^{l}_{j}}=\frac{\partial E}{\partial \alpha^{l+1}_{j}}*1

感性认识

为什么叫反向呢?李宏毅老师给出的解释非常好,在这里简单说一下,如果我们把 E α k l + 2 \frac{\partial E}{\partial \alpha^{l+2}_{k}} 看做输入的话,那(8)这个式子就像这个神经网络在反着从后往前走一样,具体请见李宏毅机器学习

例子

A Step by Step Backpropagation Example

猜你喜欢

转载自blog.csdn.net/dominic_z/article/details/87859024
今日推荐