Note of Machine Learning 5

第5章 神经网络

5.1 神经元模型

神经网络(neural networks)是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。

神经网络中最基本的成分是神经元(neuron)模型。如果某神经元的电位超过了一个”阈值”(threshold),那么它就会被激活。上述情形可以抽象为图5.1所示的简单模型,即”M-P神经元模型”。在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过”激活函数”(activation function)处理以产生神经元的输出。

理想的激活函数是图5.2(a)所示的阶跃函数,将输入值映射为输出值”0”(神经元抑制)或”1”(神经元兴奋)。然而碍于其性质,实际常用如图5.2(b)的Sigmoid函数作为激活函数也称为”挤压函数”(squashing function)。

事实上,可以将一个神经网络视为包含了许多参数的数学模型,这个模型是若干个函数,例如$y_i=f(\sum_iw_ix_i-\theta_j)$相互(嵌套)代入而得。

5.2 感知机与多层网络

感知机(Perceptron)由两层神经元组成,如图5.3所示。输入层接受外界输入信号后传递给输出层,输出层是M-P神经元,亦称”阈值逻辑单元”(threshold logic unit)。感知机能容易地实现逻辑与、或、非运算。

一般地,给定训练数据集,权重$wi(i=1,2,\dots,n)$以及阈值$\theta$可通过学习得到。阈值$\theta$可看作一个固定输入为-1.0的”哑结点”(dummy node)所对应的权重$w{n+1}$,这样权重和阈值的学习就可统一为权重的学习。感知机学习规则非常简单,对训练样例$(x,y)$,若当前感知机的输出为$\hat y$,则感知机的权重将这样调整:

其中$\eta\in(0,1)$称为学习率(learning rate)。从式(5.1)可看出,若感知机对训练样例$(x,y)$预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整。

感知机只拥有一层功能神经元(functional neuron),学习能力非常有限。事实上,上述与、或、非问题都是线性可分(linearly separable)的问题,可以证明若两类模式是线性可分的,即存在一个线性超平面将其分开,如图5.4(a)-(c),则感知机的学习过程一定会收敛(converge)而求得适当的权向量$w=(w1;w_2;\dots;w{n+1})$;否则感知机学习过程会发生振荡(fluctuation),w难以稳定。例如感知机不能解决图5.4(d)的亦或问题。

要解决非线性可分问题,考虑使用多层功能神经元,如图5.5(a),输入层与输出层之间的一层神经元被称为隐层或隐含层(hidden layer),隐含层和输出层都是拥有激活函数的功能神经元。

更一般的神经网络是如图5.6所示的层级结构,通常称为”多层前馈神经网络”(multi-layer feedforward neural networks),输入层接受外界输入,隐层与输出层对信号加工,结果由输出层输出。神经网络的学习过程,就是根据训练数据来调整神经元之间的”连接权”(connection weight)以及每个功能神经元的阈值。

5.3 误差逆传播算法

简单感知机学习规则不够训练多层网络。误差逆传播(error BackPropagation,简称BP)是迄今最成功的神经网络算法。

给定训练集$D={(x1,y_1),(x_2,y_2),\dots,(x_m,y_m)},x_i\in\mathbb{R}^d,y_i\in\mathbb{R}^l$,即输入示例由d个属性描述,输出l维实值向量。图5.7为拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,$\theta_j$为输出层第j个神经元的阈值,$\gamma_h$为隐层第h个神经元的阈值。$v{ih}$为输入层第i个神经元与隐层第h个神经元的连接权,$w{hj}$为隐层第h个神经元与输出层第j个神经元的连接权。记隐层第h个神经元接收到的输入为$\alpha_h=\sum{i=1}^dv{ih}x_i$,输出层第j个神经元接收到的输入为$\beta_j=\sum{h=1}^qw_{hj}b_h$,其中$b_h$为隐层第h个神经元的输出。假设隐层和输出层神经元都使用Sigmoid函数。

对训练例$(x_k,y_k)$,假定神经网络的输出为$\hat{y}_k=(\hat{y}_1^k,\hat{y}_2^k,\dots,\hat{y}_l^k)$,即

则网络在$(x_k,y_k)$上的均方误差为

BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为

以图5.7中隐层到输出层的连接权$w_{hj}$为例进行推导。BP基于梯度下降(gradient descent)策略。对式(5.4)的误差$E_k$,给定学习率$\eta$,有

注意到$w_{hj}$先影响到第j个输出层神经元的输入值$\beta_j$,再影响到其输出值$\hat{y}_j^k$,然后影响到$E_k$,有

根据$\beta_j$的定义,显然有

图5.2中的Sigmoid函数有一个很好的性质:

于是根据式(5.4)和(5.3),有

将式(5.10)和(5.8)代入式(5.7),再代入式(5.6),就得到了BP算法中关于$w_{hj}$的更新公式

类似可得

式(5.13)和式(5.14)中

学习率$\eta\in(0,1)$控制算法每一轮迭代中的更新步长,太大容易振荡,太小收敛速度过慢。可令式(5.11)与(5.12)使用$\eta_1$,式(5.13)与(5.14)使用$\eta_2$来进行精细调节,两者未必相等。

图5.8为BP算法的工作流程,图5.9给出了在2个属性、5个样本的西瓜数据上,随着训练轮数的增加,网络参数和分类边界的变化情况。需注意的是,BP算法的目标是要最小化训练集D上的累积误差

上述”标准BP算法”每次仅针对一个训练样例更新连接权和阈值,如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法。累积BP算法直接针对累积误差最小化,在读取整个训练集D后才对参数进行更新,参数更新的频率低得多。标准BP算法和累积BP算法的区别类似于随机梯度下降(stochastic gradient descent,SGD)与标准梯度下降之间的区别。

只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。如何设置隐层神经元的个数通常靠”试错法”(trial-by-error)调整。

BP神经网络经常遭遇过拟合,有两种解决办法。第一种策略是”早停”(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低而验证集误差升高则停止训练,同时返回具有最小验证集误差的连接权和阈值。第二种策略是”正则化”(regularization):在误差目标函数中增加一个用于描述网络复杂度的部分,仍令$E_k$表示第k个训练样例上的误差,$w_i$表示连接权和阈值,则误差目标函数(5.16)变为

其中$\lambda\in(0,1)$用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

5.4 全局最小与局部极小

神经网络的训练过程可看作在参数空间中寻找一组最优参数使E最小。有两种”最优”:”局部极小”(local minimum)和”全局最小”(global minimum)。局部极小不一定是全局最小,全局最小一定是局部极小。如果误差函数有多个局部极小,则不能保证找到的是全局最小。如图5.10。

有以下策略来跳出局部极小进一步接近全局最小:

  • 以多组不同参数值初始化多个神经网络,取其中误差最小的解作为最终参数。
  • “模拟退火”(simulated annealing),在每一步都以一定的概率接受比当前解更差的结果,从而有助于跳出局部极小。每步迭代过程中,接受次优解的概率要随时间推移而逐渐降低,从而保证算法稳定。
  • 随机梯度下降。计算梯度时随机选择样本的子集,即使陷入局部极小,梯度也可能不为零。

此外,遗传算法(genetic algorithms)也常用来训练神经网络以更好地逼近全局最小。

5.5 其他常见神经网络

神经网络模型、算法繁多,以下为几种常见网络。

5.5.1 RBF网络

RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合。假定输入为d维向量x,输出为实值,则RBF网络可表示为

q为隐层神经元个数,$c_i$和$w_i$分别是第i个隐层神经元所对应的中心和权重,$\rho(x,c_i)$是径向基函数,这是某种沿径向对称的标量函数,通常定义为样本x到数据中心$c_i$之间欧式距离的单调函数。常用的高斯径向基函数形如

具有足够多隐层神经元的RBF网络能以任意精度逼近任意连续函数。通常采用两步过程来训练RBF网络:第一步,确定神经元中心$c_i$,常用的方式包括随机采样、聚类等;第二步,利用BP算法等来确定参数$w_i$和$\beta_i​$。

5.5.2 ART网络

竞争型学习(competitive learning)是神经网络一种常用无监督学习策略,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活。这种机制亦称”胜者通吃”(winner-take-all)原则。

ART(Adaptive Resonance Theory,自适应谐振理论)网络是竞争性学习的重要代表。由比较层、识别层、识别阈值和重置模块构成。比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

在接收到比较层的输入信号后,识别层神经元相互竞争:计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,最小者胜。获胜神经元发送信号抑制其他识别层神经元激活。若输入向量与获胜神经元所对应的代表向量的相似度大于识别阈值,则当前输入样本被归为该代表向量所属类别,同时更新网络连接权,使该获胜神经元在以后有相似输入样本时更容易获胜;否则,重置模块将在识别层增设一个新的神经元,其代表向量设置为当前输入向量。当识别阈值高时,输入样本被分成比较多、比较精细的模式类,阈值低则反之。

ART缓解了竞争型学习中的”可塑性-稳定性窘境”(stability-plasticity dilemma),可塑性指神经网络有学习新知识的能力,稳定性指神经网络在学习新知识时保持对旧知识的记忆。这使得ART网络具有一个很重要的优点:可进行增量学习(incremental learning)或在线学习(online learning)。增量学习指学得模型后,再接受样例时仅需根据新样例对模型进行更新,不必重新训练,先前学得的有效信息不会被冲掉;在线学习是每获得一个新样本就进行一次模型更新,是增量学习的特例。增量学习可视为”批模式”(batch-mode)的在线学习。

5.5.3 SOM网络

SOM(Self-Organizing Map,自组织映射,Self-Organizing Feature Map,自组织特征映射,Kohonen网络)网络是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。

如图5.11,SOM中输出层神经元以矩阵方式排列在二维空间。其训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。

SOM训练过程:接收到一个训练样本后,每个输出层神经元计算该样本与自身携带的全向量之间的距离,距离最近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit)。然后最佳匹配单元及其近邻神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小。过程迭代到收敛。

5.5.4 级联相关网络

一般的神经网络模型通常假定网络结构固定,而结构自适应网络,亦称”构造性”(constructive)神经网络,则将网络结构也当作学习的目标,在训练过程中找到最符合数据特点的网络结构。级联相关(Cascade-Correlation)网络是其重要代表(ART也是一种)。

级联相关网络有两个主要成分:”级联”和”相关”。级联是建立层次连接的层级结构。开始训练时,网络只有输入层和输出层,处于最小拓扑结构;随着训练进行,如图5.12,新的隐层神经元逐渐加入,从而创建起层级结构。当新的隐层神经元加入时,其输入端连接权值是冻结固定的。相关是指通过最大化新神经元的输出与网络误差之间的相关性(correlation)来训练相关的参数。

级联相关网络训练速度快,但数据较小时容易过拟合。

5.5.5 Elman网络

与前馈神经网络不同,”递归神经网络”(recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构与信息反馈过程,使得网络在t时刻的输出状态不仅与t时刻的输入有关,还与t-1时刻的网络状态有关,从而能处理与时间有关的动态变化。

Elman网络是最常用递归神经网络之一,如图5.13。隐层神经元的输出反馈回来作为下一时刻的输入,隐层神经元通常采用Sigmoid函数,训练通过推广的BP算法进行。

5.5.6 Boltzmann机

神经网络中有一类模型是为网络状态定义一个”能量”(energy),能量最小化时达到理想状态,网络的训练就是在最小化这个能量函数。Boltzmann机就是一种”基于能量的模型”(energy-based model),常见结构如图5.14(a),也是一种递归神经网络。其神经元分为显层和隐层。显层用于表示数据的输入和输出,隐层被理解为数据的内在表达。Boltzmann机中神经元都是布尔型的,只能取0、1两种状态,1表示激活,0表示抑制。令向量$s\in{0,1}^n$表示n个神经元的状态,$w_{ij}$表示神经元i与j之间的连接权,$\theta_j$表示神经元i的阈值,则状态向量s所对应的Boltzmann机能量定义为

若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到Boltzmann分布,亦称”平衡态”(equilibrium)或”平衡分布”(stationary distribution),此时状态向量s出现的概率将仅由其能量与所有可能状态向量的能量确定:

Boltzmann机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大。标准的Boltzmann机是一个完全图,复杂度很高。现实中常采用首先Boltzmann机(Restricted Boltzmann Machine,简称BRM),如图5.14(b),仅保留显层与隐层之间的连接,简化为二部图。

受限Boltzmann机常用”对比散度”)(Contrastive Divergence,简称CD)算法训练。假定网络中有d个显层神经元和q个隐层神经元,令v和h分别表示显层与隐层的状态向量,则由于同一层内不存在连接,有

CD算法对每个训练样本,先根据式(5.23)计算出隐层神经元状态的概率分布,然后根据这个概率分布采样得到h;此后,类似地根据式(5.22)从h中产生$v’$,再从$v’$产生$h’$;连接权的更新公式为

5.6 深度学习

理论上,参数越多的模型复杂度越高、”容量”(capacity)越大,能完成更复杂的学习任务。因此以”深度学习”(deep learning)为代表的复杂模型开始受到人们关注。

典型的深度学习模型就是很深层的神经网络。提高容量的一个简单办法就是增加隐层数目,然而多隐层难以直接用经典算法进行训练,因为误差在多隐层内逆传播时往往会”发散”(diverge)而不能收敛到稳定状态。

无监督逐层训练(unsupervised layer-wise training)是多隐层网络训练的有效手段,基本思想是每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,称为”预训练”(pre-training);预训练全部完成后,再对整个网络进行”微调”(finetuning)训练。例如在深度信念网络(deep belief network,简称DBN)中,每层都是一个受限Boltzmann机,即整个网络视为若干个RBM堆叠而得。这种做法可视为将参数大量分组,对每组找到局部较优值,再联合起来进行全局寻优。

另一种节省开销的策略是”权共享”(weight sharing),让一组神经元使用相同的连接权。这个策略在卷积神经网络(Convolutional Neural Network,简称CNN)中发挥重要作用。以CNN手写数字识别任务为例,如图5.15,网络输入是一个$32\times32​$的手写数字图像,输出是识别结果,CNN复合多个”卷积层”和”采样层”对输入信号进行加工,然后在连接层实现与输入目标之间的映射。每个卷积层都包含多个特征映射(feature map),每个特征映射是一个由多个神经元构成的”平面”,通过一种卷积滤波器提取输入的一种特征。采样层亦称为”汇合”层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。

从另一个角度理解,无论DBN还是CNN,都是通过多层处理,逐渐将初始的”低层”特征表示转化为”高层”特征表示后,用”简单模型”即可完成复杂的分类等学习任务。由此可将深度学习理解为进行”特征学习”(feature learning)或”表示学习”(representation learning)。