西瓜书研读系列:
西瓜书研读——第三章 线性模型:一元线性回归
西瓜书研读——第三章 线性模型:多元线性回归
西瓜书研读——第三章 线性模型:线性几率回归(逻辑回归)
西瓜书研读——第三章 线性模型: 线性判别分析 LDA
西瓜书研读——第四章 决策树:ID3、C4.2、CSRT算法
西瓜书研读——第四章 决策树:剪枝、连续值、缺失值处理
西瓜书研读——第五章 神经网络:感知机与多层网络
5.3 误差逆传播算法(BP)
亦称反向传播算法、BP神经网络(Back Propagation)一般说的BP网络是指多层前馈神经网络。
给定训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } , x i ∈ R d , y i ∈ R l D=\left\{\left(\boldsymbol{x}_{1}, \boldsymbol{y}_{1}\right)\right. , \left.\left(\boldsymbol{x}_{2}, \boldsymbol{y}_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, \boldsymbol{y}_{m}\right)\right\}, \boldsymbol{x}_{i} \in \mathbb{R}^{d}, \boldsymbol{y}_{i} \in \mathbb{R}^{l} D={(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈Rl 即输入示例由 d d d 个属性描述( x i x_i xi是d维的), 输出 l l l 维实值向量。
为便于讨论, 下图给出了一个拥有 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_{i h} vih,
- 隐层第 h h h个神经元与输出层第 j 个神经元之间的连接权为 w h j w_{h j} whj .
- 记隐层第 h h h个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i \alpha_{h}=\sum_{i=1}^{d} v_{i h} x_{i} αh=∑i=1dvihxi
- 输出层第 j j j个神经元接收到的输入为 β j = ∑ h = 1 q w h j b h \beta_{j}=\sum_{h=1}^{q} w_{h j} b_{h} βj=∑h=1qwhjbh, 其中 b h b_{h} bh为隐层第 h h h个神经元。
- 网络中有 ( d + l + 1 ) q + l (d+l+1) q+l (d+l+1)q+l个参数需确定:输入层到隐层的 d × q d \times q d×q 个权值、隐层到输出层的 q × l q \times l q×l 个权值、 q q q个隐层神经元的阈值、 l l l 个输出层神经元的阈值,输入层没有功能神经元因此无阈值。
假设隐藏层和输出层神经元都使用 S i g m o i d Sigmoid Sigmoid函数。
给定一个训练样本
(
x
k
,
y
k
)
\left(\boldsymbol{x}_{k}, \boldsymbol{y}_{k}\right)
(xk,yk), 假设模型输出为
y
^
k
=
(
y
^
1
k
,
y
^
2
k
,
…
,
y
^
l
k
)
\hat{\boldsymbol{y}}_{k}=\left(\hat{y}_{1}^{k}, \hat{y}_{2}^{k}, \ldots, \hat{y}_{l}^{k}\right)
y^k=(y^1k,y^2k,…,y^lk),
y
^
j
k
=
f
(
β
j
−
θ
j
)
(5.3)
\hat{y}_{j}^{k}=f(\beta _j-\theta _j) \tag{5.3}
y^jk=f(βj−θj)(5.3)
则均方误差为
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
(5.4 )
E_{k}=\frac{1}{2} \sum_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2} \quad \tag{5.4 }
Ek=21j=1∑l(y^jk−yjk)2(5.4 )
1
2
\frac{1}{2}
21只是为了求导更方便
算法流程
BP 是一个迭代学习算法, 在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计任意参数$ v$的更新估计式为
v
←
v
+
Δ
v
(5.5)
v \leftarrow v+\Delta v\tag{5.5}
v←v+Δv(5.5)
那么各个参数的更新公式为
w
h
j
←
w
h
j
+
Δ
w
h
j
=
w
h
j
−
η
∂
E
k
∂
w
h
j
θ
j
←
θ
j
+
Δ
θ
j
=
θ
j
−
η
∂
E
k
∂
θ
j
v
i
h
←
v
i
h
+
Δ
v
i
h
=
v
i
h
−
η
∂
E
k
∂
v
i
h
γ
h
←
γ
h
+
Δ
γ
h
=
γ
h
−
η
∂
E
k
∂
γ
h
\begin{aligned} w_{h j} \leftarrow w_{h j}+\Delta w_{h j} &=w_{h j}-\eta \frac{\partial E_{k}}{\partial w_{h j}} \\ \theta_{j} \leftarrow \theta_{j}+\Delta \theta_{j} &=\theta_{j}-\eta \frac{\partial E_{k}}{\partial \theta_{j}} \\ v_{i h} \leftarrow v_{i h}+\Delta v_{i h} &=v_{i h}-\eta \frac{\partial E_{k}}{\partial v_{i h}} \\ \gamma_{h} \leftarrow \gamma_{h}+\Delta \gamma_{h}&=\gamma_{h}-\eta \frac{\partial E_{k}}{\partial \gamma_{h}} \end{aligned}
whj←whj+Δwhjθj←θj+Δθjvih←vih+Δvihγh←γh+Δγh=whj−η∂whj∂Ek=θj−η∂θj∂Ek=vih−η∂vih∂Ek=γh−η∂γh∂Ek
已知 E k E_{k} Ek和 w h j w_{h j} whj的函数链式关系为
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 y ^ j k = f ( β j − θ j ) ( f 为 s i g m o i d 函数 ) β j = ∑ h = 1 q w h j b h \begin{aligned} E_{k}&=\frac{1}{2} \sum_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2} \\ \hat{y}_{j}^{k}&=f\left(\beta_{j}-\theta_{j}\right) \,\,\,\,\,\,\,\,\,\, (f为sigmoid函数)\\ \qquad \beta_{j}&=\sum_{h=1}^{q} w_{h j} b_{h} \end{aligned} Eky^jkβj=21j=1∑l(y^jk−yjk)2=f(βj−θj)(f为sigmoid函数)=h=1∑qwhjbh
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j (5.7) \frac{\partial E_{k}}{\partial w_{h j}}=\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_{h j}} \tag{5.7} ∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj(5.7)
∂ E k ∂ y ^ j k = ∂ [ 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 ] ∂ y ^ j k = y ^ j k − y j k \begin{aligned} \frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}&=\frac{\partial\left[\frac{1}{2} \sum_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\right]}{\partial \hat{y}_{j}^{k}} \\ &=\hat{y}_{j}^{k}-y_{j}^{k} \end{aligned} ∂y^jk∂Ek=∂y^jk∂[21∑j=1l(y^jk−yjk)2]=y^jk−yjk
∂ y ^ j k ∂ β j = ∂ [ f ( β j − θ j ) ] ∂ β j = f ′ ( β j − θ j ) = f ( β j − θ j ) × [ 1 − f ( β j − θ j ) ] = y ^ j k ( 1 − y ^ j k ) \begin{aligned} \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}&=\frac{\partial\left[f\left(\beta_{j}-\theta_{j}\right)\right]}{\partial \beta_{j}}\\ &=f'(\beta_j-\theta_j) \\ &=f\left(\beta_{j}-\theta_{j}\right) \times\left[1-f\left(\beta_{j}-\theta_{j}\right)\right] \\ &=\hat{y}_{j}^{k}(1-\hat y_{j}^{k}) \end{aligned} ∂βj∂y^jk=∂βj∂[f(βj−θj)]=f′(βj−θj)=f(βj−θj)×[1−f(βj−θj)]=y^jk(1−y^jk)
f
f
f是sigmoid函数,他有个很好的性质即:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f'(x)=f(x)(1-f(x))
f′(x)=f(x)(1−f(x))
证明:
f
(
x
)
=
1
1
+
e
−
x
f
′
(
x
)
=
−
1
(
1
+
e
−
x
)
2
×
(
1
+
e
−
x
)
′
=
−
1
(
1
+
e
−
x
)
2
×
(
−
e
−
x
)
=
1
1
+
e
−
x
×
e
−
x
1
+
e
−
x
=
1
1
+
e
−
x
×
1
+
e
−
x
−
1
1
+
e
−
x
=
f
(
x
)
(
1
−
f
(
x
)
)
\begin{aligned} f\left( x \right)&=\frac{1}{1+e^{-x}} \\ f'\left( x \right)&=-\frac{1}{(1+e^{-x})^2}\times(1+e^{-x})'\\& =-\frac{1}{(1+e^{-x})^2}\times(-e^{-x})\\&=\frac{1}{1+e^{-x}}\times\frac{e^{-x}}{1+e^{-x}}\\& =\frac{1}{1+e^{-x}}\times\frac{1+e^{-x}-1}{1+e^{-x}}\\& =f\left( x \right)(1-f\left( x \right)) \end{aligned}
f(x)f′(x)=1+e−x1=−(1+e−x)21×(1+e−x)′=−(1+e−x)21×(−e−x)=1+e−x1×1+e−xe−x=1+e−x1×1+e−x1+e−x−1=f(x)(1−f(x))
∂ β j ∂ w h i = ∂ ( ∑ h = 1 q w h j b h ) ∂ w h j = b h \frac{\partial \beta_{j}}{\partial w_{h i}}=\frac{\partial\left(\sum_{h=1}^{q} w_{h j} b_{h}\right)}{\partial w_{h j}} \\ =b_h ∂whi∂βj=∂whj∂(∑h=1qwhjbh)=bh
令
g
j
=
−
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
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
)
(5.10)
\begin{aligned} g_{j}&=-\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}} \cdot \frac{\partial \hat{y}_{j}^{k}}{\partial \beta_{j}}\\ &=-\left(\hat{y}_{j}^{k}-y_{j}^{k}\right) \cdot \hat{y}_{j}^{k}\left(1-\hat{y}_{j}^{k}\right)\\ &=\hat{y}_{j}^{k}\left(1-\hat{y}_{j}^{k}\right)\left(y_{j}^{k}-\hat{y}_{j}^{k}\right) \end{aligned} \tag{5.10}
gj=−∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)⋅y^jk(1−y^jk)=y^jk(1−y^jk)(yjk−y^jk)(5.10)
Δ w h j = − η ∂ E k ∂ w h j = − η ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j = η g j b h \begin{aligned} \Delta w_{h j}&=-\eta \frac{\partial E_{k}}{\partial w_{h j}} \\& =-\eta \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_{h j}} \\& =\eta g_{j} b_{h} \end{aligned} Δwhj=−η∂whj∂Ek=−η∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj=ηgjbh
已知 $E_{k}
和
和
和\theta_{j} $ 的函数链式关系为
$$
\begin{aligned}
E_{k}&=\frac{1}{2} \sum_{j=1}{l}\left(\hat{y}_{j}{k}-y_{j}{k}\right){2} \
\hat{y}{j}^{k}&=f\left(\beta{j}-\theta_{j}\right)
\end{aligned}
$$
∂ E k ∂ θ j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ θ j = ∂ E k ∂ y ^ j k ⋅ ∂ [ f ( β j − θ j ) ] ∂ θ j = ∂ E k ∂ y ^ j k ⋅ f ′ ( β j − θ j ) × ( − 1 ) = ∂ E k ∂ y ^ j k ⋅ f ( β j − θ j ) × [ 1 − f ( β j − θ j ) ] × ( − 1 ) = ∂ E k ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = ∂ [ 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 ] ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = 1 2 × 2 ( y ^ j k − y j k ) × 1 ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = ( y j k − y ^ j k ) y ^ j k ( 1 − y ^ j k ) = g j \begin{aligned} \cfrac{\partial E_k}{\partial \theta_j} &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial \hat{y}_j^k}{\partial \theta_j} \\ &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial [f(\beta_j-\theta_j)]}{\partial \theta_j} \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f^{\prime}(\beta_j-\theta_j) \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f\left(\beta_{j}-\theta_{j}\right)\times\left[1-f\left(\beta_{j}-\theta_{j}\right)\right] \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{\partial\left[ \cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\right]}{\partial \hat{y}_{j}^{k}} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{1}{2}\times 2(\hat{y}_j^k-y_j^k)\times 1 \cdot\hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=(y_j^k-\hat{y}_j^k)\hat{y}_j^k\left(1-\hat{y}_j^k\right) \\ &= g_j \end{aligned} ∂θj∂Ek=∂y^jk∂Ek⋅∂θj∂y^jk=∂y^jk∂Ek⋅∂θj∂[f(βj−θj)]=∂y^jk∂Ek⋅f′(βj−θj)×(−1)=∂y^jk∂Ek⋅f(βj−θj)×[1−f(βj−θj)]×(−1)=∂y^jk∂Ek⋅y^jk(1−y^jk)×(−1)=∂y^jk∂[21j=1∑l(y^jk−yjk)2]⋅y^jk(1−y^jk)×(−1)=21×2(y^jk−yjk)×1⋅y^jk(1−y^jk)×(−1)=(yjk−y^jk)y^jk(1−y^jk)=gj
Δ θ j = − η ∂ E k ∂ θ j = − η g j (5.12) \Delta \theta_j = -\eta \cfrac{\partial E_k}{\partial \theta_j}=-\eta g_j \tag{5.12} Δθj=−η∂θj∂Ek=−ηgj(5.12)
Δ v i h = η e h x i (5.13) \Delta v_{ih} = \eta e_h x_i \tag{5.13} Δvih=ηehxi(5.13)
[推导]:
因为
Δ
v
i
h
=
−
η
∂
E
k
∂
v
i
h
\Delta v_{ih} = -\eta \cfrac{\partial E_k}{\partial v_{ih}}
Δvih=−η∂vih∂Ek
又
∂
E
k
∂
v
i
h
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
∂
b
h
∂
α
h
⋅
∂
α
h
∂
v
i
h
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
∂
b
h
∂
α
h
⋅
x
i
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
f
′
(
α
h
−
γ
h
)
⋅
x
i
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
w
h
j
⋅
f
′
(
α
h
−
γ
h
)
⋅
x
i
=
∑
j
=
1
l
(
−
g
j
)
⋅
w
h
j
⋅
f
′
(
α
h
−
γ
h
)
⋅
x
i
=
−
f
′
(
α
h
−
γ
h
)
⋅
∑
j
=
1
l
g
j
⋅
w
h
j
⋅
x
i
=
−
b
h
(
1
−
b
h
)
⋅
∑
j
=
1
l
g
j
⋅
w
h
j
⋅
x
i
=
−
e
h
⋅
x
i
\begin{aligned} \cfrac{\partial E_k}{\partial v_{ih}} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot \cfrac{\partial \alpha_h}{\partial v_{ih}} \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot x_i \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= \sum_{j=1}^{l} (-g_j) \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= -f^{\prime}(\alpha_h-\gamma_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i\\ &= -b_h(1-b_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i \\ &= -e_h \cdot x_i \end{aligned}
∂vih∂Ek=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅∂αh∂bh⋅∂vih∂αh=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅∂αh∂bh⋅xi=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅f′(αh−γh)⋅xi=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅whj⋅f′(αh−γh)⋅xi=j=1∑l(−gj)⋅whj⋅f′(αh−γh)⋅xi=−f′(αh−γh)⋅j=1∑lgj⋅whj⋅xi=−bh(1−bh)⋅j=1∑lgj⋅whj⋅xi=−eh⋅xi
令
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
w
h
j
g
j
\begin{aligned} e_{h}=-\frac{\partial E_{k}}{\partial b_{h}} \cdot \frac{\partial b_{h}}{\partial \alpha_{h}}=b_{h}\left(1-b_{h}\right) \sum_{j=1}^{l} w_{h j} g_{j} \end{aligned}
eh=−∂bh∂Ek⋅∂αh∂bh=bh(1−bh)j=1∑lwhjgj
所以
Δ
v
i
h
=
−
η
∂
E
k
∂
v
i
h
=
η
e
h
x
i
\Delta v_{ih} =-\eta \cfrac{\partial E_k}{\partial v_{ih}} =\eta e_h x_i
Δvih=−η∂vih∂Ek=ηehxi
Δ
γ
h
=
−
η
e
h
\Delta \gamma_h= -\eta e_h
Δγh=−ηeh
[推导]:因为
Δ
γ
h
=
−
η
∂
E
k
∂
γ
h
\Delta \gamma_h = -\eta \cfrac{\partial E_k}{\partial \gamma_h}
Δγh=−η∂γh∂Ek
又
∂
E
k
∂
γ
h
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
∂
b
h
∂
γ
h
=
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
b
h
⋅
f
′
(
α
h
−
γ
h
)
⋅
(
−
1
)
=
−
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
w
h
j
⋅
f
′
(
α
h
−
γ
h
)
=
−
∑
j
=
1
l
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
w
h
j
⋅
b
h
(
1
−
b
h
)
=
∑
j
=
1
l
g
j
⋅
w
h
j
⋅
b
h
(
1
−
b
h
)
=
e
h
\begin{aligned} \cfrac{\partial E_k}{\partial \gamma_h} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \gamma_h} \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot (-1) \\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h)\\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot b_h(1-b_h)\\ &= \sum_{j=1}^{l}g_j\cdot w_{hj} \cdot b_h(1-b_h)\\ &=e_h \end{aligned}
∂γh∂Ek=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅∂γh∂bh=j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅∂bh∂βj⋅f′(αh−γh)⋅(−1)=−j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅whj⋅f′(αh−γh)=−j=1∑l∂y^jk∂Ek⋅∂βj∂y^jk⋅whj⋅bh(1−bh)=j=1∑lgj⋅whj⋅bh(1−bh)=eh
所以
Δ
γ
h
=
−
η
∂
E
k
∂
γ
h
=
−
η
e
h
\Delta \gamma_h=-\eta\cfrac{\partial E_k}{\partial \gamma_h} = -\eta e_h
Δγh=−η∂γh∂Ek=−ηeh
学习率 η ∈ ( 0 , 1 ) η∈(0,1) η∈(0,1)控制着沿反梯度方向下降的步长,若步长太大则下降太快容易产生震荡,若步长太小则收敛速度太慢,一般地常把η设置为0.1,有时更新权重时会将输出层与隐含层设置为不同的学习率。BP算法的基本流程如下所示:
BP算法的更新规则是基于每个样本的预测值与真实类标的均方误差来进行权值调节,即BP算法每次更新只针对于单个样例。
需要注意的是:BP算法的最终目标是要最小化整个训练集D上的累积误差,即:
E
=
1
m
∑
k
=
1
m
E
k
E=\frac{1}{m} \sum_{k=1}^{m} E_{k}
E=m1k=1∑mEk
如果基于累积误差最小化的更新规则,则得到了累积误差逆传播算法,即每次读取全部的数据集一遍,进行一轮学习,从而基于当前的累积误差进行权值调整,因此参数更新的频率相比标准BP算法低了很多,但在很多任务中,尤其是在数据量很大的时候,往往标准BP算法会获得较好的结果。另外对于如何设置隐层神经元个数的问题,至今仍然没有好的解决方案,常使用“试错法”进行调整。
前面提到,BP神经网络强大的学习能力常常容易造成过拟合问题,有以下两种策略来缓解BP网络的过拟合问题:
- 早停:将数据分为训练集与测试集,训练集用于学习,测试集用于评估性能,若在训练过程中,训练集的累积误差降低,而测试集的累积误差升高,则停止训练。
- 引入正则化(regularization):基本思想是在累积误差函数中增加一个用于描述网络复杂度的部分,例如所有权值与阈值的平方和, E k E_k Ek表示第k个训练样例上的误差, w i w_i wi表示连接权和阈值,则误差目标函数可表示为:
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\lambda \frac{1}{m} \sum_{k=1}^{m} E_{k}+(1-\lambda) \sum_{i} w_{i}^{2} E=λm1k=1∑mEk+(1−λ)i∑wi2
其中 λ ∈ ( 0 , 1 ) λ∈(0,1) λ∈(0,1)用于对累积经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。
点击此处具体深入了解正则化
5.4 全局最小与局部最小
模型学习的过程实质上就是一个寻找最优参数的过程,例如BP算法试图通过最速下降来寻找使得累积经验误差最小的权值与阈值,在谈到最优时,一般会提到局部极小和全局最小。
- 局部极小解:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。
- 全局最小解:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。
要成为局部极小点,只要满足该点在参数空间中的梯度为零。
梯度下降法的主要思想就是沿着负梯度方向去搜索最优解,负梯度方向是函数值下降最快的方向,若迭代到某处的梯度为0,则表示达到一个局部最小,参数更新停止。
在现实任务中,通常使用以下策略尽可能地去接近全局最小。
- 以多组不同参数值初始化多个神经网络,按标准方法训练,迭代停止后,取其中误差最小的解作为最终参数。
- 使用“模拟退火”算法,模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小.在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定.
- 使用随机梯度下降,即在计算梯度时加入了随机因素,使得在局部最小时,计算的梯度仍可能不为0,从而迭代可以继续进行。
此外,遗传算法(genetic algorithms)也常用来训练神经网络以更好地逼近全局最小
5.5 其他常见神将网络
5.5.1 RBF网络
RBF (Radial Basis Function, 径向基函数)网络是一种单隐层前馈神经网络, 它使用径向基函数作为隐层神经元激活函数, 而输出层则是对隐层神经元输出的线性组合。假定输入为d维向量 $ \boldsymbol{x}$ , 输出为实值, 则$ \mathrm{RBF} $网络可表示为
φ
(
x
)
=
∑
i
=
1
q
w
i
ρ
(
x
,
c
i
)
\varphi(\boldsymbol{x})=\sum_{i=1}^{q} w_{i} \rho\left(\boldsymbol{x}, \boldsymbol{c}_{i}\right)
φ(x)=i=1∑qwiρ(x,ci)
其中
q
q
q为隐层神经元个数,
c
i
\boldsymbol{c}_{i}
ci 和
w
i
w_{i}
wi 分别是第
i
i
i个隐层神经元所对应的中心和权重,
ρ
(
x
,
c
i
)
\rho\left(\boldsymbol{x}, \boldsymbol{c}_{i}\right)
ρ(x,ci)是径向基函数, 这是某种沿径向对称的标量函数, 通常定义为样本
x
\boldsymbol{x}
x到数据中心
c
i
\boldsymbol{c}_{i}
ci 之间欧氏距离的单调函数. 常用的高斯径向基函数形如
ρ ( x , c i ) = e − β i ∥ x − c i ∥ 2 \rho\left(\boldsymbol{x}, \boldsymbol{c}_{i}\right)=e^{-\beta_{i}\left\|\boldsymbol{x}-\boldsymbol{c}_{i}\right\|^{2}} ρ(x,ci)=e−βi∥x−ci∥2
具有足够多隐层神经元的 RBF 网络能以任意 精度逼近任意连续函数.
通常采用两步过程来训练 RBF 网络: 第一步, 确定神经元中心 c i c_{i} ci , 常用的 方式包括随机采样、聚类等; 第二步, 利用 B P \mathrm{BP} BP 算法等来确定参数 $w_{i} $和 $\beta_{i} $.
5.5.2 ART网络
竞争型学习(competitive learning) 是神经网络中一种常用的无监督学习策略, 在使用该策略时, 网络的输出神经元相互竞争, 每一时刻仅有一个竞争获胜的神经元被激活, 其他神经元的状态被抑制. 这种机制亦称 “胜者通吃” 原则.
ART(Adaptive Resonance Theory, 自适应谐振理论)网络1987] 是竞争型学习的重要代表. 该网络由比较层、识别层、识别阈值和重置模块构成. 其中, 比较层负责接收输入样本, 并将其传递给识别层神 经元. 识别层每个神经元对应一个模式类, 神经元数目可在训练过程中动态增长以增加新的模式类.
在接收到比较层的输入信号后, 识别层神经元之间相互竞争以产生获胜神经元. 竞争的最简单方式是, 计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离, 距离最小者胜. 获胜神经元将向其他识别层神经元发送信号, 抑制其激活. 若输入向量与获胜神经元所对应的代表向量之间的相 似度大于识别阈值, 则当前输入样本将被归为该代表向量所属类别, 同时, 网络 连接权将会更新, 使得以后在接收到相似输入样本时该模式类会计算出更大的 相似度, 从而使该获胜神经元有更大可能获胜; 若相似度不大于识别阈值, 则重 置模块将在识别层增设一个新的神经元, 其代表向量就设置为当前输入向量.
显然, 识别阈值对ART网络的性能有重要影响. 当识别阈值较高时, 输入样 本将会被分成比较多、比较精细的模式类, 而如果识别阈值较低, 则会产生比 较少、比较粗略的模式类.
ART比较好地缓解了竞争型学习中的 “可塑性-稳定性窘境” , 可塑性是指神经网络要有学习新知识的能力, 而稳定性则 是指神经网络在学习新知识时要保持对旧知识的记忆. 这就使得ART网络具有 一个很重要的优点: 可进行增量学习(incremental learning)或在线学习(online learning)
早期的 ART 网络只能处理布尔型输入数据, 此后 ART 发展成了一个算法 族, 包括能处理实值输入的 ART2 网络、结合模糊处理的 FuzzyART 网络, 以 及可进行监督学习的 ARTMAP 网络等.
5.5.3 SOM网络
SOM
\operatorname{SOM}
SOM (Self-Organizing Map, 自组织映射)网络 [Kohonen, 1982] 是一种竞 争学习型的无监督神经网络, 它能将高维输入数据映射到低维空间(通常为二 维), 同时保持输入数据在高维空间的拓扑结构, 即将高维空间中相似的样本点 映射到网络输出层中的邻近神经元.
如图 5.11 所示, SOM 网络中的输出层神经元以矩阵方式排列在二维空间 中, 每个神经元都拥有一个权向量, 网络在接收输入向量后, 将会确定输出层获 胜神经元, 它决定了该输入向量在低维空间中的位置. SOM 的训练目标就是为 每个输出层神经元找到合适的权向量, 以达到保持拓扑结构的目的.
SOM 的训练过程很简单: 在接收到一个训练样本后, 每个输出层神经元会 计算该样本与自身携带的权向量之间的距离, 距离最近的神经元成为竞争获胜 者, 称为最佳匹配单元(best matching unit). 然后, 最佳匹配单元及其邻近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小.这个过程不断迭代,直至收敛.
5.5.4 级联相关网络
一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数.与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构.级联相关(Cascade-Correlation)网络是结构自适应网络的重要代表.
级联相关网络有两个主要成分:“级联” 和“相关”. 级联是指建立层次 连接的层级结构. 在开始训练时, 网络只有输入层和输出层, 处于最小拓扑结 构; 随着训练的进行, 如图 5.12 所示, 新的隐层神经元逐渐加入, 从而创建起层 级结构. 当新的隐层神经元加入时, 其输入端连接权值是冻结固定的. 相关是 指通过最大化新神经元的输出与网络误差之间的相关性(correlation)来训练相 关的参数.
与一般的前馈神经网络相比, 级联相关网络无需设置网络层数、隐层神经 元数目, 且训练速度较快, 但其在数据较小时易陷入过拟合.
5.5.5 Elman网络
与前馈神经网络不同,“递归神经网络” (recurrent neural networks)允许 网络中出现环形结构, 从而可让一些神经元的输出反馈回来作为输入信号. 这 样的结构与信息反馈过程, 使得网络在 t 时刻的输出状态不仅与 t 时刻的输入 有关, 还与 t-1 时刻的网络状态有关, 从而能处理与时间有关的动态变化.
Elman 网络 是最常用的递归神经网络之一, 其结构如图 5.13 所示, 它的结构与多层前馈网络很相似, 但隐层神经元的输出被反馈回来, 与下 一时刻输入层神经元提供的信号一起, 作为隐层神经元在下一时刻的输入. 隐 层神经元通常采用 Sigmoid 激活函数, 而网络的训练则常通过推广的 BP 算法 进行
5.5.6 Boltzmann机
神经网络中有一类模型是为网络状态定义一个 “能量” (energy), 能量 最小化时网络达到理想状态, 而网络的训练就是在最小化这个能量函数.
Boltzmann 机就是一种 “基于能量的模型” (energy-based model), 常见结构如图 5.14(a) 所示, 其神经元分为两层: 显层与隐层. 显层用 于表示数据的输入与输出, 隐层则被理解为数据的内在表达. Boltzmann 机中 的神经元都是布尔型的, 即只能取 0 、 1两种状态, 状态 1 表示激活, 状态 0 表 示抑制. 令向量
s
∈
{
0
,
1
}
n
s \in\{0,1\}^{n}
s∈{0,1}n 表示 n 个神经元的状态,
w
i
j
w_{i j}
wij表示神经元 i 与 j 之间 的连接权,
θ
i
\theta_{i}
θi 表示神经元
i
i
i的阈值, 则状态向量
s
s
s 所对应的 Boltzmann 机能量定义为
E
(
s
)
=
−
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
w
i
j
s
i
s
j
−
∑
i
=
1
n
θ
i
s
i
E(\boldsymbol{s})=-\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} w_{i j} s_{i} s_{j}-\sum_{i=1}^{n} \theta_{i} s_{i}
E(s)=−i=1∑n−1j=i+1∑nwijsisj−i=1∑nθisi
若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到 Boltzmann 分布,此时状态向量s 出现的概率将仅由其能量与所有可能状态向量的能量确定。
P
(
s
)
=
e
−
E
(
s
)
∑
t
e
−
E
(
t
)
P(\boldsymbol{s})=\frac{e^{-E(\boldsymbol{s})}}{\sum_{t} e^{-E(t)}}
P(s)=∑te−E(t)e−E(s)
Boltzmann 机的训练过程就是将每个训练样本视为一个状态向量, 使 其出现的概率尽可能大. 标准的 Boltzmann 机是一个全连接图, 训练网络的 复杂度很高, 这使其难以用于解决现实任务. 现实中常采用受限 Boltzmann 机(Restricted Boltzmann Machine, 简称 RBM). 如图 5.14(b) 所示, 受限 Boltzmann 机仅保留显层与隐层之间的连接, 从而将 Boltzmann 机结构由完全图简 化为二部图.
受限 Boltzmann 机 常用 “对比散度” (Contrastive Divergence, 简称 CD)算法 [Hinton, 2010] 来进行训练. 假定网络中有 d 个显层神经元和 q 个隐层神经元, 令
v
\boldsymbol{v}
v 和
h
\boldsymbol{h}
h 分别表示显层与隐层的状态向量, 则由于同一层内不存在连接, 有
P
(
v
∣
h
)
=
∏
i
=
1
d
P
(
v
i
∣
h
)
P
(
h
∣
v
)
=
∏
j
=
1
q
P
(
h
j
∣
v
)
\begin{array}{l} P(\boldsymbol{v} \mid \boldsymbol{h})=\prod_{i=1}^{d} P\left(v_{i} \mid \boldsymbol{h}\right) \\ P(\boldsymbol{h} \mid \boldsymbol{v})=\prod_{j=1}^{q} P\left(h_{j} \mid \boldsymbol{v}\right) \end{array}
P(v∣h)=∏i=1dP(vi∣h)P(h∣v)=∏j=1qP(hj∣v)
CD 算法对每个训练样本
v
\boldsymbol{v}
v , 先根据式 (5.23)计算出隐层神经元状态的概率分布, 然后根据这个概率分布采样得到
h
\boldsymbol{h}
h ; 此后, 类似地根据式 (5.22) 从
h
\boldsymbol{h}
h 产生
v
′
\boldsymbol{v}^{\prime}
v′, 再 从
v
′
\boldsymbol{v}^{\prime}
v′ 产生
h
′
\boldsymbol{h}^{\prime}
h′ ; 连接权的更新公式为
Δ w = η ( v h ⊤ − v ′ h ⊤ ⊤ ) \Delta w=\eta\left(\boldsymbol{v} \boldsymbol{h}^{\top}-\boldsymbol{v}^{\prime} \boldsymbol{h}^{\top \top}\right) Δw=η(vh⊤−v′h⊤⊤)
5.6 深度学习
理论上,参数越多,模型复杂度就越高,容量就越大,从而能完成更复杂的学习任务。深度学习(deep learning)正是一种极其复杂而强大的模型。
怎么增大模型复杂度呢?
两个办法,一是增加隐层的数目,二是增加隐层神经元的数目。
前者更有效一些,因为它不仅增加了功能神经元的数量,还增加了激活函数嵌套的层数。但是对于多隐层神经网络,经典算法如标准BP算法往往会在误差逆传播时发散(diverge),无法收敛达到稳定状态。
那要怎么有效地训练多隐层神经网络呢?一般来说有以下两种方法:
-
无监督逐层训练(unsupervised layer-wise training):每次训练一层隐节点,把上一层隐节点的输出当作输入来训练,本层隐结点训练好后,输出再作为下一层的输入来训练,这称为预训练(pre-training)。全部预训练完成后,再对整个网络进行微调(fine-tuning)训练。一个典型例子就是深度信念网络(deep belief network,简称DBN)。这种做法其实可以视为把大量的参数进行分组,先找出每组较好的设置,再基于这些局部最优的结果来训练全局最优。
-
权共享(weight sharing):令同一层神经元使用完全相同的连接权,典型的例子是卷积神经网络(Convolutional Neural Network,简称CNN)。这样做可以大大减少需要训练的参数数目。
如图所示,网络输入是一个32×32的手写数字图像,输出是其识别结果,CNN 复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现与输出目标之间的映射。
每个卷积层都包含多个特征映射(feature map),每个特征映射是一个由多个神经元构成的“平面”,通过一种卷积滤波器提取输入的一种特征
例如,图5.15中第一个卷积层由6个特征映射构成,每个特征映射是一个28×28的神经元阵列,其中每个神经元负责从5×5的区域通过卷积滤波器提取局部特征.采样层亦称为“汇合”(pooling)层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息
例如图5.15中第一个采样层有6个14×14的特征映射,其中每个神经元与上一层中对应特征映射的2×2邻域相连,并据此计算输出.通过复合卷积层和采样层,图5.15中的CNN 将原始图像映射成120维特征向量,最后通过一个由84个神经元构成的连接层和输出层连接完成识别任务.CNN可用BP算法进行训练,但在训练中,无论是卷积层还是采样层,其每一组神经元(即图5.15中的每个“平面”)都是用相同的连接权,从而大幅减少了需要训练的参数数目。
深度学习可以理解为一种特征学习(feature learning)或者表示学习(representation learning),无论是DBN还是CNN,都是通过多个隐层来把与输出目标联系不大的初始输入转化为与输出目标更加密切的表示,使原来只通过单层映射难以完成的任务变为可能。即通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示,从而使得最后可以用简单的模型来完成复杂的学习任务。
传统任务中,样本的特征需要人类专家来设计,这称为特征工程(feature engineering)。特征好坏对泛化性能有至关重要的影响。而深度学习为全自动数据分析带来了可能,可以自动产生更好的特征。
- 主要教材为西瓜书,结合南瓜书,统计学习方法,B站视频整理~
- 力求以最朴素、最简洁的语言讲清算法原理
- 原理讲解,公式推导,课后习题,实践代码应有尽有,欢迎订阅