假设一个三层的神经网络结构图如下:

第一节,windows和ubuntu下深度学习theano环境搭建-LMLPHP

对于一个单独的训练样本x其二次代价函数可以写成:

C = 1/2|| y - a|| = 1/2∑(y - a)

a=σ(z)

z = ∑ωa + b

代价函数C是a的函数,a又是z的函数,z又是ω的函数,同时又是a的函数......

证明四个基本方程(BP1-BP4),所有这些都是多元微积分的链式法则的推论

δ = (∂C/∂a)σ'(z)                                                         (BP1)

δ = ∑ωδσ'(z)                                                    (BP2)

      ∂C/∂ω= δa(BP3)

∂C/∂b= δ(BP4)

1.让我们从方程(BP1)开始,它给出了输出误差δ的表达式。

δ = ∂C/∂z

应用链式法则,我们可以就输出激活值的偏导数的形式重新表示上面的偏导数:

δ = ∑(∂C/∂a)(∂a/∂z)

这里求和是在输出层的所有神经元k上运行的,当然,第k个神经元的输出激活值a只依赖于当k=j时第j个神经元的带权输入z。所以当k≠j

时,∂a/∂z=0。结果简化为:

δ = (∂C/∂a)(∂a/∂z)

由于a=σ(z),右边第二项可以写成σ'(z),方程变成

δ = (∂C/∂a)σ‘(z)

2.证明BP2,它给出了下一层误差δ的形式表示误差δ。为此我们要以δ=∂C/∂z的形式重写 δ = ∂C/∂z

δ = ∂C/∂z

=∑(∂C/∂z)(∂z/∂z)

=∑(∂z/∂z)δ

这里最后一行我们交换了右边的两项,并用δ的定义带入。为此我们对最后一行的第一项求值,

注意:

z = ∑ωa + b =  ∑ωσ(z) + b

做微分得到

∂z /∂z = ωσ'(z)

带入上式:

δ = ∑ωδσ'(z)

3.证明BP3。计算输出层∂C/∂ω

∂C/∂ωL = ∑∂C/∂a)(∂a/∂ω )

这里求和是在输出层的所有神经元k上运行的,当然,第k个神经元的输出激活值a只依赖于当m=j时第j个神经元的输入权重ω。所以当k≠j

   时,∂a/∂ω=0。结果简化为:

      ∂C/∂ω = (∂C/∂a)(∂a/∂z)*(∂z/∂ω)

= δa

计算输入层上一层(L-1):

∂C/∂ω= (∑(∂C/∂a)(∂a/∂z)(∂z/∂a))(/∂a/∂z)(∂z/∂ω)

= (∑δω)σ'(z)a

= δa

对于处输入层的任何一层(l):

∂C/∂ω= (∂C/∂z )(∂z/∂ω) = δa

4.证明BP4。计算输出层∂C/∂b

∂C/∂b = ∑∂C/∂a)(∂a/∂b )

这里求和是在输出层的所有神经元k上运行的,当然,第k个神经元的输出激活值a只依赖于当m=j时第j个神经元的输入权重b。所以当k≠j

   时,∂a/∂b=0。结果简化为:

      ∂C/∂b = (∂C/∂a)(∂a/∂z)*(∂z/∂b)

= δ

计算输入层上一层(L-1):

∂C/∂b= (∑(∂C/∂a)(∂a/∂z)(∂z/∂a))(/∂a/∂z)(∂z/∂b)

= (∑δω)σ'(z)

= δ

对于处输入层的任何一层(l):

∂C/∂b= (∂C/∂z )(∂z/∂b) = δ

参考文献

[1]]神经网络基础

[2]Neural Networks and Deep Learning.       Michael A. Nielsen

[3]一文弄懂神经网络中的反向传播法

[4]深度神经网络(DNN)反向传播算法(BP)

05-04 12:23