2015-nature-deep learning-LeCun, Bengio and Hinton

2015-nature-deep learning-LeCun、Bengio和Hinton

摘要:深度学习利用拥有多个处理层的计算模型来学习具备多层抽象的数据的表示。这些方法显著提升了许多方面的最高水平,包括语音识别、视觉对象识别、对象检测和许多其余领域,例如药物发现和基因组学等。深度学习可以发现大规模数据集中的复杂结构。它利用BP算法来完成这一发现过程。BP算法可以指导机器如何修改其内部参数,这些参数用于从前一层的表示计算出当前层的表示。深度卷积网络在处理图像、视频、语音和音频方面带来了突破,而循环网络在处理序列数据,好比文本和语音方面表现出色。html

机器学习技术为现代社会的许多方面提供了动力:从网络搜索到社交网络上的内容过滤,再到电子商务网站的推荐,并愈来愈多地出如今相机和智能手机等消费类产品中。机器学习系统用于识别图像中的目标,将语音转换为文本,将新闻条目、帖子或产品与用户兴趣相匹配,并选择相关的搜索结果。这些应用程序愈来愈多地使用一类称为深度学习的技术。git

传统的机器学习技术在处理未加工过的数据时,体现出来的能力是有限的。数十年来,想要构建模式识别或机器学习系统,须要仔细的工程设计和至关专业的领域知识来设计一个特征提取器,将原始数据(如图像的像素值)转换为合适的内部表示或特征向量(记做 m m 维特征向量 x \textbf{x} )。学习子系统(一般是分类器)能够根据特征表示对输入中的模式进行检测或分类。github

表示学习是一组方法,它让机器在得到原始数据后自动发现所需的用于检测或分类的特征表示。深度学习方法是拥有多层表示的表示学习方法,经过组合简单但非线性模块获得,每一个模块将某一层的表示(原始输入做为第一层)转换为更高更抽象一些的层的表示。经过足够多的转换的组合,能够学习到很是复杂的函数。对于分类任务,表示的高层强化有助于区分的输入数据,同时削弱不相关因素。好比,一幅图片的格式是一个像素值数组,那么在表示的第一层上学到的特征一般是在图像的特定方向和位置上是否有边存在。第二层一般会根据边的某些摆放来检测图案,这时候会忽略掉边的位置的细小变化。第三层或许会把那些图案进行组合,从而使其对应于熟悉目标的某部分。随后的一些层会将这些部分再组合,从而构成待检测目标。深度学习的核心方面是,上述各层的特征都不是人类工程师来设计的,而是使用一种通用的学习过程从数据中学到的。web

深度学习正在取得重大进展,解决了人工智能界尽最大努力不少年仍没有进展的问题。事实证实,深度学习擅长发现高维数据中的复杂结构,所以适用于科学、商业和政府等领域。除了在图像识别[1-4]、语音识别[5-7]等领域打破了纪录,它还在其余领域击败了其余机器学习技术,包括预测潜在的药物分子的活性[8]、分析粒子加速器数据[9,10]、重建脑回路[11]、预测在非编码DNA突变对基因表达和疾病的影响[12,13]。更使人惊讶的是,深度学习在天然语言理解的各项任务中都取得了很是可喜的成果[14],特别是主题分类、情感分析、自动问答[15]和语言翻译[16,17]。算法

咱们认为,在不久的未来,深度学习将会取得更多的成功,由于它须要不多的手工工程,并且很容易受益于可用计算能力和数据量的增长。目前正在为深度神经网络开发的新的学习算法和架构更会加速这一进程。编程

监督学习

机器学习中,不管是否深度学习,最多见的形式是监督学习。试想一下,咱们要创建一个系统,对房子、汽车、人或宠物图片进行分类(一共四种类别)。咱们先收集大量的房子、汽车、人和宠物的图片,每张图片标上它的类别。在训练期间,向机器每输入一幅图片(实际是输入一个图片的 m m 维特征向量 x \textbf{x} ),就输出一个得分向量( s ( x ) = ( s 1 , s 2 , , s k ) s(\textbf{x})=(s_1,s_2,\ldots,s_k) ,其中每一个得分 s i s_i 对应一个类别,例子中 k = 4 k=4 )。咱们但愿图片所属类别的得分在全部类别的得分中最高(若是输入一个房子的图片,固然但愿房子类别的得分最高,就能够根据得分向量判断这幅图片是房子。例如可使用条件几率 P ( s i x ) P(s_i|\textbf{x}) 计算得分,即 s ( x ) = ( P ( s 1 x ) , , P ( s k x ) ) s(\textbf{x})=(P(s_1|\textbf{x}),\ldots,P(s_k|\textbf{x})) 。根据得分向量 s ( x ) = ( 0.8 , 0.1 , 0 , 0.1 ) s(\textbf{x})=(0.8,0.1,0,0.1) 判断图片中是房子),可是这在训练以前是不太可能发生的。经过计算一个目标函数能够得到输出得分和指望得分之间的偏差(或距离)(目标函数能够有多种形式,例如, ( s ( x ) y ) 2 (s(\textbf{x})-\textbf{y})^2 ,若是某个样本图片标记为房子,则 y = ( 1 , 0 , 0 , 0 ) \textbf{y}=(1,0,0,0) )。而后机器会修改其内部可调参数,以减小这种偏差。这些可调参数,一般被称为权值,它们是一些实数,能够被看做是“旋钮”,定义了机器的输入输出函数(增长了 m m 维权重向量 w = ( w 1 , , w m ) \textbf{w}=(w_1,\ldots,w_m) 做为输入以后,得分向量的表示形式变为 s ( x,w ) s(\textbf{x,w}) 。权值向量的维数通常与特征向量维数相同)。在典型的深度学习系统中,有可能有数以亿计的权值和带标签的样本,用来训练机器。数组

为了正确地调整权值向量,学习算法会计算一个梯度向量。梯度向量(的每一个份量)给出某个权值增长一个很小的量时,偏差会增长或减小的幅度(就是变化率,偏差在某个权值上的偏导数)。而后在梯度向量的相反方向调整权值向量。网络

在全部训练样本上平均的目标函数(即 L ( X,Y ) = 1 n x X , y Y ( s ( x ) y ) 2 L(\textbf{X,Y})=\frac{1}{n}\sum_{\textbf{x}\in\textbf{X},\textbf{y}\in\textbf{Y}}(s(\textbf{x})-\textbf{y})^2 ,其中 X \textbf{X} 为样本集合, X = n |\textbf{X}|=n Y \textbf{Y} 为图片类别集合)能够看做是权值的高维空间(有几个特征,就有几个对应的权值,就是几维的权值空间)中的一种陡峭地形。负的梯度向量表示该地形中最陡的降低方向,使其更接近最小值,也就是平均输出偏差最低的地方。架构

在实际应用中,大部分从业者都使用一种称做随机梯度降低的算法(SGD)。它包含了提供少许样本的输入向量,计算输出和偏差,计算这些样本的平均梯度,而后相应调整权值。利用训练集中多个小的样本集合来重复这个过程,直到目标函数的均值中止降低。它被称为随机的,是由于利用小的样本集对于全体样本的平均梯度的估计是有噪声的。与更复杂的优化技术相比,这个简单的过程一般会出人意料地快速找到一组好的权重[18]。训练结束以后,经过称为测试集的不一样样原本度量系统性能。这用于测试机器的泛化能力——对于未训练过的新样本的识别能力。app

当前许多机器学习的实际应用都使用线性分类器来对人工提取的特征分类。2类线性分类器会计算特征向量份量的加权和。若是加权总和高于阈值,则输入被分类为属于其中一个类别。

自20世纪60年代以来,咱们已经知道线性分类器只能将其输入空间划分为很是简单的区域,即由超平面分隔的(两个)半空间[19]。可是,诸如图像和语音识别之类的问题要求输入 - 输出函数对输入的无关变化(诸如对象的位置、方向或照明的变化,或者语音的音高或口音的变化)不敏感,而对特定的微小变化(例如,白狼和一种叫作萨摩耶的相似狼的白色狗的区别)很是敏感。在像素级,不一样姿式和不一样环境中的两个萨摩耶犬的图像可能彼此很是不一样,而萨摩耶犬和狼在相同位置和类似背景下的两幅图像可能彼此很是类似。线性分类器或任何其余浅层分类器在原始像素上运行时,没法区分后二者,而将前二者纳入同一类别。这就是为何浅层分类器须要一个好的特征提取器来解决选择性-不变性困境,提取器可以挑选出图像中可以区分目标的那些重要因素,但对诸如动物的姿式这些不相关因素不敏感。为了使分类器功能更强大,可使用泛化的非线性特征,像核方法中那样[20],但这些泛化特征,好比经过高斯核获得的,并不可以使得学习器从学习样本中产生较好的泛化效果[21]。传统的选择是手工设计一个好的特征提取器,这须要大量的工程技术和专业的领域知识。但若是使用通用学习过程能够自动学习好的特征,就能够避免这种状况。这是深度学习的关键优点。

深度学习架构是一个简单模块的多层堆叠,其中全部(或大部分)模块都须要学习,其中大部分都须要计算非线性的输入到输出的映射。每一个模块都转换其输入以增长特征表示的选择性和不变性。好比说,具备一个5到20层的非线性多层系统可以实现很是复杂的函数,这些函数既对细微的细节敏感 - 区分萨摩耶和白狼 - 也对大量不相关的变化(如背景,姿式,灯光和周围的物体)不敏感。

反向传播训练多层神经网络

模式识别的早期阶段[22,23],研究人员的目标就是用可训练的多层网络取代手工设计的特征,尽管很简单,但直到20世纪80年代中期,该解决方案才获得普遍的理解。事实证实,多层网络能够经过简单的随机梯度降低进行训练。只要模块是输入和内部权重的相对平滑的函数,就能够使用反向传播步骤计算梯度。这一思想在70年代和80年代由几个不一样的小组独立发现[24-27]。

(梯度降低的核心是 w = w η E w w=w-\eta \frac{\partial E}{\partial w} ,其中 η \eta 为学习速率。反向传播(back propagation)是神经网络中用来求解参数的核心算法,相似SGD,经过从前日后求解梯度的方式来使参数向代价函数减少的方向靠近。BP算法的学习过程由前向传播(forward propagation)过程和反向传播过程组成。在前向传播过程当中,输入信息经过输入层经隐含层,逐层处理并传向输出层。若是在输出层得不到指望的输出值,则取输出与指望的偏差的平方和做为目标函数,转入反向传播,逐层求出目标函数对各层神经元权值的偏导数,构成目标函数对权值向量的梯度向量,做为修改权值的依据,网络的学习在权值修改过程当中完成。偏差达到最小值,学习结束。参见百度百科)

计算关于(多层模块)权值的目标函数的梯度的反向传播算法不过是求导链式法则的实际应用。关键的认识是,目标函数关于某层输入的导数(或者梯度)能够经过反向传播由关于该层输出(或者后续层的输入)的导数求得(如图1)。反向传播公式能够重复应用以在全部模块间传播梯度,从最顶层输出开始(网络生成预测的位置)一直到底部(接收外部输入的位置)。一旦计算出这些梯度,就能够直接计算相对于每一个模块权重的梯度。

深度学习的许多应用都使用前馈神经网络体系结构(图1)(每一个节点表明一个神经元,各神经元从输入层开始,接收前一层输入,并输出到下一层,直至输出层。整个网络中无反馈,可用一个有向无环图表示),该体系结构学习将固定大小的输入(例如图像)映射到固定大小的输出(例如,多个类别中某一个的几率) 。为了从一层到下一层,每一层中的每一个节点都要计算来自前一层的输入的加权和,并经过一个非线性函数传递结果(即 y = f ( z ) y=f(z) )。目前,最流行的非线性函数是整流线性单元(ReLU读做[relu]),实际就是一个半波整流器 f ( z ) = max ( z , 0 ) f(z)= \max(z,0) 。过去几十年,神经网络使用更平滑的非线性函数,例如 tanh ( z ) \tanh(z) 1 / ( 1 + exp ( z ) ) 1 /(1 + \exp(-z)) ,但ReLU在多层网络中一般学习速度更快,容许没有无监督的预训练状况下训练深度监督网络[28]。不在输入或输出层中的节点一般称为隐藏节点。隐藏层能够看做是以非线性方式对输入变形,使得类别在最后一层能够线性分离(图1)。
在这里插入图片描述

图1 多层神经网络和反向传播

a.多层神经网络(用链接点表示)能够对输入空间进行变形,使得数据(红色和蓝色线表示的样本)线性可分(如中间图所示,通过空间变形后,蓝色和红色样本之间的分界线近似线性)。注意输入空间中的规则网格(左侧)是如何被隐藏层转换的(中间图)。这个例子中只用了两个输入单元,两个隐藏单元和一个输出单元,可是用于目标识别或天然语言处理的网络一般包含数万或者十数万个这样的单元。得到C.Olah (http://colah.github.io/)的许可后从新构建的这个图。

b.**链式法则告诉咱们两个小的影响(x的微小变化对y的影响,以及y的微小变化对z的影响)是如何合成到一块儿的。**x的微小变化量 Δ x \Delta x 首先会经过乘以 y / x \partial y/\partial x (偏导数)转变成y的变化量 Δ y \Delta y 。相似的,Δy会给z带来改变Δz。用一个公式替换另外一个就获得了链式法——也就是Δx经过乘以∂y/∂x和∂z/∂y获得Δz的过程(即 Δ z = z y Δ y = z y y x Δ y \Delta z=\frac{\partial z}{\partial y}\Delta y =\frac{\partial z}{\partial y}\frac{\partial y}{\partial x}\Delta y )。当x,y,z是向量的时候,链式法则仍然成立(导数是雅克比矩阵)。

c.**具备两个隐层一个输出层的神经网络中计算前向传播的公式。**每层都由一个模块构成,用于反向传播梯度。在每一层,咱们首先计算每一个节点的总输入z,z是前一层节点输出的加权和。而后利用一个非线性函数f(.)来计算节点的输出。简单起见,咱们忽略掉了截距项( z = w T x + b z=\textbf{w}^\textrm{T}\textbf{x}+b ,其中b是偏置项或截距)。神经网络中经常使用的非线性函数(也叫激活函数,是用来加入非线性因素的,解决线性模型所不能解决的问题。经过多个激活函数,对输入空间变形,使得数据线性可分)包括了最近几年经常使用的校订线性单元(ReLU) f ( z ) = max ( 0 , z ) f(z) = \max(0,z) ,和更多传统sigmoid函数,好比双曲线正切函数(tanh) f ( z ) = ( exp ( z ) exp ( z ) ) / ( exp ( z ) + exp ( z ) ) f(z) = (\exp(z) − \exp(−z))/(\exp(z) + \exp(−z)) 和logistic函数 f ( z ) = 1 / ( 1 + exp ( z ) ) f(z) = 1/(1 + \exp(−z))

d.**计算反向传播的公式。**对于每一个隐藏层,咱们计算偏差关于每一个节点输出的偏导数,是偏差关于上一层每一个节点输入的偏导数的加权和(例如,计算隐藏层H2中偏差关于结点k的输出的偏导数 E y k = l o u t w k l E z l \frac{\partial E}{\partial y_k}=\sum_{l\in out}w_{kl}\frac{\partial E}{\partial z_l} ,隐藏层的上一层是输出层。根据图1.c, y k = f ( z k ) y_k=f(z_k) ,其中 z k , y k z_k, y_k 分别是结点 k k 的输入和输出)。而后,经过乘以 f ( z ) f(z) 的梯度,将偏差关于输出的偏导数转换到关于输入的偏导数(即 E z l = E y l y l z l \frac{\partial E}{\partial z_l}=\frac{\partial E}{\partial y_l}\frac{\partial y_l}{\partial z_l} ,其中 y l z l \frac{\partial y_l}{\partial z_l} y l = f ( z l ) y_l=f(z_l) 的梯度)。在输出层,偏差关于结点输出的偏导数用代价函数的微分来计算。若是节点 l l 的代价函数是 0.5 ( y l t l ) 2 0.5(y_l-t_l)^2 , 则 E y l = y l t l \frac{\partial E}{\partial y_l}=y_l-t_l ,其中 t l t_l 是目标值。一旦知道了 E / z k \partial E/\partial z_k 的值,从下一层的节点 j j 到节点 k k 的链接上的权值 w j k w_{jk} 的偏差偏导数就是 y j E / z k y_j\partial E/\partial z_k E w j k = E z k z k w j k = E z k j H 1 w j k y j w j k = y j E z k \frac{\partial E}{\partial w_{jk}}=\frac{\partial E}{\partial z_{k}}\frac{\partial z_k}{\partial w_{jk}}=\frac{\partial E}{\partial z_{k}}\frac{\partial \sum_{j\in H_1}w_{jk}y_j}{\partial w_{jk}}=y_j\frac{\partial E}{\partial z_{k}} )。

在20世纪90年代后期,神经网络和反向传播算法基本被机器学习领域所抛弃,也被计算机视觉和语音识别领域所忽视。人们广泛认为,没有大量的先验知识,想学习到有用的、多阶段的特征提取器是不可行的。特别是,人们广泛认为简单的梯度降低会困在局部最小值——此时权重的微小改变不会下降平均偏差。

实际上,较差的局部最小值不多成为大型网络的问题。不管初始条件如何,该系统几乎总能达到效果差很少的解。最近的理论和实验代表,局部最小解通常问题不大。相反,解空间中充满了大量的鞍点,即梯度为零,而且曲面在大多数维度上向上弯曲,在其他维度向下弯曲[29,30]。分析彷佛代表,一般向下弯曲方向的鞍点不多,但几乎全部这种状况的目标函数值都很是类似。所以,算法卡在哪些鞍点上并不重要。

2006年先后,一些由加拿大高级研究所(CIFAR)召集的研究人员恢复了对深度前馈网络的兴趣(参考文献[31-34])。研究人员引入了无监督学习过程,能够建立特征检测器层而无需标记数据。学习每层的特征检测器的目的是为了可以重建或模拟下面图层中的特征检测器(或原始输入)的活动。根据这个重建的目的,对多个逐渐复杂的特征检测器进行“预训练”,使得深度网络的权重能够初始化为合理的值(减小后期训练的次数)。而后,将最后一层输出节点添加到网络顶部,并使用标准反向传播[33-35]对整个深度系统进行微调。这对识别手写数字或检测行人很是有效,特别是当标签数据量很是有限时[36]。

预训练方法的第一个主要应用是语音识别,并且,因为编程方便的快速图形处理单元(GPU)的出现[37],使得研究人员可以将网络训练速度提升10到20倍。2009年,该方法用于将从声波中提取的系数的短期窗口映射到可能由窗口中心的帧表示的各类语音片断的一组几率。它在标准语音识别基准测试中取得了破纪录的成绩,该基准测试使用了一个小词汇表[38],而且很快就发展到能够在大型词汇表上得到破纪录的成绩[39]。到2012年,许多主要的语音团队发展了2009年以来的深度网络版本[6],而且已经部署在Android手机中。对于较小的数据集,无监督的预训练有助于防止过拟合[40],从而在带标记样本的数量较少时,或者在一些转换场景中,“源”任务的样本不少,“目标”任务的样本少,都能带来明显更好的泛化。一旦深度学习从新恢复,事实证实,预训练阶段只须要小数据集。

可是,有一种特殊类型的深层前馈网络,比相邻层之间具备彻底链接性的网络更容易训练和泛化。这就是卷积神经网络(ConvNet)[41,42]。它在神经网络不受欢迎的时期取得了许多实际成功,最近它已被计算机视觉领域普遍采用。

卷积神经网络

卷积神经网络被设计为处理多维数组数据,好比一个由三个二维数组组合成的彩色图像,包含三个颜色通道中的像素强度(输入:三个数组分别表明在屏幕坐标下的R、G、B像素值,见图2输入层)。不少数据形态都是这种多维数组:1D用来表示信号和序列包括语言,2D用来表示图像或者声音,3D用来表示视频或者有声音的图像。卷积神经网络背后有四个关键的思想,它们充分利用天然信号的特性:局部链接权值共享池化以及使用多个网络层
在这里插入图片描述

图2 卷积神经网络内部

应用于萨摩耶狗图像(原始图像见左下; 转换为RGB(红,绿,蓝)输入,见右下)的典型卷积网络架构的每层(水平)的输出(不是过滤器)。 每一个矩形图像都是一个特征图(feature map),对应于某个学习到的特征的输出,特征是在每一个图像位置处检测到的。 信息流自下而上,其中较低层特征用做有向边检测器,每一个图像类别在输出中都有一个得分。 ReLU,整流线性单元。

一个典型的卷积神经网络结构(如图2)由一系列阶段组成。最初的几个阶段是由卷积层和池化层组成,卷积层的单元(或节点)以多个特征图(feature map)的形式组织在一块儿。特征图中每个单元经过称为过滤器组(filter bank)的一组权值(每一个过滤器也称为卷积核,是一个与局部块相同大小的实数矩阵,存放权值)与前一层特征图的一个局部块相连(和前面的前馈神经网络相似,不一样之处在于这里每一个节点与前一层的局部块而不是全部节点相连),而后这个局部加权和被传给一个非线性函数,好比ReLU。一个特征图中的全部单元共享相同的过滤器,不一样层的特征图使用不一样的过滤器。使用这种架构出于两方面缘由。首先,在数组数据中,好比图像数据,一个值的附近的值常常是高度相关的,造成易于检测的独特局部图案。其次,图像和其余信号的局部统计数据对于位置不变。换句话说,若是一个图案出如今图像的某一部分,它也可能出如今图像的任何地方,这正是不一样位置的单元共享相同的权重,并在数组的不一样部分检测相同的图案。在数学上,由特征图执行的滤波操做是离散卷积,卷积神经网络也正是由此得名。

卷积层的做用是探测上一层特征的局部结合,而池化层的做用是将语义近似的特征合并为一个。由于造成图案的特征的相对位置可能有所不一样,因此可靠地检测图案可经过粗纹理化每一个特征的位置来完成。这是由于造成一个主题的特征的相对位置不太同样。典型的池化单元计算一个特征图(或几个特征图)中局部单元块的最大值。相邻的池化单元的输入是将局部单元块移动一行(或多行)或一列(或多列),从而减小了表示的维数并得到对微小平移和变形的不变性。两三个卷积、非线性函数和池化阶段堆叠起来,而后是更多的卷积和彻底链接的层。ConvNet的反向传播梯度与常规深度网络同样简单,能够对全部过滤器组中的全部权重一块儿训练。

深层神经网络利用了这一属性,即许多天然信号是层次组合的,其中高层特征是由低层特征组合获得。在图像中,边的局部组合造成图案,图案组装成物体的局部,而后再造成物体。这种层级结构也存在于语音数据以及文本数据中,从声音到音素、音节、单词和句子。当输入数据在前一层中的位置和外观有变化时,池化操做让这些特征表示对这些变化不敏感。

ConvNets中的卷积和池化层直接受到视觉神经科学中简单细胞和复杂细胞的经典概念的启发[43],总体结构让人联想到视觉皮质腹侧路径中的LGN-V1-V2-V4-IT层次[44]。当向ConvNet模型和猴子显示相同的图片时,ConvNet中高层单元的激活解释了猴子颞颞叶皮层中160个神经元的随机集合的一半发生变化的缘由。 ConvNets有神经认知的根源[46],其架构有点相似。但神经认知没有端到端的监督学习算法,如反向传播。原始的一维ConvNet被称为时间延迟神经网络,用于识别音素和简单的单词[47,48]。

回溯到20世纪90年代早期,卷积网络有不少应用,从用于语音识别的时延神经网络[47]和文档阅读[42]开始。文档阅读系统使用ConvNet与实现了语言约束的几率模型一块儿训练。到20世纪90年代后期,这个系统读取了美国全部支票的10%以上。 Microsoft[49]稍后部署了一些基于ConvNet的光学字符识别和手写识别系统。 ConvNets在20世纪90年代早期还对天然图像中的物体检测进行了试验,包括脸部和手部[50,51]以及人脸识别[52]。

使用深度卷积网络进行图像理解

自21世纪初以来,ConvNet已经在图像中的物体和区域的检测、分割和识别方面取得了巨大的成功。这些都是标记数据相对丰富的任务,如交通标志识别[53]、生物图像分割[54],特别是链接组学[55],以及在天然图像中检测面部、文本、行人和人体[36,50,51,56-58] 。 ConvNets最近取得的一项重大成就是人脸识别[59]。

重要的是,图像能够在像素级进行标记,这样就能够应用在自主移动机器人和自动驾驶汽车[60,61]。 Mobileye和NVIDIA等公司正在即将推出的汽车视觉系统中使用这种基于ConvNet的方法。其余重要的应用涉及天然语言理解[14]和语音识别[7]。

尽管取得了这些成功,但2012年ImageNet竞赛以前,ConvNets一直被主流计算机视觉和机器学习领域所抛弃。当深度卷积网络应用于包含1,000个不一样类别的网页上的大约100万张图像的数据集时,取得了使人瞩目的成果,偏差率几乎是与其竞争的最好方法的一半[1]。这种成功来自GPU的高效使用,ReLU,一种称为dropout[62]的新正则化技术,以及经过变形现有样原本生成更多训练样本的技术。这一成功带来了计算机视觉方面的革命; ConvNets如今是几乎全部识别和检测任务的首要方法[4,58,59,63-65],而且在某些任务上接近人类表现。最近的一个惊人的例证是结合ConvNet和循环网络模块来生成图像标题(图3)。

在这里插入图片描述
图3 |从图像到文字。由循环神经网络(RNN)生成的字幕。RNN将深度卷积神经网络(CNN)从测试图像中提取的表示做为额外输入,RNN训练成将图像的高级表示“翻译”为字幕(最上面的图)。许可转载自文献[102]。当RNN产生每一个单词(粗体)时,若是它可以将注意力集中在输入图像中的不一样位置(中间和底部;更多关注较淡的块),咱们发现[86]它能够利用这个将图像更好地“翻译”成标题。

现在的卷积神经网络架构有10-20层采用ReLU激活函数、上亿个权值以及数十亿链接。尽管训练如此大的网络两年前就只须要几周了,但如今硬件、软件以及算法并行的进步,将训练时间压缩到了几小时。

基于卷积神经网络的视觉系统的性能已经引发了大型技术公司的注意,包括Google,Facebook,微软,IBM,雅虎,Twitter和Adobe在内的大多数主要科技公司以及数量迅速增长的初创公司启动研发项目,而且部署基于ConvNet的图像理解产品和服务。

卷积神经网络很容易在芯片或者现场可编程门阵列(FPGA)中高效实现,许多公司好比NVIDIA、Mobileye、Intel、Qualcomm以及Samsung,正在开发卷积神经网络芯片,以实现智能机、相机、机器人以及自动驾驶汽车中的实时视觉系统。

分布式表示与语言处理

深度学习理论代表,与不使用分布式表示的经典学习算法相比,深度网络具备两种不一样的指数优点[21]。这些优点都源于组合的力量,并取决于具备适当组合结构的底层数据生成分布[40]。首先,学习分布式表示可以从训练期间所见的特征值泛化到学到的特征的值的新组合(例如, n n 个二元特征可能有 2 n 2^n 个组合)[68,69]。其次,组合深度网络中的表示层带来了另外一种指数优点(指数级的深度)的潜力[70]。

多层神经网络的隐藏层学习输入的表示,以便于预测输出。一个很好的示例是,训练多层神经网络,根据前面的几个单词来预测句子中下一个单词[71]。上下文中的每一个单词做为一个one-of-N向量输入网络,one-of-N向量即一个项值为1,其他为0的向量(例如 ( 0 , 1 , 0 , ) (0,1,0,\ldots) 是一个one-of-N向量)。在第一层中,每一个单词建立不一样的激活模式,或词向量(图4)。在语言模型中,网络的其余层学习将输入词向量转换为输出词向量来预测下一个单词,这能够用来预测词汇表中任何单词出现为下一个单词的几率。网络学习的词向量包含多个激活组件,每一个组件均可以解释为单词的一个特征,该方法最初在符号的分布式表示学习中使用[27]。这些语义特征在输入中没有明确给出。学习过程发现这些特征,它们能够把输入和输出符号之间的结构化关系分解为多个“微规则”。当单词序列来自大量真实文本而且单个微规则不可靠时[71],学习词向量的方法仍然表现良好。例如,在训练预测新闻报道中的下一个单词时,Tuesday和Wednesday的词向量,Sweden和Norway的词向量很是类似。这种表示称为分布式表示,由于它们的元素(特征)不是相互排斥的,它们的许多配置对应于观察数据中可见的变化。这些词向量由学习到的特征组成,这些特征不是由专家提早肯定的,而是由神经网络自动发现的。从文本中学习的词向量表示在天然语言处理中获得了很是普遍的应用[14,17,72-76]。
在这里插入图片描述
图4 | 学习到的词向量可视化。 左边学习到的建模语言中单词表示的展现,使用t-SNE算法将表示非线性投影到2D进行可视化[103]。 右边是由英语到法语编码器 - 解码器循环神经网络[75]学习到的短语的2D表示。 能够看到,语义上类似的单词或词序列被映射到邻近的表示。 经过使用反向传播联合学习每一个单词的表示和预测目标数量的函数,如序列中的下一个单词(用于语言建模)或翻译单词的整个序列(用于机器翻译),来得到单词的分布式表示[18,75]。

特征表示问题一直处在逻辑启发和神经网络启发的认知范式之间争论的核心。在逻辑启发范例中,符号实例的惟一属性是它与其余符号实例相同或不相同。它没有与其使用相关的内部结构;要用符号来推理,它们必须与推理规则中的变量绑定。相比之下,神经网络只是使用大的活动向量,大权重矩阵和标量非线性函数,来执行快速“直觉”推理,这是支持绝不费力的常识推理的基础。

在引入神经语言模型以前[71],语言统计建模的标准方法没有利用分布式表示:它基于计算长度最大为N的短符号序列(称为N-gram)的出现频率。 可能的N-gram的数量大约是 V N V^N ,其中 V V 是词汇大小,考虑到文本包含大量单词,须要很是大的训练语料库。 N-gram将每一个单词视为一个原子单位,所以它们不能在语义相关的单词序列间进行归纳,而神经语言模型能够,由于它将每一个单词与实值特征向量相关联,而且语义相关单词在向量空间中彼此靠近(图4)。

循环神经网络

第一次引入反向传播时,其最使人兴奋的用途是训练循环神经网络(RNN)。 对于涉及序列输入的任务,如语音和语言,一般使用RNN更好(图5)。 RNN一次处理输入序列的一个元素,同时在隐藏单元中维护一个“状态向量”,隐式地包含关于该序列的全部过去元素的历史信息。 当咱们将不一样离散时间段的隐藏单元的输出看做深度多层网络中不一样神经元的输出(图5,右),就会很清楚如何应用反向传播来训练RNN。
在这里插入图片描述
图5 |循环神经网络及其正向计算中按照计算时间的展开。人造神经元(例如,汇集在节点 s s 中的全部隐藏单元,在时刻 t t 其值为 s t s_t )在前一时间间隔从其余神经元得到输入(用黑色方块表示,表示一个时间间隔的延迟,图中左侧) 。经过这种方式,循环神经网络能够将元素为 x t x_t 的输入序列映射为元素为 o t o_t 的输出序列,其中每一个 o t o_t 取决于前面的全部 x t x_t' (对于全部的 t t t'\le t )。在每一个时间间隔使用相同的参数(矩阵 U V W ,,U,V,W )。许多其余体系结构也是可能的,包括能够生成一系列输出(例如单词)的网络变体,其中每一个输出都用做下一个时间间隔的输入。反向传播算法(图1)能够直接应用于右侧展开网络的计算图,以计算总偏差(例如,生成右侧输出序列的对数几率)关于全部状态 s t s_t 和全部参数的导数。

RNN是很是强大的动态系统,可是训练它们被证实是有问题的,由于反向传播的梯度在每一个时间间隔都会增加或缩小,因此在许多时间间隔后将致使结果的激增或者降为零[77,78]。

因其先进的架构[79,80]和训练方式[81,82],RNNs能够很好的预测文本中下一个字符[83]或者句子中下一个单词[75],而且能够应用于更加复杂的任务。例如一次读入一个英语句子中的单词,将会训练一个英语的“编码器”网络,使得隐藏单元的最终状态向量可以很好地表示句子所要表达的想法。这种“想法向量”(thought vector)能够做为联合训练的一个法语“解码器”网络的初始化隐藏状态(或者额外的输入),其输出为法语译文第一个单词的几率分布。若是从分布中选择特定的第一个单词并将其做为输入提供给解码器网络,则将输出译文的第二个单词的几率分布,直到选择一个彻底中止词[17,72,76]。总的来讲,这个过程根据依赖于英语句子的几率分布生成法语单词序列。这种简单的机器翻译方法的表现甚至能够和最早进的的方法相媲美,同时也引发了人们对于理解句子是否须要像用推理规则操做的内部符号表达式这样的东西的质疑。这与平常推理涉及多个对结论有贡献的类推的观点相匹配[84,85]。

不但能够将法语句子翻译成英语句子,还能够将图像的含义“翻译”为英语句子(图3)。这里的编码器是一个深度的ConvNet,它能够在最后一个隐藏层中将像素转换成活动向量。解码器与用于机器翻译和神经语言建模的RNN相似。近来对这类系统的兴趣激增(参见参考文献[86]中提到的例子)。

一种时间展开的RNN(图5),能够看做是很是深的前馈网络,其中全部层共享相同的权值。虽然主要目的是学习长期依赖关系,但理论和经验证据代表很难学习长时间存储信息[78]。

为了解决这个问题,为网络扩充存储的想法随之产生。第一种建议是使用了特殊隐藏单元的长期短时间记忆(LSTM)网络,其天然行为是在较长时间内记住输入[79]。一种称做记忆细胞的特殊单元相似于累加器和门控神经元:它在下一个时间间隔将拥有一个权值为1的自链接,所以它复制本身的实值状态并累积外部信号,但这种自联接是由另外一个单元的乘法门控制的,该单元学习并决定什么时候清除记忆内容。

LSTM网络随后被证实比传统的RNN更加有效,尤为当每个时间间隔内有若干层时87,造成整个语音识别系统,从声音转换到字符序列。 LSTM网络或门控单元的相关形式目前也用于编码器和解码器网络,这些网络在机器翻译中表现得很是好[17,72,76]。

在过去的一年中,一些做者提出了不一样的建议,用记忆模块来扩充RNN。其中包括:神经图灵机,用“相似磁带”的记忆来扩充网络,RNN能够选择读取或写入磁带[88]。记忆网络,其中常规网络经过一种关联记忆来加强[89]。记忆网络在标准问答基准测试中表现出色。记忆用于记住后来网络会被要求回答问题的事。

除了简单记忆以外,神经图灵机和记忆网络正用于一般须要推理和符号操做的任务。能够教神经图灵机’算法’。除此以外,它们能够学习输出符号的排序列表。输入是一个未排序的序列,其中每一个符号都附带一个指示其在列表中的优先级的实数值[88]。记忆网络能够被训练来跟踪相似于文本冒险游戏的世界状态,而且在阅读故过后,他们能够回答须要复杂推理的问题[90]。在一个测试示例中,网络显示了“指环王”的15个句子版本,并正确回答了诸如“Frodo如今在哪?”等问题[89]。

除了简单的记忆化,神经图灵机和记忆网络正在被用于那些一般须要推理和符号操做的任务,还能够教神经图灵机“算法”。除此之外,他们能够从未排序的输入符号序列(其中每一个符号都有与其在列表中对应的代表优先级的真实值)中,学习输出一个排序的符号序列。能够训练记忆网络用来追踪一个相似文字冒险游戏中世界的状态,回答一些须要复杂推理的问题。在一个测试例子中,网络可以正确回答15句版的《指环王》中诸如“Frodo如今在哪?”的问题。

深度学习的将来

人类视觉是一个智能的、基于特定方式的利用小或大分辨率的视网膜中央窝与周围环绕区域对光线采集成像的活跃的过程。咱们指望将来在机器视觉方面会有更多的进步,这些进步来自那些端对端的训练系统,并结合ConvNets和RNNs,采用加强学习来决定走向。结合了深度学习和加强学习的系统正处在初期,但已经在分类任务中超过了被动视频系统,并在学习操做视频游戏中产生了使人印象深入的效果。

无监督学习[91-98]对从新唤起深度学习热潮具备促进做用,但后来被纯监督学习的成功所掩盖。虽然本篇综述没有关注它,但咱们预计无监督学习在将来会变得更加剧要。人类和动物的学习主要是无监督的:咱们经过观察世界来发现世界的结构,而不是经过被告知每一个事物的名称。

人类视觉是一个活跃的过程,它使用具备大型低分辨率环绕的小型高分辨率视网膜中央凹,以智能的、任务特定的方式对光学数组进行顺序采样。咱们指望计算机视觉的将来发展来自于端到端训练的系统,结合ConvNets与RNN,使用强化学习来决定走向。结合深度学习和强化学习的系统还处于初级阶段,但它们在分类任务方面已经赛过被动视觉系统[99],并在学习操做多个不一样视频游戏时产生使人印象深入的结果。

天然语言理解是深度学习在将来几年内将会产生巨大影响的另外一个领域。咱们预计,使用RNNs理解句子或整个文档的系统在学习有选择性地参与某个部分的策略时会变得更好[76,86]。

最终,人工智能的重大进展将经过结合表示学习和复杂推理的系统来实现。虽然深度学习和简单推理已经用于语音和手写识别很长一段时间,但须要新的范式来替代基于规则的符号表达式处理方式,该方式须要对高维向量进行操做[101]。