感知机与多层网络

  • 神经网络
    • 1 定义
    • 2 神经网络的作用
  • 感知器
    • 1感知器结构
    • 2 激活函数
  • 反向传播算法
  • 多层网络结构
    • 1结构定义
    • 2 反向传播算法
  • 人工神经网络的算法探讨
    • 1 收敛性与局部最小值
    • 2 多层网络的处理能力
    • 3 归纳偏置
    • 4 过度拟合

之前做车牌识别的时候,在字符识别(OCR)时,使用的是人工神经网络(ANN),这里总结介绍一下人工神经的相关知识。

1.神经网络

1.1 定义

人工神经网络(ANN)又称神经网络(NN),是一种模拟人脑的学习系统的生物模型。神经网络的由大量相互连结的节点构成一个复杂的网络结构,每个节点都有多个输入和一个输出,并且每个输入对应有一个权重因子,节点的输出就是所有这些输入与权重乘积的耦合。
通俗的来讲,神经网络就是一个学习器,给它一组输入,它会得到一组输出,神经网络里的节点相互连结决定了输入的数据在里面经过怎么样的计算。神经网络具有这个功能:通过大量的输入,神经网络通过调整自身的连接情况,给出我们的预期输出。

1.2 神经网络的作用

神经网络对于逼近真实数值、离散值或向量值的目标函数提供了一种健壮性很强的方法,现已被广泛应用到视觉场景分析、手写字符识别、语音识别、人脸识别等。计算机识别物体的过程可以描述为:对象-特征-类别,理论上都可以使用神经网络来解决。

2.感知器

2.1感知器结构

一个感知器的结构图如下:
感知机与多层网络_第1张图片
这里的感知器,也就是我们上面说的神经网络中的节点。感知器是以一组实数向量作为输入,计算这些输入的线性组合,如果结果大于设定的阈值就输出1,否则输出-1.上图的感知器就可以表示为:
这里写图片描述
这里把 - w0 看成是上面提到的阈值,w1到wn是对应的权重,o(x)简单来说就是将输入向量按一组权重进行线性加权求和后做的一个符号函数。
我们可以把感知器看成是n维实例空间(点空间)中的超平面的决策面,平面一侧的所有实例输出1,对另一侧的实例输出-1。决策平面方程为:这里写图片描述

也就是说,当我们输入两类不同的实物的时候(2类样本数据),对已一类实物,感知器输出为1,而另一类则输出-1.但是这里有一个限制:并不是任意的样本都可以找到这样的决策超平面,只有线性可分的样本空间才可以找到超平面或者找到一组权值。

由上面的分析,我们希望找到一组这样的权值,对于我们输入的每一组向量,总能够得到一个我们期望的值。但是单个感知器只能得到2个结果,输出1和-1。

在实际的应用当中,我们输入的数据样本往往不是线性可分的,即使是2维的数据,也可能不是线性可分的:
感知机与多层网络_第2张图片

对于非线性可分的样本数据,上诉的感知器则无能为力了。于是乎,提出一种非线性映射,产生了激活函数的概念。激活函数是一种非线性函数同时是可微的,可微是为了后面的权重调整。因为我们需要知道权重是怎么影响最终的输出的,我们要根据输出来调节那些权重向量,也就是后面讲到的梯度下降法则。

2.2 激活函数

激活函数有很多种,这里我们选用的是S型激活函数,它将一维空间映射到[0,1]和[-1,1]。S型激活函数sigmoid函数和它的导数为:
感知机与多层网络_第3张图片
经过这样的非线性映射后,感知器的结构变成了:
感知机与多层网络_第4张图片

结构里的w0成为偏置,可以理解为有一个x0=1的输入。对于上述的结构,我们可以有如下的结论:
(1)对于任意的一组输入和一个我们预想的中[0,1]之间的输出,我们总可以找到一组权值向量这里写图片描述使得
(2)对于很多组这样的输入,我们可以通过不断的调整权值,来使得它们的输出接近于我们预想的输出。

3.反向传播算法

上面的分析,我们知道感知器主要是通过非线性映射后调整输入权值来获得预期的输出的。那么这一组权值又是怎么得到的呢?我们需要在向量空间里搜索最合适的权值向量,但是不能毫无章法的搜索,需要有一定的理论依据,梯度下降就是一个很好的方法。

首先,我们来定义输出误差:对于任意一组输入,感知器的输出与我们预期的输出之间的误差值就称为输出误差。
这里写图片描述
上式的D表示所有的输入实例,或者说是样本,d代表的是一个样本实例,Od表示感知器的输出,td代表我们预想的输出。

那么,我们的目标就是寻找一组权值向量,使得这个误差最小,显然这可以通过求导来实现。导数的意义是提供一个方向,沿着这个方向改变权值,将会让总的误差变大,更形象的叫它为梯度。
这里写图片描述
梯度是E最陡峭的上升方向,那么梯度下降的训练法则就是:
这里写图片描述

梯度下降是一种重要的最优化算法,但是使用的时候存在2个问题:
(1)有时收敛过程非常缓慢;
(2)如果误差曲面上有多个局部极小值,那么不能保证这个过程会找到全局最小值。

为了解决上述问题,实际应用中采用的是梯度下降的一个变体–随机梯度下降。上面的误差公式是针对于所有训练样本而得到的,而随机梯度下降的思想是根据每个单独的训练样本来更新权值:
这里写图片描述

这样,推导后我们得到的最终权值更新公式为:
这里写图片描述

有了上述的权值更新公式,我们就可以通过输入大量的样本数据,根据我们的预期输出结果不断地调整权值,从而最终得到一组权值,使得我们的sigmoid函数能够对一个新的样本输入得到正确或者无线接近的结果。

4.多层网络结构

4.1结构定义

多层网络,顾名思义就是有多个节点层结构组成的网络系统,它的每一层都是由若干神经元节点构成,该层的任意一个节点和上一层的每一个节点相连,由它们来提供输入,经过计算产生该节点的输出并作为下一层节点的输入。任何多层的网络结构必须由一个输入层、一个输出层。多层网络结构如下图所示:
感知机与多层网络_第5张图片

上图是一个3层的网络结构,由一个输入层、一个输出层和一个隐藏层组成。一般来说隐藏层数目大于等于1,可以有更多。结构中的隐藏层的节点 i 与输入层的每一个节点相连,也就是节点 i 的输入为: 这里写图片描述,同时与它相连的n条线代表了响应输入的权值。输入层与隐藏层之间的红色连线代表了偏置,即w0. 根据感知器结构,我们可以得到节点 i 的输出,将对应的输入与权值的乘积做线性求和,然后经过sigmoid函数计算,得到该节点的输出。
感知机与多层网络_第6张图片

整个多层神经网络就是由一组输入开始,然后按每条连线的权值,进行一直的向前计算。可以对这个网络结构进行量化:首先它是一个三层的网络结构,第一层是一个输入层,它本身没有输入,也没有连线进来;第二层隐藏层有3个节点,并且有 3*(4+1)根连结线,每一个节点都有一个偏置线;最后一层是输出层,有4个节点,并且有4*(3+1)根连接线。所以整个网络结构为:这里写图片描述
而每一层的结构为:这里写图片描述

4.2 反向传播算法

在单个节点的感知器里,我们使用梯度下降法来调整输入权值,寻找最优权值向量,同样的,在多层网络结构中,我们也可以使用类似的方法来推导整个网络的权值更新法则。我们把这个方法叫做反向传播算法,因为它是从输出层开始向前逐层更新权值的。

首先,我们来看输出层的误差,不同于单个感知器节点(一个输出),多层网络结构具有多个输出,那么它的误差公式可以用LSM法则(最小均方法法则)来表示:这里写图片描述

这里,outputs是网络输出单元的结合,D:所有训练样本空间,tkd和okd是与训练样例d和第k个单元输出相关的预期值与输出值。

接下来,我们的目标是搜索一个巨大的假设空间,这个空间由网络结构中所有可能的权值构成。如果用几何来描述的话,就是这个巨大的搜索空间构成的一个误差曲面,我们的目标就是找到这个误差曲面中的最小值点。显然,我们可以通过梯度下降来做。通过计算全面任何点的梯度方向,然后沿着反方向去改变权值,就好使得误差最小。

我们将感知器里的随机梯度下降法应用到多层网络的反向传播算法中。每处理一个样本实例,更新各个权值,通过大量的样本实例逐渐调整权值。对于每一次的训练样本d来说,它的输出误差为:
这里写图片描述

由多层网络结构图,我们知道,输出层的节点上的连线权值可以直接影响到最终的误差,而隐藏层节点上的连结线权值只能间接影响最后的结果,所以我们分两种情况来推导反向传播算法。

情况1:对于输出单元的权值训练法则:

我们知道每个节点前的所有连结线只能通过影响net(上面的公式)的结果来影响误差E,所以有:这里写图片描述
也就是我们只有求出这里写图片描述就可以了:
这里写图片描述

将上面的两个公式合并,就可以得到权值的更新法则:
这里写图片描述
我们把其中的这里写图片描述 看成是与该节点相关的误差项,并用δ表示。

情况2:隐藏单元的权值训练法则
隐藏层中的任意连接线权值都是通过影响他的输出作为输入的下一层(downstream)的节点而最终影响误差的,所以隐藏层的推导如下:

这里写图片描述
所以隐藏层的更新法则为:
感知机与多层网络_第7张图片

总结一下权值更新的步骤:
1)对于训练样本实例中的每一个这里写图片描述把输入沿网络传播,计算出网络中每个单元u的输出 ou;
2)对于网络中的每个输出单元k,计算它的误差项δk:
这里写图片描述
3)对于网络中的每个隐藏层单元h,计算他的误差项δh:
这里写图片描述
4)更新每个网络权值ωji
这里写图片描述

这里的xji表示从单元i到单元j的输入,wji是单元i到单元j的权值。
上述的公式,有一些中间推导过程省略了,具体的详细公式推导可以查阅《机器学习》p74页。

5.人工神经网络的算法探讨

5.1 收敛性与局部最小值

反向传播算法实现了一种对可能的网络权值空间的下降搜索,它不断迭代从而 碱性训练样例的目标值与网络输出之间的误差。但在多层网络误差曲面中,可能含有多个不同的局部极小值,我们的梯度下降可以收敛到这些极小值中。因此,对于多层网络,反向传播算法仅能保证收敛到误差E的某个局部极小值,不一定收敛到全局极小值。

尽管缺乏对收敛到全局最小误差的保证,反向传播算法在实践中仍然是非常有效的函数逼近算法。对许多实际中的应用,人们发现局部极小值的问题没想象中的严重。因为局部极小值往往是对某一个权值来说的,对其他的权值未必就是极小值。事实上网络权值也多,误差曲面维数越多,也就越可能为梯度下降提供更多的”逃逸路线“让梯度下降离开相对该单个权值的局部极小值。

另外一个观点是,我们开始给权值初始化的值都非常小,接近于零。在这样小权值的情况下,sigoid函数可以近似堪为线性的,所以在权值变化的初期是不存在局部极小值的,而到了后期整个网络到了高度非线性的时候,可能这里的极小值已经很接近全局最小值了。

5.2 多层网络的处理能力

什么类型的函数可以使用多层网络来表示呢?
答案:任意函数。任意函数可以被一个由三层的网络已任意的精度逼近(Cybenko 1998)。但是值得注意的是,我们使用的梯度下降算法并没有搜索整个权值空间,所以我们可能户漏掉那个最合适的权值集合。

5.3 归纳偏置

什么是归纳偏置?举个例子,假如我们有两个样本这里写图片描述这里写图片描述
并且我们认为这2个样本是属于同一个类别的,即作为神经网络的输入,我们希望它们得到同意的输出。训练样本中只有这2个实例,但是我们需要得到这里写图片描述的输出时,它的结果会和x1,x2的输出一样。神经网络的这种能力,我们称为归纳偏置能力,实际网络是在数据点之间的平滑插值。

5.4 过度拟合

因为我们收集到的样本中有些样本可能由于我们的分类错误等原因,造成一个错误的样本用例里,实际上神经网络对这种带有噪点的样本的适应性很强。但是在上面我们介绍的原理中,我们并没有规定权值迭代更新的终止条件,往往我们是设置了一个迭代次数来控制,也有可能造成,在训练的后期那些权值是过渡拟合那些噪点样本的。这个问题没有统一的解决方案,现在比较常用的方法就是通过交叉验证,即在训练的同时,桶一组校验样本进行测试,找出分类率回降的一个点,从而终止训练过程。

上面的交叉验证方法在可获得额外二等数据提供验证集合时工作的最好。然而,过度拟合问题对于小训练集合最为严重。在这种情况下,有时使用一种称为”k-fold交叉验证“的方法。这种方法进行k次不同的交叉验证,每次使用数据的不同分割作为训练集合和验证集合,然后对结果进行平均。

例如把m个实例分割成k个不相交的子集,每个子集有m/k个实例。然后进行k次交叉验证过程,每一次使用不同的子集作为验证集合,并合并其他子集作为训练集合。于是,每一个样例会在一次试验中被用作验证集合的成员,在k-1次试验中用作训练成员。在每一次试验中,都使用上面的交叉验证过程来决定在验证集合上取得的最佳性能的迭代次数i.然后计算这些i的均值 ui,最后运行一次反向传播算法,训练所有的m个实例并迭代ui次,此时没有验证集合。

reference:《机器学习》
http://www.cnblogs.com/ronny/p/ann_01.html

你可能感兴趣的:(机器学习,算法学习)