BP算法简述

BP算法简述

一、正向传播

这是一个简单的网络模型
这是一个简单的网络模型,正向传播就是将一个样本数据 X \mathbf{X} X( X \mathbf{X} X=[ x 1 , x 2 , . . . . , x n x_{1},x_{2},....,x_{n} x1,x2,....,xn])输入,从而获取输出的过程。其中具体过程如下:
简单的计算过程

通过这个过程就是不断的进行线性组合以及激活函数,来获得本层输出,即下层输入。不断重复此过程就可达网络的最后一层。

对每层来说,有两个运算过程:

等式一: a l = W l o l − 1 \mathbf{a_{l}=W_{l}o_{l-1}} al=Wlol1
等式一: o l = f ( a l ) \mathbf{o_{l}=f(a_{l})} ol=f(al)

由此,我们可以依次求出 o 0 , a 1 , o 1 , a 2 , o 2 , . . . . . . . , o L \mathbf{o_{0},a_{1},o_{1},a_{2},o_{2},.......,o_{L}} o0a1o1a2o2,.......,oL,最后的 o L o_{L} oL就是最后的输出值。

需要注意的是这里的参数都是代表的向量。

这里的 f ( ) \mathbf{f()} f()也代表向量函数,它的意思是对输入的每一个分量都应用那个节点的激活函数,它输出的也是一个向量。但在实际应用中,一般这些分量都是选择同一个函数。

二、BP算法

给一个输入,通过一次正向传播,我们就能获得一次输出,这是在训练好网络的前提下进行的,而训练网络才是最难的部分。下面就是经典训练网络的算法——BP算法。

BP算法是一个更新网路权重的算法,我们知道每一层都有一个权重 W l W_{l} Wl,BP算法中更新权重的依据如下:

W l = W l − η ∂ C ∂ W l \mathbf{W_{l}=W_{l}}-\eta\frac{\partial C}{\mathbf{\partial W_{l}}} Wl=WlηWlC

其中 C C C代表的是损失函数, η \eta η使我们设定的学习效率,对于回归问题,损失函数通常定义如下:

C = 1 2 ( o L − y ) 2 C=\frac{1}{2}(o_{L}-y)^2 C=21(oLy)2

此等式中L代表网络层数,简单来说就是最后一层(用当前的初始权重计算的最后一层)与实际标签y的差值,对于有多个输出的神经网络,则需要修改成向量形式:

C = 1 2 ∣ ∣ o L − y ∣ ∣ 2 \mathbf{C=\frac{1}{2}||o_{L}-y||^2} C=21oLy2

现在关键在于如何求出这个偏导 ∂ C ∂ W l \frac{\partial C}{\partial W_{l}} WlC,这时就要通过上面所提到的等式一和等式二了:

等式一: a l = W l o l − 1 \mathbf{a_{l}=W_{l}o_{l-1}} al=Wlol1
等式二: o l = f ( a l ) \mathbf{o_{l}=f(a_{l})} ol=f(al)

上文我们提到由此等式我们可以得到 o 0 , a 1 , o 1 , a 2 , o 2 , . . . . . . . , o L \mathbf{o_{0},a_{1},o_{1},a_{2},o_{2},.......,o_{L}} o0a1o1a2o2,.......,oL,在此说明,这个序列中每个量都求出来过,并且每个量都可以表示成它之前任何一个量的函数,因此,对于最后一个量来说,在这个序列中选取之前的任何一项,都有如下关系:
o L = t ( 之 前 任 意 一 项 ) \mathbf{o_{L}=t(之前任意一项)} oL=t()

我们选取 a l a_{l} al项,再加上等式一,可得:

o L = t ( a l ) \mathbf{o_{L}=t(a_{l})} oL=t(al)
a l = W l o l − 1 = g ( W l ) \mathbf{a_{l}=W_{l}o_{l-1}=g(W_{l})} al=Wlol1=g(Wl)
上式可化为 o L = t ( g ( W l ) ) \mathbf{o_{L}=t(g(W_{l}))} oL=t(g(Wl))

C C C是一个关于 o L o_{L} oL的函数,这里假设其为 h ( o L ) h(o_{L}) h(oL),再联系上式,显然 C C C是一个关于 W l \mathbf{W_{l}} Wl的复合函数。根据链式求导法则,有 ∂ C ∂ W l = ∂ C ∂ a l ∂ a l ∂ W l \frac{\partial C}{\mathbf{\partial W_{l}}}=\frac{\partial C}{\mathbf{\partial a_{l}}} \mathbf{\frac{\partial a_{l}}{\partial W_{l}}} WlC=alCWlal

根据上式,很显然这里的 ∂ a l ∂ W l = ∂ W l o l − 1 ∂ W l = o l − 1 \mathbf{\frac{\partial a_{l}}{\partial W_{l}}=\frac{\partial W_{l}o_{l-1}}{\partial W_{l}}=o_{l-1}} Wlal=WlWlol1=ol1

在此定义 ∂ C ∂ a l \frac{\partial C}{\mathbf{\partial a_{l}}} alC这一项为误差 ξ l \mathbf{\xi_{l}} ξl, ∂ a l ∂ W l \mathbf{\frac{\partial a_{l}}{\partial W_{l}}} Wlal求出来为 o l − 1 \mathbf{o_{l-1}} ol1, ξ l \mathbf{\xi_{l}} ξl为相当重要的一个值,它是第l层的误差向量。BP之所以叫误差反向传播,即来源于这个误差向量沿着从右向左的方向来传播。

现在,等式变为 ∂ C ∂ W l = ξ l o l − 1 \frac{\partial C}{\mathbf{\partial W_{l}}}=\mathbf{\xi_{l}o_{l-1}} WlC=ξlol1,对于我们来说, ξ l o l − 1 \mathbf{\xi_{l}o_{l-1}} ξlol1中的 o l − 1 \mathbf{o_{l-1}} ol1是已知的,只是不知道 ξ l \mathbf{\xi_{l}} ξl,这时我们就要想办法来求出这一项。我们回顾一下现在都知道了哪些量:首先,我们知道这一次还未更新时的所有层的权重 W 1 , W 2 , . . . , W n \mathbf{W_{1},W_{2},...,W_{n}} W1W2...Wn,上文所提到的在当前权重下计算出来的 o 0 , a 1 , o 1 , a 2 , o 2 , . . . . . . . , o L \mathbf{o_{0},a_{1},o_{1},a_{2},o_{2},.......,o_{L}} o0a1o1a2o2,.......,oL,还有其他一大堆等式。

我们要想办法通过这些已知量来求出 ξ l \mathbf{\xi_{l}} ξl,如何才能把这些已知量和 ξ l \mathbf{\xi_{l}} ξl联系起来呢?这时我们就需要用到上文提到的两个等式以及 ξ l \mathbf{\xi_{l}} ξl的定义式:

等式一: a l = W l o l − 1 \mathbf{a_{l}=W_{l}o_{l-1}} al=Wlol1
等式二: o l = f ( a l ) \mathbf{o_{l}=f(a_{l})} ol=f(al)
ξ l \mathbf{\xi_{l}} ξl的定义式: ξ l = ∂ C ∂ a l \mathbf{\xi_{l}=\frac{\partial C}{\partial a_{l}}} ξl=alC

通过观察发现 ξ L \xi_{L} ξL可以求出来,因为上文有 C = 1 2 ∣ ∣ o L − y ∣ ∣ 2 \mathbf{C=\frac{1}{2}||o_{L}-y||^2} C=21oLy2,可对 ξ l \mathbf{\xi_{l}} ξl的定义式进行代换,代换之后为:

ξ l = ∂ 1 2 ∣ ∣ o L − y ∣ ∣ 2 ∂ a l = ∂ 1 2 ∣ ∣ f ( a L ) − y ∣ ∣ 2 ∂ a l \mathbf{\xi_{l}=\frac{\partial \frac{1}{2}||o_{L}-y||^2}{\mathbf{\partial a_{l}}}=\frac{\partial \frac{1}{2}||f(a_{L})-y||^2}{\mathbf{\partial a_{l}}}} ξl=al21oLy2=al21f(aL)y2

通过观察这个等式,我们发现当其中的 a l = a L a_{l}=a_{L} al=aL时,我们可以得到

ξ L = ∂ 1 2 ∣ ∣ o L − y ∣ ∣ 2 ∂ a L = ∂ 1 2 ∣ ∣ f ( a L ) − y ∣ ∣ 2 ∂ a L = ( f ( a L ) − y ) ∘ f ′ ( a L ) \mathbf{\xi_{L}=\frac{\partial \frac{1}{2}||o_{L}-y||^2}{\mathbf{\partial a_{L}}}=\frac{\partial \frac{1}{2}||f(a_{L})-y||^2}{\mathbf{\partial a_{L}}}=(f(a_{L})-y)\circ f'(a_{L})} ξL=aL21oLy2=aL21f(aL)y2=(f(aL)y)f(aL)

上述点乘代表将相同形式的矩阵的相同位置相乘。现在,我们发现 ξ L \mathbf{\xi_{L}} ξL也是已知的,那我们就可以想办法构造递推公式,将 ξ l \mathbf{\xi_{l}} ξl ξ L \mathbf{\xi_{L}} ξL表示出来,那么 ξ l \mathbf{\xi_{l}} ξl就会被求出。递推公式构造方法如下:

ξ l = ∂ C ∂ a l = ∂ C ∂ o l ∂ o l ∂ a l = ∂ C ∂ a l + 1 ∂ a l + 1 ∂ o l ∂ o l ∂ a l \mathbf{\xi_{l}=\frac{\partial C}{\partial a_{l}}=\frac{\partial C}{\partial o_{l}}\frac{\partial o_{l}}{\partial a_{l}}=\frac{\partial C}{\partial a_{l+1}}\frac{\partial a_{l+1}}{\partial o_{l}}\frac{\partial o_{l}}{\partial a_{l}}} ξl=alC=olCalol=al+1Colal+1alol

通过上述等式一二我们可得:

∂ a l + 1 ∂ o l = W l + 1 \mathbf{\frac{\partial a_{l+1}}{\partial o_{l}}=W_{l+1}} olal+1=Wl+1

∂ o l ∂ a l = f ′ ( a l ) \mathbf{\frac{\partial o_{l}}{\partial a_{l}}=f'(a_{l})} alol=f(al)

至此, ξ l \mathbf{\xi_{l}} ξl的递推公式已经确定:

ξ l = ξ l + 1 W l + 1 f ′ ( a l ) \mathbf{\xi_{l}=\xi_{l+1}W_{l+1}f'(a_{l})} ξl=ξl+1Wl+1f(al)

但由于这些量都是矩阵、向量,因此要注意他们相乘时的形式和顺序,最后化出来应该是这样: ξ l = ( W l + 1 ξ l + 1 ) ∘ f ′ ( a l ) \mathbf{\xi_{l}=(W_{l+1}\xi_{l+1}) \circ f'(a_{l})} ξl=(Wl+1ξl+1)f(al)

这样递推式就确定了,我们就可以根据 W l = W l − η ∂ C ∂ W l \mathbf{W_{l}=W_{l}}-\eta\frac{\partial C}{\mathbf{\partial W_{l}}} Wl=WlηWlC来更新每层权重了。

至此,BP算法也介绍完毕。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值