目录
- 1. 符号定义
- 2. 隐藏层到输出层的权重更新
- 3. 输出层神经元阈值更新
- 4. 输入层到隐藏层的权重更新
- 5. 隐藏层神经元阈值更新
1. 符号定义
- 本文以单隐藏层的神经网络结构,均方误差为损失函数为例来详细推导各个参数的梯度更新。
- 给定训练集D={(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈RlD=\\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^lD={(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈Rl, 即输入示例由ddd个属性描述,输出lll维实值向量。为便于讨论图1给出了一个拥有ddd个输入神经元、lll个输出神经元、qqq个隐层神经元的多层前馈网络结构,其中输出层第jjj个神经元的阀值用θj\\theta_jθj表示,隐层第hhh个神经元的阔值用γh\\gamma_hγh 表示。输入层第iii个神经元与隐居第hhh个神经元之间的连接权为vihv_{ih}vih,隐层第hhh个神经元与输出层第jjj个神经元之间的连接权为whjw_{hj}whj。
- 记隐层第hhh个神经元接收到的输入为αh=∑i=1dvihxi\\alpha_h= \\sum_{i=1}^d v_{ih} x_iαh=∑i=1dvihxi,输出层第jjj个神经元接收到的输入为β=∑h=1qwhjbh\\beta=\\sum_{h=1}^q w_{hj} b_hβ=∑h=1qwhjbh,其中bhb_hbh为隐层第hhh个神经元的输出。假设隐层和输出层神经元都使用SigmoidSigmoidSigmoid函数f(x)=11+e−xf(x)=\\frac{1}{1+e^{-x}}f(x)=1+e−x1。
- 对训练例(xk,yk)\\bm{(x_k, y_k)}(xk,yk),假定神经网络的输出为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^k=(y^1k,y^2k,…,y^lk),即
y^jk=f(βj−θj)(1)\\hat y_{j}^k=f(\\beta_j-\\theta_j) \\tag{1}y^jk=f(βj−θj)(1)
网络在(xk,yk)\\bm{(x_k, y_k)}(xk,yk)上的均分误差为
Ek=12∑j=1l(y^jk−yjk)2(2)E_k=\\frac{1}{2} \\sum_{j=1}^l {(\\hat y_{j}^k-y_{j}^k) \\tag{2}}^2Ek=21j=1∑l(y^jk−yjk)2(2)
图1 BP 络及算法中的交量符号
BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行更新。任意参数vvv的更新估计式为
v←v+Δvv \\leftarrow v+ \\Delta vv←v+Δv
2. 隐藏层到输出层的权重更新
本节对图1中的隐层到输出层的连接权重whjw_{hj}whj的更新进行推导。
对公式(1)的误差EkE_kEk,给定学习速率η\\etaη,有权重whjw_{hj}whj的更新公式为
Δwhj=−η∂Ek∂whj(3)\\Delta w_{hj}=-\\eta \\frac{\\partial E_k}{\\partial w_{hj}} \\tag{3}Δwhj=−η∂whj∂Ek(3)
根据图1可知,whjw_{hj}whj先影响到第jjj个输出层神经元的输入值βj\\beta_jβj,然后βj\\beta_jβj再影响到该神经元的输出值y^jk\\hat y_{j}^ky^jk,最后y^jk\\hat y_{j}^ky^jk影响到EkE_kEk,因此EkE_kEk对whjw_{hj}whj的偏导数可改写为
∂Ek∂whj=∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂whj(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∂whj=∂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}∂whj∂βj=whj∂(h=1∑qwhjbh)=bh(5)
由于SigmoidSigmoidSigmoid函数有一个很好的性质:
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),有
gj=−∂Ek∂y^jk⋅∂y^jk∂βj=−(y^jk−yjk)f′(βj−θj)=−(y^jk−yjk)y^jk(1−y^jk)=y^jk(1−y^jk)(yjk−y^jk)(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算法中关于权重whjw_{hj}whj的更新公式
Δwhj=ηgjbh(8)\\Delta w_{hj}=\\eta g_j b_h \\tag{8}Δwhj=ηgjbh(8)
3. 输出层神经元阈值更新
对于输出层第jjj个神经元的阈值θj\\theta_jθj,它首先影响到该神经元的输出值y^jk\\hat y_j^ky^jk,再影响到EkE_kEk,因此有
Δθj=−η∂Ek∂θj=−η∂Ek∂y^jk⋅∂y^jk∂θj=−η(y^jk−yjk)f′(βj−θj)=−η(y^jk−yjk)[−y^jk(1−y^jk)]=−η[y^jk(1−y^jk)(yjk−y^jk)=−ηgj(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. 输入层到隐藏层的权重更新
对于输入层的第iii个神经元到隐藏层的第hhh个神经元的权重值vihv_{ih}vih,它首先影响到隐藏层第hhh个神经元的输入值αh\\alpha_hαh,然后αh\\alpha_hαh再影响到第hhh个神经元的输出值bhb_hbh,最后bhb_hbh再影响到EkE_kEk。以下推导EkE_kEk对vihv_{ih}vih的偏导数:
∂Ek∂vih=∂Ek∂bh⋅∂bh∂αh⋅∂αh∂vih(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∂vih=xi(11)\\frac {\\partial \\alpha_h}{\\partial v_{ih}}=x_i \\tag{11}∂vih∂αh=xi(11)
其次考虑第一项和第二项的乘积,如公式(12)所示,先考虑第二项的导数结果:
∂Ek∂bh⋅∂bh∂αh=∂Ek∂bh⋅f′(αh+γh)=∂Ek∂bh⋅bh(1−bh)(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)
下面考虑EkE_kEk对bhb_hbh的偏导数,据图1可知bhb_hbh先影响到βj\\beta_jβj,然后βj\\beta_jβj影响到y^jk\\hat y_j^ky^jk。由于βj=∑h=1qwhjbh=w1jb1+…+whjbh+…+wqjbq\\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,因此bh(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求和:
∂Ek∂bh=∑j=1l∂Ek∂βj⋅∂βj∂bh=∑j=1l(∂Ek∂y^jk⋅∂y^jk∂βj)⋅whj=−∑j=1lgjwhj(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)中有
∂Ek∂bh⋅∂bh∂αh=−bh(1−bh)⋅∑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}∂bh∂Ek⋅∂αh∂bh=−bh(1−bh)⋅j=1∑lgjwhj(14)
令
eh=−∂Ek∂bh⋅∂bh∂αh=bh(1−bh)⋅∑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}eh=−∂bh∂Ek⋅∂αh∂bh=bh(1−bh)⋅j=1∑lgjwhj(15)
将公式(15)和公式(11)带入公式(10)中有
∂Ek∂vih=ehxi(16)\\frac {\\partial E_k}{\\partial v_{ih}} = e_h x_i \\tag{16}∂vih∂Ek=ehxi(16)
进一步可得
Δvih=ηehxi(17)\\Delta v_{ih}=\\eta e_h x_i \\tag{17}Δvih=ηehxi(17)
5. 隐藏层神经元阈值更新
对于隐藏层第hhh个神经元的阈值γh\\gamma_hγh, 它首先影响到
∂Ek∂γh=∂Ek∂bh⋅∂bh∂γh=∂Ek∂bh⋅f′(αh+γh)=∂Ek∂bh⋅bh(1−bh)(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)有
∂Ek∂γh=−bh(1−bh)⋅∑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=−bh(1−bh)⋅j=1∑lgjwhj=−eh(19)
因此有
Δγh=−η∂Ek∂γh=ηeh(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神经网络内容