神经网络

本文节选自周志华老师的机器学习一书。

感知机与多层网络

感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”。
感知机学习规则非常简单,对训练样例(x, y),若当前感知机的输出为 y ^ \widehat{y} y ,则感知机权重将这样调整:
在这里插入图片描述
其中学习率 η \eta η在(0,1)之间,若感知机对样例(x,y)预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整。
感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。
若两类模式是线性可分的,即存在一个线性超平面能将他们分开,则感知机的学习过程一定会收敛;感知机无法解决非线性可分问题。
要解决非线性可分问题,需考虑使用多层功能神经元,也即在输入层和输出层之间加入隐藏神经元。

多层前馈神经网络:每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。输入层接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”,以及每个功能神经元的阈值。
在这里插入图片描述

误差逆传播算法

多层网络的学习能力比单层感知机强的多,欲训练多层网络,简单感知机学习规则显然不够了,需要更强大的学习算法;误差逆传播(BP, error BackPropagation)算法是迄今为止最成功的神经网络学习算法。
给定训练集D={(x1,y1),(x2,y2),…,(xm,ym)},输入实例由d个属性描述,输出 l 维实值向量。
在这里插入图片描述在这里插入图片描述
上面的网络中有(d+l+1)q+l个参数需要去确定:输入层的dq个权值、隐藏到输出层的ql个权值、q个隐层神经元的阈值,l个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为:
v=v+Δv

BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
下图给出了BP算法的工作流程,对每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权值和阈值进行调整;该迭代过程循环进行,直到达到某些停止条件为止。
在这里插入图片描述
注意,BP算法的目标是要最小化训练集D上的累积误差E,但我们上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权重和阈值,也就是说,下图中算法的更新规则是基于单个的 E k E_k Ek推导而得,如果类似地推导出基于累积误差最小化地更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法。
在这里插入图片描述

累积BP算法和标准BP算法都很常用,一般来说,标准BP算法每次更新只针对单个单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。因此,为了达到同样的累积误差极小点,标准BP算法往往需要更多次数的迭代,累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多,但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D比较大时更明显。

Hornik等人证明,只需一个包含足够多神经元的隐藏,多层前馈网络就能以任意精度逼近任意复杂度的连续函数,然而,如何设置隐层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”调整。

正是由于其强大的表示能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合:早停和正则化;

(1)早停:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
(2)正则化:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和,仍令 E k E_k Ek表示第k个训练样例上的误差, w i w_i wi表示连接权和阈值,则误差目标函数改变为:
在这里插入图片描述
其中 λ \lambda λ ∈ \in (0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

全局最小与局部极小

若用 E E E表示神经网络在训练集上的误差,则它显然是关于连接权 ω \omega ω和阈值 θ \theta θ的函数。此时,神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得 E E E最小。

我们常会谈到两种“最优”:“局部极小”(local minimum)和“全局最小”(global minimum)。
ω ∗ \omega^* ω θ ∗ \theta^* θ,若存在 ϵ \epsilon ϵ>0使得:
∀ ( ω ; θ ) ∈ { ( ω ; θ ) ∣ ‖ ( ω ; θ ) − ( ω ∗ ; θ ∗ ) ‖ ≤ ϵ } \forall(\omega;\theta)\in\{(\omega;\theta)|‖(\omega;\theta)-(\omega^*;\theta^*)‖\leq\epsilon\} (ω;θ){(ω;θ)(ω;θ)(ω;θ)ϵ}
都有 E ( ω ; θ ) ≥ E ( ω ∗ , θ ∗ ) E(\omega;\theta)\geq E(\omega^*,\theta^*) E(ω;θ)E(ω,θ),则 ( ω ∗ , θ ∗ ) (\omega^*,\theta^*) (ω,θ)为全局最小解。
直观地看,局部极小解是参数空间中地某个点,其邻域点地误差函数值均不小于该点地函数值;全局最小解则是指参数空间中所有点地误差函数值均不小于该点的误差函数值。
显然,参数空间内梯度为零的点,只要其误差函数值小于邻点的误差函数值,就是局部极小点;可能存在多个局部极小值,但却只会有一个全局最小值,我们希望在参数寻优过程中找到全局最小。
基于梯度的搜索时使用最为广泛的参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数值,每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向,梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为零,则已达到局部极小,更新量将为0,这意味着参数的迭代更新将在此停止。若误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小;然而,若误差函数具有多个局部极小,则不能保证找到的解是全局最小。
在现实任务中,人们常采用以下策略来视图“跳出”局部极小,从而进一步接近全局最小:
(1) 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。
(2) 使用“模拟退火”(simulated annealing)技术,模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
(3) 使用随机梯度下降。与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素,于是,即使陷入局部极小点,它计算出的梯度仍可能不为0,这样就有机会跳出局部极小继续搜索。
此外,遗传算法也常用来训练神经网络以更好地逼近全局最小;

其他常见神经网络

1.RBF神经网络

RBF(Radial Basis Function, 径向基函数)网络是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出地线性组合。
假定输入为d维向量x, 输出为实值,则RBF网络可表示为:
φ ( x ) = ∑ 1 q ω i ρ ( x , c i ) \varphi(x)=\sum_1^q\omega_i\rho(x,c_i) φ(x)=1qωiρ(x,ci)
其中q为隐层神经元个数, c i c_i ci ω i \omega_i ωi分别是第 i i i个隐层神经元所对应地中心和权重, ρ ( x , c i ) \rho(x,c_i) ρ(x,ci)是径向基函数,这是某种沿径向对称的标量函数,通常定义为样本x到数据中心 c i c_i ci之间欧式距离的单调函数,常用的高斯径向基函数形如:
ρ ( x , c i ) = e − β i ∣ x − c i ∣ 2 \rho(x, c_i)=e^{-\beta_i|x-c_i|^2} ρ(x,ci)=eβixci2
通常采用两步过程来训练RBF网络:第一步,确定神经元中心 c i c_i ci,常用的方式包括随机采用、聚类等;第二步,利用BP算法确定参数 w i w_i wi β i \beta_i βi

2. ART网络

竞争型学习(competitive learning)是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制,这种机制亦称“胜者通吃”原则。
ART(Adaptive Resonance Theory,自适应谐振理论)网络是竞争型学习的重要代表,该网络由比较层、识别层、识别阈值和重置模块构成。其中,比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增加新的模式类。
在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元。竞争最简单方式是,计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜;获胜神经元将其向其他识别层神经元发送信号,抑制器激活;若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增加一个新的神经元,其代表向量就设置为当前输入向量。
显然,识别阈值对ART网络的性能有重要影响,当识别阈值较高时,输入样本将会被分成比较多、比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。
ART比较好地缓解了竞争型学习中的“可塑性-稳定性窘境”,可塑性是指神经网络要有学习新知识的能力,而稳定性则是指神经网络在学习新知识时要保持对旧知识的记忆,这就使得ART网络具有一个很重要的优点:可进行增量学习或在线学习。
早期的ART网络只能处理布尔型输入数据,此后ART发展成了一个算法族,包括能处理实值输入的ART2网络、结合模糊处理的FuzzyART网络,以及可进行监督学习的ARTMAP网络等。

3. SOM网络

SOM(Self-Organizing Map, 自组织映射)网络是一种竞争学习型的无监督神经网络,他能将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的近邻神经元。
SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。
在这里插入图片描述
SOM的训练过程很简单:在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离最近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit);然后最佳匹配单元及其邻近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小,这个过程不断迭代,直至收敛。

4. 级联相关网络

一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数;与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构。
级联相关网络是结构自适应网络的重要代表。
在这里插入图片描述
级联相关网络有两个主要成分:“级联”和“相关”。级联是指建立层次连接的层级结构。在开始训练时,网络只有输入层和输入层,处于最小拓扑结构;随着训练的进行,新的隐层神经元逐渐加入,从而创建起层级结构,当新的隐层神经元加入时,其输入端连接权值是冻结固定的,相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。
与一般的前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时易陷入过拟合。

5. Elman网络

与前馈神经网络不同,“递归神经网络”(recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构与信息反馈过程,使得网络在 t 时刻的输出状态不仅与 t 时刻的输入有关,还与 t-1 时刻的网络状态有关,从而能处理与时间有关的动态变化。
Elman网络是最常用的递归神经网路之一,它的结构与多层前馈神经网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。隐层神经元通常采用 s i g m o i d sigmoid sigmoid 激活函数,而网络的训练则常通过推广的BP算法进行。
在这里插入图片描述

6. Boltzmann机

神经网络中有一类模型是为网络状态定义一个“能量”,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。Bolzmann机就是一种“基于能量的模型”(energy-based model),常见结构如下图,其神经元分为两层:显层与隐层。
在这里插入图片描述
显层用于表示数据的输入与输出,隐层则被理解为数据的被宰表达。Bolzmann机中的神经元都是布尔型的,即只能取0,1两种状态,状态1表示激活,状态0表示抑制。令向量 s ∈ ( 0 , 1 ) n s \in {(0,1)}^n s(0,1)n表示 n 个神经元的状态, w i j w_{ij} wij表示神经元 i i i j j j 之间的连接权, θ i \theta_i θi表示神经元 i i i的阈值,则状态向量 s 所对应的Boltmann机能量定义为:
E ( s ) = − ∑ i = 1 n − 1 ∑ j = i + 1 n ω i j s i s j − ∑ i = 1 n θ i s i E(s)=-\sum_{i=1}^{n-1}\sum_{j=i+1}^n\omega_{ij}s_is_j-\sum_{i=1}^n\theta_is_i E(s)=i=1n1j=i+1nωijsisji=1nθisi
若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到Boltzmann分布,此时状态向量 s 出现的概率将仅由其能量与所有可能状态向量的能量确定:
P ( s ) = e − E ( s ) ∑ t e − E ( t ) P(s)=\frac{e^{-E(s)}}{\sum_te^{-E(t)}} P(s)=teE(t)eE(s)
Boltzmann机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大,标准的Boltzmann机是一个权连接图,训练网络的复杂度很高,这使其难以用于解决现实任务,现实中常采用受限Boltxmann机(Restricted Boltzmann Machine,简称RBM),受限Boltzmann机仅保留显层与隐层之间的连接,从而将Boltzmann机结构由完全图简化为二部图。
受限Boltzmann机常用"对比散度"算法来进行训练,假定网络中有 d 个显层神经元和 q 个隐层神经元,令 v v v h h h 分别表示显层与隐层的状态向量,则由于同一层内不存在连接,有:
① P ( v ∣ h ) = ∏ i = 1 d P ( v i ∣ h ) ①P(v|h)=\prod_{i=1}^dP(v_i|h) P(vh)=i=1dP(vih)
② P ( h ∣ v ) = ∏ j = 1 q P ( h j ∣ v ) ②P(h|v)=\prod_{j=1}^qP(h_j|v) P(hv)=j=1qP(hjv)
CD算法对每个训练样本 v v v ,先根据②式计算出隐层神经元状态的概率分布,然后根据这个概率分布采样得到h; 此后,再根据式①,从 h h h 产生 v ′ v' v,再从 v ′ v' v产生 h ′ h' h,连接权的更新公式为:
Δ ω = η ( v h T − v ′ h ′ T ) \Delta\omega=\eta(vh^T-v'h'^T) Δω=η(vhTvhT)

深度学习

理论上来说,参数越多的模型复杂度越高、“容量”越大,这意味着它能完成更复杂的学习任务。但一般情形下,复杂模型的训练效率低,易陷入过拟合,因此难以受到人们青睐,而随着云计算、大数据时代的到来,计算能力的大幅提高可缓解训练低效性,训练数据的大幅增加则可降低过拟合风险,因此以“深度学习”为代表的复杂模型开始受到人们的关注。
典型的深度学习模型就是很深层的神经网络.显然对神经网络模型,提高容量的一个简单办法是增加隐层的数目,隐层多了,相应的神经元连接权、阈值等参数就会更多。模型复杂度也可通过单纯增加隐层神经元的数目来实现,前面我们谈到过,单隐层的多层前馈网络已具有很强大的学习能力;但从增加模型复杂度的角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效,因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而,多隐层神经网络难以直接用经典算法(例如标准BP 算法进行训练,因为误差在多隐层内逆传播时往往会"发散" (diverge)而不能收敛到稳定状态。
无监督逐层训练(unsupervised layer-wise training)是多隐层网络训练的有效手段,其基本思想是每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为"预训练" (pre-training ); 在预训练全部完成后,再对整个网络进行"微调" (finetuning)训练.例如,在深度信念网络(deep belief network,简称DBN),每层都是一个受限Boltzmann 机,即整个网络可视为若干个RBM 堆叠而得。在使用无监督逐层训练时,首先训练第一层,这是关于训练样本的RBM模型,可按标准的RBM 训练;然后,将第一层预训练好的隐结点视为第二层的输入结点,对第二层进行预训练,。。。各层预训练完成后,再利用BP
算法等对整个网络进行训练。
事实上,“预训练+微调"的做法可视为将大量参数分组,对每组先找到局部看来比较好的设置,然后再基于这些局部较优的结果联合起来远行全局寻优。这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。
另一种节省训练开销的策略是"权共享” (weight sharing),即让一组神经元使用相同的连接权。这个策略在卷积神经网络中发挥了重要作用。以CNN进行手写数字识别任务为例,如下图:
在这里插入图片描述网络的输入是一个 32 ∗ 32 32*32 3232的手写数字图像,输出是其识别结果,CNN复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现与输出目标之间的映射。每个卷积层都包含多个特征映射,每个特征映射是一个由多个神经元构成的“平面”,通过一种卷积过滤器提取输入的一种特征。
如上图,第一个卷积层由6个特征映射构成,每个特征映射是一个 28 ∗ 28 28*28 2828的神经元阵列,其中每个神经元负责从 5 ∗ 5 5*5 55的区域通过卷积滤波器提取局部特征;采样层亦称为“汇合”层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。例如图中的第一个采样层有6个 14 ∗ 14 14*14 1414的特征映射,其中每个神经元与上一层中对应也正映射的 2 ∗ 2 2*2 22邻域相连,并据此计算输出。通过复合卷积层和采样层,CNN将原始图像映射成120维特征向量,最后通过一个由84个神经元构成的连接层和输出层连接完成识别任务。
CNN可用BP算法进行训练,但在训练中,无论是卷积层还是采样层,其每一组神经元都是用相同的连接权,从而大幅减少了需要训练的参数数目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值