神经网络(三)—— BP算法基本推导

BP算法

前情回顾

上回我们说到,单层的线性神经网络权值的迭代公式是:
w:=wηXT(f(wX)y)f(wX) w:=w-\eta X^T(f(wX)-y)f'(wX) w:=w−ηXT(f(wX)−y)f′(wX)
其中呢,这个(f(wX)y)f(wX)(f(wX)-y)f'(wX)(f(wX)−y)f′(wX)我们称它为δ\deltaδ,于是
w:=wηXTδ w:=w-\eta X^T\delta w:=w−ηXTδ
不用必须是线性神经网络,其他激活函数也适用于这个公式,只不过线性的话就可以把f’(wX)这一项去掉。

对于多层的神经网络来说,每一层的权值怎么更新呢?

下面以二层的网络为例给出推导。

基本推导

神经网络(三)—— BP算法基本推导

损失函数自然就是
E=12(OY)2 E=\frac12(O-Y)^2 E=21​(O−Y)2
这个二层的网络是如何工作的?

我们把它看成两个单层的就好。

一开始我们初始化了两层的权值V和W。

假设我们的激活函数是f(x).

中间层的输出就可以计算:
M=f(VX) M = f(VX) M=f(VX)
然后我们把 M作为下一层的输入,就可以得到预测值O:
O=f(WM) O=f(WM) O=f(WM)
接下来将损失函数对W求导我们就能得到W的迭代方程:
W:=WηMTδ2 W:=W-\eta M^T\delta_2 W:=W−ηMTδ2​
其中的δ2\delta_2δ2​就是(OY)f(WM)(O-Y)*f'(WM)(O−Y)∗f′(WM),也同样可以写成E(WM)\frac{\partial E}{\partial (WM)}∂(WM)∂E​

这样一来我们就更新了WWW,记作W2W_2W2​。

通过迭代W之后,我们知道现在的W2W_2W2​可以使得f(WM)更加接近Y。

同样的想法我们要改变V使得f(VX)更加接近M的‘真实值’,从而使得f(W2M2)f(W_2M_2)f(W2​M2​)更接近Y。

同理:
V:=VηXTδ1 V:=V-\eta X^T\delta_1 V:=V−ηXTδ1​
δ1\delta_1δ1​可以写成E(VX)\frac{\partial E}{\partial (VX)}∂(VX)∂E​,根据链式求导法则
δ1=E(VX)=E(WM)(WM)MM(VX)=δ2W2f(VX) \delta_1=\frac{\partial E}{\partial (VX)}=\frac{\partial E}{\partial (WM)}\cdot\frac{\partial (WM)}{\partial M}\cdot\frac{\partial M}{\partial (VX)}\\=\delta_2\cdot W_2\cdot f'(VX)\\ δ1​=∂(VX)∂E​=∂(WM)∂E​⋅∂M∂(WM)​⋅∂(VX)∂M​=δ2​⋅W2​⋅f′(VX)
求出δ1\delta_1δ1​后,V权值也能更新了。

这个公式当然还能更加一般化:
δi=δi+1Wi+1f(WiOi) \delta_i=\delta_{i+1}\cdot W_{i+1}\cdot f'(W_iO_i) δi​=δi+1​⋅Wi+1​⋅f′(Wi​Oi​)

神经网络(三)—— BP算法基本推导神经网络(三)—— BP算法基本推导 木子六日 发布了16 篇原创文章 · 获赞 0 · 访问量 395 私信 关注
上一篇:Delphi 最小化窗体到托盘


下一篇:Windows程序设计(七)--鼠标