BP算法
前情回顾
上回我们说到,单层的线性神经网络权值的迭代公式是:
w
:
=
w
−
η
X
T
(
f
(
w
X
)
−
y
)
f
′
(
w
X
)
w:=w-\eta X^T(f(wX)-y)f'(wX)
w:=w−ηXT(f(wX)−y)f′(wX)
其中呢,这个
(
f
(
w
X
)
−
y
)
f
′
(
w
X
)
(f(wX)-y)f'(wX)
(f(wX)−y)f′(wX)我们称它为
δ
\delta
δ,于是
w
:
=
w
−
η
X
T
δ
w:=w-\eta X^T\delta
w:=w−ηXTδ
不用必须是线性神经网络,其他激活函数也适用于这个公式,只不过线性的话就可以把f’(wX)这一项去掉。
对于多层的神经网络来说,每一层的权值怎么更新呢?
下面以二层的网络为例给出推导。
基本推导
损失函数自然就是
E
=
1
2
(
O
−
Y
)
2
E=\frac12(O-Y)^2
E=21(O−Y)2
这个二层的网络是如何工作的?
我们把它看成两个单层的就好。
一开始我们初始化了两层的权值V和W。
假设我们的激活函数是f(x).
中间层的输出就可以计算:
M
=
f
(
V
X
)
M = f(VX)
M=f(VX)
然后我们把 M作为下一层的输入,就可以得到预测值O:
O
=
f
(
W
M
)
O=f(WM)
O=f(WM)
接下来将损失函数对W求导我们就能得到W的迭代方程:
W
:
=
W
−
η
M
T
δ
2
W:=W-\eta M^T\delta_2
W:=W−ηMTδ2
其中的
δ
2
\delta_2
δ2就是
(
O
−
Y
)
∗
f
′
(
W
M
)
(O-Y)*f'(WM)
(O−Y)∗f′(WM),也同样可以写成
∂
E
∂
(
W
M
)
\frac{\partial E}{\partial (WM)}
∂(WM)∂E
这样一来我们就更新了 W W W,记作 W 2 W_2 W2。
通过迭代W之后,我们知道现在的 W 2 W_2 W2可以使得f(WM)更加接近Y。
同样的想法我们要改变V使得f(VX)更加接近M的‘真实值’,从而使得 f ( W 2 M 2 ) f(W_2M_2) f(W2M2)更接近Y。
同理:
V
:
=
V
−
η
X
T
δ
1
V:=V-\eta X^T\delta_1
V:=V−ηXTδ1
δ
1
\delta_1
δ1可以写成
∂
E
∂
(
V
X
)
\frac{\partial E}{\partial (VX)}
∂(VX)∂E,根据链式求导法则
δ
1
=
∂
E
∂
(
V
X
)
=
∂
E
∂
(
W
M
)
⋅
∂
(
W
M
)
∂
M
⋅
∂
M
∂
(
V
X
)
=
δ
2
⋅
W
2
⋅
f
′
(
V
X
)
\delta_1=\frac{\partial E}{\partial (VX)}=\frac{\partial E}{\partial (WM)}\cdot\frac{\partial (WM)}{\partial M}\cdot\frac{\partial M}{\partial (VX)}\\=\delta_2\cdot W_2\cdot f'(VX)\\
δ1=∂(VX)∂E=∂(WM)∂E⋅∂M∂(WM)⋅∂(VX)∂M=δ2⋅W2⋅f′(VX)
求出
δ
1
\delta_1
δ1后,V权值也能更新了。
这个公式当然还能更加一般化:
δ
i
=
δ
i
+
1
⋅
W
i
+
1
⋅
f
′
(
W
i
O
i
)
\delta_i=\delta_{i+1}\cdot W_{i+1}\cdot f'(W_iO_i)
δi=δi+1⋅Wi+1⋅f′(WiOi)