机器学习(西瓜书)第五章 神经网络

发布于:2025-08-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

作者前言:本章内容是作者阅读《机器学习》(周志华)(网友戏称“西瓜书”,因为本书作者从第一章开始便通过如何辨别好的西瓜的例子来剖析机器学习的实质以及书的封面是西瓜)及相关资料写的。笔者在写此博客前,也看到了网上发布了大量相关此书的读书笔记,但翻来看去发现存在公式放的较多、大量拍摄书上的内容照片直接贴图等情况,不太适合新手阅读。故,作者写下此篇博客。笔者尽可能简化公式或者不放公式,读者在阅读。过程中不要过于纠结看懂里面的数学公式,只需搞懂里面各种的作用,内在大致的缘由即可。

PS:本章是书上的第五章,全书共有11种模型的讲解,含有线性模型、决策树、神经网络、支持向量机(SVM)、贝叶斯分类器、集成学习、聚类、半监督学习、概率图模型、规则学习、强化学习。下一章将更新支持向量机(SVM)!!! 请持续关注作者!!!


目录

一、神经元模型

二、感知机与多层网络

三、误差逆传播算法(BP)

1、标准BP算法原理

2、标准BP算法框架

3、累积误差逆传播算法(累积BP算法)

4、缓解过拟合

四、全局最小(最小值)与局部极小(极小值)

五、其他常见的神经网络

1、RBF网络

2、ART网络

3、SOM网络

4、级联相关网络

5、Elman网络

6、Boltzmann机

六、深度学习


一、神经元模型

        神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。神经网络中最基本的成分是神经元模型。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。将上述情形抽象为如下图所示的简单模型,就是一直沿用至今的“M-P神经元模型”。

        这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。

        理想的激活函数是左图中的阶跃函数,可以将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。但是,阶跃函数是不连续且不光滑的,因此实际常用Sigmoid函数作为激活函数,如右图。它把可能在较大范围变化的输入值挤压到(0,1)输出值范围内,故也称“挤压函数”。

        把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。事实上,可以先不考虑神经网络是否真的模拟了生物神经网络,只需将一个神经网络视为包含了许多参数的数学模型,这个模型是若干函数。


二、感知机与多层网络

         感知机由两层神经元组成,如下图所示,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元(亦称“阈值逻辑单元")。感知机容易实现与、或、非运算,根据上述公示:y=f(\sum _{i}w_{i}x_{i}-\theta ),假定函数f为上图中的阶跃函数,则有:假定函数f为上图中的阶跃函数,则有:

  • ”与“(x1∩x2):令w1=w2=1,θ=2,则y=f(1·x1+1·x2-2)=f(0),仅在x1=x2=1时,y=1(根据阶跃函数:f(0)=1);

  • “或”(x1∪x2):令w1=w2=1,θ=0.5,则y=f(1·x1+1·x2-0.5)=f(1.5)=1(根据阶跃函数:f(0)=1),当x1=1或x2=1时,y=1;

  • "非"(﹁x1):令w1=-0.6,w2=0,θ=-0.5,则y=f(-0.6·x1+0·x2+0.5),当x1=1时,y=0(根据阶跃函数:f(-0.1)=1);当x1=0时,y=1;(根据阶跃函数:f(0.5)=1)

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

                                                        w_{i}\leftarrow w_{i}+\bigtriangleup w_{i}

                                                        \bigtriangleup w_{i}=\eta (y-y')x_{i}

        其中η∈(0,1)称为学习率,从上式中可以看出,若感知机对训练样例(x,y)预测正确,即y'=y,则感知机不发生变化,否则将根据错误的程度进行权重调整。

        需要注意,感知机只有输出层神经元进行激活函数处理,只拥有一层功能神经元,其学习能力非常有限。事实上,上述与、或、非问题都是线性可分的问题,可以证明:若两类模式是线性可分,即存在一个线性超平面能将它们分开,如下图所示,则感知机的学习过程一定会收敛求得适当的权向量w=(w_{1}w_{2};...;w_{n+1});否则感知机学习过程将会发生振荡,w难以稳定下来,不能求得合适解,例如:感知机不能解决异或这样简单的非线性可分问题。

        要解决非线性可分问题,需要考虑使用多层功能神经元。如下图所示这个简单的两层感知机就能解决异或问题,在(a)中输出层和输入层之间的一层神经元,被称为隐含或隐含层隐含层和输出层神经元都是拥有激活函数的功能神经元。

        更一般常见的神经网络是如下图所示的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接(称为“多层前馈神经网络”)。其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层输出;换言之,输入层神经元仅接受输入,不进行函数处理,隐层与输出层包含功能神经元。如下图所示,(a)图称为“两层网络”,为避免歧义,本书称其为“单隐层网络”。只需包含隐层,即可称为多层网络。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值


三、误差逆传播算法(BP)

        多层网络的学习能力比单层感知机强得多,欲训练多层网络需要更强大的学习算法,误差逆传播算法(BP)就是其中最杰出的代表。BP算法不仅可以用于多层前馈神经网络,还可用于其他类型的神经网络。

1、标准BP算法原理

        假设隐层和输出层神经元都使用Sigmoid函数,并对BP网络作变量符号约定。对训练例(x^{_{k}},y^{_{k}}),假定神经网络的输出为,即y_{k}^{'},则网络在(xk,yk)上的均方误差E_{k}

        如上图所示,网络中有(d+l+1)q+l个参数需确定:输入层到隐层的d×q个权值,隐层到输出层的q×l个权值、q个隐层神经元的阈值,l个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计。BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。学习率η∈(0,1)控制着算法每一轮迭代中的更新步长,若太大则容易振荡,若太小则收敛速过慢(常用0.01 ~ 0.001,一般用0.01,然后看效果在0.01 ~ 0.001进行小波动调节)。

2、标准BP算法框架

        如下图所示,给出BP算法的工作流程:

        对于每个训练样例:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止(例:训练误差已达到一个很小的值)。

3、累积误差逆传播算法(累积BP算法)

        上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权值和阈值,也就是说,上图的更新规则是基于单个的E_{k}(均方误差)推导而得的。如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播算法(累积BP算法)。一般来说,标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”。因此,为达到同样的累积误差极小点,标准BP算法往往需要进行更多次数的迭代。累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低但在很多任务中,累积误差下降到一定程度后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显。

        注:1、读取训练集一遍称为进行了“一轮”学习;2、标准BP算法和累积BP算法的区别类似于随机梯度下降与标准梯度下降之间的区别。

4、缓解过拟合

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

        正是由于其强大的表示能力,BP神经网络容易过拟合,其训练误差持续降低,但测试误差却可能上升。这里有两种策略:

  1. “早停”:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差;若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

  2. “正则化”:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。仍令Ek表示第k个训练样例上的误差,wi表示连接权和阈值,则误差目标函数改为:其中λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常用交叉验证法来估计。


四、全局最小(最小值)与局部极小(极小值)

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

        直观的看,局部极小解是参数空间中的某个点,其领邻域点的误差函数值均不小于该点的函数值;全局最小解则是参数空间中的所有点的误差函数均不小于该点的误差函数值。

        显然,参数空间内梯度为0的点,只要其误差函数值小于邻点的误差函数,就是局部极小点,而全局最小点就是比较所有的局部极小点中找最小的即可,我们在参数寻优过程中就是希望找全局最小。

        基于梯度的搜索使用最为广泛的参数寻优方法,在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。(例:负梯度方向是误差函数下降最快的方向,则梯度下降法就是沿着负梯度方向搜索最优解。)若误差函数在当前点的梯度为0,则已达到局部极小,更新量将为0,这意味着参数的迭代更新在此停止。显然,如果误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小。然而,若误差函数存在多个局部极小,则不用能保证找到的解是全局最小。对于此情形,常采用以下策略来试图“调出”局部极小,j从而进一步接近全局最小:

  • 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。

  • 使用“模拟退火”技术:在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率随着时间的推移而逐渐降低,从而保证算法稳定。

  • 使用随机梯度下降:在计算梯度时加入随机因素,这样即便陷入了局部极小点,它计算出的梯度仍可能不为0,这样就有机会跳出局部极小继续搜索

        此外,遗传算法也常用来训练神经网络以更好逼近全局最小。但需要注意,上述用于跳出局部极小的技术大多是启发式,理论上缺乏保障。


五、其他常见的神经网络

1、RBF网络

        径向基函数网络,一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。径向基函数:这是某种沿径向对称的标量函数,通常定义为样本x到数据中心之间欧氏距离的单调函数。

        具有足够多隐层神经元的RBF网络能以任意精度逼近任意连续函数,通过采用两步来训练RBF网络:1、确定神经元中心,常用方式包括随机采样,聚类等;2、利用BP算法来确定参数连接权和阈值。

2、ART网络

        竞争型学习是神经网络中一种常用的无监督学习策略(监督学习:使用标注数据进行训练的机器学习方法,标注数据指的是每个输入样本都有对应的输出标签,也就是所谓的有正确答案;半监督学习:使用少量标注数据和大量未标注数据进行训练的机器学习方法;无监督学习:使用未标注数据进行训练的机器学习方法),在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制(“胜者通吃”原则)。

        ART网络由比较层、识别层、识别阈值和重置模块构成,其中,比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

        在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元。竞争的最简单方式:计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜 。获胜神经元将向其他识别层神经元发送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别。同时,网络连接权将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。

        显然,识别阈值对ART网络的性能有重要影响。当识别阈值较高时,输入样本将会被分成比较多、比较精细的模式类;如果识别阈值较低,则会产生比较少、比较粗略的模式类。

        ART比较好地缓解了竞争型学习中的“可塑性-稳定性窘境”,可塑性是指神经网络要有学习新知识的能力,而稳定性则是指神经网络在学习新知识时要保持对旧知识的记忆。这样ART有一个重要有点:可进行增量学习或在线学习。

        早期的ART网络只能处理布尔型输入数据,现在ART2网络能处理实值输入、结合模糊处理的FuzzyART网络,以及可进行监督学习的ARTMAP网络等。

3、SOM网络

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

        SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结果的目的。

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

4、级联相关网络

        一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数。与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构。级联相关网络是结构自适应网络的重要代表。

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

        与一般的前馈神经网络相比,级联相关网络无需设置网络层数,隐层神经元数目,且训练速度较快,但在其数据较小时容易过拟合。

5、Elman网络

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

        Elman网络是最常用的递归神经网络之一,其结构如下图所示,它的结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。隐层神经元通常采用Sigmoid激活函数,而网络的训练则常通过推广的BP算法进行。

6、Boltzmann机

        神经网络中有一类模型是为网络状态定义一个“能量”,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。Boltzmann机就是一种“基于能量的模型”,常见的结构如下图,其神经元分为两层:显层与隐层。显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达。Boltzmann机中的神经元都是布尔型的,即只能取0、1两种状态,状态1表示激活,状态0表示抑制。若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到Boltzmann分布,此时状态向量s出现的概率将仅由其能量与所有可能状态向量的能量确定。

        Boltzmann机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大。标准的Boltzmann机是一个全连接图,训练网络的复杂度很高,这使其难以用于解决现实任务。现实中常采用受限Boltzmann机(简称RBM)。受限Boltzmann机仅保留显层与隐层之间的连接,从而将Boltzmann机结构由完全图简化为二部图。

        受限Boltzmann机常用“对比散度”(简称CD)算法进行训练,CD算法对每个训练样本v,计算出隐层神经元状态的概率分布,然后根据这个概率分布采样来更新连接权。


六、深度学习

        理论上说,参数越多的模型复杂度越高、“容量”越大,这意味着它能完成更复杂的学习任务。但一般情形下,复杂模型的训练效率低,容易陷入过拟合。随着大数据、云计算时代来临,计算能力的大幅度提高可缓解训练低效性,训练数据大幅增加则可降低过拟合风险,因此“深度学习”为代表的复杂模型开始受到广泛关注。

        典型的深度学习模型就是很深层的神经网络。显然,对神经网络模型,提高容量的一个简单方法是增加隐层的数目。隐层多了,相应的神经元连接权、阈值等参数就会更多。模型复杂度也可通过单纯增加隐层神经元的数目来实现,但从增加模型复杂度角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效。因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而,多隐层神经网络难以直接用经典算法进行训练,因为误差在多隐层内逆传播时,往往会“发散”而不能收敛到稳定状态。

        无监督逐层训练是多隐层网络训练的有效手段,基本思想:每次训练一层隐结点,训练将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入(称为“预训练”);在预训练全部完成后,再对整个网络进行“微调”训练。(例如:在深度信念网络(DBN)中,每层都是一个受限的Boltzmann机,即整个网络可视为若干个RBM堆叠而得。在使用无监督逐层训练时,首先训练第一层,这是关于训练样本的RBM模型,可按照标准的RBM训练;然后,将第一层预训练好的隐结点视为第二层的输入结点,对第二层进行预训练;......各层预训练完成后,再利用BP算法对整个网络进行训练。)

        事实上,“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部看起来比较好的设置,然后在基于这些局部最优的结果联合起来进行全局寻优。这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。

        另一种节省训练开销的策略是“权共享”,即让一组神经元使用相同的连接权。这个策略在卷积神经网络(CNN)中发挥了重要作用,CNN可用BP算法进行训练,但在训练中,无论是卷积层还是采样层,其每一组神经元都是用相同的连接权,从而大幅度减少了需要训练的参数数目。

        可以从另一个角度来理解深度学习,无论是DBN还是CNN,其多隐层堆叠、每层对上一层的输出进行处理的机制,可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。也就是说,通过多层处理,逐渐将初始的”低层“特征表示转为”高层“特征表示后,用”简单模型“即可完成复杂的分类等学习任务。由此,可将深度学习理解为进行”特征学习“或”表示学习“。


PS:好的 ,如果你能看到这里,说明读者非常有毅力!恭喜你,你做什么事都会成功的。机器学习里面含有大量数学公式作为基础,对于数学不好的读者来说,理解起来难如登天。笔者希望可以尽可能简化这些公式来讲解机器学习!(我会持续更新下去,您的点赞+收藏是我更新的动力!) 

无人扶我青云志,我自踏雪至山巅!


网站公告

今日签到

点亮在社区的每一天
去签到