1. 符号定义
- 本文以单隐藏层的神经网络结构,均方误差为损失函数为例来详细推导各个参数的梯度更新。
- 给定训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , x i ∈ R d , y i ∈ R l D=\left\{\bm{(x_1, y_1), (x_2, y_2),...,(x_m, y_m)}\right\}, \bm{x}_i\in \Bbb R^d, \bm y_i \in \Bbb R^l D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈Rl, 即输入示例由 d d d个属性描述,输出 l l l维实值向量。为便于讨论图1给出了一个拥有 d d d个输入神经元、 l l l个输出神经元、 q q q个隐层神经元的多层前馈网络结构,其中输出层第 j j j个神经元的阀值用 θ j \theta_j θj表示,隐层第 h h h个神经元的阔值用 γ h \gamma_h γh 表示。输入层第 i i i个神经元与隐居第 h h h个神经元之间的连接权为 v i h v_{ih} vih,隐层第 h h h个神经元与输出层第 j j j个神经元之间的连接权为 w h j w_{hj} whj。
- 记隐层第 h h h个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i \alpha_h= \sum_{i=1}^d v_{ih} x_i αh=∑i=1dvihxi,输出层第 j j j个神经元接收到的输入为 β = ∑ h = 1 q w h j b h \beta=\sum_{h=1}^q w_{hj} b_h β=∑h=1qwhjbh,其中 b h b_h bh为隐层第 h h h个神经元的输出。假设隐层和输出层神经元都使用 S i g m o i d Sigmoid Sigmoid函数 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1。
- 对训练例
(
x
k
,
y
k
)
\bm{(x_k, y_k)}
(xk,yk),假定神经网络的输出为
y
^
k
=
(
y
^
1
k
,
y
^
2
k
,
.
.
.
,
y
^
l
k
)
\bm{\hat y}_k=(\hat y_{1}^k, \hat y_{2}^k,...,\hat y_{l}^k)
y^k=(y^1k,y^2k,...,y^lk),即
y ^ j k = f ( β j − θ j ) (1) \hat y_{j}^k=f(\beta_j-\theta_j) \tag{1} y^jk=f(βj−θj)(1)
网络在 ( x k , y k ) \bm{(x_k, y_k)} (xk,yk)上的均方误差为
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 (2) E_k=\frac{1}{2} \sum_{j=1}^l {(\hat y_{j}^k-y_{j}^k) \tag{2}}^2 Ek=21j=1∑l(y^jk−yjk)2(2)
图1 BP 络及算法中的交量符号
BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行更新。任意参数 v v v的更新估计式为
v ← v + Δ v v \leftarrow v+ \Delta v v←v+Δv
2. 隐藏层到输出层的权重更新
本节对图1中的隐层到输出层的连接权重
w
h
j
w_{hj}
whj的更新进行推导。
对公式(1)的误差
E
k
E_k
Ek,给定学习速率
η
\eta
η,有权重
w
h
j
w_{hj}
whj的更新公式为
Δ
w
h
j
=
−
η
∂
E
k
∂
w
h
j
(3)
\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}} \tag{3}
Δwhj=−η∂whj∂Ek(3)
根据图1可知,
w
h
j
w_{hj}
whj先影响到第
j
j
j个输出层神经元的输入值
β
j
\beta_j
βj,然后
β
j
\beta_j
βj再影响到该神经元的输出值
y
^
j
k
\hat y_{j}^k
y^jk,最后
y
^
j
k
\hat y_{j}^k
y^jk影响到
E
k
E_k
Ek,因此
E
k
E_k
Ek对
w
h
j
w_{hj}
whj的偏导数可改写为
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
(4)
\frac {\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y_{j}^k} \cdot \frac{\partial \hat y_{j}^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}} \tag{4}
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj(4)
根据
β
j
\beta_j
βj的定义,显然有
∂
β
j
∂
w
h
j
=
∂
w
h
j
(
∑
h
=
1
q
w
h
j
b
h
)
=
b
h
(5)
\frac {\partial \beta_j}{\partial w_{hj}}=\frac{\partial}{w_{hj}} (\sum_{h=1}^q w_{hj} b_h)=b_h \tag{5}
∂whj∂βj=whj∂(h=1∑qwhjbh)=bh(5)
由于
S
i
g
m
o
i
d
Sigmoid
Sigmoid函数有一个很好的性质:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
(6)
f^{\prime}(x)=f(x)(1-f(x)) \tag{6}
f′(x)=f(x)(1−f(x))(6)
因此根据公式(1)和(2),有
g
j
=
−
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
=
−
(
y
^
j
k
−
y
j
k
)
f
′
(
β
j
−
θ
j
)
=
−
(
y
^
j
k
−
y
j
k
)
y
^
j
k
(
1
−
y
^
j
k
)
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
(7)
\begin{aligned} g_j &= - \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \beta_j} \\ &=-(\hat y_j^k-y_j^k) f^{\prime} (\beta_j-\theta_j)\\ &=-(\hat y_j^k-y_j^k) \hat y_j^k (1-\hat y_j^k)\\ &=\hat y_j^k (1-\hat y_j^k) (y_j^k-\hat y_j^k) \tag{7} \end{aligned}
gj=−∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)=−(y^jk−yjk)y^jk(1−y^jk)=y^jk(1−y^jk)(yjk−y^jk)(7)
将公式(5)和(7)带入公式(4),再带入公式(3),就得到了BP算法中关于权重
w
h
j
w_{hj}
whj的更新公式
Δ
w
h
j
=
η
g
j
b
h
(8)
\Delta w_{hj}=\eta g_j b_h \tag{8}
Δwhj=ηgjbh(8)
3. 输出层神经元阈值更新
对于输出层第
j
j
j个神经元的阈值
θ
j
\theta_j
θj,它首先影响到该神经元的输出值
y
^
j
k
\hat y_j^k
y^jk,再影响到
E
k
E_k
Ek,因此有
Δ
θ
j
=
−
η
∂
E
k
∂
θ
j
=
−
η
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
θ
j
=
−
η
(
y
^
j
k
−
y
j
k
)
f
′
(
β
j
−
θ
j
)
=
−
η
(
y
^
j
k
−
y
j
k
)
[
−
y
^
j
k
(
1
−
y
^
j
k
)
]
=
−
η
[
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
=
−
η
g
j
(9)
\begin{aligned} \Delta \theta_j &=-\eta \frac{\partial E_k}{\partial \theta_j}\\ &=-\eta \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \theta_j}\\ &=-\eta (\hat y_j^k-y_j^k) f^{\prime} (\beta_j-\theta_j)\\ &=-\eta (\hat y_j^k - y_j^k) [-\hat y_j^k (1-\hat y_j^k)]\\ &=-\eta[\hat y_j^k (1-\hat y_j^k) (y_j^k-\hat y_j^k) \\ &=-\eta g_j \tag{9} \end{aligned}
Δθj=−η∂θj∂Ek=−η∂y^jk∂Ek⋅∂θj∂y^jk=−η(y^jk−yjk)f′(βj−θj)=−η(y^jk−yjk)[−y^jk(1−y^jk)]=−η[y^jk(1−y^jk)(yjk−y^jk)=−ηgj(9)
4. 输入层到隐藏层的权重更新
对于输入层的第
i
i
i个神经元到隐藏层的第
h
h
h个神经元的权重值
v
i
h
v_{ih}
vih,它首先影响到隐藏层第
h
h
h个神经元的输入值
α
h
\alpha_h
αh,然后
α
h
\alpha_h
αh再影响到第
h
h
h个神经元的输出值
b
h
b_h
bh,最后
b
h
b_h
bh再影响到
E
k
E_k
Ek。以下推导
E
k
E_k
Ek对
v
i
h
v_{ih}
vih的偏导数:
∂
E
k
∂
v
i
h
=
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
⋅
∂
α
h
∂
v
i
h
(10)
\frac {\partial E_k}{\partial v_{ih}} = \frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h} \cdot \frac{\partial \alpha_h}{\partial v_{ih}} \tag{10}
∂vih∂Ek=∂bh∂Ek⋅∂αh∂bh⋅∂vih∂αh(10)
首先考虑第三项:
∂
α
h
∂
v
i
h
=
x
i
(11)
\frac {\partial \alpha_h}{\partial v_{ih}}=x_i \tag{11}
∂vih∂αh=xi(11)
其次考虑第一项和第二项的乘积,如公式(12)所示,先考虑第二项的导数结果:
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
∂
E
k
∂
b
h
⋅
f
′
(
α
h
+
γ
h
)
=
∂
E
k
∂
b
h
⋅
b
h
(
1
−
b
h
)
(12)
\begin{aligned} & \frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h}\\ &=\frac{\partial E_k}{\partial b_h} \cdot f^{\prime}(\alpha_h+\gamma_h)\\ &= \frac{\partial E_k}{\partial b_h} \cdot b_h(1-b_h) \tag{12} \end{aligned}
∂bh∂Ek⋅∂αh∂bh=∂bh∂Ek⋅f′(αh+γh)=∂bh∂Ek⋅bh(1−bh)(12)
下面考虑 E k E_k Ek对 b h b_h bh的偏导数,据图1可知 b h b_h bh先影响到 β j \beta_j βj,然后 β j \beta_j βj影响到 y ^ j k \hat y_j^k y^jk。由于 β j = ∑ h = 1 q w h j b h = w 1 j b 1 + . . . + w h j b h + . . . + w q j b q \beta_j=\sum_{h=1}^q w_{hj} b_h=w_{1j}b_1+...+w_{hj}b_h+...+w_{qj}b_q βj=∑h=1qwhjbh=w1jb1+...+whjbh+...+wqjbq,因此 b h ( h = 1 , . . . , q ) b_h (h=1,...,q) bh(h=1,...,q)会对所有的 β j ( j = 1 , . . . , l ) \beta_j (j=1,...,l) βj(j=1,...,l)产生影响,需对所有的 β j \beta_j βj求和:
∂ E k ∂ b h = ∑ j = 1 l ∂ E k ∂ β j ⋅ ∂ β j ∂ b h = ∑ j = 1 l ( ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ) ⋅ w h j = − ∑ j = 1 l g j w h j (13) \begin{aligned} \frac {\partial E_k}{\partial b_h} &=\sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h}\\ &=\sum_{j=1}^l (\frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \beta_j} ) \cdot w_{hj} \\ &=-\sum_{j=1}^l g_j w_{hj} \tag{13}\end{aligned} ∂bh∂Ek=j=1∑l∂βj∂Ek⋅∂bh∂βj=j=1∑l(∂y^jk∂Ek⋅∂βj∂y^jk)⋅whj=−j=1∑lgjwhj(13)
将公式(13)带入(12)中有
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
−
b
h
(
1
−
b
h
)
⋅
∑
j
=
1
l
g
j
w
h
j
(14)
\frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h}= -b_h(1-b_h) \cdot \sum_{j=1}^l g_j w_{hj} \tag{14}
∂bh∂Ek⋅∂αh∂bh=−bh(1−bh)⋅j=1∑lgjwhj(14)
令
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
b
h
(
1
−
b
h
)
⋅
∑
j
=
1
l
g
j
w
h
j
(15)
e_h=- \frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h}=b_h(1-b_h) \cdot \sum_{j=1}^l g_j w_{hj} \tag{15}
eh=−∂bh∂Ek⋅∂αh∂bh=bh(1−bh)⋅j=1∑lgjwhj(15)
将公式(15)和公式(11)带入公式(10)中有
∂
E
k
∂
v
i
h
=
e
h
x
i
(16)
\frac {\partial E_k}{\partial v_{ih}} = e_h x_i \tag{16}
∂vih∂Ek=ehxi(16)
进一步可得
Δ
v
i
h
=
η
e
h
x
i
(17)
\Delta v_{ih}=\eta e_h x_i \tag{17}
Δvih=ηehxi(17)
5. 隐藏层神经元阈值更新
对于隐藏层第
h
h
h个神经元的阈值
γ
h
\gamma_h
γh, 它首先影响到
∂
E
k
∂
γ
h
=
∂
E
k
∂
b
h
⋅
∂
b
h
∂
γ
h
=
∂
E
k
∂
b
h
⋅
f
′
(
α
h
+
γ
h
)
=
∂
E
k
∂
b
h
⋅
b
h
(
1
−
b
h
)
(18)
\begin{aligned} \frac {\partial E_k}{\partial \gamma_h} &=\frac {\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \gamma_h}\\ &=\frac {\partial E_k}{\partial b_h} \cdot f^{\prime}(\alpha_h + \gamma_h)\\ &=\frac {\partial E_k}{\partial b_h} \cdot b_h(1-b_h) \tag{18}\end{aligned}
∂γh∂Ek=∂bh∂Ek⋅∂γh∂bh=∂bh∂Ek⋅f′(αh+γh)=∂bh∂Ek⋅bh(1−bh)(18)
将公式(13)带入(18)有
∂
E
k
∂
γ
h
=
−
b
h
(
1
−
b
h
)
⋅
∑
j
=
1
l
g
j
w
h
j
=
−
e
h
(19)
\frac {\partial E_k}{\partial \gamma_h}=-b_h(1-b_h) \cdot \sum_{j=1}^l g_j w_{hj} = -e_h \tag{19}
∂γh∂Ek=−bh(1−bh)⋅j=1∑lgjwhj=−eh(19)
因此有
Δ
γ
h
=
−
η
∂
E
k
∂
γ
h
=
η
e
h
(20)
\Delta \gamma_h=-\eta \frac {\partial E_k}{\partial \gamma_h}=\eta e_h \tag{20}
Δγh=−η∂γh∂Ek=ηeh(20)
参考资料:
周志华《机器学习》5.3节BP神经网络内容