注意:前方警告来袭:如有看到大量数学公式和文字说明而感到恶心、反胃甚至呕吐的人还请绕行,此篇博客不适合你们,此篇博客是写给那些能懂得欣赏数学与公式之美的人看的,能认认真真看完这篇博客,读懂每一个公式,看懂每一个推导过程,那么就一定会对BP原理有一个根本性的认识,只有这样,作为一名程序猿,才能一个人在黑屋子里敲出对应功能的代码!!!
一、单层单连接
考虑以下两个单连接神经元:
根据上图 可得如下公式推导:
n1=w1a0n2=w2a1
a1=f1(n1)a=a2=f2(n2)
E=E[(t−a)2]=E(n1,n2)=E(w1,w2)
此处用
E
表示代价函数,物理意义为均方误差值,
t
表示训练样本所对应的目标值,
a
为最终的输出,
E
中
t
为已知值,故其为
a
的函数,又有前可知
a
为
n2
的函数,
n2
为
a1
的函数,
a1
为
n1
的函数,如果将
w2
看着常数,则
a
为
n1
、
n2
的函数,所以
E
同时也可以表示为
n1
、
n2
的函数,同理也可以表示为
w1
、
w2
的函数。机器学习的目的就是通过调整参数
w
使
E
最小,为使后面求导方便,同样可以将
E
表示成如下:
E≈(t−a)2
已知
E
为
w1
、
w2
的函数,为使
E
取值最小,可通过梯度下降法对
w1
、
w2
更新,更新过程如下:
w1(k+1)=w1(k)−α⋅∂E∂w1w2(k+1)=w2(k)−α⋅∂E∂w2
其中
α
为梯度更新步长,也称为学习率,可由人为设定。
已知
E=E[(t−a)2]=E(n1,n2)=E(w1,w2)
n1=w1a0n2=w2a1
根据求导链式法则可得:
∂E∂w1=∂E∂n1⋅∂n1∂w1
∂E∂w2=∂E∂n2⋅∂n2∂w2
其中
∂n1∂w1=∂(w1a0)∂w1=a0
∂n2∂w2=∂(w2a1)∂w2=a1
令
∂E∂n1=s1
∂E∂n2=s2
为敏感系数,后面会通过公式计算该系数,将以上公式合并可得如下公式:
∂E∂w1=∂E∂n1⋅∂n1∂w1=s1⋅a0
∂E∂w2=∂E∂n2⋅∂n2∂w2=s2⋅a1
带入更新公式可得:
w1(k+1)=w1(k)−α⋅s1⋅a0w2(k+1)=w2(k)−α⋅s2⋅a1
该更新公式中等式右边只有敏感系数
s1
和
s2
未知,先计算
s1
、
s2
的表达式,已知
s1
、
s2
的定义式,可通过求导链式法则求出
s1
和
s2
之间的关系。
s1=∂E∂n1=∂E∂n2⋅∂n2∂n1=s2⋅∂n2∂n1
其中
∂n2∂n1=∂(w2a1)∂n1=w2⋅∂a1∂n1=w2⋅∂f1(n1)∂n1=w2⋅f˙1(n1)
所以
s1
与
s2
之间的关系为
s1=s2⋅w2⋅f˙1(n1)
现在
s1
可以通过
s2
表示了,也就是说到这一步只有
s2
是未知数,下面计算
s2
的表达式:由前面可知均方误差
E
的近似表达式为:
E≈(t−a)2
而
∂E∂n2=s2
将两者合并可得:
s2=∂E∂n2=∂(t−a)2∂n2=−2(t−a)⋅∂a∂n2=−2(t−a)⋅∂f2(n2)∂n2=−2(t−a)⋅f˙2(n2)
注意到此表达式中等式的右边含有
(t−a)
为训练模型的偏差。
至此
s1
、
s2
的计算表达式均已知。
现在重新理一下整个更新过程:
总结:BP更新过程可分为三步:
第一步:数据前向传播
第二步:误差后向传播
第三步:权重更新
二、多层多连接
要读懂这一节,必须先要对第一节有足够的理解。
因本人没有艺术细胞,不会画图,前面那个图都是复制来的,又多层网络图不好画,网上又搜索不到对应的图,所以就不贴图了,各位读者还请自行脑补,就是在第一个图上面进行扩展。下面直接列写公式:
⎧⎩⎨⎪⎪⎪⎪a⃗ 0=p⃗ a⃗ m+1=f⃗ m+1(Wm+1a⃗ m+b⃗ m+1)m=0,1,2,...,M−1a⃗ =a⃗ M
代价函数(均方误差):
F^(x⃗ )=(t⃗ (k)−a⃗ (k))T(t⃗ (k)−a⃗ (k))
权重更新公式:
这里需要注意下标
i,j
中
j
表示前一层神经元节点下标,
i
表示后一层神经元节点下标。
根据偏导链式法则同理可推得如下公式:
其中
表示第
m
层第
i
个节点的输入。该式对
w和b
求偏导分别为:
∂nmi∂wmi,j=am−1j
∂nmi∂bmi=1
同理定义敏感因子:
smi=∂F^∂nmi
结合前面两部分公式可得权重梯度:
将其代入权重更新公式有:
该表达式只是针对求解某一个权重和偏置。
下面以向量和矩阵的方式表示一层中权重和偏置的更新公式:
第
m
层权重用矩阵表示如下:
Wm=⎡⎣⎢⎢⎢⎢⎢⎢⎢wm1,1wm2,1⋮wmSm,1wm1,2wm2,2⋮wmSm,2⋯⋯⋱⋯wm1,Sm−1wm2,Sm−1⋮wmSm,Sm−1⎤⎦⎥⎥⎥⎥⎥⎥⎥
第
m
层敏感因子向量如下:
s⃗ m=∂F^∂n⃗ m=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢∂F^∂nm1∂F^∂nm2⋮∂F^∂nmSm⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
第
m−1
层输出向量如下:
a⃗ m−1=⎡⎣⎢⎢⎢⎢⎢⎢am−11am−12⋮am−1Sm−1⎤⎦⎥⎥⎥⎥⎥⎥
第
m
层偏置向量如下:
b⃗ m−1=⎡⎣⎢⎢⎢⎢⎢⎢bm−11bm−12⋮bm−1Sm−1⎤⎦⎥⎥⎥⎥⎥⎥
由此上述权重和偏置更新公式可统一由一下公式表示:
现在我们需要推导如下关系式:
已知
s⃗ m=∂F^∂n⃗ m=[∂n⃗ m+1∂n⃗ m]T∂F^∂n⃗ m+1=∂n⃗ m+1∂n⃗ ms⃗ m+1
注意,这里等式右边两个微分顺序不能乱,前一个为矩阵,后一个为向量,调换顺序后则无法进行数学运算。
以上矩阵亦称Jacobian矩阵,其中每一个元素的表达式如下:
由前面推导公式可得:
其中
将Jacobian矩阵矩阵代入
sm
表达式可得:
进一步有:
而最后一层
sMi
可由均方误差求得:
进一步可写为:
向量和矩阵表示为:
将以上过程总结为三步:
第一步:训练数据前向传播
第二步:误差反向传播
第三步:权重更新
以上就是整个多层多连接网络BP算法数学原理。
三、实例运用