五、神经网络
1.神经元模型:

神经网络是具有适应性的简单单元组成的广泛并行互连的网络,他的组织能够模拟生物神经系统对真实世界物体所做出的交叉反应。我们在机器学习中谈论神经网络时指的是“神经网络学习”,是机器学习与神经网络这两个学科领域的交叉部分。

神经网络中最基本的成分是神经元模型,即上述定义中“简单单元”。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么他就会被激活,即“兴奋”起来,向其他神经元发送化学物质。

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

一个神经网络有几个输出 神经网络中一个神经元_神经网络


理想中的激活函数是阶跃函数,它将输入值映射为输出值“0”或“1”,但由于不连续不光滑的性质,因此实际常用sigmoid函数作为激活函数,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”

一个神经网络有几个输出 神经网络中一个神经元_感知机_02


一个神经网络可视为包含了许多参数的数学模型,这个模型是若干个函数,例如通过将

一个神经网络有几个输出 神经网络中一个神经元_感知机_03


相互(嵌套)代入而得。例如10个神经元两两相连,则有100个参数,其中包含90个连接权和10个阈值θ。有效的神经网络学习算法大多以数学证明为基础。2.感知机与多层网络:

感知机(PLA)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”。感知机能容易地实现逻辑与或非运算,注意到

一个神经网络有几个输出 神经网络中一个神经元_神经网络_04


,那么可以有:

“与”:令w1=w2=1,θ=2,即y=f(1X1+1X2-2),仅有当x1=x2=1时y=1;

“或”:令w1=w2=1,θ=0.5,即y=f(1X1+1X2-0.5),当 X1或X2为1时y=1;

“非”:令w1=-0.6,w2=0,θ=-0.5,即y=f(-0.6X1+0X2+0.5),当 X1为1时y=0;

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_05


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

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_06


其中

一个神经网络有几个输出 神经网络中一个神经元_人工智能_07

∈(0,1)称为学习率。若感知机对悬链样本预测正确,则y’=y,则感知机不发生变化,注意感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元。实际上上述与、或、非都是线性可分的问题。如果两类模式是线性可分的,即存在一个线性超平面能将他们分开,则感知机的学习过程一定会收敛而求得适当的权向量,否则感知机学习过程将会发生震荡,权重w难以稳定下来,不能求得合适解。

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_08


个人理解:一个x就是一个轴,这里有两个x就是一个二维的坐标平面,而我们只有一个方程y=…所以只能在一个二维平面中画出一条线。而如果我们通过增加层数,就可以增加多条线,由此可以绘制出“面积”,甚至“体积”

要解决非线性可分问题,需考虑多层功能神经元。如简单的两层感知机就能解决疑惑问题。输入层与输出层之间的一层神经元,称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元:

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_09


更一般的,常见的神经网络是如下的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”,前馈网络就是神经元之间不存在同层连接也不存在跨层连接:

一个神经网络有几个输出 神经网络中一个神经元_感知机_10


理论上讲,只须一个包含足够多神经元的隐层,多层前馈神经网络就能以任意精度逼近任意复杂度的连续函数。这里是不是类似与祖冲之的“割圆术”?通过切线进行线性拟合?

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴含在连接权与阈值中。3.误差逆传播算法:

想要训练多层网络,简单感知机学习规则不够用,误差逆传播(BP算法)就是其中最杰出的代表,是迄今为止最成功的神经网络学习算法。BP算法不仅仅可以用于多层前馈神经网络,还可以用于其他类型的神经网络。

BP算法在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,基于梯度下降策略,以目标的负梯度方向对参数进行调整。退火算法吗?

给定训练集D=(x1,y1),(x2,y2),…,(xm,ym),xi∈Rd,yi∈Rl,即输入d个属性描述,输出l维实值向量。或者说要求输入示例由d个属性描述,输出L维实值向量。下图是一个拥有d个输入神经元、L个输出神经元、q个隐层神经元的多层前馈网络,假设隐层和输出层都使用sigmod函数

θj:输出层第j个神经元的阀值

γh:隐层第h个神经元的阔值

vih:输入层第t个神经元与隐居第h个神经元之间的连接权

ωhj:隐层第h个神经元与输出层第j个神经元之间的连接权

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_11


个人理解:在平面上画几条线和M-P神经元的个数有关系吗?和层数有关系吗?个人理解是输出层有多少条连接就有多少条线?这里不要从集合的角度上分析这个问题。

**个人理解:**不管是符号主义的决策树算法还是连接主义的神经网络算法,实际上都是想从一个多维空间上找到一个固定的范围作为正例或者反例;换句话说就是在一个多维空间上进行“划线”“圈地”的操作,最终拟合出一个不规则的结果区域。只不过符号主义的决策树是想“自顶向下”“从结果和功能上”解决问题;而连接主义的神经网络是想“自底向上”“通过机能模拟”解决问题。但两者都需要进行调参和调权。

推导过程如下:

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_12


上述网络中有(d+l+1)q+l个参数需要确定:输入层到隐层的dxq个权值、隐层到输出层的qxl个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。BP算法是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_13

。下面以隐层到输出层的连接权whj为例推导:

一个神经网络有几个输出 神经网络中一个神经元_感知机_14


一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_15


个人理解:最终BP算法结果如下:

隐层第h个神经元与输出层第j个神经元之间的连接权=原+学习率输出层神经元j梯度项常数bh。bh是第j个输出神经元的输入关于隐层第h个神经元与输出层第j个神经元之间的连接权的导数。

输出层第j个神经元的阈值=负的(学习率输出层神经元j的梯度项)
输入层第i个神经元与隐层第h个神经元之间的连接权=学习率
隐层神经元h的梯度项第i个输入
隐层第h个神经元的阈值=负的(学习率
隐层神经元h的梯度项)

其中输出层神经元j的梯度项=预测输出层j的值*(1-预测输出层j的值)(预测输出层j的值-真实输出层j的值)
而隐层神经元h的梯度项=常数bh
(1-常数bh)(对(隐层第h个神经元与输出层第j个神经元之间的连接权输出层神经元j梯度项)从j=1到l求和,即所有输出)

学习率控制着算法每一轮迭代中的更新步长,太大容易震荡,太小收敛速度会过慢,有时为了精确调节,可以让

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_16


一个神经网络有几个输出 神经网络中一个神经元_神经网络_17

使用1,另两个使用2,两者未必相等。

下面是BP算法的工作流程,对于每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,然后根据隐层神经元的误差对连接权和阈值进行调整。

一个神经网络有几个输出 神经网络中一个神经元_感知机_18


需要注意,BP算法的目标是最小化训练集D上的累积误差:

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_19


一般来说,标准BP算法每次更新只针对但个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。为此,为了达到同样的积累误差极小点,标准BP算法往往需进行更多次的迭代。

累积BP算法直接针对累积误差最小化,在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多。

只须一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。但问题是如何设置隐层神经元的个数。

BP神经网络经常遭遇过拟合,训练误差持续降低但测试误差可能上升。有两种策略常用来缓解BP网络的过拟合:

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

“正则化”:基本思想是在误差目标函数中增加一个用于描述网络复杂度得部分,例如权重和阈值得平方和:

一个神经网络有几个输出 神经网络中一个神经元_感知机_20


ωi表示连接权和阈值,λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计

个人理解:我们只要搭建出来一个网络(数据结构?),设置学习率和各项初始值,然后给他一大堆数据让他自己运行就可以。只要网络中“可画”的“线”相较于问题而言足够多,那么程序自己最终就可以得到一个好的学习器,我们不需要参与。

而决策树甚至不需要我们搭建最初的“树”,直接给数据即可?4.全局最小和局部最小:

如用E表示神经网络在训练集上的误差,则显然是关于连接权w和阈值θ的函数。此时神经网络的训练过程可以看做一个参数寻优过程,即在参数空间中寻找一组最优参数使得E最小。直观地看,局部极小解是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值;全局最小解是参数空间中所有点的误差函数值均不小于该点的误差函数值。

一个神经网络有几个输出 神经网络中一个神经元_感知机_21


显然,需要找参数空间中梯度为0的点。基于梯度的搜索是最为广泛的参数寻优方法。我们从某些初识解除法,迭代寻找最优参数值。每次迭代中先计算误差函数在当前点的提付,然后根据梯度确定搜索方向。由于负梯度方向是函数值下降最快的方向,因此梯度下降发就是沿着负梯度方向搜索最优解。但当有多个局部极小时,容易“陷入局部极小”,所以思考如何跳出并逼近全局极小:

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

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

3、使用随机梯度下降。与标准梯度下降法精确计算梯度不同, 随机梯度下降法在计算梯度时加入了随机因素。于是即便陷入局部极小点它计算出的梯度仍可能不为零这样就有机会跳出局部极小继续搜索。

此外,遗传算法也常用来训练神经网络以更好地逼近全局最小。需注意的是,上述用于跳出局部极小的技术大多是启发式,理论上尚缺乏保障。5.其他常见神经网络:
(1)RBF网络:

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

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_22


其中q表示隐层神经元的格式,ci和ωi分为表示第i个隐层神经元对应的中心和权重,ρ(x, ci) 是径向基函数。径向基函数是某种沿径向对称的标量函数,通常定义为样本x到数据中心ci之间的欧氏距离的单调函数,常用高斯径向基函数为:

一个神经网络有几个输出 神经网络中一个神经元_神经网络_23


RBF拥有较小的支集,针对选定的样本点,他只对样本附近的输入有反应,RBF使样本点只被附近(圈内)的输入激活。径向基函数的二维图像如下:

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_24


一个神经网络有几个输出 神经网络中一个神经元_感知机_25


RBF网络分为标准RBF网络,即隐层单元数等于输入样本数;和广义RBF网络,即隐层单元数小于输入样本数。如图:

一个神经网络有几个输出 神经网络中一个神经元_人工智能_26


个人理解:基本思想是用RBF作为隐单元的“基”构成隐藏层空间,隐藏层对输入矢量进行变化,将低维的模式输入数据变换到高维度空间内,使得在低维空间内的线性不可分问题在高维空间内线性可分。实际上就是通过RBF的隐单元的“基”构成隐藏层空间,将输入矢量直接(不通过权连接)映射到隐空间。当RBF的中心点确定后,映射关系也就确定。而隐层空间到输出空间的映射是线性的,即网络输出是隐单元输出的线性加权和。

通常采用两步过程来训练RBF网络:第一步,确定神经元中心ci,常用的方式包括随机采样、聚类等;第二步,利用BP算法等来确定参数ωi和βi 。(2)ART网络:

竞争型学习是常用的无监督学习策略,使用该策略时,网络输出神经元相互竞争,每个时刻仅有一个竞争获胜的神经元被激活,其他神经元被抑制,称为“胜者通吃”原则。

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

识别层接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元;

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

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

ART网络具有更好的可塑性(学习新知识的能力)和稳定性(学习新知识同时保持旧知识的记忆),可进行增量学习或在线学习。

增量学习:指在学得模型后,再接收到训练样例时,仅需根据新样例对模型进行更新,不必重新训练整个模型,并且先前的有效信息不会被“冲掉”;

在线学习:指每获得一个新样本就进行一次模型更新。

个人理解:ART网络可以在不忘记以前学习过的事物的基础上继续学习新事物。之前不管是决策树还是神经网络,在对权值进行调整的时候都有可能会产生“抵消”的效果,而且,在训练完毕后,神经元之间的连接强度就确定了,除非有新的训练动作发生,否则不会有任何改变。而ART网络则会专门生成一个新的分支,将这种特别的样本记录下来。如果识别阈值设置为100%,那么将会生成一个一层全分支的神经网络,并且在使用的过程中仍然会进行训练。它开始工作时可以不用确定需要多少个神经元,甚至不用给他,会自己生成。

目前,ART 有很多版本:ART1是最早的版本,含有并行架构的主-从式算法,在算法的激活及匹配函数中运用了集合运算,主要处理只含 0 与 1 的影像(即黑白)识别问题。ART2可以处理灰度(即模拟值)输入。ART3具有多级搜索架构,它融合了前两种结构的功能并将两层神经网络扩展为任意多层的神经元网络。由于ART3 在神经元的运行模型中纳入了神经元的生物电化学反应机制,因而其功能和能力得到了进一步扩展。

类别判断是由在识别层中的一个单一神经元来作出的,类似于大脑皮层感受区中的细胞组,比较层中的神经元对模式的输入特性做出响应。在这两层之间的突触连接(权值)可以根据两种不同的学习规则进行双向修改。识别层的神经元具有允许竞争的抑制连接。该网络结构还包括三个附加模块,即增益1、增益2和复位模块,如下图:

一个神经网络有几个输出 神经网络中一个神经元_感知机_27


个人理解:算法如下:①初始化;②将输入提供给输入层,计算激活值;③比较所有的激活值,选出最大值;④比较该激活值所对应的识别层神经元的连接权矢量与输入模式矢量的相似度与预先设置的识别阈值,如果大于进入⑥;⑤取消识别结果,并在比较层和识别层依靠该输入矢量生成新的神经元,进入⑥;⑥调整连接权;⑦返回②。但激活值如何产生?(3)SOM网络:

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

SOM训练目标就是为每个输出层神经元找到合适的权向量,达到保持拓扑结构的目的。训练过程:在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离最近的神经元称为竞争获胜者,称为最佳匹配单元();然后,最佳匹配单元及其临近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小,不断迭代,直至收敛。

一个神经网络有几个输出 神经网络中一个神经元_一个神经网络有几个输出_28


(4)级联相关网络:

结构自适应网络(也称“构造性”网络)将网络结构也当作学习的目标之一,希望找到最符合数据特点的网络结构,级联相关是其代表。注意,ART网络由于隐层神经元数目可在训练过程中增长,所以也是一种结构自适应神经网络。

级联相关网络有“级联”和“相关”两个主要成分;

级联指建立层次连接的层级结构,训练开始时,网络处于最小拓扑(只有输入层和输出层),随着训练进行,新的隐层神经元逐渐加入,从而创建起层级结构,当新的隐层神经元加入时,其输入端的连接权值是冻结固定的;

相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。

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

一个神经网络有几个输出 神经网络中一个神经元_人工智能_29


个人感觉级联相关网络要求不仅仅可以改变隐层神经元的数目,还可以改变隐层层数?(5)ELman网络:

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

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_30


Elman网络是常用的递归神经网络,其结构与多层前馈网络相似,但隐层神经元的输出被反馈回来,与下一时刻的输入层神经元提供的信号,一起作为隐层神经元下一时刻的输入。

隐层神经元常采用sigmoid激活函数,网络训练通过推广的BP算法进行。(6)Boltzmann机:

神经网络中有一类模型是为网络状态定义一个“能量”,能量最小化使网络达到理想状态。Boltzmann机是一种“基于能量的模型”,神经元分为显层和隐层,显层用于表示数据输入和输出,隐层被理解为数据的内在表达;Boltzmann机中神经元都是布尔型的,只能取0、1两种状态,状态1表示激活,状态0表示抑制。

令向量s∈{0,1}n表示n个神经元的状态,ωij表示神经元i与j之间的连接权,θi表示神经元i的阈值,则状态向量s对应的Boltzmann机能量定义为:

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_31


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

Boltzmann机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大,标准Boltzmann机是一个全连接图,网络复杂度高。

一个神经网络有几个输出 神经网络中一个神经元_人工智能_32


上图左为Boltzmann机,右图受限Boltzmann机

现实中常使用受限Boltzmann机(仅保留显层和隐层之间的连接),它常用“对比散度”,即CD算法进行训练;假定网络中有d个显层神经元和q个隐层神经元,令v和h分别表示显层与隐层的状态向量,由于同一层内不存在连接,有:

一个神经网络有几个输出 神经网络中一个神经元_人工智能_33


CD算法对每个训练样本v,根据下面的式子计算隐层神经元状态的概率分布,然号后根据概率分布采样得到h;类似再根据上面的式子从h产生v’,在从v’产生h’;连接权更新公式:

一个神经网络有几个输出 神经网络中一个神经元_西瓜书_34

6.深度学习:
典型的深度学习模型就是很深层的神经网络,提高神经网络模型容量的方法是增加隐层数目,从增加模型复杂度角度,增加隐层数目比增加隐层神经元数目更有效。增加隐层层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而多隐层神经网络难以直接用标准BP算法进行训练,因为误差在多隐层内逆传播时,往往会“发散”而不能收敛到稳定状态。
无监督逐层训练是多隐层网络训练的有效手段。基本思想是:每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,本层隐结点的输出作为下一层隐结点的输入,这称为预训练;预训练完成后,再对整个网络进行“微调”训练。实际上“预训练+微调”可视为将大量参数分组,每组找到局部看来最好的设置,然后再基于这些局部最优的结果联合起来进行全局寻优,即局部最优进行全局寻优,如深度信念网络(DBN)。
另一种节省训练开销的策略是“权共享”,即让一组神经元使用相同的连接权,代表是卷积神经网络CNN。卷积神经网络是多层感知机(MLP)的变种。CNN复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现与输出目标之间的映射。每个卷积层都包含多个特征映射,每个特征映射是由多个神经元构成的“平面”,通过一种卷积滤波器提取输入的一种特征。采样层亦称为“汇合”层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。CNN采用BP算法进行训练,但无论是卷积层还是采样层,其每一组神经元都是用相同的连接权。
使用CNN时常将sigmoid激活函数替换为修正线性函数——当x<0时,f(x)=0;当x≥0时,f(x)=x。这样的神经元称为ReLU。此外,池化层常采用“max pooling”或“mean pooling”,这更接近于集成学习。
无论是DBN还是CNN,通过多层堆叠,每层将上一层输出进行处理,从而把初始的、与输出目标之间联系不太密切的输入表示转换成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。或者说将“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务,可理解为“特征学习”或“表示学习”。