《深度学习:卷积神经网络从入门到精通》——2.5.2 逐层反向传播算法
2.5.2 逐层反向传播算法
虽然通用反向传播算法在理论上适用于任何前馈神经网络,但是对于多层感知器来说,还可以设计出更加简洁实用的逐层反向传播算法[10]。
多层感知器由一个输入层、若干隐含层和一个输出层组成,如图2.2所示。
不妨设输入层的维数是m,输入向量表示为
x =(x1, x2, …, xm)T∈Rm。第k个隐含层包含nk个神经元(k = 1,
2, …, R),相应的隐含层向量表示为hk =(hk, 1, hk, 2, …, hk, nk)T
∈Rnk。输出层包含c个神经元,输出向量表示为o =(o1, o2, …, oc)T∈Rc。输入层与第1个隐含层之间的权值矩阵用?表示,第k-1个隐含层与第k个隐含层之间的权值矩阵用?(1 < k≤R)表示,第R个隐含层与输出层之间的权值矩阵用??表示。那么,这个多层感知器的各层神经元激活输出可以计算如下:
(2.56)
其中,b1、bk和br + 1bR + 1是各层的偏置;σh1、σhk和σo是各层的逐元向量函数,一般都取为逐元sigmoid函数。
算法2.3 逐层反向传播算法
为了对多层感知器中的权值和偏置进行学习,需要给定一组训练样本。假定共有L个训练样本(xl, yl)(1≤l≤L),输入是xl =(xl1, xl2, …, xlm)T,期望输出是yl =(yl1, yl2, …, ylc)T,实际输出是ol =(ol1, ol2, …, olc)T。把优化的目标函数选为平方误差:
(2.57)
令。如果定义网络各层关于第l个样本的反传误差信号或灵敏度为
(2.58)
那么这些反传误差信号可以递归计算如下:
???(2.59)
(2.60)
综上所述,逐层反向传播算法可以总结为算法2.3。另外,如果采用受限波耳兹曼机对对多层感知器的权值和偏置进行预训练代替随机初始化,还可以进一步提高逐层反向传播算法的学习训练效果[32]。
此外,学习训练过程优化的目标函数不一定是平方误差,还可以是其他函数,比如交叉熵:
(2.61)
这时,相应的逐层反向传播算法只需把??的计算公式修改为
(2.62)
最后,需要指出的是,多层感知器在训练完成之后,常常再被用软最大函数转换成伪概率输出。虽然很多文献和代码都把这种软最大函数转换称为软最大输出,但从理论上严格地说,软最大输出应该是把输出层的计算定义为
(2.63)
如果保持其他部分不变,但采用式(2.63)计算网络的输出,那么在采用平方误差(2.57)作为目标函数时,?的计算公式应改为
(2.64)
而在采用交叉熵(2.61)作为目标函数时,?的计算公式应改为
(2.65)
其中,“1”表示一个分量全是1的向量,“./”表示向量的对应分量相除。
如果每个样本的期望输出yl仅有一个分量,为yljl = 1,那么还可以选用退化交叉熵作为目标函数,即
(2.66)
同时,的计算公式应修正为
(2.67)
- 点赞
- 收藏
- 关注作者
评论(0)