反向传播算法是深度学习的基础之一,其主要的核心就是对代价函数
E
关于权重
使用
wljk
表示从
(l−1)th
层的
kth
神经元到
lth
层的
jth
神经元上的权重。之所以
l
的序号在
有了这些, lth 层的 jth 神经元的激活值 alj 就和 (l−1)th 层关联起来了:
alj=σ(∑kwljkal−1k+blj)
基础的BP算法中 σ(x) 为sigmoid函数,即 σ(x)=11+e−x
BP算法的二次代价函数是LMS(最小均方差),其定义为:
E=12∑j(yj−aLj)2
设 zlk=∑kwljkal−1k+blj ,则 alj=σ(zlk)
设
δlj=∂E∂zlj
,以代表该神经元的误差,以
δlj
代表
l
层的误差向量。之所以不用
隐藏层中 δl=∂E∂zlj 的值可以通过下一层的误差 δl+1 获得:
δlk=(∑jwl+1jkδl+1j)σ′(zlk)
所以总结出4个方程式:
δL=∇aE ⊙ δ′(zL) (BP1)
δlk=((wl+1)Tδl+1j) ⊙ σ′(zl) (BP2)
∂E∂blj=δlj (BP3)
∂E∂wljk=al−1kδlj (BP4)
(BP1)的证明:
δL 的定义是:
δLj=∂E∂zLj
于是,应用链式法则,对其求导,可以把上面的式子表示为
δLj=∑k∂E∂aLk∂aLk∂zLj
由于
E
只通过
δLj=∂E∂aLj∂aLj∂zLj
这正是分量形式的(BP1)
(BP2)的证明
δlj=∂E∂zlj
=∑k∂E∂zl+1k∂zl+1k∂zlj
=∑k∂zl+1k∂zljδl+1k (1)
由于
$z_k^{l+1}=\sum\limits_{j}w_{kj}^{l+1}a_j^l+b_k^{l+1}=\sum\limits_{j}w_{kj}^{l+1}\sigma(z_j^l)+b_k^{l+1}\$
所以,做微分,可以得到
∂zl+1k∂zlj=wl+1kjσ′(zlj)
所以,把他带入(1)得:
δlj=∑kwl+1kjδl+1kδ′(zlj)
(BP3)与(BP4)证明:
∂E∂wljk=∂E∂zlj∂zlj∂wljk (2A)
∂E∂blj=∂E∂zlj∂zlj∂blj (2B)
因为: δlj 的定义就是 ∂E∂zlj ,所以将其代入(2)变为:
∂E∂wljk=∂zlj∂wljkδlj (3A)
∂E∂blj=∂zlj∂bljδlj (3B)
由于: zlj=∑kwljkal−1k+blj ,所以:
∂zlj∂wljk=al−1k (4A)
∂zlj∂blj=1 (4B)
于是将(4A)带入(3A),(4B)带入(3B)中,得:
∂E∂wljk=al−1kδlj
∂E∂wljk=δlj
以上即(BP3)和(BP4)的证明
以上为BP算法最基础的证明公式
参考资料:
[1] Mitchell.机器学习[M]
[2] Michael Nielsen.《神经网络与深度学习》[M]
[3] Hagan.《神经网络设计》[M]
以上格式是根据《神经网络与深度学习》书中的格式进行的,为了完全理解其概念,先后阅读了Mitchell的《机器学习》与《神经网络设计》。Mitchell的机器学习中的推导最容易理解,神经网络设计中将其用矩阵形式进行实现。