[读书笔记]后向传播算法原理
k
:输入层神经元
i
:输出层神经元
以三层网络为例,推导出神经网络后向传播算法的一般规律。
首先,总体误差为:
E=12∑ζ,i(dζi−oζi)2
ζ :训练样本
dζi : 样本 ζ 在第 i 个神经元的标准值
后向传播细节
- 计算隐藏层-加权和
netζj=∑kwkjoζk+bj - 计算隐藏层-激励值
oζj=f(netζj)=f(∑kwkjoζk+bj) - 计算输出层-加权和
netζi=∑kwjioζj+bi=∑jwji⋅f(∑kwkjoζk+tj)+bi - 计算输出层-激励值
oζi=f(netζi)=f(∑jwjioζj+bi)=f(∑jwji⋅f(wkjoζk+tj)+bi) - 所有公式代入
E
E=12∑ζ,i[dζi−f(∑jwji⋅f(∑kwkjoζk+tj)+bi)]2 - 计算输出层和隐藏层的权重梯度
- 计算
ΔWji
∂E∂wji=∂E∂oζi⋅∂oζi∂netζi⋅∂netζi∂wji=−∑ζ(dζi−oζi)⋅f′(netζi)⋅oζj=−∑ζδζi⋅oζjΔwji=−η⋅∂E∂wji=η⋅∑ζδζi⋅oζj
where
δζi=(dζi−oζi)⋅f′(netζi)
for output neuron -
Δwkj
∂E∂wkj=∂E∂oζj⋅∂oζj∂netζj⋅∂netζj∂wkj=−∑ζ,i(dζi−oζi)⋅f′(netζi)⋅wji⋅f′(netζj)⋅oζk=−∑ζ,iδζi⋅wji⋅f′(netζj)⋅oζk=−∑ζδζj⋅oζkΔwkj=−η⋅∂E∂wkj=η⋅∑ζδζj⋅oζk
where
δζj=f′(netζj)⋅∑iwji⋅δζi
for hidden neuron - 一般地,对于一条权边
p→q
:
Δwpq=η⋅∑ζδq⋅opwnewpq=woldpq+Δwpq
其中,
o 为激励值,
δ 若于输出层,则为公式7;若于隐藏层,则为公式8. - sigmoid函数求导技巧
oζl=f(netζl)=11+e−netζlf′(netζl)=e−netζl(1+e−netζl)2=oζl⋅(1−oζl) - 所以前面公式可以改写为:
for output neuron
δζi=(dζi−oζi)⋅oζi⋅(1−oζi)Δwji=η⋅∑ζ(dζi−oζi)⋅oζi⋅(1−oζi)
for hidden neuron
δζj=oζj⋅(1−oζj)⋅∑iwji⋅δζiΔwkj=η⋅∑ζδζj⋅oζk=η⋅∑ζoζj⋅(1−oζj)⋅∑iwji⋅δζi⋅oζk 后向传播总结
Repeat until termination criterion satisfied
1.forward pass
calculate actual output for every layer: o
2.backward pass
wpq(t+1)=wpq(t)+Δwpg
Δwpq=η⋅δq⋅op
δi=(di−oi)⋅oi⋅(1−oi)
δj=oj⋅(1−oj)⋅∑iwji⋅δi
参考: http://sydney.edu.au/engineering/it/courses/comp4302/ann4-6s.pdf/
- 计算隐藏层-激励值