机器学习的衰颓兴盛:从类神经网路到浅层学习

1950年代电脑发明以来,科学家便希冀着利用电脑创造出人工智慧;然而,当时的硬体效能低落、数据量不足,随着通用问题解决机、日本第五代电脑等研究计画的失败,人工智慧陷入了第一次的寒冬。

人工智慧「现代链金术」的恶名,一直到1980年代开始才又复兴。此时科学家不再使用传统的逻辑推理方法,取而代之的是结合机率学、统计学等大量统计理论,让电脑能透过资料自行学会一套技能,称为「机器学习」。

机器学习方法有许多种不同的模型,此间爆发了两次浪潮,第一波兴盛的模型为「类神经网络」、又称人工神经网络。类神经网络在刚出现时大为火红,然而,在不久后却遇到了运算瓶颈,一下又没落了下去,1980年代中期,由其他机器学习模型,如支持向量机(SVM)模型作为主流。一直到2006年,多伦多大学的Geoffrey Hinton教授成功解决了类神经网络所遇到的问题、让类神经网络重新换上「深度学习」的名字卷土重来;如今深度学习技术对各大产业领域都将产生深远的影响,堪称第四次工业革命。

今天就让我们来谈谈,机器学习模型的第一波浪潮:人工神经网络原理和瓶颈;与第二波浪潮「浅层机器学习」如支持向量机,之所以一时间取代类神经网络、作为机器学习的主流热门技术的原因。

第一次浪潮:类神经网络 (Neural Network)
1950年代的人工智慧走入了漫长的寒冬期,直到1980间,机器学习方迎来了第一个春天,这个春天叫做「类神经网络」,为电脑科学家由生物大脑的神经元运作方式所启发、因而建立出来的数学模型。

1981年,美国神经生物学家David Hubel和Torsten Wiesel对于动物视觉系统的处理信息方式有了进一步的发现,因而获得了诺贝尔医学奖。

他们把猫的头骨开了一个小洞,向内插入微电击、埋入视皮质细胞中,然后在小猫眼前放置一个会投射出光影的布幕,并不时改变光影的角度、亮度与大小。经过数次实验与无数只小猫的牺牲,Hubel和Wiesel发现,不同的视觉神经元对于不同光影的反应不尽相同──在不同情况下的视觉神经元有着不同的活跃程度,甚至只对图像的某些特定细节有反应。

生物学上的神经元研究,启发了AI领域关于「类神经网络」(或称人工神经网络) 的概念。神经系统由神经元构成,彼此间透过突触以电流传递讯号。是否传递讯号、取决于神经细胞接收到的讯号量,当讯号量超过了某个阈值(Threshold)时,细胞体就会产生电流、通过突触传到其他神经元。

为了模拟神经细胞行为,科学家设定每一个神经元都是一个「激发函数」,其实就是一个公式;当对神经元输入一个输入值(input)后,经过激发函数的运算、输出输出值(output) ,这个输出值会再传入下一个神经元,成为该神经元的输出值。如此这般,从第一层的「特征向量」作为输入值,一层层传下去、直到最后一层输出预测结果。

至于神经元里面的激发函数公式是什么呢? 1957年,Rosenblatt提出了感知机(Perceptron)模型。将特征向量X1, X2, X3输入进感知机后,感知机会分别给予一个对应的权重,分别为W1, W2, W3。若特征向量和权重的内积结果大于某个阈值(Threshold)时,输出结果为1 (代表电流会传递)、若小于阈值则输出0 (代表电流不传递)。

利用感知机模型,可以解决机器学习的基本二分法问题:将类别仅分为0和1 。然而输出结果只有0和1,显得不太精确;感知机对线性分类有效,无法处理线性不可分的问题。什么是线性可分、和线性不可分的问题呢?比如说切开西瓜,可以发现里面有白色的籽和黑色的籽;如果白籽和黑籽的分布,能让我们用一刀切分开,就是线性可分;如果是要用椭圆或曲线才能切开,就是线性不可分。因此,线性可分的意义在于——我们能不能单纯用一条直线把两团资料点切分开。

由于感知机只能解决线性可分的问题,但现实中的分类问题通常是非线性的,因此针对线性不可分问题,类神经网络领域又发展出了不同的激发函数,比如使用Sigmoid函数,将「图片中有猫/没猫」的0和1标签、进一步细化成可能的机率──「图片中有猫/没猫」的机率是在0到1之间的任意实数,比如0.8807…(x= 2)、0.2689…(x=-1)。

因此「Sigmoid神经​​元」进一步被提了出来,使用Sigmoid函数作为神经元的激发函数。 Sigmoid函数即统计学上的逻辑回归,因为图形长得像一个S故有此称。

机器学习的核心概念是从资料中自行学会一套技能,并根据新给的数据、自行更正预测错误的地方、不断地优化技能。那么,类神经网络是如何从错误中进行修正学习的呢? 神经网络的学习过程可以分成下列两个步骤:

前向传播 (Forward-Propagation)
类神经网络采用监督式学习方法。在网络中,每一个神经元都是一个激发函数;多个神经元连接在一起、形成一个类似生物神经网络的网状结构,并分成了好几层。

当机器学习第一次「看」到一只猫咪的图片资料时,会将猫咪图片的特征向量透过神经网络从左向右传递过去,中间会经过特定几个神经元、经过各个神经元上的激发函数后产出最终的预测答案──比如最后预测出来的结果是0.1,机器学习认为这张图片里面很可能没有猫咪。

反向传播 (Backward-Propagation)
此时资料科学家会设定更正错误的方法──「代价函数」(Cost Function)。代价函数是预测结果和真实结果之间的差距。

如果预测完全正确,则代价函数值为0;如果代价函数值很高,则表示预测的偏误很大。所以我们的目标便是将代价函数优化到越小越好。

当预测结果和真实结果不一致时,两者间的差距越大就会让代价函数越大;因此,为了让预测结果越接近目标值、也就是代价函数达到最小,我们会将这个结果从右到左反向传递回去,调整神经元的权重以找到代价函数的最小值。

简单来讲,类神经网络就是先让资料讯号通过网路,输出结果后、计算其与真实情况的误差。再将误差讯号反向传递回去、对每一个神经元都往正确的方向调整一下权重;如此来回个数千万遍后,机器就学会如何辨识一只猫了。

1986年,Rumelhar和Hinton等人提出了反向传播算法,解决了神经网络所需要的复杂计算量问题,从而带动了神经网络的研究热潮。

此时的Hinton还很年轻,即便在后来神经网络遇到了瓶颈——反向传播的优化(找出误差的最小值)问题,学术界一度摒弃神经网络时,仍不离不弃对于神经网络的研究。也正是这股热情,使得30年以后,正是他重新定义了神经网络、带来了神经网络复苏的又一春;Hinton也因此被称为「深度学习之父」。

这边,就让我们来了解一下类神经网络究竟遇到了什么问题,以致差点一厥不振。

梯度消失问题——多层神经网络的挑战
当变数是线性关系时,代价函数J(Ө),也就是计算预测结果和实际真实数据之间的距离差距,将公式用图形画出来,能发现是一个凸函数。可以想像我们将一颗球从最高点开始滚落、很快就能掉到这个山谷的谷底 (最小值)。

也就是说,在面对线性问题时,模型能够很快地找到代价函数的最小值。

然而在真实世界中、变数之间的关系多半是非线性。比如当我们采用Sigmoid神经​​元时,由于Sigmoid函数不是线性函数,其代价函数 J(Ө) 便不是凸函数,意味着图形上有多个局部最小值。

将Sigmoid神经​​元的代价函数图形绘制出来后,可以发现在最高点丢下一颗球后,球可能会掉到某个下凹的地方就停止滚动了,然而那并非是全山谷最低的地方。也就是说,我们很容易仅找到局部最小值、而非全域的最小值。

这种寻找代价函数最小值的方法称为「梯度下降法」(Gradient Descent)。透过微积分计算出斜率 (导数),我们可以计算出山坡上最陡峭的那一个方向,这种微积分概念称为「梯度」。只要朝着梯度的方向走去,就是最快下降的道路了。

至于要从山谷中的哪一个地方降落、开始往下走呢?我们可以先随机选择一个斜率为初始值,然后不断地修改以减小,直到斜率为0。如此称为「随机梯度下降法」(Stochastic Gradient Descent)。

机器学习相当注重优化的问题──如何用更快的方式逼近最佳解。电脑科学家会去想:我该优化什么东西才好? 要怎么优化才会实际上增加我的收入、或解决某个实务上的问题? 要用什么方法达成这个优化?

像是我们在梯度下降法中讨论的收敛性值 (如何找到最低的谷底),即是机器学习的研究重点。机器学习重视实务问题上的使用情境差异,会尝试解决各种不同的问题、并寻找最佳的优化方式。

一层层的类神经网络听起来似乎很厉害。当年由Hinton等人首先提出了多层感知机、以及反向传播的训练算法,使得类神经网络在1980-1990年代鼎盛一时。然而,几乎让神经网络这个机器学习方法从此一蹶不振的问题,很快就出现了。这个问题叫做「梯度消失」(Vanishing Gradient)。

梯度下降法就像爬下谷底一样,从一开始很快的往下跑,越接近谷底时每个一梯度会逐渐变小、慢慢逼近最小值。

我们在一开始提到过,类神经网络的原理就是先让资料讯号通过网路,输出结果后、计算其与真实情况的误差。再将误差讯号反向传递回去,透过梯度下降法,让神经网络网路去逐一调整神经元的权重、不断优化直到误差最小、也就是代价函数达到最小值。

然而这种方法在神经网络具备多层的情况下,性能变得非常不理想,容易出现梯度消失问题——非线性问题的代价函数为非凸函数,求解时容易陷入局部最优解、而非全域最优解。

更糟的是,这种情况随着神经网络层数的增加而更加严重,即随着梯度逐层不断消散、导致其对神经元权重调整的功用越来越小,所以只能转而处理浅层结构(小于等于3),从而限制了性能。

如果说为了不让神经网络失真,仅能让资料来回传个1、2层,那还叫神经网络吗?人类的大脑可就有数千万层神经网络呢!与其使用理论难度高、训练速度慢、实际结果也只能传少少几层的浅层神经网络的情况下不比其他方法好,不如使用其他的机器学习模型。

第二波浪潮: 浅层机器学习 (Shallow Learning)
神经网络由于遇到了优化的瓶颈,以致一度没落。当时的学界只要看到出现「神经网络」字眼的论文或研究计画,便会立刻贬斥。多层的神经网络是不可能的,而若采用仅有两层的神经网络,不如使用其他更好上手、同样只有两层的「浅层」机器学习模型。

1990年代,各式各样的浅层机器学习被提出,其中支撑向量机 (SVM, Support Vector Machines)最广受欢迎。

同样是做资料的二分法,SVM是怎么做的呢?

要如何找出一条线、完美地将蓝球和红球切分开? 且两类群须距离这条线最远、以确定两群资料分得越开越好。这样新进资料进来的时候才不会容易掉到错误的另外一边、出现误差(Error)。

SVM会将原始资料投影到一个更高维度的空间里,在低维度不可切分的资料,在高维度便可以切分了。

SVM 理论上更加严谨完备,上手简单,得到主流学术界的追捧。此时人人都不相信神经网络的可能性。而支持向量机 (SVM) 技术在图像和语音识别方面的成功,使得神经网络的研究陷入前所未有的低潮。

此时学术界的共识是: 多层神经网络是个完全没有前途的死胡同。

究竟是谁重新改变了这一切、让多层神经网络在2006年时换上「深度神经网络」(Deep Neural Network; 又称Deep Learning, 深度学习) 的新名字、声势浩大地卷土重来呢? 还记得我们提过、对于神经网络不离不弃研究三十年的Hinton吗?他是怎么解决这个问题的呢?

在现今,深度学习已是人工智慧领域中成长最为快速的类别;下一篇就让我们来聊聊深度学习之父──多伦多大学Geoffrey Hinton教授的故事,与深度学习火热的应用趋势。

发表评论

电子邮件地址不会被公开。 必填项已用*标注