本篇文章是感知机详解的继续,看本篇文章前最好先看上一篇文章或者有响应的神经网络学习与应用基础。
图1 多层前馈网络的决策区域
这里显示的网络是用来训练识别10种出现在“h_d”(例如“had”,“hid”)间的元音。这个网络的输入由两个参数F1和F2组成,它们是通过对声音的频谱分析得到的。网络的10个输出对应于10个可能的元音。这个网络的预测是其中有最大值的输出。右图画出了学到的网络所代表的高度非线性决策面。图中的点表示测试样例,它们与用来训练这个网络的样例是完全不同的。
如感知机详解中所论述的那样,单个感知器仅能表示线性决策面。相反,反向传播算法所学习的多层网络能够表示种类繁多的非线性曲面。如图1所示,该图描述了一个典型的多层网络和它的决策曲面。这个语音识别任务要区分出现在“h_d”上下文中的10种元音(例如,“hid”,“had”,“head”,“hood”等)。输入的语音信号用两个参数表示,它们是通过对声音的频谱分析得到的,这样我们可以方便地在二维实例空间中显示出决策面。如图可见,多层网络能够表示高度非线性的决策面,它比单个单元的线性决策面表征能力更强。
1,可微阈值单元
应该使用什么类型的单元来作为构建多层网络的基础?起初尝试选择前面讨论的线性单元,因为我们已经为这种单元导出了一个梯度下降学习法则。然而,多个线性单元的连接仍旧产生线性函数,而我们更希望选择能够表征非线性函数的网络。感知器单元是另一种选择,但它的不连续阈值使它不可微,所以不适合梯度下降算法。我们所需要的是这样的单元,它的输出是输入的非线性函数,并且输出是输入的可微函数。一种答案是sigmoid单元(sigmoid unit),这是一种非常类似于感知器的单元,但它基于一个平滑的可微阈值函数。
图2 sigmoid阈值单元
图2画出了sigmoid单元。与感知器相似,sigmoid单元先计算它的输入的线性组合,然后应用一个阈值到此结果。然而,对于sigmoid单元,阈值输出是输入的连续函数。更精确地讲,sigmoid单元这样计算它的输出:,其中,。
σ 经常被称为sigmoid函数或者也可以称为logistic函数(logistic function)。注意它的输出范围为0到1,随输入单调递增。因为这个函数把非常大的输入值域映射到一个小范围的输出,它经常被称为sigmoid单元的挤压函数(squashing function)。sigmoid函数有一个有用的特征,它的导数很容易以它的输出表示,如下。
2,反向传播算法
对于由一系列确定的单元互连形成的多层网络,反向传播算法可用来学习这个网络的权值。它采用梯度下降方法试图最小化网络输出值和目标值之间的误差平方。这儿给出反向传播算法,然后推导出反向传播算法使用的梯度下降权值更新法则。
因为要考虑多个输出单元的网络,而不是象以前只考虑单个单元,所以先重新定义误差E,以便对所有网络输出的误差求和。
其中,outputs是网络输出单元的集合,tkd和okd是与训练样例d和第k个输出单元相关的输出值。
反向传播算法面临的学习问题是搜索一个巨大的假设空间,这个空间由网络中所有单元的所有可能的权值定义。这种情况可以用一个误差曲面来形象表示。和训练单个单元的情况一样,梯度下降可被用来尝试寻找一个假设使E最小化。
多层网络的一个主要不同是它的误差曲面可能有多个局部极小值。不幸的是,这意味着梯度下降仅能保证收敛到局部极小值,而未必得到全局最小的误差。尽管有这个障碍,已经发现对于实践中很多应用反向传播算法都产生了出色的结果。
表1 包含两层sigmoid单元的前馈网络的反向传播算法(随机梯度下降版本)
表1给出了反向传播算法。这里描述的算法适用于包含两层sigmoid单元的分层前馈网络,并且每一层的单元与前一层的所有单元相连。这是反向传播算法的增量梯度下降(或随机梯度下降)版本。这里使用的符号与前面使用的一样,并进行了如下的扩展:
• 网络中每个结点被赋予一个序号(例如一个整数),这里的结点要么是网络的输入,要么是网络中某个单元的输出。
• xji表示结点i到单元j的输入,并且wji表示对应的权值。
• δn表示与单元n相关联的误差项。它的角色与前面讨论的delta训练法则中的(t-o)相似。后面我们可以看到:
在表1的算法的开始,建立一个具有期望数量的隐单元和输出单元的网络,并初始化所有网络的权值为小的随机数。给定了这个固定的网络结构,算法的主循环就对训练样例进行反复的迭代。对于每一个训练样例,它应用目前的网络到这个样例,计算对于这个样例网络输出的误差,然后更新网络中所有的权值。对这样的梯度下降步骤进行迭代,直到网络的性能达到可接受的精度(经常是上千次,多次使用同样的训练样例)。
3,学习任意的无环网络
表1给出的反向传播算法的定义仅适用于两层的网络。然而那里给出的算法可以简单地推广到任意深度的前馈网络。公式(T4.5)的权值更新法则保持不变,惟一的变化是计算δ值的过程。概括地说,第m层的单元r的δr值是由更深的m+1层的δ值根据下式计算的:
注意这个公式与表1算法的第3步相同,这里要说明的是对于网络中的任意数量的隐藏单元,该步骤要被重复很多遍。
如果推广到任何有向无环结构也一样的简单,而不论网络中的单元是否象我们至此为止假定的那样被统一地排列在层上。对于网络单元没有按此排列的情况,计算任意内部单元(也就是所有非输出单元)的δ的法则是:
其中DownStream(r)是在网络中单元r的立即下游(immediately downstream)单元的集合,或者说输入中包括r的输出的所有单元。
4,反向传播法则推导
这里我们要解决的问题是推导出表1算法使用的随机梯度下降法则。随机的梯度下降算法迭代处理训练样例,每次处理一个。对于每个训练样例d,利用关于这个样例的误差Ed的梯度修改权值。换句话说,对于每一个训练样例d,每个权wji被增加Δwji。
其中,Ed是训练样例d的误差,通过对网络中所有输出单元的求和得到
这里outputs是网络中输出单元的集合,tk是单元k对于训练样例d的目标值,ok是给定训练样例d时单元k的输出值。
将遵循图1中所画出的符号,增加一个下标j用来表示网络中的第j个单元,具体如下:
首先,注意权值wji仅能通过netj影响网络的其他部分。所以,我们可以使用链式规则(chain rule)得到
已知上式,接下来为导出一个方便的表示。我们依次考虑两种情况:一种情况是单元j是网络的一个输出单元,另一种情况是j是一个内部单元。
输出单元的权值训练法则。就象wji仅能通过netj影响其余的网络一样,netj仅能通过oj影响其余的网络。所以我们可以再次使用链式规则得出
首先仅考虑第一项
接下来考虑第二项
综合上述,我们可以得到
便推导出了输出单元的随机梯度下降法则:
参考文献:《机器学习》,《machine learning》等