假设一个三层的神经网络结构图如下:
对于一个单独的训练样本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]]神经网络基础