感知机详解

原文地址

1.感知机是什么?

一种类型的ANN系统是以被称为感知器(perceptron)的单元为基础的,如图1所示。感知器以一个实数值向量作为输入,计算这些输入的线性组合,然后如果结果大于某个阈值就输出1,否则输出-1。更精确地,如果输入为x1到xn,那么感知器计算的输出为:


其中每一个wi是一个实数常量,或叫做权值(weight),用来决定输入xi对感知器输出的贡献率。其中,常量(-w0)是一个阈值,它是为了使感知器输出1,输入的加权和必须超过的阈值。

感知机详解_第1张图片

图1 感知机

为了简化表示,假想有一个附加的常量输入x0=1,那么就可以把上边的不等式写为,或以向量形式写为。为了简短起见,有时会把感知器函数写为:

其中,


学习一个感知器意味着选择权w0, …, wn的值。所以感知器学习要考虑的候选假设空间H就是所有可能的实数值权向量的集合。其中,


我们可以把感知器看作是n维实例空间(即点空间)中的超平面决策面。对于超平面一侧的实例,感知器输出1,对于另一侧的实例输出-1。这个决策超平面方程是。当然,某些正反样例集合不可能被任一超平面分割。那些可以被分割的称为线性可分(linearly separable)样例集合。

单独的感知器可以用来表示很多布尔函数。例如,假定用1(真)和-1(假)表示布尔值,那么使用一个两输入的感知器来实现与函数(AND)的一种方法是设置权w0= -0.8并且w1=w2=0.5。如果用这个感知器来表示或函数(OR),那么只要改变它的阈值w0=-0.3。事实上,AND和OR可被看作m-of-n函数的特例:也就是要使函数输出为真,那么感知器的n个输入中至少m个必须为真。OR函数对应于m=1,AND函数对应于m=n.。任意m-of-n函数可以很容易地用感知器表示,只要设置所有输入的权为同样的值(如0.5),然后据此恰当地设置阈值。

感知器可以表示所有的原始布尔函数(primitive boolean function):与、或、与非(NAND)和或非(NOR)。然而不幸的是,一些布尔函数无法用单一的感知器表示,例如异或函数(XOR),它当且仅当x1≠x2时输出为1。

感知器表示与、或、与非、或非的能力是很重要的,因为所有的布尔函数都可表示为基于这些原始函数的互连单元的某个网络。事实上,仅用两层深度的感知器网络就可以表示所有的布尔函数,在这些网络中输入被送到多个单元,这些单元的输出被输入到第二级,也是最后一级。

2.感知器法则你还记得吗?

虽然我们的目的是学习由多个单元互连的网络,但还是从如何学习单个感知器的权值开始。准确地说,这里的学习任务是决定一个权向量,它可以使感知器对于给定的训练样例输出正确的1或-1。

已知有几种解决这个学习任务的算法。这里我们考虑两种:感知器法则delta法(delta rule)。这两种算法保证收敛到可接受的假设,在不同的条件下收敛到的假设略有不同。这两种方法对于ANN是很重要的,因为它们提供了学习多个单元构成的网络的基础。

为得到可接受的权向量,一种办法是从随机的权值开始,然后反复地应用这个感知器到每个训练样例,只要它误分类样例就修改感知器的权值。重复这个过程,直到感知器正确分类所有的训练样例。每一步根据感知器训练法则(perceptron training rule)来修改权值,也就是根据下面的法则修改与输入xi对应的权wi:


其中,


这里t是当前训练样例的目标输出,o是感知器的输出,η是一个正的常数称为学习速率(learning rate)。学习速率的作用是缓和每一步调整权的程度。它通常被设为一个小的数值(例如0.1),而且有时会使其随着权调整次数的增加而衰减。

3.梯度下降与delta法则更有用~

尽管当训练样例线性可分时,感知器法则可以成功地找到一个权向量,但如果样例不是线性可分时它将不能收敛。因此,人们设计了另一个训练法则来克服这个不足,称为delta法则(delta rule)。如果训练样本不是线性可分的,那么delta法则会收敛到目标概念的最佳近似。(how to converge?)

delta法则的关键思想是使用梯度下降(gradient descent)来搜索可能权向量的假设空间,以找到最佳拟合训练样例的权向量。这个法则很重要,因为它提供了反向传播算法的基础,而反向传播算法能够学习多个单元的互连网络。这个法则重要性的另一个原因是,对于包含多种不同类型的连续参数化假设的假设空间,梯度下降是必须遍历这样的假设空间的所有学习算法的基础。

最好把delta训练法则理解为训练一个无阈值的感知器,也就是一个线性单元(linear unit),它的输出o如下:


于是,一个线性单元对应于感知器的第一阶段,不带有阈值。

为了推导线性单元的权值学习法则,先指定一个度量标准来衡量假设(权向量)相对于训练样例的训练误差(training error)。尽管有很多办法定义这个误差,一个常用的特别方便的度量标准为:


其中D是训练样例集合,td是训练样例d的目标输出,od是线性单元对训练样例d的输出。在这个定义中E(w)是目标输出td和线性单元输出od的差异的平方在所有的训练样例上求和后再除以2。这里我们把E定为w 的函数,是因为线性单元的输出o依赖于这个权向量。

梯度下降搜索确定一个使E最小化的权向量的方法是从一个任意的初始权向量开始,然后以很小的步伐反复修改这个向量。在每一步,按照沿误差曲面产生最陡峭下降的方向修改权向量(如图2)。继续这个过程直到到达全局的最小误差。

感知机详解_第2张图片

图2 不同假设的误差曲面

(对于有两个权值的线性单元,假设空间H就是w0,w1平面。纵轴表示与固定的训练样例集合相应的权向量假设的误差。箭头显示了该点梯度的相反方向,指出了在w0,w1平面中沿误差曲面最陡峭下降的方向。)

梯度下降的推导:

怎样能计算出沿误差曲面最陡峭下降的方向呢?可以通过计算E相对向量的每个分量的导数来得到这个方向。这个向量导数被称为E对于w的梯度(gradient),记作∇E(w)。


注意∇E(w)本身是一个向量,它的成员是E对每个wi的偏导数。当梯度被解释为权空间的一个向量时,它确定了使E最陡峭上升的方向。所以这个向量的反方向给出了最陡峭下降的方向。例如,图2中的箭头显示了w0,w1平面的一个特定点的负梯度-∇E(w)

既然梯度确定了E最陡峭上升的方向,那么梯度下降的训练法则是:


其中,



这里η是一个正的常数叫做学习速率,它决定梯度下降搜索中的步长。其中的负号是因为我们想要让权向量向E下降的方向移动。这个训练法则也可以写成它的分量形式:


其中,


需要一个高效的方法在每一步计算这个梯度,幸运的是,计算过程并不困难。可以从上面公式中计算E的微分,从而得到组成这个梯度向量的分量。过程如下:

感知机详解_第3张图片

其中xid表示训练样例d的一个输入分量xi。现在有了一个等式,能够用线性单元的输入xid、输出od、以及训练样例的目标值td表示。上式辨识得到的权值更新法则。


概而言之,训练线性单元的梯度下降算法如下:选取一个初始的随机权向量;应用线性单元到所有的训练样例,然后根据上式计算每个权值的Δwi;通过加上Δwi来更新每个权值,然后重复这个过程。这个算法被归纳在表1中。因为误差曲面仅包含一个全局的最小值,所以无论训练样本是否线性可分,这个算法会收敛到具有最小误差的权向量,条件是必须使用一个足够小的学习速率η。如果η太大,梯度下降搜索就有越过误差曲面最小值的危险,而不是停留在那一点。因此,对此算法的一种常用的改进是随着梯度下降步数的增加逐渐减小η的值。

表1 训练线性单元的梯度下降算法


你可能感兴趣的:(其他软件类)