原论文出处:https://www.nature.com/articles/nature14539
by Yann LeCun, Yoshua Bengio & Geoffrey Hinton
Nature volume521, pages436–444 (28 May 2015)
找到一篇很好的翻译,转载收藏:
译者:零楚L(https://www.cnblogs.com/lingchuL/)
论文中大量使用貌似作者默认术语但又难以赋予合适中文意义或会造成歧义的词语及其在本文中将采用的固定翻译有:
representation-“特征描述”
objective function/objective-“误差函数/误差” 本意该是目标函数/评价函数 但实际应用中都是使用的cost function+正则化项作为目标函数(参考链接:https://blog.csdn.net/wills798/article/details/94590632) 所以本文直接将其意为误差函数 便于理解的同时并不会影响理解的正确性
这种量的翻译写下面这句话会不会太自大了点,不过应该也没关系吧。
看过这么多书里接受批评指正的谦辞,张宇老师版本的最为印象深刻:
我无意以“水平有限”为遁词,诚心接受批评指正。
那么,让我们开始这一切吧。
本文内容
- Nature Deep Review
- 有监督学习
- 使用反向传播(BP算法)训练多层次结构
- 卷积神经网络
- 使用深度卷积网络进行图像理解
- 循环神经网络
- 深度学习的未来
Nature Deep Review
摘要:深度学习能让那些具有多个处理层的计算模型学习如何表示高度抽象的数据。这些方法显著地促进了一些领域最前沿技术的发展,包括语音识别,视觉对象识别,对象检测和如药物鉴定、基因组学等其它很多领域。深度学习使用一种后向传播算法(BackPropagation algorithm,通常称为BP算法)来指导机器如何让每个处理层根据它们自身前面的处理层的“特征描述”改变用于计算本层“特征描述”的参数,由此深度学习可以发现所给数据集的复杂结构。深度卷积网络为图像、视频、语音和音频的处理领域都带来了突破,而递归网络(或更多译为循环神经网络)则在处理文本、语音等序列数据方面展现出潜力。
机器学习技术为当今社会很多领域提供了支持:从web搜索到社交网络的内容过滤,再到电商网站的商品推荐都有它的身影。它也越来越多地出现在相机和智能手机等消费品中。机器学习系统被用来检测图像上的物体,将语音转换为文字,根据用户的兴趣推送新闻、职位或产品以及选择搜索的关联结果。这些应用越来越多地开始使用被称为深度学习的技术。
传统的机器学习技术处理未加工过的数据的能力有限。近数十年来,构建一个图像识别或者机器学习系统一直需要精细的工程,以及大量的专业领域知识来设计出一个在输入端将未加工数据(比如一个图像的像素值)转化为合适的内部“特征描述”或者能够被学习子系统(通常是分类器)识别或分类的特征向量的特征提取器。
特征学习是一组方法,能让机器通过未加工数据自动发现并总结检测和分类所需的“特征描述”。而深度学习就是具有多层次“特征描述”的特征学习,通过一些简单但非线性的模块将每一层“特征描述”(从未加工的数据开始)转化为更高一层的、稍微更抽象一些的“特征描述”。使用足够多的这样的转化,那些非常复杂的函数也可以被学习。对于分类型任务而言,更高层次的“特征描述”能增强对识别能力非常重要的输入数据的各个方面,同时削弱(输入数据里)无关紧要的变化因素。比如一个图像以像素数组的形式输入,第一层的“特征描述”通常会表示图像的特定位置或方向是否存在边界,第二层可能会将图案拼凑起来以使它们和一些熟悉的物体的某部分相一致,之后的层次则会将这些部分组合起来并据此识别物体。深度学习的关键在于这些层次的特征不是人工设计的:它们是使用一种通用的学习步骤从数据中学习的。
深度学习在解决那些阻碍人工智能发展的问题上正在取得巨大进展。事实证明它非常擅长发现高维数据的复杂结构并因此可被应用于许多科学、商业和政治领域。除了打破了图像识别和语音识别的纪录之外,它还打败了其它被用于预测潜在药物分子活性、分析粒子加速器数据、大脑回路重构以及预测非编码DNA突变对基因表达和疾病的影响的机器学习技术。可能更令人惊奇的是,深度学习在自然语言理解方面给出了非常有前途的结果,特别是主题分类、情感分析、问答和语言翻译。
我们认为深度学习会在不久的将来取得更多的成就,因为它只需要非常少的操作工程,所以它可以很轻松地处理并利用不断增多的计算和数据。目前正为深度神经网络开发的新的学习算法和架构将会加速这一进程。
有监督学习
机器学习最常见的形式,不管是对深度学习还是传统的机器学习而言,都是有监督学习。想象一下我们想构造一个按照图像内容进行分类的系统,比如一个房子,一辆车,一个人或者一只宠物。我们首先会收集关于房子、车、人或者宠物的大量图像 ,每一个都按照它们的类别进行标记。在训练过程中,机器被展示一张图片然后给出一个表示图像对每种类别概率的向量输出。我们想让正确类别的概率在所有类别中相对最高,但没有经过训练的话这是不可能的。我们计算出一个误差函数来衡量输出与期望值之间的误差或距离(译注:刚才提到输出为向量)。然后,机器调整它内部的可调节参数来减小误差。这些可调节参数通常被称为权重,它们可被看作旋钮,是真正决定机器输入-输出函数的数字。在一个典型的深度学习系统中,通常有百万级的这样的可调节权重,以及百万级的用来训练机器的标记样本。
为了正确地调节这些权重向量,学习算法会为每一个权重计算一个梯度向量来指示所得误差会随着权重的小幅增减而增加或减少多少。然后权重向量就会被按梯度向量的相反方向进行调节。
由所有训练样本平均后所得的误差函数可以被视为权重值的高维空间中的一片丘陵。负的梯度向量指示着这片丘陵中下降最快的方向,也就是能更加接近最小值,使输出误差平均最小的方向。
在实际应用中,大多数从业者使用的是一套随机梯度下降(SGD)的算法步骤。它先展示某一些样本的输入向量,计算输出和误差,计算那些样本的平均误差,然后对权重进行相应的调整。这个过程会在很多由初始训练样本集中取得的小块样本集上重复,直到误差函数的均值不再减少。之所以称之为“随机”是因为每一小块样本集都会给出整个样本集的平均梯度的“噪声估计”。和许多精心设计的优化技术相比,这个简单的方法经常能够令人惊喜地快速地找到一套非常好的权重集。系统经学习过训练后,则会由另一套被称为测试集的样本进行性能评估。这能检测机器的泛化概括能力,也就是对在训练时从未见过的输入数据给出合理答案的能力。
许多现在对机器学习的实际应用都使用线性分类器对人工提取的特征进行分类。一个二元线性分类器会计算特征向量的一些分量的加权和。如果加权和大于了某个阈值,则将输入划入特定的某一类。
从1960年以来我们发现线性分类器只能把它们的输入空间分割成非常简单的区域,也就是用一个超平面把输入空间对半分开。但类似于图像识别和语音识别的问题需要一个对输入数据中那些不重要的变化不敏感的输入-输出函数,比如物体的位置、方向或者是光照情况,又或者是语音识别中音高或口音的差异,但同时,所得的函数还需要对一些非常微小的变化特别敏感(比如,一只白色的狼和一只和狼很相似的白色大狗萨摩耶)。在像素的层次上,不同图像上的姿势和所处环境不同的萨摩耶或许也会显得非常不同,然而不同图像上处于相同位置和相似背景中的萨摩耶和狼却可能非常相似。线性分类器,或者是任何其他在原始像素上进行操作的浅层分类器都不太可能在区别后两者的同时把前两者归为一类。这就是为什么浅层分类器需要一个好的特征提取器,通过提供对识别重要的但对无关变量不敏感的(例如动物的姿势)、严格筛选的图像特征来解决选择不变性的困难。为了让分类器性能更强,我们可以使用一些通用的非线性特征,比如通过核方法得到的(译注:此处原文对“核方法”有第20个引用说明,可在原文查看或直接搜索关键词),但如高斯核得到的通用特征无法让学习器得到很好的泛化概括结果。传统的选择是,手工设计一个良好的特征提取器,这需要大量的工程技巧和专业知识。但如果能用通用的学习步骤自动地学习出一些良好的特征,这些(麻烦)都可以被避免。这就是深度学习最关键的优势。
深度学习的结构是简单模块的多层次栈,所有或者绝大多数的模块都用来学习,以及很多模块都计算的是输入到输出的非线性映射。栈中的每个模块都将自身的输入转换来增强特征获取的有选择性和不变性。通过多个非线性层,比如5到20层,系统可以在对输入进行非常复杂的函数运算的同时保持对微小细节的敏感(如区分出萨摩耶和白色的狼)并对那些无关的巨大变化不敏感(如背景、姿势、光照和周围物体)。
使用反向传播(BP算法)训练多层次结构
在图像识别的最早期,研究者的目标一直都是用可训练的多层次网络代替手工设计得到特征。尽管提出的方案非常简单,但直到1980年代中期它才被普遍理解。实际证明,多层次结构可以用简单的随机梯度下降方法进行训练。只要模块对输入和内部权值是相对平滑的函数就可以使用反向传播操作计算梯度。在1970到1980年间,不同的团队独立地发现并证明了这一方法确实行之有效。
利用反向传播计算目标函数对于多层栈模块内部权重的梯度只不过是导数中链式法则的实际应用。关键的是误差关于模块输入的导数(或者梯度)可以由该模块输出(或者更后面的模块的输入)的梯度反向计算得到(如图1)。反向传播方程可以在所有模块中反复使用来传播梯度,从最上层的输出开始(也就是网络给出预测的部分)通过所有路径传播到底部(也就是接受外界输入的部分)。一旦这些梯度被计算得出,就可以简单地计算出每个模块内部权重的梯度。
图 1
a 一个多层神经网络(此处展示为连接的原点)可以将输入空间扭曲使数据的类别(图中的红蓝色线条)线性可分。注意左侧的输入空间的规则网络是如何同样被隐藏单元转换的(图中中间部分所示)。这里的是只有两个输入单元、两个隐藏单元和一个输出单元的说明性例子,但用于物体识别或者自然语言处理的网络包含高达百万级的单元。这张图经C.Olah的许可后复制(http://colah.github.io/)。
b 导数的链式法则告诉我们两个微小的变化(比如y中x的微小变化和z中y的微小变化)是如何结合起来的。x的微小变化量Δx先乘上偏导数∂y/∂x来转化为y的微小变化量Δy。用同样的的方式由Δy得到Δz。之后将前者代入后者就得到了由Δx乘上∂y/∂x 、∂z/∂y两个偏微分得到Δz的链式法则。该法则同样适用于向量(这时导数变为雅可比矩阵)。
c 一个拥有两个隐藏层和一个输出层的神经网络里用于计算前向传播的方程组,每一个都被视为一个可以用于反向梯度传播的模块。在每一层,我们首先计算出每一个单元的总输入,输入是上一层单元输出的加权和。然后对z使用一个非线性函数f(.)来计算得到单元的输出。简单起见,我们此处省略了偏置项(译注:可理解为线性函数kx+b中的常数项b,前文也提到最后需使得输入数据类别线性可分,但必过原点的超平面显然无法适用于所有情况)。神经网络中使用的非线性函数包括近几年非常常用的修正线性单元/线性整流函数(ReLU)f(z) = max(0,z) 和更加传统的sigmoid函数,如双曲正切函数 f(z) = (exp(z) − exp(−z))/(exp(z) + exp(−z)) 和logistic函数 f(z) = 1/(1 + exp(−z)) 。
d 用于反向传播的方程组。在每一个隐藏层中我们先计算误差函数关于每个单元的输出的导数,它是误差函数关于(前向传播时而言的)下一层的单元的输入的导数的加权和(译注:结合图更加直观,研究节点k,误差函数E关于它的输出yk的导数为E关于前向传播时下一层的节点l的输入zI的导数的加权和)。然后,我们将误差函数对最终输出的导数通过链式法则那样乘上f(z)的梯度,转化为误差函数对于原始输入的导数。在输出层,我们对成本函数进行微分来得到误差关于一个输出单元的输出的导数。如果成本函数是0.5(yl − tl)^2 ,误差导数就是 yl − tl,其中tl是单元l的输出期望值。一旦我们知道了∂E/∂zk,误差函数关于从单元 j 到单元 k 的权重的导数就是 yj * ∂E/∂zk了。
许多对深度学习的应用都使用了前馈传播神经网络结构(如图1),用来学习从固定大小的输入(如图像)到固定大小的输出(如其属于每种类别的概率)的映射。从每一层到下一层的过程中,单元们计算出由它们上一层得到的输入的加权和并对结果使用一个非线性函数后传播。如今最流行的非线性函数是ReLU,它就是一个半波整流器。在过去几十年间,神经网络使用的是更平滑的非线性函数,如tanh或者是1/(1 + exp(−z)),但ReLU通常能在拥有许多层的网络中学得更快,因为它能让神经网络在不进行无监督预训练的情况下直接进行深度的监督训练。除输入和输出层以外的单元传统来说都被称为隐藏单元。隐藏层可以被看作是在用非线性的方式扭曲输入空间来让数据种类在最后一层变得线性可分(如图1)。
在1990年代后期,神经网络和反向传播被机器学习界普遍抛弃并同样被计算机视觉和语音识别界忽视。曾经人们普遍认为学习可用的、多层次的、使用极少先验知识的特征提取器是不可行的。尤其是,人们曾普遍认为简单的梯度下降会导致局部最小解。
在实际应用中,局部最小解很少成为大型神经网络的问题。不管如何配置初始化,系统几乎总是得到效果差不多的解。最近的理论和经验结果表明,局部最小解总体来说并不是什么严重的问题。相反,解空间中充满了大量的鞍点,在这些点上梯度都为0,而绝大多数鞍点周围平面都向上弯曲。分析表明只有少数情况下会出现大量周围平面全都向下弯曲的鞍点,但几乎它们中所有的解都非常接近目标函数。因此,算法不管结束在哪个鞍点都没有太大影响。
一个由加拿大高级研究所(CIFAR)组织成立的研究团队让人们在2006年左右重新对深度前馈网络产生兴趣。研究者们介绍了一种无监督学习流程,可以在不使用标记数据的情况下得到层次化的特征检测器。每一层特征检测器的目标都是对上一层特征检测器的活动或者是初始数据进行重构或建模。通过预训练若干层使用该重构目标的而又逐渐复杂的特征检测器,深度网络的权重可以被初始化为符合实际的值。在网络的顶部添加最后的一层输出单元,然后就可以使用标准的后向传播对整个深度系统进行微调。这在识别手写数字和行人检测方面效果极佳,特别是在标记数据非常少的情况下。
这种预训练方法的第一次主要应用出现在语音识别领域,便于编程并且能让研究者以10倍到20倍的速度进行训练的快速图像处理单元(GPUs)的出现让这一切成为可能。2009年,这个方法被用来获得将从声波中提取的短时间窗口映射为不同的语音片段的概率。它用少量的发音样本给出了创纪录的语音识别结果,并且很快通过使用更多的发音样本得到了发展。2009到2012年之间,深度网络经许多主要的语音识别团队发展并被使用到了安卓手机中。对于更少的数据集,无监督的预训练可以帮助减少过度拟合情况的发生,在数据数量很少或者有大量输入样本却缺少目标样本的情况下具有显著更好的泛化概括能力。但深度学习恢复了名誉之后,事实证明其实只有数据集很小的情况下才需要预训练阶段。
(译注:这几段看起来逻辑非常松散,但大概就是作者在对前文提到的曾经人们对神经网络的两个主要质疑的举例解释:人们认为只使用较少先验知识的学习系统不存在,但其实上段提到学习数据集并不需要特别大;人们认为梯度下降陷入局部最小解会得出错误模型,但这在实际应用和最近的理论研究被证伪)
然而有一种深度前馈网络,它训练起来更容易,同时也比上述将邻近层次全连接的网络拥有更好的泛化概括结果。它就是卷积神经网络(ConvNet)。它在神经网络不受宠的时候取得了许多实际的成功,并且最近几年在计算机视觉界被广泛使用。
(接下来,是大名鼎鼎的卷积神经网络。在这样正应该辅助图示和数学运算进行说明的部分作者们依然使用了类似科普文的文风,读起来有些使人摸不着头脑,建议在阅读该部分文字后,也就是有了总体认知之后,配合这篇笔记或其它资料加深细节理解:https://www.jianshu.com/p/49b70f6480d1)
卷积神经网络
卷积神经网络被设计来处理高维数据,比如一幅由三个包含了不同颜色通道像素(RGB)的二维数组组成的彩色图像。许多数据都以高维数组的形式呈现:比如一维的信号和序列,包括语言文字;二维的图像或者音频的频谱图;三维的视频或者有声音的图像。卷积神经网络通过四个关键方法利用这些自然信号的属性:局部连接、共享权重、池化和多层次结构使用。
一个典型的卷积神经网络由一系列阶段组成(如图2)。最初的几个阶段由两种层次结构组成:卷积层和池化层。卷积层的单元被组织在不同特征图中,每个单元都通过过滤器形式的权重连接着前面层次的特征图的一小块。随后将该层的加权和输入到如ReLU之类的非线性函数。同一个特征图中的每个单元都共享着同样的过滤器形式的权重。每一层中不同的特征图使用不同的过滤器组。之所以设计成这样有两点原因:第一,在图像之类的数组数据中,局部的一组值通常高度相关,组成了特殊的且检测方便的局部图案;第二,对图像或其它信号的局部统计与其统计位置无关。换句话说,如果一个图案能在一个部分出现,那它应该能在任何地方出现,因此不同部分的单元应当共享着同样的权重并在数组不同的部分检测相同的模式。数学上来说,这种用特征图进行的过滤操作是一种离散卷积,卷积神经网络也因此得名。
图 2
图为一个被应用于识别萨摩耶犬(底侧左边和右边的RGB图)的典型的卷积网络每层(水平方向为层次)的输出结果(不是过滤器)。每个矩形图像都是一个在每个位置检测学习到的特征的特征图。信息自下而上传递,低层次的特征表现为定向边界检测器,然后系统输出图像属于每个种类的概率。
卷积层的作用是检测上一层特征的局部连接,而池化层的作用是将语义上内容相似的特征合并。组成某一图案的几个特征的相对位置可能有些变化,所以对图案的可靠检测可以通过粗略化每个特征的位置来实现。(为达到这种粗略化效果,)一个典型的池化层单元会计算一个特征图或一些特征图中的最大单元。邻近的池化层单元只以那些移动了一行或一列以上的小块图案为输入,从而减少的特征的维度并增强了对微小偏移和扭曲的不变性。在卷积层的二到三阶段,非线性和池化层大量堆叠,并加上了更多的卷积层和全连接层。在卷积神经网络中使用反向传播梯度就和普通的神经网络一样简单,这使得每个过滤器组中的每个权重都可以得到训练。
深度神经网络利用了很多自然信号都是层次化的这一属性,让高级特征通过低级特征组合得到。在图像中,局部边缘组合产生小块图案,图案合并为更大的不同部分,不同的部分组成完整的物体。同样地,这种层次体系也存在于语音和文本中,从音素(译注:区分单词的最小语音单位)到音节、单词再到句子。池化能让每一层的“特征描述”随着前一层位置和外观的微小改变作出细微调节。
卷积神经网络的卷积层和池化层的概念灵感来源于神经科学中对简单神经细胞和复杂神经细胞的经典观念,它们的总体构架则让人联想到视觉腹侧通路中的LGN–V1–V2–V4–IT层次结构。当同一幅图像被展示给卷积神经网络模型和猴子的时候,卷积网络中高层次单元的激活过程达到了猴子下颞叶皮质中160个随机神经元的变化的一半。卷积神经网络受着神经认知学的影响,后者的架构和卷积神经网络有点相似,但却缺乏反向传播这种端到端的有监督学习算法。一种早期的被称为时延神经网络的一维卷积神经网络曾被用来进行相似音素和单词的识别。
从1990年代开始,卷积网络就以时延神经网络的形式被大量运用于语音识别和文档阅读领域。文档阅读系统使用一个概率模型训练了一个卷积神经网络来约束阅读的语言类型。直到1990年代末期这个系统阅读了美国超过10%的支票。之后,微软开发了一些基于卷积神经网络的字符识别和手写体识别系统。在1990年初期,卷积神经网络同样进行了自然图片的物体检测的实验,比如脸和手,以及人脸识别。(译吐槽:看这穿越剧般的先后叙述时间线)
使用深度卷积网络进行图像理解
自2000年以来,卷积神经网络就被成功运用于图像的检测、分割、物体识别和图像的其它领域。这些任务拥有相对来说大量的标记数据,如交通信号灯的识别,生物图像分割以及自然图像中的人脸、文本、行人和人体检测。
重要的是,图像可以在像素层次上被标记,这将在如自主移动机器人和自动驾驶等技术上得到应用。Mobileye和NVIDIA等公司将这种基于卷积神经网络的方法应用在它们即将用于车载的视觉系统上。其它重要的应用则涉及到自然语言理解和语音识别领域。
尽管取得了这些成功,卷积神经网络曾被主流计算机视觉界和机器学习界大规模抛弃,直到2012年的ImageNet比赛。当深度卷积网络被应用在一个大概百万张涵盖了一千种不同类别的网络图像的数据集上时,它得到了引入注目的结果:它的误差率只有当时比赛中竞争者的一半!这次成功有来自GPU、ReLU、一种被称为dropout的全新正则技术和通过扭曲变换现有样本来生成更多训练样本等技术的贡献。这项成功为计算机视觉界带来了一场革命。卷积神经网络现在成为了几乎所有识别和检测项目的主要方法,并且在某些任务上达到了人类的识别水平。最近一个令人震惊的例子是结合卷积神经网络和循环神经网络(递归网络)模型来生成图像标题。
图 3
图中为由能将高层次特征转为标题的循环神经网络(RNN)用各自右侧额外展示出的由卷积神经网络(CNN)从测试图片中提取的特征生成的标题(过程如顶部所示)。图片在ref.102的许可下进行复制。当RNN能专注于所给图片的不同局部部分时(图中的中部和底部图片集;图中亮度更高处)它就能和生成单个单词(图中粗体文字)一样工作,人们发现能利用这点来实现图片对文字的更好转换。
近年来的卷积神经网络架构拥有10到20层ReLU函数,百万级的权重集以及十亿级的单元间连接。尽管在两年前训练如此庞大的网络可能需要几周,但现在硬件软件的发展和并行性算法让训练时间减少到了几小时。
基于卷积神经网络的视觉系统的表现让包括谷歌、Facebook、微软、IBM、雅虎、推特和Adobe在内的绝大多数主流技术公司和很多正在成长的互联网公司开始研究和开发基于卷积神经网络的图像理解产品和服务。
卷积神经网络很容易在芯片和现场可编程门阵列(FGPA)的硬件环境下被高效实现。很多如NVNIDIA、Mobileye、英特尔、Qualcomm和三星等公司正在开发卷积神经网络芯片来实现智能手机、相机、机器人和自动驾驶汽车中的实时视觉功能。
(依然是科普文形式文风,已经有点想放弃翻译了,可以以“distributed respresentations/分布式表示”找到该部分更多扩展资料)
分布式特征和语言处理
深度学习理论向我们展示了深度网络相比于没有使用分布式特征的经典学习算法而言拥有的两个巨大的优势。这两个优势都来源于组合的能力并且依赖于结构合理的生成数据分布。第一,学习分布式的特征能让系统对已学习特征值的新组合方式具有泛化概括能力(如n元特征就有2n种可能组合);第二,深度网络对不同层的“特征描述”的组合带来了另一种潜在的巨大优势(译注:原文此处只附加了一个引用,没有其它详细说明,引用论文名为On the number of linear regions of deep neural networks)。
一个多层神经网络的隐藏层学习如何描述网络的输入来使预测目标输出更容易。一个很好的例子是,通过训练多层次神经网络来利用本地文本中已有的单词预测下一个单词(译注:此句引用Advances in Neural Information Processing Systems )。上下文的每个单词都以“N分之1向量”表示,也就是只有一个位置的值为1其余位置值皆为0的向量。在第一层,每个单词创建出不同的单词向量(如图4)。在一个语言模型中,网络的其他层学习如何将输入的单词向量转化为作为输出的预测单词向量,以此来预测词汇表中每一个单词成为下一个单词的可能性。网络通过许多激活组件学习单词向量,每个激活组件都可以理解为单词的一个特征分量,就像我们之前用分布式特征进行学习那部分那样。这些(分布式的)语义结构没有被明确地表现在输入中,而是由学习流程发现出来的,这是一种将输入和输出间结构化关系分解为多个“微规则”的好方式。学习单词向量的方法被发现在单词集来自于真实文本和个别微规则不可靠时也表现得非常好。当它被训练用来预测新闻中的下一个词的时候,如“星期二”与“星期四”、“瑞典”与“挪威”之类的单词之间的单词向量可能非常相似。这样的特征被称为分布式特征是因为它们的特征并不互斥并且它们的许多配置信息与观测到的数据变化一致。这些单词向量由神经网络自动学习到的特征组合而成而非由专家事先定义。从文本中学习单词的向量特征的方法如今已被广泛应用于自然语言的应用中。
图 4
图中左侧是为语言建模学习到的单词“特征描述”,利用t-SNE算法可视化得到。右侧为一个由循环神经网络学习到的英语到法语短语的二维“特征描述”。可见语义上相似的单词或单词集被显示在相近的位置。这些单词的分布式特征可以用反向传播学习每个单词的特征以及学习一个预测下一个单词的(对于语言建模而言)或一整句翻译(对于机器翻译而言)的函数来得到。
“特征描述”处于逻辑启发(logic-inspired)和神经网络启发(neural-network-inspired)的探讨争论的中心。在逻辑启发的观点中,一个符号的实例应该是一个既不能被其它符号实例定义也不能无法被其它符号实例定义的东西(译注:虽然初读很矛盾,但想想好像有道理)。它不应该有和它的使用相关的更内部的结构。而在符号语义上,它必须和推理规则中的变化严格对应。相比之下,神经网络只是使用大型的激活向量、很多权重矩阵和标量非线性化来表现出支持常识推理的“直觉”推断。
在介绍神经语言模型之前,先介绍下没有使用分布式表示的标准语言统计模型:这种方法基于统计短符号序列的出现频率,一直计数到N为止(称为N-grams,N元)。N元的可能取值情况约为VN,其中V表示词汇表的大小,所以一个拥有大量单词的文本会需要数量非常巨大的语料库。N元把每个单词都视为原子单元,这导致语义上关联的单词也无法被概括为一类,但神经语言模型就可以,因为这些模型会将每个单词和一个实数特征向量关联,这样一来语义上关联的单词最后就会在向量空间中隔得很近。
循环神经网络
当反向传播方法被首次引入(深度学习界)时,它最令人兴奋的应用是训练循环神经网络(RNNs)。那些需要序列输入的任务,比如语音或语言文字,通常更宜使用它(如图5)。循环神经网络在每个时刻只处理一串输入序列的某一个元素,并在其内部的隐藏单元中维持一个隐式包含着处理过的每个序列元素的历史信息的“状态向量”。当我们把单个隐藏单元在不同时刻的输出当作之前深度学习网络中不同神经元的输出来研究思考,就能明白如何使用反向传播来训练循环神经网络了(如图5右侧)。
图 5 一个循环神经网络以及将其按时间前向进行的计算过程展开
人造神经元(如图中所示的t时刻值为st的s单元下的几个隐藏单元)从其不同时刻抽象出的“前一个神经元”获得输入(在左图中由黑色方块表示,表示一个时间步长的延迟)。以这种方式,一个循环神经网络可以将输入序列Xt映射为输出序列Ot,每个Ot都由所有Xt’共同影响(t’≤t)。相同的参数(图中矩阵U,V.W)作用于每个时间步长/时间间隔中。这一过程也可以有其他的结构,一种变体是网络生成的输出序列(如单词)每个都用来当作下一时刻的输入。反向传播算法可以直接用于图中右侧所示的计算过程,来计算总误差(如生成正确输出的对数概率)关于每一时刻的st和每个参数的导数。
循环神经网络是非常强大的动态系统,但训练它们被证明是有问题的,因为反向传播的梯度要么只增长要么只减少,所以多次时间步长之后它们通常会变得极大或者完全消失。(译注:原文为vanish,但译为归零的话按之前说法不就正是想要的训练结果了么,但消失又是什么意思呢。这个vanish的具体含义待译者学习后再回来修改)
得益于它们结构和训练方式的改进,人们发现循环神经网络非常擅长预测文本中的下一个字母或者序列中的下一个单词,但它们也可以用来完成更复杂的任务。比如,一个一个单词地阅读完一句英语之后,一个英语的“编码器”网络就可以被训练,其内部隐藏层的状态向量将能很好地表征这句话表达的意思。这个表征句子含义的向量随后可以被用来作为另一个连带被训练的法语“解码器”的隐藏层的初始值(或者是作为其外界的额外输入),这次输入对应的输出是翻译成的法语句子里第一个单词的概率分布。如果该分布中的某首单词被选择作为“解码器”网络的第二次输入,它又会经网络给出句子中第二个单词的概率分布,这一过程不断重复直到句号为止。这个过程概括来说就是根据英语句子决定的概率分布来生成法语单词序列。这个有点稚拙的机器翻译方法迅速地成为了顶尖翻译方法的竞争者,而这也带来了一个严肃的疑问:理解一个句子是否需要任何由推理规则操纵的内部特征?这种方法更符合这样一种观点:日常的推理中包含着许多同时发生的类比,而每次类比都增加了所得出结论的可信度(译注:因为这个翻译方法对每个单词的后接词都进行的是概率上的选择,相当于进行类比)。
接下来不阐述如何将法语句子根据其含义翻译为英语,我们介绍将根据图像的含义将其“翻译”为英语(如图3).这里的“编码器”则是一个将像素转变为激活向量的深度卷积神经网络。而“解码器”则类似于工程再机器翻译以及其它神经语言模型中使用的循环神经网络。近几年来人们对这种系统的兴趣激增(参考ref.86中提到的例子)。
循环神经网络,只要按时间将其展开,就可以被视为一个所有层次共享相同权重的深度前馈网络。尽管他们的目标是学习获得长期的知识,但理论和实验经验表明它们很难学会储存信息很长时间。
为了解决这个问题,一个想法是为网络增加外显记忆。第一个属于此类想法的提议是使用特殊隐藏单元的长短期记忆网络(the long short-term memory, LSTM),它能长期地记忆输入数据。一个被称为记忆细胞的类似于累加器或者是门控神经元的特殊单元:它和下一个时间步长的自己以权值1相连,这样一来,它就能复制自己的实数状态并累加外界信号。这种自连接以倍数为限定,由另一个学习单元决定何时将其存储的内容清空。
长短期记忆网络随后被证明比传统的循环神经网络更有效,特别是当他们系统中每个时间步长都有多层次结构的时候,这让一个能从自然音频到抄写得到字符序列的完整语音识别系统的实现成为可能。长短期记忆网络和其它门限单元目前被被用于“编码器”“解码器”网络,它们在机器翻译领域表现得非常不错。
在过去几年中,一些作者提出了给循环神经网络添加记忆模块的不同提议。包括给网络增加一个类似于磁带的记忆体的神经图灵机器(Neural Turing Machine),这让循环神经网络可以对记忆体进行读取写入;还有记忆网络(memory network),这种方法给一个普通网络添加了一种联想记忆体。记忆网络在标准的问答领域表现不凡,记忆体会记住一段故事来回答之后被问到的问题。
除了简单的记忆,神经图灵机器和记忆网络还被用于需要推理和符号操作的任务。神经图灵机可以学会“算法”。当给它们的输入包含了一个未排序的符号序列,其中每个符号有一个实数值标记其优先级时,它们可通过学习输出一个符号的排序列表。记忆网络可以被训练用一个类似于文字冒险游戏的方式来跟踪世界的状态,它们可以回答需要复杂推理的问题。在一个测试样本中,网络被展示了一段有15个句子的指环王的文本并正确地回答了如“佛罗多现在在哪儿”的问题(译注:AVG和指环王我吹爆!(拍飞,这种事不要往译注里写好吧))。
深度学习的未来
无监督学习重新唤起了人们对深度学习的兴趣,但现在它的光辉被监督学习的成功所掩盖。尽管我们在此篇文章中没有关注它,我们仍希望非监督学习能在未来变得更加重要。人类和动物的学习都是非监督的:我们通过观察世界来发现世界的架构,而不是通过被告知每个事物的名字。
人类的视觉是一个智能的、基于特定目标的主动过程,我们眼睛中的视网膜能以一个小的高分辨率的部分和周围大的低分辨率的部分来采样所看见的光学阵列。我们希望未来那些使用了强化学习(reinforcement learning)来决定应该集中“看哪儿”的结合了卷积神经网络和循环神经网络的端到端训练系统能在视觉领域取得更多的进展。结合深度学习和强化学习的系统还处于发展的最初期,但它们在分类任务上的表现已经优于被动视觉系统,并且在学习如何游玩不同的电子游戏的方面取得了令人印象深刻的成果。
自然语言理解是另一个深度学习准备在未来几年间取得巨大进展的领域。我们希望使用循环神经网络来理解句子和完整文档的系统能拥有在每一时刻选择性地处理某部分的策略,这会让它们的理解表现更好。
最终,人工智能领域的主要进展将来自于将特征学习和复杂推理结合起来的系统。尽管深度学习和简单的逻辑推理已经被应用于语音识别和手写文字识别很久了,但基于规则的字符表达式操作仍需要被操作大型向量的新范式取代。