BP算法推导

来源:互联网 发布:什么是模块化编程 编辑:程序博客网 时间:2024/05/19 17:47

反向传播算法是深度学习的基础之一,其主要的核心就是对代价函数E关于权重w(或偏置b)的偏导数E/w的表达式。这个表达式代表在改变权值和偏置时,代价函数变化的快慢。

使用wljk表示从(l1)th层的kth神经元到lth层的jth神经元上的权重。之所以l的序号在(l1)层的序号之前,是因为后期进行矩阵运算的时候会比较方便。

有了这些,lth层的jth神经元的激活值alj就和(l1)th层关联起来了:

alj=σ(kwljkal1k+blj)

基础的BP算法中σ(x)为sigmoid函数,即σ(x)=11+ex

BP算法的二次代价函数是LMS(最小均方差),其定义为:

E=12j(yjaLj)2

zlk=kwljkal1k+blj,则alj=σ(zlk)

δlj=Ezlj,以代表该神经元的误差,以δlj代表l层的误差向量。之所以不用Ealj是因为后面用Ezlj来计算隐藏层误差的时候更加方便。

隐藏层中δl=Ezlj的值可以通过下一层的误差δl+1获得:

δlk=(jwl+1jkδl+1j)σ(zlk)

所以总结出4个方程式:

δL=aEδ(zL) (BP1)

δlk=((wl+1)Tδl+1j)σ(zl) (BP2)

Eblj=δlj (BP3)

Ewljk=al1kδlj (BP4)

(BP1)的证明:

δL的定义是:

δLj=EzLj

于是,应用链式法则,对其求导,可以把上面的式子表示为

δLj=kEaLkaLkzLj

由于E只通过aLjzLj关联,所以,当kj时,aLkzLj消失了,于是,简化后的方程为:

δLj=EaLjaLjzLj

这正是分量形式的(BP1)

(BP2)的证明

δlj=Ezlj

=kEzl+1kzl+1kzlj

=kzl+1kzljδ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+1kzlj=wl+1kjσ(zlj)

所以,把他带入(1)得:

δlj=kwl+1kjδl+1kδ(zlj)

(BP3)与(BP4)证明:

Ewljk=Ezljzljwljk (2A)

Eblj=Ezljzljblj (2B)

因为:δlj的定义就是Ezlj,所以将其代入(2)变为:

Ewljk=zljwljkδlj (3A)

Eblj=zljbljδlj (3B)

由于:zlj=kwljkal1k+blj,所以:

zljwljk=al1k (4A)

zljblj=1 (4B)

于是将(4A)带入(3A),(4B)带入(3B)中,得:

Ewljk=al1kδlj

Ewljk=δlj

以上即(BP3)和(BP4)的证明

以上为BP算法最基础的证明公式

参考资料:

[1] Mitchell.机器学习[M]

[2] Michael Nielsen.《神经网络与深度学习》[M]

[3] Hagan.《神经网络设计》[M]

以上格式是根据《神经网络与深度学习》书中的格式进行的,为了完全理解其概念,先后阅读了Mitchell的《机器学习》与《神经网络设计》。Mitchell的机器学习中的推导最容易理解,神经网络设计中将其用矩阵形式进行实现。

查看原文:http://data.1kapp.com/?p=218