机器学习之神经网络

来源:互联网 发布:淘宝内衣代理 编辑:程序博客网 时间:2024/05/28 06:06

  机器学习是一门致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。经验通常以数据的形式存在,因此机器学习所研究的主要内容是关于在计算机上从数据中产生“模型”的算法,即“学习算法”。有了学习算法,将经验数据提供给它,它就能基于这些数据产生模型;当面对新情况时,模型会给我们提供相应的判断。一般的“模型”是指全局性结果,而用“模式”指局部性结果。
  1.神经元模型
  神经网络的定义是指:由具有适应性的简单单元组成的并行互联的网络。它的组织能够模拟生物神经系统对真实世界物体所做的交互反应。我们在机器学习中讨论神经网络是指“神经网络学习”,或者说是机器学习与神经网络这两个学科领域交叉部分。
  1943年,McCulloch and Pitts 提出的“M-P神经元模型”如下:
  


  这里写图片描述
  

  上述模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
  2.感知机与多层网络
  感知机(Perceptron)由两层神经元组成,如下图所示:
  

  这里写图片描述
  

  输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称为“阈值逻辑单元”,感知机能够容易实现逻辑与、或、非运算。
  更一般地,给定训练数据集,权重wi(i=1,2,…,n)以及阈值 θ 可通过学习得到。阈值 θ 可以看作一个固定输入为-1.0的哑节点所对应的连接权重wn+1,这样权重和阈值的学习就可以统一为权重的学习。
  需注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层神经元,其学习能力非常有限。可以证明,若两类模式是线性可分的,即存在一个线性超平面能将他们分开,则感知机学习过程一定是收敛而求得适当的权向量w=(w1,w2,…,wn+1);否则感知机学习过程将会发生振荡,w难以稳定下来,不能求得合适解。
  要解决非线性可分问题,需考虑多层神经元。一般常见的神经网络结构如下,每一层神经元与下一层神经元全互连,同层神经元之间不连接,也不存在跨层连接。这种神经网络结构称为“多层前馈神经网络”。其中Input Layer 神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。神经网络学习过程中,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值,换言之,神经网络学到的东西,蕴含在连接权和阈值之中。
  

  这里写图片描述
  多层前馈神经网络(单隐层前馈网络)
  

3.误差逆传播算法
  误差逆传播(error BackPropagation,简称BP)算法是一种强大的神经网络学习算法。值得指出的是,BP算法不仅可用于多层前馈神经网络,还可以用于其他类型的神经网络,但是通常所说的BP网络是指BP算法训练的多层前馈神经网络,结构如下。
  

  这里写图片描述
  

  上图给出了一个拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络。即输入示例由d个属性描述,输出l维实值向量。另外可以看出网络中有(d+l+1)q+l个参数需确定:输入层到隐层的d×q 个权值、隐层到输出层的q×l 个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。
  BP算法基于梯度下降策略(gradient descent),以目标的负梯度方向对参数进行调整,对网络在(xk,yk)上的均方误差Ek=1/2ln=1(y^kjykj)2,给定学习速率 η ,有:
  Δwhj=ηEkwhj
  注意到 whj 先影响到第j个输出神经元的输入值βj, 再影响到其输出值y^kj,然后影响到Ek。具体推理如下:
  

  这里写图片描述
  

  可见学习率η控制着算法每一轮迭代中的更新步长,太大则容易振荡,太小会导致收敛速度慢,因此会选择每一层学习率因子ηn不同,n表示神经网络的层数。
  BP算法的工作流程如下:先将输入示例提供给输入神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根绝隐层神经元的误差来对连接权和阈值进行调整,该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已经达到一个很小的值。
  “标准BP算法”每次针对一个训练样例更新连接权和阈值,如果类似的推导出基于累积误差最小化的更新规则,就得到累积误差逆传播算法。累计误差逆传播算法直接针对累积误差最小化,它在读取整个训练集一遍后才对参数进行更新,其参数更新的频率相对标准BP低很多。但是在很多任务中,累积误差下降到一定程度后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解
  事实上,设置一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数,一般通过试错法(trial-by-error)解决隐层神经元个数问题。与此同时,BP神经网络强大的表示能力也会带来过拟合问题,导致训练误差持续下降,测试误差上升。目前主要通过“早停”策略(将数据分成训练和测试两部分,当训练集误差降低但测试集误差升高则停止训练)和正则化(在误差目标函数中增加一个用于描述网络复杂度的部分)。详细试错针对实际应用而来,具体请参考更多的文献,这里不做过多赘述。

注:本文参考自《机器学习》、网络文章,部分图片来自网络和书籍,欢迎指正。

0 0
原创粉丝点击