论文作者:Yann LeCun 1,2 , Yoshua Bengio 3 & Geoffrey Hinton 4,5
深度学习系统可用于图像识别、电子购物中的商品推、网页搜索等。传统机器学习受限于对原始数据(如图像的像素值)的处理能力,在处理前需要设计特征提取器(子系统),通过子系统将原始数据转化为适用于网络的特征向量(给定表示进行学习)。子系统通常是可以发现或分类输入数据模式的分类器。
表示学习是一种可以处理原始数据并自动提取识别或分类所需要的特征(表示)的方法集,即让机器去学习表示,让机器学习如何学习。深度学习是具有多层表示的表示学习方法,由多个简单但非线性的模块组成,每层的表示转换(从原始数据开始)都向着更抽象的层进行。通过足够多的这种转换实现,机器就能学得复杂的函数关系。对于分类任务,较高的表示层放大输入中较重要的参数特征,抑制不相关的变量。例如,对于以像素值矢量出现的图像,表示的第一层所学得的特征通常为是否出现特定方向和位置的边缘(识别边缘);第二层通常忽视边缘位置变量的微小变化,通过特定的边缘点排列来检测边(识别角和扩展轮廓的边集合);第三层把图像聚合成更大的组合,对应于已知对象的一部分;后续层会检测这些部分组合所成的对象。深度学习的关键是这些特征通过一般性的学习程序从数据中学习获得。
深度学习适用于处理高维度数据,在多个领域表现良好,如图像识别、语音识别、自然语言处理等。随着数据量、计算资源的加大,深度网络的发展,深度学习会取得更成功的进展。
监督学习
监督学习是机器学习最常见的形式。假设我们想要实现一个可以分类图像的系统,如区分房子、汽车、人和宠物。我们应该先收集大量图片集,每个图片进行了类别标识,即加入了标签。通过训练,机器为每类图像产生一个打分的向量形式的输出。我们希望做到所需要识别图像的输出分数最大,我们用一个目标函数来衡量训练输出值和我们所希望得到的输出值间的误差。机器通过调整其网络内部参数来减小这个误差。这种参数称为权重。在典型的深度学习网络中,可能会有数亿个权重和含标签数据。
为了恰当地调整权重向量,学习算法为每个权重计算梯度向量,表示权重发生微小变化时误差的变化量,然后在与梯度向量相反的方向上调整权重向量。
平均所有训练样例的目标函数可以看作是高维权重值空间中的一种丘陵景观。负梯度向量表示下降最陡峭的方向,使梯度接近最小值,输出误差平均也较低。
在实践中,大多数从业者使用随机梯度下降(SGD)。 这包括显示一些样本的输入向量,计算输出和误差,计算这些样本的平均梯度,以及相应地调整权重。 对于来自训练集的随机选取的小样本,重复该过程,直到目标函数的平均值停止减小。这一程序通常会比更复杂的算法更快的找到恰当的权重值。 在训练之后,使用测试集(不同于训练集)对网络性能进行测试。 这有助于测试网络的泛化能力(即对测试集输出合理的答案)。
机器学习当前实际应用在基于人工设计特征的线性分类器。二分类线性分类器计算特征向量分量的加权和。如果加权和高于阈值,则输入被分类到特定类别。
线性分类器只能对输入空间进行简单划分。而对于图像识别、语音识别,要求对一些不相关变量的变化不敏感,例如对象位置,方向或亮度的变化、语音的音调或重音的变化,同时对一些特定变量很敏感,例如白狼和萨摩耶犬之间的区别。在像素级别,两个不同的姿势和不同的环境下的萨摩耶图像可能会有很大不同,而萨摩耶和狼的图像在相同的位置和相似的背景下可能非常相似。大多线性分类器无法对此做出准确识别。传统方法中,设计一个好的特征提取器就非常重要。而深度学习可以通过自动学习特征进行网络训练,这是深度学习的主要优势。
深度学习体系结构是简单模块的多层堆栈,其中所有(或大多数)模块都需要进行学习,计算非线性输入输出映射。堆栈中的每个模块都会转换其输入,使得其表示趋于稳定。 使用多个非线性层,例如5到20的深度,系统可以实现极其复杂的功能,如对区分萨摩耶与白狼的微小细节敏感,并且对诸如背景、姿势、照明和周围的物体等无关变量不敏感。
反向传播训练多层网络
用于计算与权值相关的目标函数的梯度的反向传播算法是衍生链规则的一个应用。一个模块输入的梯度可以通过反向传播输出的梯度得出。所有层的梯度计算都可用此方法完成。
深度学习的许多应用使用前馈神经网络的工作架构,学习将固定大小的输入映射到固定大小的输出。从一层到下一层,通过计算来自前一层的其输入的加权和并通过非线性函数传递结果。在目前,最流行的非线性函数是整流线性单位(ReLU),即半波整流器f(z)= max(z,0)。在过去的几十年中,神经网络使用更平滑的非线性函数,例如tanh(z)或1 /(1 + exp(-z)),但在深度网络中,ReLU通常学得更快。不在输入或输出层的层通常称为隐藏层。隐藏层可以看作是以非线性方式转换输入,这样类别就可以被最后一层线性分离。
在20世纪90年代后期,神经网络和反向传播在很大程度上被机器学习社区所抛弃。人们认为梯度下降会陷入一个局部最优的困境,无法达到全局最优。
实际上在大型网络中,局部最优并不是一个问题。几乎所有局部最优的目标函数都有相似的参数取值。对深度前馈网络的兴趣在2006年左右重新开始,由CIFAR研究人员介绍了无人监督的学习程序,可以创建层特征检测器,无需标记数据。这对于识别手写数字或检测行人很有效,特别是有标签数据数量有限的情况下。而卷积神经网络比全连接的网络更易被训练,卷积神经网络在计算机视觉领域有广泛应用。
卷积神经网络
ConvNets设计用于处理以多个阵列形式出现的数据,例如由包含三种颜色的像素强度的2D阵列组成的彩色图像。 许多数据模式采用多个数组的形式:1D的信号和序列表示,如语言; 2D用于图像或音频谱图; 3D用于视频或体积图像的表示。
一个最典型的卷积网络,由卷积层、池化层、全连接层组成。其中卷积层与池化层配合,组成多个卷积组,逐层提取特征,最终通过若干个全连接层完成分类。CNN通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务。池化层主要是为了降低数据维度。
ConvNets背后的四个关键思想:
- 局部连接(local connections),每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息;
- 权值共享(shared weights),(也就是卷积操作)减少了权值数量,降低了网络复杂度,可以看成是特征提取的方式。其中隐含的原理是:图像中的一部分的统计特性与其他部分是一样的,意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征;
- 池化(pooling),在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战,并且容易出现过拟合 (over-fitting),因此,为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling;
- 多层(the use of many layers)。
深度卷积网络在对象检测方面应用广泛。包括交通标识检测、文字检测、人脸识别等。图像可以在像素级别进行标记,这可以应用到很多领域,包括自动移动机器人、无人驾驶汽车等,深度卷积网络在语音识别、自然语言处理方面也有了很多应用。2012年ImageNet比赛中深度卷积网络取得的成功也使其在计算机视觉领域得到应用。随着软硬件技术发展,训练网络所需时间也大幅减少。
分布式表示和语言处理
自然语言处理中,深度网络用单词向量表示文本。向量中的每一个元素都对应着原始单词的某一个语义特征。这些特征互不排斥,共同表达了原始文本里的单词。这些单词向量由学习得到的特征组成,这些特征未明确出现在输入中,是由神经网络自动发现的。语义相关的词在向量空间中的表示更接近。从文本中学习单词的向量表示在自然语言应用被广泛使用。
循环神经网络
对于语言处理等以序列形式为输入的任务,使用RNN最好。RNN的隐藏层包含表示前一时刻信息的状态向量,我们可以用反向传播算法对RNN进行训练。RNN是非常强大的动态系统,但它的训练比较困难,会出现梯度消失与梯度爆炸的问题。这一问题现在已经解决,实验表明,RNN在句子中的下一个单词的推断上表现良好,并且可以实现不同语言的翻译。网络也可以实现将图像用英文句子来描述,编码器是一个深度卷积网络,解码器是一个RNN网络。
RNN尽管可以保留时间信息,但保存长时期的信息仍然不可行。长时信息的保存需要通过长短时记忆(LSTM)网络来实现。通过LSTM,可以让机器完成文字冒险游戏或在阅读完故事后回答一定的问题。
深度学习的未来
无监督学习应当是深度学习的发展趋势。深度学习和强化学习结合的系统已经开始出现,并在分类任务中有一定的应用。未来几年深度学习基于RNN应该会在自然语言处理领域取得进展。最终,人工智能的重大进步将通过将表示学习与复杂推理相结合的系统来实现。