前些开始准备找实习找工作了,复习机器学习算法的时候发现BP算法又忘了,这次写博客记录一下,由于我矩阵知识不是很好,所以这篇文章没有以矩阵运算的方式来讲解。本文表面是原创,实际上参考了很多很多文章
符号与神经网络结构说明

L : 当前神经网络的总层数
nl : 第l层神经元拥有的神经元个数
αil : 第l层神经网络中的第i个神经元的输入
βil : 第l层神经网络中的第i个神经元的输出
wijl : 第l层神经网络中的第i个神经元的到第l+1层神经网络中的第j个神经元的权重
bjl : 第l层神经网络中到第l+1层神经网络中第j个神经元的的偏置项(想不出来叫啥了)
E : 神经网络的总损失
f : **函数
M : 总样本数
xij : 第i个样本的第j个属性值(特征值,whatever)
yij : 第i个样本的第j个输出的真实值
y^ij : 神经网络对于第i个样本在第j个输出的预测值,也就是βjL
一些准备知识
神经网络内部的运算
- 神经元的输入与输出的关系:βil=f(αil)
- 第l层神经元与第l+1层神经元之间的关系:αjl+1=∑k=1nlwkjlβkl+bjl
- 常用的均方损失:E=∑m=1M21∑knL(ymk−y^mk)2
求导的链式法则
- 如果y=g(x),z=h(y),那么有∂x∂z=∂y∂z∂x∂y
- 如果y1=g(x),y2=h(x),z=k(y1,y2),那么有∂x∂z=∂y1∂z∂x∂y1+∂y2∂z∂x∂y2
BP算法
请结合图看,重点关注第l层第i个和第l+1层第j个神经元之间的权重更新
由于梯度下降方法,权重一定是按下式更新的wijl=wijl−η∂wijl∂E因此求∂wijl∂E就是BP算法的核心
由链式法则可知∂wijl∂E=∂αjl+1∂E∂wijl∂αjl+1(1)
第l层神经元与第l+1层神经元之间的关系:αjl+1=∑k=1nlwkjlβkl+bjl可知 ∂wijl∂αjl+1=βil(2)
又由(2)带入(1)可得∂wijl∂E=∂αjl+1∂Eβil(3)
由链式法则可知∂αjl+1∂E=∂βjl+1∂E∂αjl+1∂βjl+1(4)
神经元的输入与输出的关系:βil=f(αil)可知∂αjl+1∂βjl+1=f′(αjl+1)(5)
由于E是第l+2层神经元的输入α1l+2,α2l+2,...,αnl+1l+2的函数,所以由链式法则第二条有∂βjl+1∂E=k=1∑nl+2∂αkl+2∂E∂βjl+1∂αkl+2=k=1∑nl+2∂αkl+2∂Ewjkl+1(6)
将(5)(6)带入(4)可得∂αjl+1∂E=f′(αjl+1)k=1∑nl+2∂αkl+2∂Ewjkl+1(7)
到这里可以看出,w,f′,αjl+1都已知,如果知道了第l+2层的所有∂αjl+2∂E,就能求得第l+1层的所有∂αjl+1∂E,由(3)(7)就能得到∂wijl∂E=βilf′(αjl+1)k=1∑nl+2∂αkl+2∂Ewjkl+1(8)
而对于输出层来说∂αjL∂E=∂βjL∂E∂αjLβjL
然后由(7)我们就可以得到上一层的∂αjL−1∂E,由(8)就可以的得到这一层的梯度
有了上面的基础,求∂bjl∂E就非常简单了,因为他就等于∂bjl∂E=∂αjl+1∂E∂bjl∂αjl+1=∂αjl+1∂E∗1
典型损失的梯度
平方损失
如果E=∣∣y−f(α)∣∣2,那么∂α∂E=2(y−f(α))f′(α)
交叉熵损失
如果E=−∑ikyilogf(αi),其中k为类别个数,假设该样本真实类别为j,那么有E=−logf(αj),于是∂αj∂E=−f(α)f′(α)
softmax的梯度
f(αi)=∑jkeαjeαi,f′(αi)=f(αi)(1−f(αi))
Resnet
resnet可以把梯度传回到更远的位置
就相当于多了个短接E=E(α1l+2,...,α0),其中α0=βjl+1
举个例子,一个函数z=f(y1,y2,y3)=y1+y2+y3,其中y1=x2,y2=x3,y3=x,那么∂x∂z=∂y1∂z∂x∂y1+∂y2∂z∂x∂y2+∂y3∂z∂x∂y3
注意,尽管y3=x,∂x∂z和∂y3∂z也不是同一个东西奥!因为∂x∂z还得考虑y1,y2

原谅我不想拿Visio画图了,看上面最简单的resnet一个案例,嘉定输入就是个一维的
求∂w0∂E=∂β1∂E∂α1∂β1∂w0∂α1,和上面不同的地方就在于∂β1∂E,假设短接那个变量记为α0,那么有
∂β1∂E=∂α2∂E∂β1∂α2+∂α0∂E∂β1∂α0其中∂β1∂α0=1,那么也就是说∂α0∂E这个梯度被传递回去了,这样就有助于缓解梯度消失
感性认识
为什么叫反向呢?李宏毅老师给出的解释非常好,在这里简单说一下,如果我们把∂αkl+2∂E看做输入的话,那(8)这个式子就像这个神经网络在反着从后往前走一样,具体请见李宏毅机器学习
例子
A Step by Step Backpropagation Example