二十一世纪计算 | John Hopcroft:AI革命

2017-11-24 | 作者:微软亚洲研究院

编者按:信息革命的浪潮浩浩汤汤,越来越多的人将注意力转向人工智能,想探索它对人类生产生活所产生的可能影响。人工智能的下一步发展将主要来自深度学习,在这个领域中,更多令人兴奋的话题在等待我们探讨:神经网络、图像识别、语言翻译······

本文是第十九届“二十一世纪的计算”大会精选系列的第四篇,康奈尔大学计算机系教授、1986年图灵奖获得者、电气电子工程师学会(IEEE)及美国计算机协会(ACM)院士John Hopcroft将就AI革命这一话题为大家带来精彩讲解。


康奈尔大学计算机系教授,1986年图灵奖获得者
电气电子工程师学会(IEEE)及美国计算机协会(ACM)院士John Hopcroft

(以下为John Hopcroft分享的精简版文字整理)

一百多年前,工业革命成功帮助人类实现了许多物理任务的自动化。而现在,我们正面临一场前所未有的信息革命,越来越多的人将自动化构想投射到智能任务上,而这势必会对人类生活产生深刻的影响,深度学习就是其中一个非常重要的方面。

在1960年左右,研究者开始对阈值逻辑单元展开研究,如果我们在这里放入一个信号,这个设备就有一个输出的信号:0和1。它的工作原理是每一个输入都有一个权重,这个设备它会计算去预测输入乘以权重。如果说最后得出的结果是超过了某一个阈值T的话,它的结果就是输出就是1,否则的话就是0。研究者所做的工作,他们开发出一种技术,这个技术是去训练这个设备,让它能够识别不同的信号。

相应的我们有一个训练阈值逻辑单元的算法——感知器算法。首先我们要根据第一个模式对权重赋值,并对每一个模式进行测试,检测它们的分类是否正确。如果一个模式的分类发生错误,当期望输出为1时,则将权重加上这个模式的值;反正当期望值为0时,则将权重减去这个模式的值。用该过程不断检测所有模式,直到实现全部模式的正确分类。

其中有一点需要注意的是,最后的权重因子应该是所有模式的线性组合,原因在于每一次修改权重因子时,我们都是加或者减一个模式的值,最终结果就是这个权重因子是一个模式的线性结合。支持向量机就是在此技术基础上进化而来的。我们所做的就是训练这个单输出门的设备,让它正确地完成模式分类,就像它们是可以线性分割的一样,希望可以实现一边的输出是1,另外一边输出的是0。

现在的问题就是,有多少状态是可以进行线性分割?实际上这个数量并不多。这时我们就需要把这些数据映射到更高维的空间,然后再来解决这个问题。我给一个简单的例子来向大家展示一下我们怎么样实现映射。原始的数据是二维的,我把它称为X&Y,现在我要做的就是要把这个数据映射到一个三维的空间。我有一个Z轴,而Z轴的值将会是X平方加上Y平方,它可以实现的就是把一些元素从平面上拿出来变成立体的,这样你就可以看到这些数据可以用一个跟之前平面平行的平面来进行分割。这是一个非常简单的例子,但是它就是我们所谓的支持向量机的工作原理。

我们经常会遇见这样的情况,将这样的数据映射到一个无限的空间,如此一来它可以更加容易地进行线性分离,无需去计算每一个个体的图像映射值,因为我们所需要知道的就是最后的图像映射值之间的乘积是什么。那么什么样的矩阵能够表达样本在高维空间的内积?如果K是一个半正定矩阵,那么存在一个高维映射函数使得K是其的内积矩阵。核函数和样本的高维空间映射是支持向量机的本质。

人工智能的下一步发展将主要来自于深度学习,在深度学习领域有很多非常令人兴奋的话题值得深入研究和讨论。深度学习为什么会到来?比如说我们要训练计算机进行图像分类,针对ImageNet这个比赛,在2011年,人类能够实现的图像分类最低错误率是25%,并且一年内并没有突破性的改进。但2012年,我们开始启用AlexNet进行图像分类,错误率立刻就降低到15%,这吸引了所有人的注意;两年后,GoogleNet把错误率降低到6.7%,而一年后微软亚洲研究院提出的152层深度残差网络ResNet更是将错误率降至史无前例的3.5%,目前计算机图像分类已经远超5%错误率的人类水平。

学习理论有两种:一种是有监督学习,例如,首先我们需要将有标签的数据用于训练特定网络模型,根据标签调整模型权重使它能对输入数据正确地分类。这个过程是用一个叫梯度下降的技术实现的,具体是根据误差对权重的导数来调整权重值。另外一种是无监督学习,例如,首先我们将图像输入网络模型,但是不是对它进行分类,而是让模型重新生成相同或相近的图像,从而使其从没有标签的数据中学习得到图像的表示。比如无人驾驶,要设想所有可能遇到的情景对机器进行训练是不现实的,因此我们会选择给它一个方法,让它实现自我学习。

接下来要说的神经网络跟之前的神经网络结构不太一样,所使用的神经网络结构因用途而不同,我在这里主要关注图片数据。大家使用卷积神经层来处理图片数据,具体做法是使用一个3×3的方格逐行逐列扫描整张图片,然后将其中的9个像素值以相同的权重值输出到下一层的一个门中。这个3×3的窗口是用来识别一个特征的,比如拐角、边沿、眼睛或者鼻子。然后在这些卷积层后面放置池化层,池化层用于减少网络的规模,比如将2×2的窗口中的元素平均值或最大值输出到下一层。AlexNet包含了5个卷积层和3个全连接层,这个网络真正开始了深度学习。

接下来我想谈一谈“激活空间”的概念。如果你把一个图像放进来,你可以尝试在不同层的门计算每一个门的值。给定某一个图像的话,比如说它有固定的门的输出量,我称之为“激活空间”或者叫“矢量空间”。这里有一个矩阵,横轴是网络中的门,纵轴是图像。这里的矢量可以看行也可以看列,行指的是在某一个门中,它会告诉你图像对应的门到底有多少个;看列的话,对于某一个图像,它到底里面有多少个门。

从激活矢量的角度来说,我们去不断寻找激活矢量就能够反推出这个图像。如果把这个图像放到卷积神经网络中,激活矢量就会组成一个矩阵,我们称之为图像的风格。这个矩阵之所以和风格有关系,是因为它能够告诉你与它比较相近的的风格或者特点。卷积神经网络可以帮助我们实现图片的风格迁移,比如说以康奈尔大学这张图片作为原始内容,把这张中国画作为风格信息,这两者相组合就能够出来不同的风格效果。

另外一点非常有意思的是,基于我们现有的设备,进行深度神经网络训练通常需要几周时间。问题就在于这些网络是否必须经过训练才能够做出不同风格的照片,还是用随机权重去重新制作照片也能达到同样的效果。我们需要研究的是如何又快又好地对网络结构进行表现评估,加速我们网络训练的时间。

我还想给大家留下一些非常值得研究的问题。每一个门能够学到什么东西?随着时间的流失,这些门是如何学习的?如果我将一个网络训练两次,最开始用随意权重进行训练,网络和门学习到的最终结果是否一样?其中一点,当你在训练一个网络时,你肯定有很多训练数据,其中可能会有很多本地小的数值,错误率非常相近。我们的问题在于,哪一个训练的网络能够有更强的规划能力?也就是说,同样的测试数据,哪个结果会更好。从统计学角度来说,训练数据实际上是从一个大的数据集当中选出来的,所以这个全数据集的错误率不应该和选取一部分的数据集的错误率有太大的差别。但是其实我们发现其实在某些地方,在使用不同权重之后,使用训练数据和全数据的错误率差别还是非常大的。深度神经网络的损失函数有很多局部极小值点,有些极小值比其他的好。如何保证我们在训练的过程中能够找到一个好的局部极值点?这是很值得研究的方向。

还是回到语言学习,有实验表明,同时学习两门语言会使得其中一门语言更加熟练。因此如果有两项任务,我们是应该分开学还是应该一起学?如果我们一前一后学习两项任务,这两项任务是否在不同的激活区域?对于孩子而言,如果让他们在很小的年纪就学两种语言,这两种语言共享大脑同一块激活空间。但如果他们成人以后再学一种语言,这两种语言就是放在大脑不同的位置。

一个当前比较火的例子就是生成式对抗网络,这两个网络就属于一前一后学习的情况。我们以语言翻译为例,首先我们会先列举一些英语单句,并找出一些与之对应的德语词汇。其次我们要生成一个判别器,用于判定放入的德语词汇到底能够组成一句完整的句子,或者仅仅只是单词的集合。在反复训练和测试中,这个判别器最终也难以分辨出某句话是机器生成还是自然语言,这能够帮助我们实现相当不错的翻译效果。

大量的数据赋予我们训练网络的能力基础,最近深度神经网络很火,但是深度神经网络很容易被欺骗。

上图所示有两只人眼看来几乎没有区别的猫,左边的猫能够被正确识别出来,但右边的却被错误识别为汽车,原因就是右边的图改动了几个像素,导致了深度神经网络的识别错误。因此尽管深度神经网络可以在某些特定的任务特定的数据集上达到甚至超过人的水平,但是它并不是真正的人工智能,距离人的智能还有很长的路要走。

经常会有人问我:“人工智能实现了吗?”在目前的发展阶段,我觉得人工智能实际上就是高维空间的模式识别,以图像识别为例,人工智能无法做到抽象物体的功能或其他属性。

想要学习演讲全文,请戳下方视频观看:

标签