人工神经网络简论
一、 综述
神经网络领域最早是由心理学家和神经学家开创的,旨在开发和测试神经的计算机模拟。粗略地说,神经网络是一组连接的输入/输出单元,其中每个连接都与一个权重相关联。在学习阶段,通过调整这些权重,能够预测输入元组的正确类标号。由于单元之间的连接,神经网络学习又称连接者学习(Connectionist Learning)。
神经网络需要很长的训练时间,对于有足够长训练时间的应用更为合适。需要大量的参数,通常主要靠经验确定,如网络拓扑结构。神经网络常常因为可解释性差而受到批评。例如,人们很难解释网络中学习的权重和“隐含单元”的符号意义。
然而,神经网络的优点包括其对噪声数据的高承受能力,以及对未经训练的数据模式分类能力。在缺乏属性和类之间的联系的知识时可以使用它们。不像大部分决策树算法,它们非常适合连续值的输入和输出。神经网络算法是固有并行的,可以使用并行技术来加快计算过程。
有许多不同类型的神经网络和神经网络算法,最流行的神经网络算法是后向传播,它在20世纪80年代就获得了声望。
二、 多层前馈神经网络(Multilayer Feed-Forward)
后向传播算法在多层前馈神经网络上进行学习。它迭代地学习用于元组类标号预测的一组权重。多层前馈神经网络由一个输入层、一个或多个隐藏层和一个输出层组成。多层前馈神经网络的例子如下图所示:
每层由若干个单元组成。网络的输入对应于每个元组测量的属性。输入同时提供给称作输入层的单元层。这些输入通过输入层,然后加权同时提供给称作隐藏层的“类神经元”的第二层。该隐藏层单元的输出可以输入到另一个隐藏层,如此下去。隐藏层的数量是任意的,尽管实践中通常只有一层。最后一个隐藏层的加权输出作为构成输出层的单元的输入。输出层发布给定元组的网络预测。
输入层的单元称作输入单元。隐藏层和输出层的单元,由于它们的符号生物学基础,有时称作Neurodes,或称作输出单元。上图所示的多层神经网络中有两层输出单元。因此成为两层神经网络(不计输入层,因为它只用来传递输入值到下一层)。类似地,包含两个隐藏层的网络称为三层神经网络,如此等等。
如果其权重都不回送到输入单元,或前一层的输出单元,则该网络是前馈的。
如果每个单元都向下一层的每个单元提供输入,则该网络是全连接的。
每个输出单元取前一层单元输出的加权和作为输入。它将一个非线性(激励)函数作用于加权输入。多层前馈神经网络能够将类预测作为输入的非线性组合建模。从统计学的观点来讲,它们进行非线性回归。给定足够多的隐藏单元和足够的训练样本,多层前馈神经网络可以逼近任何函数。
三、 定义网络拓扑
在开始训练之前,用户必须说明输入层的单元数、隐藏层数(如果多于一层)、每个隐藏层的单元数和输出层的单元数,以确定网络拓扑。
对训练元组中每个属性的测量输入值进行归一化将有助于加快学习过程。通常,对输入值进行归一化,使其落入0.0~1.0之间。离散值属性可以重新编码,使离散属性的每个阈值对应一个输入单元。例如,如果属性A有三个可能的取值{a0, a1, a2},则可以分配三个输入单元表示A,即可以使用I0, I1, I2作为输入单元。每个单元初始化为0。如果A=a0,则I0置为1;如果A=a1,则I1置为1。
神经网络可以用来分类(预测给定元组的类标号)或预测(预测连续值输出)。对于分类,一个输出单元可以用来表示两个类(其中值1代表一个类,值0代表另一个类)。如果多于两个类,则每个类使用一个输出单元。
对于“最好的”隐藏单元数,没有明确的规则。网络设计是一个试凑的过程,并可能影响结果训练网络的准确性。权重的初值也可能影响结果的准确性。一旦网络经过训练,但其准确率不能接受,则通常采用不同的网络拓扑或不同的初始权重集,重复训练过程。可以使用准确率估计的交叉确认技术帮助确定何时找到一个可接受的网络。已经提出了一些自动搜索“较好”网络结构的技术,这些技术通常使用爬山法,从一个选择修改的初始结构开始。
四、 后向传播
后向传播迭代地处理训练元组数据集,将每个元组的网络预测与实际已知的目标值进行对比,目标值可以是已知训练元组的类标号(对于分类问题)或连续值(对于预测问题)。
对于每个训练样本,“由后向前”修改权重使网络预测和实际目标值之间的均方误差最小,即由输出层,经由每个隐藏层,到第一个隐藏层(因此称作后向传播)。尽管不能保证,一般地,权重将最终收敛,学习过程停止。
1、初始化权重
网络的权重初始化为很小的随机数(例如,由-1.0~1.0,或由-0.5~0.5)。每个单元有一个与之关联的偏倚(Bias),偏倚也类似的初始化为小随机数。
每个训练元组X按以下步骤处理:
2、向前传播输入
首先,训练元组提供给网络的输入层。输入通过输入单元,不发生变化,也就是说,对于输入单元j,它的输出Oj等于它的输入值Ij。然后计算隐藏层和输出层每个单元的净输入和输出。隐藏层或输出层的净输入用其输入的线性组合计算。
一个隐藏或输出单元j:单元j的输入是来自于上一层的输出。这些与对应的权重相乘,形成加权和。加权和再加到与单元j相关联的偏倚上。单元j的净输入:
其中,是由上一层的单元i到单元j的连接的权重;
是上一层单元i的输出;而
是单元j的偏倚。偏倚充当阈值,用来改变单元的活性。
隐藏层和输出层的每个单元取其净输入,然后将激励函数作用于它,如上图所示。该函数用符号表现单元代表的神经元活性。使用Logistic或S形(Sigmoid)函数。给定单元j的净输入,则单元j的输入
用下式计算:
该函数又称挤压函数(Squashing Function),因为它将一个较大的输入值映射到较小的区间0~1。Logistic函数是非线性的和可微的,使得后向传播算法可以对非线性可分的分类问题建模。
对于每个隐藏层,计算其输出值,直到最后一个隐藏层,给出网络预测。实践中,由于在向后传播误差时还需要这些中间输出值,因此将每个单元的中间输出值存放起来是一个好办法,这种技巧可以显著的降低所需的计算量。
3、向后传播误差
通过更新权重和反映网络预测误差的偏倚,向后传播误差。对于输出层单元j,误差用下式计算:
其中是单元j的实际输出,而
是j基于给定训练元组的已知目标值。注意,
是Logistic函数的导数。
为计算隐藏层单元j的误差,考虑到下一层中链接到j的单元的误差加权和。隐藏层单元j的误差是:
其中,是由下一较高层中单元k到单元j的连接权重,而
是单元k的误差。
更新权重和偏倚,以反映传播误差,权重由下式更新,其中,是权重
的改变:
上面公式中的变量l是学习率,通常取0.0~1.0之间的常数值。后向传播学习使用梯度下降法搜索权重的集合。这些权重拟合训练数据,使网络类预测与元组的已知目标值之间的均方距最小。学习率帮助避免陷入决策空间的局部极小(即权重看上去收敛但不是最优解),并有助于找到全局最小。如果学习率太小,学习将进行的很慢,如果学习率太大,则可能出现在不适当的解之间摆动。一个经验的法则是将学习率设置为1/t,t是当前训练集迭代的次数。
注意,这里我们每处理一个元组就更新权重和偏倚,这称作实例更新(Case Update),权重和偏倚的增量也可以累计到变量中,可以在处理完训练集中的所有元组之后再进行权重和偏倚的更新,这种策略称之为周期更新(Epoch Update),扫描训练集的一次迭代是一个周期。理论上,后向传播的数学推导使用周期更新,而实践中实例更新更为常见,因为它通常产生更准确的结果。
终止条件:
如果发生以下情况,则停止进行训练:
前一周期误分类的元组百分比小于某个阈值,或
超过预先指定的周期数。
实践中,权重收敛可能需要数十万个周期。后向传播的计算效率依赖于训练网络所用的时间。给定|D|个元组和w 个权重,则每个周期需要O(|D|*w) 时间。然而,在最坏情况下,周期数可能是输入数n的指数。在实践中,网络收敛所需要的时间是非常不确定的。有一些加快训练速度的技术,例如,可以使用一种称作模拟退火的技术,它还能确保收敛到全局最优。