代码改变世界

神经网络从被人忽悠到忽悠人(二)

2016-05-22 18:36  GarfieldEr007  阅读(1783)  评论(0编辑  收藏  举报
Blog Picture

 

引子

Minsky说过神经网络无法解决异或问题。60年代关于神经网络的研究还取得了一定的进展,但是都没有取得重大的突破。70年代,神经网络的研究进入了萧条期,人工智能里产生了许多不同的方向,神经网络,好像被人们所忘记。

直到1986年,David Rumelhar和Geoffery Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,克服了Minsky说过神经网络无法解决异或问题,该算法是对神经网络受到批判的一个有力的回答。

其中Geoffery Hinton是神经网络的发展中一个重要的人物,对神经网络坚持,使得他获得了很高的成就,2013年加入google,成为google神经网络的领军人物。

Geoffery Hinton

BP神经网络

从感如器的学习算法可知,学习的目的是在于修改网络中的权系数,使到网络对于所输入的模式样本能正确分类。当学习结束时,也即神经网络能正确分类时,显然 权系数就反映了同类输人模式样本的共同特征。换句话讲,权系数就是存储了的输人模式。由于权系数是分散存在的,故神经网络自然而然就有分布存储的特点。

能够求出网络中的权系数,是神经网络的关键。在bp神经网络中,采用的是误差回传,从结果的误差,回传到中间层,利用梯度算法,计算权重,为了能实现梯度算法,故把神经元的激发函数改为可微分函数,例如Sigmoid函数:

最后又按负梯度方向修改权系数W的修改规则:

mu 是权重变化率,它视情况不同而取值不同,一般取0-1之间的小数。很明显,梯度法比原来感知器的学习算法进了一大步。其关键在于两点:

  1. 神经元的传递函数采用连续的s型函数,而不是阶跃函数;
  2. 对权系数的修改采用误差的梯度去控制,而不是采用误差去控制。故而有更好的动态特能,即加强了收敛进程。


bp神经网络算法的推导过程有点复杂,最后的结果为:

算法的执行的步骤如下:

  1. 对权系数Wij置初值。对各层的权系数置一个较小的非零随机数。
  2. 输入一个样本,以及对应期望输出。
  3. 计算各层的输出,对于第k层第i个神经元的输出,有:

4.求各层的学习误差,对于输出层有k=m,有

对于其他各层,有

5.修正权系数Wij和阀值θ

6.当求出了各层各个权系数之后,可按给定品质指标判别是否满足要求。如果满足要求,则算法结束;如果未满足要求,则返回(3)执行。这个学习过程,对于任一给定的样本和期望输出都要执行,直到满足所有输入输出要求为止。

许多问题

历史总是惊人的相似,神经网络的学者们再次登上了《纽约时报》的专访。人们认为神经网络可以解决许多问题。就连娱乐界都开始受到了影响,当年的《终结者》电影中的阿诺都赶时髦地说一句:我的CPU是一个神经网络处理器,一个会学习的计算机。


但是神经网络仍然存在若干的问题:尽管使用了BP算法,一次神经网络的训练仍然耗时太久,而且困扰训练优化的一个问题就是局部最优解问题,这使得神经网络的优化较为困难。同时,隐藏层的节点数需要调参,这使得使用不太方便,工程和研究人员对此多有抱怨。

又一次寒冬

Yann Lecun 1960年 出生于巴黎。1987年 在法国获得博士学位后,他曾追随 Hinton 教授到多伦多大学做了一年博士后的工作,随后搬到新泽西州的贝尔实验室继续研究工作。

在贝尔实验室,Yann Lecun 1989年 发表了论文, “反向传播算法在手写邮政编码上的应用”。他用美国邮政系统提供的近万个手写数字的样本来培训神经网络系统,培训好的系统在独立的测试样本中, 错误率只有 5%。

Yann Lecun 进一步运用一种叫做“卷积神经网络” (Convoluted Neural Networks) 的技术,开发出商业软件用于读取银行支票上的手写数字,这个支票识别系统在九十年代末占据了美国接近 20%的市场。

至今在 Yann Lecun的网站里还能看到Convoluted Neural Networks的算法,简称为LeNet 5,下图是算法的动态演示图,能够清晰的看到手写数字被正确的识别为相应的数字,对代码有兴趣的同学,github上有很多相关的LeNet 5代码。

然而神经网络还是存在着上面所述的缺陷,此时就在贝尔实验室,Yann Lecun临近办公室的一个同事的工作,又把神经网络的研究带入第二个寒冬。 (未完待续)

作者:林清漂

from: http://datartisan.com/article/detail/115.html