BP神经网络误差反向传播公式简单推导

最近看了BP神经网络(Back Propagation Neural Networks),对于其中误差反向传播公式的推导比较困惑,在参考周志华老师的《机器学习》和网上一些博客后,做出一个简单的还原。

1. BP网络模型及变量说明

1.1 模型简图


BP神经网络模型

1.2 变量说明:

  • 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个神经元的连接权值;

    扫描二维码关注公众号,回复: 11174268 查看本文章
  • h(.):激活函数,这里假设每一层各个神经元的激励函数相同(实际中可能不同);

  • Ep:网络在第p个样本输入下的偏差,n=1…N;

  • N:样本总数

2. 误差反向传播相关推导

2.1 正向传播(forward-propagation)

正向传播的思想比较直观,最主要的是对于激活函数的理解。对于网络中第l层的第j个神经元,它会接受来自第l-1层所有神经元的信号,即:

z(l)j=i=1ml1wjia(l1)i+a(l1)0
如果令 wj0=1 ,可以将公式简写为
z(l)j=i=0ml1wjia(l1)i

则经过该神经元后的输出值为:
a(l)j=h(z(l)j)

对于多分类问题,网络输出层第k个神经元输出可表示为:
yk=a(l+1)k=h(z(l+1)j)=h(j=0mlwkja(l)j)
这里说明一下,BP神经网络中激活函数通常会取sigmoid函数或tanh函数,不清楚的可以百度一下这两个函数,这里不再赘述。

其中,sigmod函数的公式为
f(x)=11+ex
这个函数的导数有一个性质(后面会用到):
f(x)=f(x)(1f(x))

2.2 代价函数(cost function)

由2.1节公式可以得到BP网络在一个样本下的输出值,我们定义平方和误差函数(sum-of-square error function)如下:

Ep=k=1ml+112(yktk)2
所有样本输入下,网络的总误差为:
EN=p=1NEp

2.3 反向传播(back-propagation)

这是BP神经网络最核心的部分,误差从输出层逐层反向传播,各层权值通过梯度下降法(gradient descent algorithm)进行更新,即:

w:=wηEp(w)
上式中, η 是每次更新的步长, Ep(w) 是第p个样本输入下的输出偏差对某一层权值的偏导数,表示每输入一个样本更新一次参数。

下面我们以 w(l)ji 为例推导梯度项:

Epw(l)ji=Epz(l)jz(l)jw(l)ji=Epz(l)ja(l1)i

其中,
Epz(l)j=Epykykz(l)j={ml+1k=112(yktk)2}ykh(z(l)j)z(l)j=k=1ml+1(yktk)h(z(l)j)
如果激活函数h(.)为sigmod函数,则
h(z(l)j)=h(z(l)j)(1h(z(l)j))=yk(1yk)
Epw(l)ji=k=1ml+1yk(1yk)(yktk)a(l1)i

由此我们得到了误差从输出层向低层反向传播的递推公式,进而可以求出误差对于每一层权值的梯度 Ep(w)

3. 总结

BP神经网络是应用最多、最基本的一种人工神经网络,其精髓在于误差反向传播。后续的优化改动多在于激活函数、核函数上。

4. 参考文献

[1] 周志华,机器学习[M] , 清华大学出版社,2016.
[2] BP神经网络:误差反向传播公式的简单推导(博主:Meringue_zz)

原创文章 25 获赞 34 访问量 7万+

猜你喜欢

转载自blog.csdn.net/HOMEGREAT/article/details/78408665