BP算法原理解析

注意:前方警告来袭:如有看到大量数学公式和文字说明而感到恶心、反胃甚至呕吐的人还请绕行,此篇博客不适合你们,此篇博客是写给那些能懂得欣赏数学与公式之美的人看的,能认认真真看完这篇博客,读懂每一个公式,看懂每一个推导过程,那么就一定会对BP原理有一个根本性的认识,只有这样,作为一名程序猿,才能一个人在黑屋子里敲出对应功能的代码!!!

一、单层单连接

考虑以下两个单连接神经元:
两层单连接神经元
根据上图 可得如下公式推导:
n 1 = w 1 a 0 n 2 = w 2 a 1
a 1 = f 1 ( n 1 ) a = a 2 = f 2 ( n 2 )
E = E [ ( t a ) 2 ] = E ( n 1 , n 2 ) = E ( w 1 , w 2 )
此处用 E 表示代价函数,物理意义为均方误差值, t 表示训练样本所对应的目标值, a 为最终的输出, E t 为已知值,故其为 a 的函数,又有前可知 a n 2 的函数, n 2 a 1 的函数, a 1 n 1 的函数,如果将 w 2 看着常数,则 a n 1 n 2 的函数,所以 E 同时也可以表示为 n 1 n 2 的函数,同理也可以表示为 w 1 w 2 的函数。机器学习的目的就是通过调整参数 w 使 E 最小,为使后面求导方便,同样可以将 E 表示成如下:

E ( t a ) 2

已知 E w 1 w 2 的函数,为使 E 取值最小,可通过梯度下降法对 w 1 w 2 更新,更新过程如下:
w 1 ( k + 1 ) = w 1 ( k ) α E w 1 w 2 ( k + 1 ) = w 2 ( k ) α E w 2

其中 α 为梯度更新步长,也称为学习率,可由人为设定。
已知
E = E [ ( t a ) 2 ] = E ( n 1 , n 2 ) = E ( w 1 , w 2 )

n 1 = w 1 a 0 n 2 = w 2 a 1

根据求导链式法则可得:
E w 1 = E n 1 n 1 w 1

E w 2 = E n 2 n 2 w 2

其中
n 1 w 1 = ( w 1 a 0 ) w 1 = a 0

n 2 w 2 = ( w 2 a 1 ) w 2 = a 1


E n 1 = s 1

E n 2 = s 2

为敏感系数,后面会通过公式计算该系数,将以上公式合并可得如下公式:
E w 1 = E n 1 n 1 w 1 = s 1 a 0

E w 2 = E n 2 n 2 w 2 = s 2 a 1

带入更新公式可得:
w 1 ( k + 1 ) = w 1 ( k ) α s 1 a 0 w 2 ( k + 1 ) = w 2 ( k ) α s 2 a 1

该更新公式中等式右边只有敏感系数 s 1 s 2 未知,先计算 s 1 s 2 的表达式,已知 s 1 s 2 的定义式,可通过求导链式法则求出 s 1 s 2 之间的关系。
s 1 = E n 1 = E n 2 n 2 n 1 = s 2 n 2 n 1

其中
n 2 n 1 = ( w 2 a 1 ) n 1 = w 2 a 1 n 1 = w 2 f 1 ( n 1 ) n 1 = w 2 f ˙ 1 ( n 1 )

所以 s 1 s 2 之间的关系为
s 1 = s 2 w 2 f ˙ 1 ( n 1 )

现在 s 1 可以通过 s 2 表示了,也就是说到这一步只有 s 2 是未知数,下面计算 s 2 的表达式:由前面可知均方误差 E 的近似表达式为:
E ( t a ) 2


E n 2 = s 2

将两者合并可得:
s 2 = E n 2 = ( t a ) 2 n 2 = 2 ( t a ) a n 2 = 2 ( t a ) f 2 ( n 2 ) n 2 = 2 ( t a ) f ˙ 2 ( n 2 )

注意到此表达式中等式的右边含有 ( t a ) 为训练模型的偏差。
至此 s 1 s 2 的计算表达式均已知。
这里写图片描述
现在重新理一下整个更新过程:
这里写图片描述

总结:BP更新过程可分为三步:

第一步:数据前向传播

这里写图片描述

第二步:误差后向传播

这里写图片描述

第三步:权重更新

这里写图片描述

二、多层多连接

要读懂这一节,必须先要对第一节有足够的理解。
因本人没有艺术细胞,不会画图,前面那个图都是复制来的,又多层网络图不好画,网上又搜索不到对应的图,所以就不贴图了,各位读者还请自行脑补,就是在第一个图上面进行扩展。下面直接列写公式:

{ a 0 = p a m + 1 = f m + 1 ( W m + 1 a m + b m + 1 ) m = 0 , 1 , 2 , . . . , M 1 a = a M

代价函数(均方误差):
F ^ ( x ) = ( t ( k ) a ( k ) ) T ( t ( k ) a ( k ) )

权重更新公式:
这里写图片描述
这里需要注意下标 i , j j 表示前一层神经元节点下标, i 表示后一层神经元节点下标。
根据偏导链式法则同理可推得如下公式:
这里写图片描述
其中
这里写图片描述
表示第 m 层第 i 个节点的输入。该式对 w b 求偏导分别为:
n i m w i , j m = a j m 1

n i m b i m = 1

同理定义敏感因子:
s i m = F ^ n i m

结合前面两部分公式可得权重梯度:
这里写图片描述
将其代入权重更新公式有:
这里写图片描述
该表达式只是针对求解某一个权重和偏置。
下面以向量和矩阵的方式表示一层中权重和偏置的更新公式:
m 层权重用矩阵表示如下:
W m = [ w 1 , 1 m w 1 , 2 m w 1 , S m 1 m w 2 , 1 m w 2 , 2 m w 2 , S m 1 m w S m , 1 m w S m , 2 m w S m , S m 1 m ]

m 层敏感因子向量如下:
s m = F ^ n m = [ F ^ n 1 m F ^ n 2 m F ^ n S m m ]

m 1 层输出向量如下:
a m 1 = [ a 1 m 1 a 2 m 1 a S m 1 m 1 ]

m 层偏置向量如下:
b m 1 = [ b 1 m 1 b 2 m 1 b S m 1 m 1 ]

由此上述权重和偏置更新公式可统一由一下公式表示:
这里写图片描述
现在我们需要推导如下关系式:
这里写图片描述
已知
s m = F ^ n m = [ n m + 1 n m ] T F ^ n m + 1 = n m + 1 n m s m + 1

注意,这里等式右边两个微分顺序不能乱,前一个为矩阵,后一个为向量,调换顺序后则无法进行数学运算。
这里写图片描述
以上矩阵亦称Jacobian矩阵,其中每一个元素的表达式如下:
这里写图片描述
由前面推导公式可得:
这里写图片描述
其中
这里写图片描述
将Jacobian矩阵矩阵代入 s m 表达式可得:
这里写图片描述
进一步有:
这里写图片描述
而最后一层 s i M 可由均方误差求得:
这里写图片描述
进一步可写为:
这里写图片描述
向量和矩阵表示为:
这里写图片描述
将以上过程总结为三步:

第一步:训练数据前向传播

这里写图片描述

第二步:误差反向传播

这里写图片描述

第三步:权重更新

这里写图片描述
以上就是整个多层多连接网络BP算法数学原理。

三、实例运用

猜你喜欢

转载自blog.csdn.net/haxiongha/article/details/80997980