3.1.1.3 神经网络

神经网络

原理

《机器学习》周志华

5.1 神经元模型
  • 神经网络中最0基本的成分是神经元(neuron)模型。
  • M-P神经元模型:神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。
  • Sigmoid函数常作为激活函数。Sigmoid函数把可能在较大范围内变化的输入值挤压到(0, 1)输出范围内,因此有时也称为“挤压函数”(squashing function)。
5.2 感知机与多层网络
  • 感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。感知机能容易地实现逻辑与,或,非运算。
  • 更一般地,给定训练集,权重wi (i=1,2,...,n) 以及阈值 θ 可以通过学习得到。阈值 θ 可看作一个固定输入为-1.0的“哑结点”( dummy node) 所对应的连接权重 wn+1,这样,权重和阈值的学习就可以统一为权重的学习。
  • 感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限。事实上,上述与、或、非问题都是线性可分(lineary separable)的问题。可以证明,落两类模式是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛(converge)而求得适当的权向量 w = (w1, w2, ... , wn);否则感知机学习过程将会发生振荡(fluctuation),w难以稳定下来,不能求得合适解,例如感知机不能解决异或这样简单的非线性可分问题。
  • 要解决非线性可分问题,需考虑使用多层功能神经元,简单的两层感知机就能解决异或问题。
  • 输入层与输出层之间的一层神经元,被称为隐层或隐含层(hidden layer)。隐含层和输出层都是拥有激活函数的功能神经元。
  • 每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feed forward neural networks),其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。
  • 神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight) 以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中。
5.3 误差逆传播算法
  • 多层网络的学习能力比单层感知机强得多。欲训练多层网络,简单感知机学习规则是显然不够了,需要更强大的学习算法,误差逆传播(error BackPropagation, BP)算法就是其中最杰出的代表,它是迄今为止最成功的神经网络学习算法。现实任务中使用神经网络时,大多是在使用BP算法进行训练。值得指出的是,BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,例如训练递归神经网络。但通常说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络。
  • BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为 v <- v + △v
  • BP算法基于梯度下降(guadient descent)策略,以目标的负梯度方向对参数进行调整。
  • 学习率 η ∈ (0, 1) 控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢。有时为了做精细调整,不同层之间的学习率不同。
  • 需要注意的是,BP算法的目标是要最小化训练集D上的累积误差。但我们上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权和阈值,也就是说,更新规则是基于单个的Ek推导而得。如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法。累积BP算法与标准BP算法都很常用。 一般来说,标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而对不同样例进行更新的效果可能出现“抵消”现象。因此为了达到同样的累积误差极小点,标准BP算法往往需要进行更多次数的迭代。累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多。但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快地获得较好的解,尤其是在训练集D非常大时更明显。
  • Hornik et al., (1989) 证明,只需要一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。然而,如何设置隐层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”(trial-by-error)调整。
  • 正是由于其强大的表示能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合。
    • 第一种策略是“早停”(early stopping):将数据分为训练集和验证集,训练集用来计算梯度,更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
    • 第二种策略是“正则化”(regularization)。其基本思想是在误差目标函数中增加一个用于描述复杂度的部分,例如连接权与阈值的平方和。增加连接权与阈值的平方和这一项后,训练过程将会偏好比较小的连接权和阈值,使网络输出更为“光滑”,从而对过拟合有所缓解。
5.4 全局最小与局部最小
  • 基于梯度的搜索是使用最为广泛的参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。例如,由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为零,则已达到局部极小,更新量将为零,这意味着参数的迭代更新将在此停止。显然,如果误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小;然而如果误差函数具有多个局部极小,则不能保证找到的解是全局最小,对于后一种情形,我们称参数寻优陷入了局部极小,这显然不是我们所希望的。

  • 在现实任务中,人们常采用以下策略试图“跳出”局部极小,从而进一步接近全局最小:

    • 以多组不同参数初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部最小。从中进行选择有可能获得更接近全局最小的结果。
    • 使用“模拟退火”(simulated annealing)技术,模拟退火在每一步都以一定的概率接受比当前更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
    • 使用随机梯度下降,与标准梯度下降法精确计算梯度不同。随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。
    • 此外,遗传算法(genetic algorithms)[Goldberg, 1989] 也常用来训练神经网络以更好地逼近全局最小,需注意的是,上述用于跳出局部极小的技术大多是启发式,理论上缺乏保障。
5.5 其他常见神经网络
5.5.1 RBF网络
  • RBF(Radial Basis Function, 径向基函数) 网络 (Broomhead and Lowe, 1988) 是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。
  • 通常采用两步过程来训练RBF网络:第一步,确定神经元中心 ci,常用的方式包括随机采用,聚类等; 第二步,利用BP算法来确定参数 wi 和 βi。
5.5.2 ART网络
  • 竞争型学习(competitive learning) 是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制,这种抑制亦称“胜者通吃”(winner-take-all)原则。
  • ART(Adaptive Resonance Theory, 自适应谐振理论)网络 (Carpenter and Grossberg, 1987) 是竞争型学习的重要代表。该网络由比较层、识别层、识别阈值和重置模块构成。其中,比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。
  • 在接收到比较层的输入信号后,识别层神经元之间的相互竞争以产生获胜神经元。竞争最简单方式是,计算输入向量与每个识别神经元所对应的模式类的代表向量之间的距离,距离最小者获胜。获胜神经元向其他识别层神经元发出传送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权将会更新,使得以后再接收到相似输入样本时,该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。
  • 显然,识别阈值对ART网络的性能有重要影响。当识别阈值较高时,输入样本将会被分成比较多,比较精细的模式类,而如果识别阈值较低,则会产生比较少,比较粗略的模式类。
  • ART比较好地缓解了竞争学习中的“可塑性-稳定性窘境”(stability-plasticity dilemma)。可塑性是指神经网络要有学习新知识的能力,而稳定性则是指神经网络在学习新知识时要保持对旧知识的记忆。这就使得ART网络具有一个很重要的优点:可进行增量学习(incremental learning)或在线学习(online learning)。增量学习是指在学得模型后,再接收到训练样例时,仅需根据新样例对模型进行更新,不必重新训练整个模型,并且先前学得的有效信息不会被“冲掉”。在线学习是指每获得一个新样本就进行一次模型更新。显然,在线学习是增量学习的特例,而增量学习可视为“批模式”(batch-mode)的在线学习。
5.5.3 SOM网络
  • SOM(Self-Organizaing Map, 自组织映射)网络 (Kohonen, 1982) 是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的临近神经元。
  • SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输入层神经元找到合适的权向量,以达到保持拓扑结构的目的。
  • SOM的训练过程很简单:在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离最近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit)。然后,最佳匹配单元及其邻近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离最小,这个过程不断迭代,直至收敛。
5.5.4 级联相关网络
  • 一般的神经网络模型通常假设网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数。与此同时,结构自适应网络则将网络结构也当做学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构,级联相关(Cascade-Correlation)网络 (Fahlman and Lebiere, 1990) 是结构自适应网络的重要代表。结构自适应网络亦称“构造性”(constructive)神经网络。
  • 级联相关网络有两个主要成分:“级联”和“相关”。级联是指建立层次连接的层级结构。在开始训练时,网络只有输入层和输出层,处于最小拓扑结构;随着训练的进行,新的隐层神经元逐渐加入,从而创建起层级结构。当新的隐层神经元加入时,其输入端连接权值是冻结固定的。相关是指通过最大化新神经元的输出与网络之间的相关性(correlation)来训练相关的参数。
  • 与一般的前馈神经网络相比,级联相关网络无需设置网络成熟,隐层神经元数目,且训练速度较快,但其在数据较小时易陷入过拟合。
5.5.5 Elman网络(RNN)
  • 与前馈神经网络不通,“递归神经网络”(recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构与信息反馈过程,使得网络在 t 时刻的输出状态,不仅与 t 时刻的输入有关,还与 t-1 时刻的网络状态有关,从而能处理与时间有关的动态变化。
  • Elman网络 (Dlman, 1990) 是最常用的递归神经网络之一。它的结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起作为隐层神经元在下一时刻的输入。隐层神经元通常采用Sigmoid激活函数,而网络的训练则通过推广BP算法进行。
5.5.6 Boltzmann机
  • 神经网络中有一类模型是为网络状态定义一个“能量”(energy),能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。Boltzmann机就是一种“基于能量的模型”(energy-based model),其神经元分为两层,显层和隐层。显层用于展示数据的输入与输出,隐层则被理解为数据的内在表达。
5.6 深度学习
  • 典型的深度学习模型就是很深层的神经网络。然而,多隐层神经网络难以直接用经典算法(例如BP算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”(diverge)而不能收敛到稳定状态。
    • 无监督逐层学习训练(unsupervised layer-wise training)是多隐层网络训练的有效手段,其基本思想是每次训练一层隐结点。训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为“预训练”(pre-training);在预训练全部完成后,再对整个网络进行“微调”(fine-tuning)训练。事实上,“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部看来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优。这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。
    • 另一种节省训练开销的策略是“权共享”(weight sharing),即让一组神经元使用相同的连接权。这个策略在卷积神经网络(Convolutional Neural Network, CNN)中发挥了重要的作用。
  • 我们可以通过另一个角度来理解深度学习。无论是DBN(深度信念网络)还是CNN,其多隐层堆叠,每层对上一层的输出进行处理的机制,可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。换言之,通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务。由此,可将深度学习理解为进行“特征学习”(feature learning)或“表示学习”(representation learning)。
  • 以往的机器学习用于现实任务时,描述样本的特征通常需要由人类专家来设计,这称为“特征工程”(feature engineering)。众所周知,特征的好坏对泛化性能有至关重要的影响,人类专家设计出好特征也并非易事;特征学习则通过机器学习技术自身来产生好特征,这使机器学习向“全自动数据分析”又前进了一步。

Hello World

学术

工程

你可能感兴趣的:(3.1.1.3 神经网络)