简介
神经网络中经典的感知器模型,请参考我写的这篇博客[ http://blog.csdn.net/ws_20100/article/details/48929383]
本篇博客是在感知器模型之后,讨论由1986年由Rumelhart和McCelland提出的反向传播学习算法。
------------------------------------------------------------------------------------------------------------------
反向传播学习的BP算法
对于感知器模型,最初只能解决两层神经网络的学习训练问题,对于多层网络(例如三层),便不能确定中间层的参数该如何调整。直到1986年,Rumelhart和McCelland等人提出了基于反向传播的学习算法,用于前馈多层神经网络的学习训练。由于“反向传播”的英文叫做Back-Propagation,所以这个算法也常常被学者简称为BP算法。后来,人们对BP算法不断改进,以加快其训练速度,产生了很多版本的BP算法,例如Levenberg-Marquatdt算法等等。
1.)BP算法原理
如下图,是一个多层神经网络的示意图,网络相邻层之间的单元采用全连接方法连接。
每个单元的输入用U表示,输出用X表示,权值用W表示。
式一:第k层第i个神经元的输出,是由该神经元的输入经过激活函数(Activition Function)得到:
式二:第k层第i个神经元的输入,是由上一层神经元的输出和权值向量内积得到:
式三:第m层(最终输出层)第i个神经元输出的误差计算公式,采用LMS方式计算
以下的数学表示中的求导运算,均是由这三个基本公式推导而来。
2.)BP算法的步骤
反向传播算法分为两步进行:
正向传播:输入的样本从输入层经过隐单元一层一层进行处理,通过所有的隐层之后,传向输出层。
反向传播:把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以使误差信号趋向最小。
3.)BP算法的数学表示
BP算法的实质是,求取误差函数最小值问题。
(1)而采用的方法是非线性规划中的最速下降法,按照误差函数的负梯度方向修改权系数。即
而
所以有,
(2)由于误差的梯度,仅仅是“记为”符号,并未给出明确计算公式:
所以,我们将求取上式中第k层第i个单元的误差梯度:
这需要分类讨论:
1.当第k层为输出层(k=m)时,
2.当第k层不是输出层(k<m)时,
(3)所以最终的权系数修改公式:
其中,
(4)有时,为了加快收敛速度,也考虑上一次权值的修改量:
------------------------------------------------------------------------------------------------------------------
总结
Back Propagation Algorithm,后向传播算法,可以解决多层神经网络的训练问题。但是经过多年的研究显示也存在着很多瓶颈,比如学习速度过慢,学习率难以确定,可能进入局部极小点,以及过拟合问题等等。
如有任何疑问,欢迎一起讨论。
如要转载本文,请注明出处:http://blog.csdn.net/ws_20100/