BP算法(Background Propagation Alogorithm), 即误差逆传播算法,是训练多层前馈神经网络的一种最经典的算法,通过BP算法可以学得网络的权重和阈值,且具有可靠的收敛性。
标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象.为了达到同样的累积误差极小点,标准BP算法往往需进行更多次数的迭代.
累积BP算法直接针对累积误差最小化,它在读取整个训练集D 一遍后才对参数进行更新,其参数更新的频率低得多.
但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显.
前向传播过程:
将输入值传入神经网络,逐层将信号前传,计算输出层的结果yˆy^
计算输出值yˆ和y^和yjyj的误差,通常采用均方误差(mse)
Ek=12Σlj=1(yˆkj−ykj)2Ek=12Σj=1l(y^jk−yjk)2
反向传播过程:
输入层神经元
根据优化策略,减小输出误差需要计算误差关于其输入权的梯度,即∂Ek∂ωhj∂Ek∂ωhj
利用求导的链式法则(Chain Rule),可以将其展开为
第一项是误差对输出求偏导,由上文提到的均方误差公式可以直接求导计算,结果为−(yˆkj−ykj)−(y^jk−yjk)
第二项是输出对输入求偏导,即对输出层的激励函数求偏导,在这里选用sigmoid函数作为激励函数sigmoid函数:11+e−z11+e−z 具有非常优秀的性质,其中包括导数可用自身表示:
f′(x)=f(x)(1−f(x))f′(x)=f(x)(1−f(x))
因此,可直接写出为=yˆkj(1−yˆ)=y^jk(1−y^)
第三项是输入对权重求偏导,由定义直接计算输出层神经元的误差为:
最终求得的导数: