西瓜书研读系列:
西瓜书研读——第三章 线性模型:一元线性回归
西瓜书研读——第三章 线性模型:多元线性回归
西瓜书研读——第三章 线性模型:线性几率回归(逻辑回归)
西瓜书研读——第三章 线性模型: 线性判别分析 LDA
西瓜书研读——第四章 决策树:ID3、C4.2、CSRT算法
西瓜书研读——第四章 决策树:剪枝、连续值、缺失值处理
西瓜书研读——第五章 神经网络:感知机与多层网络

5.3 误差逆传播算法(BP)

亦称反向传播算法、BP神经网络(Back Propagation)一般说的BP网络是指多层前馈神经网络。

给定训练集D={(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈RlD=\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 即输入示例由 ddd 个属性描述(xix_ixi​是d维的), 输出 lll 维实值向量。

为便于讨论, 下图给出了一个拥有ddd 个输入神经元、lll 个输出神经元、qqq个隐层神经元的多层前馈网络结构

  • 输出层第jjj个神经元的阈值用 θj\theta_{j}θj​表示
  • 隐层第 hhh个神经元的阈值用 γh\gamma_{h}γh​表示
  • 输入层第iii个神经元与隐层第 hhh 个神经元之间的连接权为 vihv_{i h}vih​,
  • 隐层第hhh个神经元与输出层第 j 个神经元之间的连接权为 whjw_{h j}whj​ .
  • 记隐层第hhh个神经元接收到的输入为 αh=∑i=1dvihxi\alpha_{h}=\sum_{i=1}^{d} v_{i h} x_{i}αh​=∑i=1d​vih​xi​
  • 输出层第jjj个神经元接收到的输入为 βj=∑h=1qwhjbh\beta_{j}=\sum_{h=1}^{q} w_{h j} b_{h}βj​=∑h=1q​whj​bh​, 其中 bhb_{h}bh​为隐层第hhh个神经元。
  • 网络中有(d+l+1)q+l(d+l+1) q+l(d+l+1)q+l个参数需确定:输入层到隐层的 d×qd \times qd×q 个权值、隐层到输出层的q×lq \times lq×l 个权值、 qqq个隐层神经元的阈值、lll 个输出层神经元的阈值,输入层没有功能神经元因此无阈值。

假设隐藏层和输出层神经元都使用SigmoidSigmoidSigmoid函数。

给定一个训练样本(xk,yk)\left(\boldsymbol{x}_{k}, \boldsymbol{y}_{k}\right)(xk​,yk​), 假设模型输出为y^k=(y^1k,y^2k,…,y^lk)\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^jk=f(βj−θj)(5.3)\hat{y}_{j}^{k}=f(\beta _j-\theta _j) \tag{5.3} y^​jk​=f(βj​−θj​)(5.3)
则均方误差为
Ek=12∑j=1l(y^jk−yjk)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​=21​j=1∑l​(y^​jk​−yjk​)2(5.4 )
12\frac{1}{2}21​只是为了求导更方便

算法流程

BP 是一个迭代学习算法, 在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计任意参数$ v$的更新估计式为
v←v+Δv(5.5)v \leftarrow v+\Delta v\tag{5.5} v←v+Δv(5.5)

那么各个参数的更新公式为
whj←whj+Δwhj=whj−η∂Ek∂whjθj←θj+Δθj=θj−η∂Ek∂θjvih←vih+Δvih=vih−η∂Ek∂vihγh←γh+Δγh=γh−η∂Ek∂γ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​+Δθj​vih​←vih​+Δvih​γh​←γh​+Δγh​​=whj​−η∂whj​∂Ek​​=θj​−η∂θj​∂Ek​​=vih​−η∂vih​∂Ek​​=γh​−η∂γh​∂Ek​​​

已知EkE_{k}Ek​和whjw_{h j}whj​的函数链式关系为

Ek=12∑j=1l(y^jk−yjk)2y^jk=f(βj−θj)(f为sigmoid函数)βj=∑h=1qwhjbh\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} Ek​y^​jk​βj​​=21​j=1∑l​(y^​jk​−yjk​)2=f(βj​−θj​)(f为sigmoid函数)=h=1∑q​whj​bh​​

∂Ek∂whj=∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂whj(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)

∂Ek∂y^jk=∂[12∑j=1l(y^jk−yjk)2]∂y^jk=y^jk−yjk\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^jk∂βj=∂[f(βj−θj)]∂βj=f′(βj−θj)=f(βj−θj)×[1−f(βj−θj)]=y^jk(1−y^jk)\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​)​

fff是sigmoid函数,他有个很好的性质即:
f′(x)=f(x)(1−f(x))f'(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x))


证明:
f(x)=11+e−xf′(x)=−1(1+e−x)2×(1+e−x)′=−1(1+e−x)2×(−e−x)=11+e−x×e−x1+e−x=11+e−x×1+e−x−11+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∂whi=∂(∑h=1qwhjbh)∂whj=bh\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=1q​whj​bh​)​=bh​


gj=−∂Ek∂y^jk⋅∂y^jk∂βj=−(y^jk−yjk)⋅y^jk(1−y^jk)=y^jk(1−y^jk)(yjk−y^jk)(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)

Δwhj=−η∂Ek∂whj=−η∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂whj=ηgjbh\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​​=ηgj​bh​​


已知 $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}
$$

∂Ek∂θj=∂Ek∂y^jk⋅∂y^jk∂θj=∂Ek∂y^jk⋅∂[f(βj−θj)]∂θj=∂Ek∂y^jk⋅f′(βj−θj)×(−1)=∂Ek∂y^jk⋅f(βj−θj)×[1−f(βj−θj)]×(−1)=∂Ek∂y^jk⋅y^jk(1−y^jk)×(−1)=∂[12∑j=1l(y^jk−yjk)2]∂y^jk⋅y^jk(1−y^jk)×(−1)=12×2(y^jk−yjk)×1⋅y^jk(1−y^jk)×(−1)=(yjk−y^jk)y^jk(1−y^jk)=gj\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​∂[21​j=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=−η∂Ek∂θj=−ηgj(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)


Δvih=ηehxi(5.13)\Delta v_{ih} = \eta e_h x_i \tag{5.13} Δvih​=ηeh​xi​(5.13)

[推导]:

因为
Δvih=−η∂Ek∂vih\Delta v_{ih} = -\eta \cfrac{\partial E_k}{\partial v_{ih}}Δvih​=−η∂vih​∂Ek​​

∂Ek∂vih=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅∂bh∂αh⋅∂αh∂vih=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅∂bh∂αh⋅xi=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅f′(αh−γh)⋅xi=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅whj⋅f′(αh−γh)⋅xi=∑j=1l(−gj)⋅whj⋅f′(αh−γh)⋅xi=−f′(αh−γh)⋅∑j=1lgj⋅whj⋅xi=−bh(1−bh)⋅∑j=1lgj⋅whj⋅xi=−eh⋅xi\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∑l​gj​⋅whj​⋅xi​=−bh​(1−bh​)⋅j=1∑l​gj​⋅whj​⋅xi​=−eh​⋅xi​​

eh=−∂Ek∂bh⋅∂bh∂αh=bh(1−bh)∑j=1lwhjgj\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∑l​whj​gj​​
所以
Δvih=−η∂Ek∂vih=ηehxi\Delta v_{ih} =-\eta \cfrac{\partial E_k}{\partial v_{ih}} =\eta e_h x_i Δvih​=−η∂vih​∂Ek​​=ηeh​xi​


Δγh=−ηeh\Delta \gamma_h= -\eta e_hΔγh​=−ηeh​
[推导]:因为
Δγh=−η∂Ek∂γh\Delta \gamma_h = -\eta \cfrac{\partial E_k}{\partial \gamma_h}Δγh​=−η∂γh​∂Ek​​

∂Ek∂γh=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅∂bh∂γh=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅f′(αh−γh)⋅(−1)=−∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅whj⋅f′(αh−γh)=−∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅whj⋅bh(1−bh)=∑j=1lgj⋅whj⋅bh(1−bh)=eh\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∑l​gj​⋅whj​⋅bh​(1−bh​)=eh​​
所以
Δγh=−η∂Ek∂γh=−ηeh\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=1m∑k=1mEkE=\frac{1}{m} \sum_{k=1}^{m} E_{k} E=m1​k=1∑m​Ek​
如果基于累积误差最小化的更新规则,则得到了累积误差逆传播算法,即每次读取全部的数据集一遍,进行一轮学习,从而基于当前的累积误差进行权值调整,因此参数更新的频率相比标准BP算法低了很多,但在很多任务中,尤其是在数据量很大的时候,往往标准BP算法会获得较好的结果。另外对于如何设置隐层神经元个数的问题,至今仍然没有好的解决方案,常使用“试错法”进行调整。

前面提到,BP神经网络强大的学习能力常常容易造成过拟合问题,有以下两种策略来缓解BP网络的过拟合问题:

  • 早停:将数据分为训练集与测试集,训练集用于学习,测试集用于评估性能,若在训练过程中,训练集的累积误差降低,而测试集的累积误差升高,则停止训练。
  • 引入正则化(regularization):基本思想是在累积误差函数中增加一个用于描述网络复杂度的部分,例如所有权值与阈值的平方和,EkE_kEk​表示第k个训练样例上的误差,wiw_iwi​表示连接权和阈值,则误差目标函数可表示为:

E=λ1m∑k=1mEk+(1−λ)∑iwi2E=\lambda \frac{1}{m} \sum_{k=1}^{m} E_{k}+(1-\lambda) \sum_{i} w_{i}^{2} E=λm1​k=1∑m​Ek​+(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=1qwiρ(x,ci)\varphi(\boldsymbol{x})=\sum_{i=1}^{q} w_{i} \rho\left(\boldsymbol{x}, \boldsymbol{c}_{i}\right) φ(x)=i=1∑q​wi​ρ(x,ci​)
其中qqq为隐层神经元个数, ci\boldsymbol{c}_{i}ci​ 和 wiw_{i}wi​ 分别是第 iii个隐层神经元所对应的中心和权重, ρ(x,ci)\rho\left(\boldsymbol{x}, \boldsymbol{c}_{i}\right)ρ(x,ci​)是径向基函数, 这是某种沿径向对称的标量函数, 通常定义为样本 x\boldsymbol{x}x到数据中心ci\boldsymbol{c}_{i}ci​ 之间欧氏距离的单调函数. 常用的高斯径向基函数形如

ρ(x,ci)=e−βi∥x−ci∥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 网络: 第一步, 确定神经元中心 cic_{i}ci​ , 常用的 方式包括随机采样、聚类等; 第二步, 利用 BP\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}ns \in\{0,1\}^{n}s∈{0,1}n 表示 n 个神经元的状态, wijw_{i j}wij​表示神经元 i 与 j 之间 的连接权, θi\theta_{i}θi​ 表示神经元iii的阈值, 则状态向量 sss 所对应的 Boltzmann 机能量定义为
E(s)=−∑i=1n−1∑j=i+1nwijsisj−∑i=1nθisiE(\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−1​j=i+1∑n​wij​si​sj​−i=1∑n​θi​si​
若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到 Boltzmann 分布,此时状态向量s 出现的概率将仅由其能量与所有可能状态向量的能量确定。


P(s)=e−E(s)∑te−E(t)P(\boldsymbol{s})=\frac{e^{-E(\boldsymbol{s})}}{\sum_{t} e^{-E(t)}} P(s)=∑t​e−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=1dP(vi∣h)P(h∣v)=∏j=1qP(hj∣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=1d​P(vi​∣h)P(h∣v)=∏j=1q​P(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=η(vh⊤−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站视频整理~
  • 力求以最朴素、最简洁的语言讲清算法原理
  • 原理讲解,公式推导,课后习题,实践代码应有尽有,欢迎订阅

西瓜书研读——第五章 神经网络:BP神经网络相关推荐

  1. 第五章 全连接神经网络

    第五章 全连接神经网络 1.1 全连接神经网络 人工神经网络(Artificial Neural Network)可以对一组输入信号和一组输出信号之间的关系进行建模,是机器学习和认知科学中的一种模仿生 ...

  2. 浅读西瓜书(第四章)

    浅读西瓜书(第四章) 4.1基本流程 ​ 决策树,顾名思义,肯定与做决策有关.实际上决策树既可以做决策也可以做回归.在我们生活中其实也经常用到决策树的模型.比如猜数字的游戏.给出一个数字,猜想者猜测一 ...

  3. 机器学习(西瓜书)——第三章线性模型(知识点思维导图)

    机器学习(西瓜书)--第三章线性模型(知识点思维导图) 这章难点在于线性判别分析和对数几率回归的理解与实践,这里只是给大家梳理了一下思路. 大家在学习的时候可以利用sklearn中的线性模型来进行尝试 ...

  4. 神经网络 | BP神经网络-数字识别(附源代码)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  5. mlp神经网络和bp神经网络,bp神经网络lm算法原理

    MATLAB中训练LM算法的BP神经网络 1.初始权值不一样,如果一样,每次训练结果是相同的 2.是 3.在train之前修改权值,IW,LW,b,使之相同 4.取多次实验的均值 一点浅见,仅供参考 ...

  6. 周志华《机器学习》课后习题(第五章):神经网络

    作者 | 我是韩小琦 链接 | https://zhuanlan.zhihu.com/p/47616848 5.1 试述将线性函数  用作神经元激活函数的缺陷. 答: 使用线性函数作为激活函数时,无论 ...

  7. 机器学习-西瓜书第一、二章

    第一章:绪论 基本概念 数据集:所有数据的集合 训练集:训练样本的集合 属性(特征):某事物或对象在某方面表现的性质 属性值:属性的取值 属性空间/样本空间/输入空间:属性张成的空间 泛化能力:学得模 ...

  8. 游戏设计的艺术:一本透镜的书——第十五章 其中一种体验是故事

    这是一本游戏设计方面的好书 转自天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第十五章 其中一种体验是故 ...

  9. 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络

    北京 深度学习与人工智能研修12月23-24日 再设经典课程 重温深度学习阅读全文> 正文共5270个字,15张图,预计阅读时间14分钟. 本章中,我们继续使用之前章节中的MNIST数字识别问题 ...

最新文章

  1. vncview 多屏_OpenStack中VNC协议实现多屏共享(多屏不踢访问)
  2. Python学习教程(Python学习路线):第12天—正则表达式
  3. netty单片机通讯_SSM+Netty实现软硬件通信,真实项目案例
  4. 网络安全模型_基于数据驱动的网络安全流量分析总结
  5. crontab 日志_聊聊老板让我删除日志文件那些事儿
  6. 推荐Android学习-农民伯伯
  7. [转]PDB——Python调试利器详解
  8. near、far、huge,based四个个指针的区别
  9. python 服务端判断客户端异常断开
  10. 几何画板构造象限平分线的步骤
  11. 冯 诺依曼计算机体系结构要点,冯诺依曼体系结构计算机的要点和工作过程
  12. 项目经理应对需求变更的策略
  13. Ubuntu 切换中文目录为英文目录
  14. 范畴论[转自百度百科]
  15. 前端笔记05 - js
  16. 哪里可以在线转二维码?
  17. 实现微信向多好友定时发送信息
  18. WQ7033开发指南(基础篇)之1.0 开发环境搭建和编译
  19. linux nodemcu 编译,nodemcu固件编译
  20. 基于OpenCV的人脸识别考勤系统(二)

热门文章

  1. Python编程(01)----网络编程之TCP/IP/UDP/Port等知识讲解
  2. windows API 勾子内幕初探
  3. 视频 | 辛芷蕾成为巧克力品牌瑞士莲亚太区品牌代言人
  4. TDSQL PG版再升级,深度参与开源生态建设
  5. wps中最后一页删除方法比较神奇哦!!!
  6. firebase分析_为什么我在下一个项目中不使用Firebase分析
  7. emlc——让MATLAB的代码进入单片机
  8. 采集中常见HTML标签
  9. win server 2012 r2 版本
  10. C - Web of Lies