BP神经网络推导过程

1. 符号定义

  • 本文以单隐藏层的神经网络结构,均方误差为损失函数为例来详细推导各个参数的梯度更新。
  • 给定训练集D={(x1,y1),(x2,y2),...,(xm,ym)},xiRd,yiRlD=\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, 即输入示例由dd个属性描述,输出ll维实值向量。为便于讨论图1给出了一个拥有dd个输入神经元、ll个输出神经元、qq个隐层神经元的多层前馈网络结构,其中输出层第jj个神经元的阀值用θj\theta_j表示,隐层第hh个神经元的阔值用γh\gamma_h 表示。输入层第ii个神经元与隐居第hh个神经元之间的连接权为vihv_{ih},隐层第hh个神经元与输出层第jj个神经元之间的连接权为whjw_{hj}
  • 记隐层第hh个神经元接收到的输入为αh=i=1dvihxi\alpha_h= \sum_{i=1}^d v_{ih} x_i,输出层第jj个神经元接收到的输入为β=h=1qwhjbh\beta=\sum_{h=1}^q w_{hj} b_h,其中bhb_h为隐层第hh个神经元的输出。假设隐层和输出层神经元都使用SigmoidSigmoid函数f(x)=11+exf(x)=\frac{1}{1+e^{-x}}
  • 对训练例(xk,yk)\bm{(x_k, y_k)},假定神经网络的输出为y^k=(y^1k,y^2k,...,y^lk)\bm{\hat y}_k=(\hat y_{1}^k, \hat y_{2}^k,...,\hat y_{l}^k),即
    y^jk=f(βjθj)(1)\hat y_{j}^k=f(\beta_j-\theta_j) \tag{1}
    网络在(xk,yk)\bm{(x_k, y_k)}上的均分误差为
    Ek=12j=1l(y^jkyjk)2(2)E_k=\frac{1}{2} \sum_{j=1}^l {(\hat y_{j}^k-y_{j}^k) \tag{2}}^2
    BP神经网络推导过程
    图1 BP 络及算法中的交量符号
    BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行更新。任意参数vv的更新估计式为
    vv+Δvv \leftarrow v+ \Delta v

2. 隐藏层到输出层的权重更新

本节对图1中的隐层到输出层的连接权重whjw_{hj}的更新进行推导。
对公式(1)的误差EkE_k,给定学习速率η\eta,有权重whjw_{hj}的更新公式为
Δwhj=ηEkwhj(3)\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}} \tag{3}
根据图1可知,whjw_{hj}先影响到第jj个输出层神经元的输入值βj\beta_j,然后βj\beta_j再影响到该神经元的输出值y^jk\hat y_{j}^k,最后y^jk\hat y_{j}^k影响到EkE_k,因此EkE_kwhjw_{hj}的偏导数可改写为
Ekwhj=Eky^jky^jkβjβjwhj(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}
根据βj\beta_j的定义,显然有
βjwhj=whj(h=1qwhjbh)=bh(5)\frac {\partial \beta_j}{\partial w_{hj}}=\frac{\partial}{w_{hj}} (\sum_{h=1}^q w_{hj} b_h)=b_h \tag{5}
由于SigmoidSigmoid函数有一个很好的性质:
f(x)=f(x)(1f(x))(6)f^{\prime}(x)=f(x)(1-f(x)) \tag{6}
因此根据公式(1)和(2),有
gj=Eky^jky^jkβj=(y^jkyjk)f(βjθj)=(y^jkyjk)y^jk(1y^jk)=y^jk(1y^jk)(yjky^jk)(7)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}

将公式(5)和(7)带入公式(4),再带入公式(3),就得到了BP算法中关于权重whjw_{hj}的更新公式
Δwhj=ηgjbh(8)\Delta w_{hj}=\eta g_j b_h \tag{8}

3. 输出层神经元阈值更新

对于输出层第jj个神经元的阈值θj\theta_j,它首先影响到该神经元的输出值y^jk\hat y_j^k,再影响到EkE_k,因此有
Δθj=ηEkθj=ηEky^jky^jkθj=η(y^jkyjk)f(βjθj)=η(y^jkyjk)[y^jk(1y^jk)]=η[y^jk(1y^jk)(yjky^jk)=ηgj(9)\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}

4. 输入层到隐藏层的权重更新

对于输入层的第ii个神经元到隐藏层的第hh个神经元的权重值vihv_{ih},它首先影响到隐藏层第hh个神经元的输入值αh\alpha_h,然后αh\alpha_h再影响到第hh个神经元的输出值bhb_h,最后bhb_h再影响到EkE_k。以下推导EkE_kvihv_{ih}的偏导数:
Ekvih=Ekbhbhαhαhvih(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}
首先考虑第三项:
αhvih=xi(11)\frac {\partial \alpha_h}{\partial v_{ih}}=x_i \tag{11}
其次考虑第一项和第二项的乘积,如公式(12)所示,先考虑第二项的导数结果:
Ekbhbhαh=Ekbhf(αh+γh)=Ekbhbh(1bh)(12) \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}

下面考虑EkE_kbhb_h的偏导数,据图1可知bhb_h先影响到βj\beta_j,然后βj\beta_j影响到y^jk\hat y_j^k
Ekbh=j=1lEkβjβjbh=j=1l(Eky^jky^jkβj)whj=j=1lgjwhj(13)\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}

将公式(13)带入(12)中有
Ekbhbhαh=bh(1bh)j=1lgjwhj(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}

eh=Ekbhbhαh=bh(1bh)j=1lgjwhj(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}

将公式(15)和公式(11)带入公式(10)中有
Ekvih=ehxi(16)\frac {\partial E_k}{\partial v_{ih}} = e_h x_i \tag{16}
进一步可得
Δvih=ηehxi(17)\Delta v_{ih}=\eta e_h x_i \tag{17}

5. 隐藏层神经元阈值更新

对于隐藏层第hh个神经元的阈值γh\gamma_h, 它首先影响到
Ekγh=Ekbhbhγh=Ekbhf(αh+γh)=Ekbhbh(1bh)(18)\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}

将公式(13)带入(18)有
Ekγh=bh(1bh)j=1lgjwhj=eh(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γh=ηeh(20)\Delta \gamma_h=-\eta \frac {\partial E_k}{\partial \gamma_h}=\eta e_h \tag{20}

本文是参考周志华《机器学习》5.3节BP神经网络内容,并进行了详细地推导。