您的位置:首页 > 理论基础 > 计算机网络

ML的45问(3)——神经网络与感知器法则、反向传播算法

2017-04-15 15:47 197 查看

0. 写在前面

今天我们主要介绍关于人工神经网络的相关问题。

1. 三种神经网络单元及其形式

人工神经网络有3种基本的神经元,分别是感知器模型、线性单元和Sigmoid单元。

1.1 感知器模型

感知器模型是神经网络模型提出来的最早的神经单元之一。它比较简单,如果使用公式来表示的话:

O(X→)=sgn(W−→⋅X→)

其中

sgn(y)={1,−1,y>0other

这种描述是不是太过于抽象了,但是如果我们换一种描述方式,感知器模型是这样的:



这是感知机模型的图形化表示,而通常的x0=1,w0是阈值其他的xi才是真正的输入。

这种描述可能还是太高大上了,咱再换一种,但是这种描述并不是太准确。其实就是一个线性拟合。

F(X)=w0+w1⋅x1+w2⋅x2+w3⋅x3+⋅⋅⋅+wn⋅xn

如果F(X)>0就输出1,否则输出-1。

很显然,这种感知机的表现能力有限,例如异或这种逻辑,它就没办法表示。这也是当时感知机模型跌入低谷的一个很重要的原因。(当时还没找到多个神经元之间的关系如何传递,例如BP算法。)

1.2 线性单元

线性感知单元和感知器模型之间有2个不同,一是取消了结果二值化,二是取消了x0=1这个假设,所有的输入都是真正的输入。于是,其公式就变成了这样:

O(X→)=W−→⋅X→

这样输出的结果也是连续的,线性的,因此成为线性单元。结构图如下:



1.3 Sigmoid单元

但是这两种都是有缺陷的,第一种感知器单元是因为结果不连续,没办法进行微分积分,就没法做成多层感知器模型。

而第二种线性单元输入结果虽然连续,但是没有办法进行分类,这就有可能导致最终结果太过离散了。因此,Sigmoid单元就融合了这两个单元的优点。它是这样的:

O(X→)=sgn(W−→⋅X→)

其中

sgn(y)=11+e−y

这是一个非常著名的S模型的简化版,而且它的求导非常方便。这也是它流行的一个原因。

其结构图如下:



2. 训练法则

上面提到了3种神经单元,那么每种神经单元应当对应相应的训练法则,这样才能够让神经单元有用。

2.1 感知器法则

感知器法则是特地为了感知器模型而设计的,它是这样修改所有的参数的:

wi←wi+Δwi

其中Δwi=η(t−o)xi

这里,wi是参数,而t是训练样例的目标输出值,o是模型的输出值,而η是学习速率,也就是每步的步长,通常是一个比较小的数。

而整个训练过程就是把样例一个一个输入进去,不断的调整wi的值,最终停止的时候,所有的训练样例都会满足这个函数。

事实证明,在有限次的使用感知器训练法则后,上面的训练过程会收敛到一个能正确分类所有训练样例的权向量,但是前提是训练样例线性可分,并且使用了充分小的η。

2.2 delta法则

delta法则是为了线性模型而产生的训练法则,它可以发展成多层网络的训练法则(反向传播算法)。

delta法则就是梯度下降法。我们常用的训练误差的表示方式使用的是一个非常容易求导的公式:

E(w→)=12∑d∈D(td−od)2

这其实是最小误差平方和的表现形式。而我们最终的评价目标就是使得这个E最小,于是我们就需要求偏导。

∇E(w→)=[∂E∂w0,∂E∂w1,⋅⋅⋅,∂E∂wn]

这就是梯度,梯度的概念我们在高数中讲过了,就不在这讲原理,只是说,梯度就是权空间的一个向量,确定了使E最陡峭上升的方向。因此梯度下降法就被表述成:

wi←wi+Δwi

其中Δwi=−η∂E∂wi

但真正计算的时候,不会太麻烦,因为我们刚才的最小误差平方和的式子非常容易求导:

∂E∂wi=∂∂wi12∑d∈D(td−od)2

=12∑d∈D∂∂wi(td−od)2

=12∑d∈D2(td−od)∂∂wi(td−od)

=∑d∈D(td−od)∂∂wi(td−w→⋅x→d)

=∑d∈D(td−od)(−xid)

这样我们就得到了最终的结果:

Δwi=η∑d∈D(td−od)(xid)

也就是说,它仅仅是跟输入值,输出值,目标值和学习速率有关,而且运算十分简单。于是,就产生出了下面这个线性单元的梯度下降算法:

GRANDIENT-DESCENT(training_examples,η)

training_examples 中每一个训练样例形式为序偶<x→,t>,其中x→是输入值向量,t是目标输出值,η是学习速率。

初始化每个wi为某个小的随机值

遇到终止条件之前,做以下操作:

初始化每个Δwi为0

对于训练样例training_examples中的每个<x→,t>,做:

把实例x→输入到此单元,计算输出o

对于线性单元的每个权wi,做

Δwi=Δwi+η(t−o)(xi) (*)

对于线性单元的每个权wi,做:

wi=wi+Δwi (**)

这是批量梯度下降夏泽,如果是随机梯度下降,只需要在每次更新权wi时候,直接修改权值即可。也就是把公式(*)去掉,然后把公式()改为 wi=wi+η(t−o)(xi)

对于梯度下降的方式和方法,目前有三种方法,一种是批量梯度下降,也就是所有样例的误差总和全部加起来后,再去修改权值。第二种是随机梯度下降,也就是对每一个样例算出误差后,都会及时的把权值修改掉。第三种则是小批量随机梯度下降,它介于第一种和第三种之间,一次只把若干个(一般是5个)样例的误差总和加起来,修改权值。

当然还有其他的优化误差的方法,也不仅仅是随机梯度下降了。这个大家可以自行去查阅。下面是给出三种方法的对比表格:

随机梯度下降小批量态度下降批量梯度下降
每个样例的误差来更新权值几个样例的误差总和来更新权值所有样例的误差总和来更新权值
梯度下降幅度小梯度下降幅度大梯度下降幅度最大
能以较大概率避免陷入局部最小值能增加陷入局部最小值的概率有可能陷入局部最小值

2.3多层神经网络训练法则

前面2种都是单个神经单元的训练法则,下面这个才是真正的多层的神经网络训练法则,正式因为有了它,才让整个人工神经网络又活跃了起来,这就是反向传播算法。

下面这是2层的,不过多层的也是一样的。

BACKPROPAGATION(training_examples,η,nin,nout,nhidden)

raining_examples 中每一个训练样例形式为序偶<x→,t>,其中x→是输入值向量,t是目标输出值,η是学习速率。nin是网络输入的数量,nout是网络输出的数量,nhidden是隐藏层单元数。

创建具有nin个输入,nhidden个隐藏单元,nout个输出单元的网络

在遇到终止条件前:

对于训练样例training_examples中的每个<x→,t>:

把输入沿网络向前传播

把实例x→输入网络,并计算网络中每个单元u的输出ou

使误差沿网络反向传播

对于网络的每个输出单元k,计算它的误差项δk

δk←ok(1−ok)(tk−ok)

对于网络的每个隐藏单元h,计算它的误差项δh

δh←oh(1−oh)∑k∈outputswkhδk

更新每个网络权值wji

wji←wji+Δwij

其中Δwij=ηδjxji

这样一个随机梯度下降的包含两层sigmoid单元的前馈网络的反向传播算法就完成了。

3. 人工神经网络的归纳偏置

其归纳偏置是:在数据点间平滑插值,如果两边都为正例,则中间的值也为正例。

4. 反向传播算法的终止条件

反向传播算法的终止条件有3种。

迭代次数达到了一个固定值。

在训练样例的误差降到某个阈值以下时。

咋分离的验证样例集合的误差符合某个标准时。

5. 小结

这一章,我们主要针对了人工神经网络的4个问题进行了相关的总结,重点在于梯度下降法的推导和应用。下一节,我们将对评估假设的相关问题进行解答。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息