神经网络目前使用得最广泛的一种定义:神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
神经网络中最基本的成分是神经元(neuron)模型。1943年,将生物神经网络中的神经元情形抽象为图5.1所示的简单模型,这就是一直沿用至今的“M-P神经元模型”。
在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阙值进行比较,然后通过“激活函数”处理以产生神经元的输出。
理想中的激活函数是图5.2(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。
然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用 Sigmoid函数作为激活函数。典型的Sigmoid 函数如图5.2(b)所示,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”(squashing function)。
感知机(Perceptron)由两层神经元组成,如图5.3所示,输入层接收外界输入信号后传递给输出层,输出层是MP神经元,亦称“阙值逻辑单元”(threshold logic unit)。感知机能容易地实现逻辑与、或、非运算。
给定训练数据集,权重 wi(i=1,2,…,) 和 阈值 θ 可通过学习得到。
对阈值 θ 的学习:可看作一个固定输入为 -1.0 的“哑结点”(dummy node) 所对应的连接权重 wn+1,这样,权重和阈值的学习就可统一为权重的学习。
感知机学习规则非常简单,对训练样例 (x,y),若当前感知机的输出为y’,则感知机权重将这样调整:
其中 η∈(0,1) 称为 学习率(learning rate)。若感知机对训练样例 (x,y) 预测正确,即 y’=y,则感知机不发生变化,否则将根据错误的程度进行权重调整。
可以证明,如果两类模式是线性可分的,即存在一个线性超平面能将它们分开,如图5.4(a)-© 所示,则感知机的学习过程一定会收敛(converge) 而求得适当的权向量 w;否则感知机学习过程将会发生振荡(fuctuation), w 不能求得合适解,例如感知机甚至不能解决如图 5.4(d) 所示的异或这样简单的非线性可分问题。
只拥有一层功能神经元(functional neuron),其学习能力非常有限。要解决 非线性可分问题,需考虑使用多层功能神经元。
例如图5.5中这个简单的两层感知机就能解决异或问题。在图 5.5(a)中,输出层与输入层之间的一层神经元,被称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
常见的神经网络是形如图5.6所示的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为 “多层前馈神经网络”(multi-layer feedforward neural networks)。
输入层神经元 仅是接受输入,不进行函数处理;
隐层与输出层神经元 对信号进行加工,包含功能神经元;
由输出层神经元 负责最终结果输出。
只需包含隐层,即可称为多层网络。
图5.6(a)通常被称为“两层网络”,或“单隐层网络”。
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值。
误差逆传播(errorBackPropagation,简称BP)算法是迄今最成功的神经网络学习算法。BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,例如训练递归神经网络 [Pineda, 1987]。但通常说“BP网络”时,一般是指 用BP算法训练的多层前馈神经网络。
给定训练集D = { (x1,y1),(x2,y2),…, (xm,ym) }, xi∈Rd, yi∈Rl,即输入示例由d个属性描述,输出l维实值向量。
图5.7给出了一个拥有 d 个输入神经元、l 个输出神经元、q 个隐层神经元的多层前馈网络结构。其中输出层第 j 个神经元的阈值用的 θj 表示,隐层第 h 个神经元的阈值用个γh表示。输入层第 i 个神经元与隐层第 h 个神经元之间的连接权为 vih,隐层第 h 个神经元与输出层第 j 个神经元之间的连接权为whj。
记隐层第h个神经元接收到的输入为 αh= ∑di=1vihxi,输出层第j个神经元接收到的输入为βi=∑qh=1whibh,其中bh为隐层第h个神经元的输出。假设隐层和输出层神经元都使用图5.2(b)中的 Sigmoid 函数。
BP算法基于 梯度下降策略(gradient descent) ,以目标的负梯度方向对参数进行调整。
对训练例 (xk, yk),假定神经网络的输出为 yk=(y1k,y2k,…,ylk) 即
则网络在(xk,yk) 上的均方误差为
对式(5.4)的误差Ek,给定学习率 η 有
注意到 whj 先影响到第 j 个输出层神经元的输入值 βj,再影响到其输出值然后影响到 Ek,有
根据 βj 的定义,显然有:
图5.2中的 Sigmoid 函数有一个很好的性质:
于是根据式(5.4)和(5.3),有:
将式(5.10)和(5.8)代入式(5.7),再代入式(5.6),就得到了BP算法中关于 whj 的更新公式:
类似可得:
式(5.13)和(5.14)中的 eh 为
学习率 η∈(0,1) 控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢。
图5.8给出了BP算法的工作流程。
信号的正向传播: 对每个训练样例,先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果。
误差的反向传播: 然后计算输出层的误差(第4-5行),再将误差逆向传播至隐层神经元(第6行),最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行)。
该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已达到一个很小的值。
BP算法的目标是要最小化训练集D上的累积误差
标准BP算法: 每次仅针对一个训练样例更新连接权和阙值,即在图5.8中算法中的 更新规则 是基于单个的 Ek 推导而得。
累积BP算法: 类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法。
对比:
1、标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。因此,为了达到同样的累积误差极小点,标准BP算法往往需进行更多次数的迭代。
2、累积 BP 算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多。但在很多任务中,累积误差下降到一定程度之后,下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显。
一个包含足够多神经元的隐层,可以使多层前馈网络以任意精度逼近任意复杂度的连续函数。然而,如何设置隐层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”(trial-by-error)调整。
正是由于其强大的表示能力,BP 神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合:
1、“早停”(early stopping): 将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阙值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
2、“正则化”(regularization): 在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。仍令 Ek 表示第 k 个训练样例上的误差,wi 表示连接权和阈值,则误差目标函数改变为
其中 λ∈(0,1) 用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。
神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得在训练集上的误差最小。
我们常会谈到两种“最优”:
局部极小(local minimum):局部极小解是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值。
全局最小(global minimum):全局最小解则是指参数空间中所有点的误差函数值均不小于该点的误差函数值。
显然,参数空间内梯度为零的点,只要其误差函数值小于邻点的误差函数值,就是局部极小点;可能存在多个局部极小值,但却只会有一个全局最小值。也就是说,“全局最小”一定是“局部极小”,反之则不成立。
例如,图5.10中有两个局部极小,但只有其中之一是全局最小。显然,我们在参数寻优过程中是希望找到全局最小。
基于梯度的搜索是使用最为广泛的参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。例如,由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。
若误差函数在当前点的梯度为零,则已达到局部极小,意味着参数的迭代更新将在此停止。如果误差函数具有多个局部极小,则不能保证找到的解是全局最小,我们的参数寻优容易陷入局部极小。
在现实任务中,人们常采用以下策略来试图“跳出”局部极小,从而进一步接近全局最小:
1、选取多个起始点
以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。
2、模拟退火法(simulated annealing)
模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
3、随机梯度下降
与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。
此外,遗传算法(genetic algorithms) 也常用来训练神经网络以更好地逼近全局最小。需注意的是,上述用于跳出局部极小的技术大多是启发式,理论上尚乏保障。
RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。假定输入为d维向量.,输出为实值,则RBF网络可表示为
其中 q 为隐层神经元个数,ci 和 wi 分别是第 i 个隐层神经元所对应的中心和权重,p(x,ci) 是径向基函数,这是某种沿径向对称的标量函数,通常定义为样本 x 到数据中心 ci 之间欧氏距离的单调函数。常用的高斯径向基函数形如
具有足够多隐层神经元的RBF网络能以任意精度逼近任意连续函数。
RBF网络训练过程:
第一步,确定神经元中心c,常用的方式包括随机采样、聚类等;
第二步,利用BP算法等来确定参数w和β。
竞争型学习(competitive learning)是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。这种机制亦称“胜者通吃”(winner-take-all)原则。
ART(Adaptive Resonance Theory,自适应谐振理论)网络由比较层、识别层、识别阈值和重置模块构成。
比较层:负责接收输入样本,并将其传递给识别层神经元。
识别层:每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。
在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元。获胜神经元将向其他识别层神经元发送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。
识别阈值对ART网络的性能有重要影响。当识别阙值较高时,输入样本将会被分成比较多、比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。
ART比较好地缓解了竞争型学习中的“可塑性-稳定性窘境”(stability-plasticity dilemma),使得ART网络具有一个很重要的优点:可进行增量学习(incremental learning)或在线学习(onlinelearning)。
可塑性:指神经网络要有学习新知识的能力。
稳定性:指神经网络在学习新知识时要保持对旧知识的记忆。
SOM(Self-Organizing Map,自组织映射)网络 [Kohonen, 1982]是一种竞争学习型的无监督神经网络。它能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。
SOM 网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量。SOM 的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。
SOM的训练过程:在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离最近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit)。然后,最佳匹配单元及其邻近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小。这个过程不断迭代,直至收敛。
Boltzmann 机就是一种“基于能量的模型”(energy-basedmodel),该模型是为网络状态定义一个“能量”(energy),能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。
常见结构如图5.14(a)所示,其神经元分为两层:显层与隐层。显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达。
Boltzmann 机中的神经元都是布尔型的,即只能取0、1两种状态,状态1表示激活,状态0表示抑制。
Boltzmann 机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大。标准的 Boltzmann 机是一个全连接图,训练网络的复杂度很高,这使其难以用于解决现实任务。现实中常采用受限Boltzmann机(Restricted Boltzmann Machine,简称RBM)。如图5.14(b)所示,受限Boltz-mann机仅保留显层与隐层之间的连接,从而将Boltzmann机结构由完全图简化为二部图。
受限Boltzmann 机常用“对比散度”(Contrastive Divergence,简称CD)算法来进行训练。假定网络中有d个显层神经元和q个隐层神经元,令 v 和 h 分别表示显层与隐层的状态向量,则由于同一层内不存在连接,有
CD算法对每个训练样本v,先计算出隐层神经元状态的概率分布,然后根据这个概率分布采样得到h;此后,类似地从 h 产生v′,再从v’产生h’;连接权的更新公式为
背景:一般情形下,复杂模型能完成复杂的学习任务,但训练效率低,易陷入过拟合。而随着云计算、大数据时代的到来,计算能力的大幅提高可缓解训练低效性,训练数据的大幅增加则可降低过拟合风险,因此,以“深度学习”(deep learning)为代表的复杂模型开始受到人们的关注。
典型的深度学习模型就是很深层的神经网络,一个简单想法是增加隐层的数目。
问题:多隐层神经网络难以直接用经典算法(例如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往不能收敛到稳定状态。
无监督逐层训练(unsupervised layer-wise training)是多隐层网络训练的有效手段。其基本思想是每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为“预训练”(pre-training)。在预训练全部完成后,再对整个网络进行“微调”(fine-tuning)训练。
“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部看来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优,有效地节省了训练开销。
另一种节省训练开销的策略是“权共享”(weight sharing),即让一组神经元使用相同的连接权。这个策略在卷积神经网络(Convolutional NeuralNetwork,简称CNN) 中发挥了重要作用。
以 CNN进行手写数字识别任务为例,如图5.15。网络输入是一个32×32的手写数字图像,输出是其识别结果。CNN复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现与输出目标之间的映射。
每个卷积层都包含多个特征映射(feature map),每个特征映射是一个由多个神经元构成的“平面”,通过一种卷积滤波器提取输入的一种特征。
例如,图5.15中第一个卷积层由6个特征映射构成,每个特征映射是一个28x28的神经元阵列,其中每个神经元负责从 5x5的区域通过卷积滤波器提取局部特征,采样层亦称为“汇合”(pooling)层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。
通过复合卷积层和采样层,图5.15中的CNN将原始图像映射成120维特征向量,最后通过一个由84个神经元构成的连接层和输出层连接完成识别任务。
CNN可用BP算法进行训练,但在训练中,无论是卷积层还是采样层,其每一组神经元(即图5.15中的每个“平面”)都是用相同的连接权,从而大幅减少了需要训练的参数数目。
无论是 DBN还是CNN,其多隐层堆叠、每层对上一层的输出进行处理的机制,可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能,换言之,通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务.由此可将深度学习理解为进行“特征学习”(feature learning)或“表示学习”(representation learning)。