最近看了一下BP神经网络(Backpropagation Neural Networks),发现很多资料对于BP神经网络的讲解注重原理,而对于反向传播公式的推导介绍的比较简略,故自己根据《PATTERN RECOGNITION AND MACHINE LEARNING》这本书的思路推导了一下反向传播的过程,记录在这里,以便以后看。对于BP神经网络的工作原理此处就不再赘述,周志华大牛的《机器学习》中介绍的很详细。
PS: 本人第一次写博客,不足之处还请见谅。
ml :第 l 层神经元个数
x(1)p : 输入层第 p 个神经元, p=1...m1 ;
yk : 输出层第 k 的神经元的输出, k=1...ml+1 ;
tk :输出层第 k 的神经元的目标值, k=1...ml+1 ;
z(l)j :第 l 层的第 j 的神经元的输入;
a(l)j :第 l 层第 j 个神经元的输出;
a(l)0 :第 l 层的偏置项;
w(l)ji :第 l−1 层第 i 个神经元与第 l 层第 j 个神经元的连接权值;
h(.) :激活函数,这里假设每一层各个神经元的激励函数相同(实际中可能不同);
Ep :网络在第 p 个样本输入下的偏差, n=1...N ;
N :样本总数
正向传播的思想比较直观,最主要的是对于激活函数的理解。对于网络中第 l 层的第 j 个神经元,它会接受来自第 l−1 层所有神经元的信号,即:
由2.1节公式可以得到BP网络在一个样本下的输出值,我们定义平方和误差函数(sum-of-square error function)如下:
这是BP神经网络最核心的部分,误差从输出层逐层反向传播,各层权值通过梯度下降法(gradient descent algorithm)进行更新,即:
下面我们以 w(l)ji 为例推导梯度项:
这里我们定义 δ(l)j=∂Ep∂z(l)j ,对于输出层,可以得出 δ(l+1)k=yk−tk=a(l+1)k−tk ,则上式可表示为:
现在问题转换为求解 δ(l+1)k :
根据 δ 的定义可知 ∂Ep∂z(l+1)k=δ(l+1)k ,代入上式,则:
根据 z(l+1)k 和 alj 的定义可知:
代入上式得:
由此我们得到了误差从输出层向低层反向传播的递推公式,进而可以求出误差对于每一层权值的梯度 ▽Ep(w)
BP神经网络是应用最多的一种神经网络,其精髓在于误差反向传播。本人在学习这块内容是为了给接下来学习和研究深度学习及caffe做准备,由于个人水平有限,在上述推导中可能存在不合理的地方,还请见谅,同时也欢迎指出内容的不足之处。
[1] 周志华,机器学习[M] , 清华大学出版社,2016.
[2] CHRISTOPHER M.BISHOP. PATTERN RECOGNITION AND MACHINE LEARNING [M], 2006.