深入浅出PyTorch:从模型到源码
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 深度学习的历史

1.1.1 深度学习的发展过程

由于PyTorch和深度学习的联系紧密,下面回顾一下深度学习的历史。深度学习本质是一个前馈神经网络(Feed-Forward Neural Network),因此,它的历史可以追溯到人工神经网络(Artificial Neural Networks,ANN)研究的时期。人工神经网络主要是通过模拟动物的神经元的运行模式来对现实数据进行拟合和预测,即通过函数来模拟信息在神经元中的变换和传输。最早的人工神经网络是20世纪60年代Frank Rosenblatt发明的感知机(Perceptron)1,通过对输入进行单层的线性变换来完成分类。然而这个模型并不能解决线性不可分的问题,对于很多现实问题并不适用,因此这个模型很快就被废弃了,从而造成了人工神经网络研究的低潮。到了20世纪80年代,人们的研究又重新转向人工神经网络,并且开发了多层感知机(Multi-layer perceptron,MLP)2来解决感知机的问题。相比简单的感知机,多层感知机由于增加了人工神经网络的深度,对于相对复杂的函数拟合效果比较好,理论上,根据万能近似定理(Universal Approximation Theorem)3,对于多层感知机来说,只要参数和隐含层的数量足够,就能够拟合任意的连续函数,同时,人们也发明了反向传播算法(Backpropagation algorithm)4来高效地优化多层感知机的模型。使用反向传播算法虽然能够在神经网络层数比较少的时候有效地优化模型,但是不适用于神经网络层数较多的情况,这是由于在较深的网络中使用反向传播算法会导致梯度消失(Gradient Vanish)和梯度爆炸(Gradient Explode)。而且相比于一些比较简单的模型,比如支持向量机(Support Vector Machine,SVM)5,多层感知机的计算量比较大,模型的准确率也没有明显优势。因此,在20世纪90年代中期前后,人们对这种类型的人工神经网络逐渐失去了兴趣。神经网络方法研究的衰退一直到了2007年,人们发现了如何训练包含比较多隐含层的神经网络的方法,即深度信念网络(Deep Belief Network,DBN)6。深度信念网络的主要特征是叠合多层神经网络(可以使用限制玻尔兹曼机(Restricted Boltzmann Machine7,RBM)或者自编码器(Autoencoder8),并且逐层训练这些神经网络单元,最后进行微调训练,可以达到训练很深的神经网络的目的。同时,通过调整神经元的连接和激活,一些新的神经网络连接方式和激活函数也进入了人们的视线,著名的如卷积神经网络(Convolution Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)、残差网络(Residue Neural Network),以及新型激活函数如线性整流函数(Rectified Linear Unit,ReLU)。通过引入这些特殊结构的神经网络,能够使梯度在神经网络内部进行有效传播,不仅能够训练隐含层较多的神经网络,同时也可以使用比较多的参数,有效提高了模型的准确率。这里需要提到一点的是,隐含层的数量在神经网络拟合数据的准确性中起到了关键的作用。每个隐含层能够对前一层的神经网络的特征进行组合,从而构造更复杂的特征,并更好地拟合给定的数据集。因此,人们一般把现阶段的神经网络模型称为深度学习(Deep Learning),反映了这些神经网络具有很多隐含层的特点。

1.1.2 深度学习在计算机视觉领域的发展

我们可以从ImageNet大规模视觉理解竞赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)使用的算法和准确率来一窥近年来深度学习的发展趋势。ImageNet是由普林斯顿大学的课题组收集的大规模数据集9,主要包含了共计12大类和5247小类物体的照片,总共有320万张左右的图片。ILSVRC竞赛从2010年到2017年一共举办了8次,其任务主要是物体的分类和物体的位置识别,其中任务中使用的所有数据集(包括训练集、验证集和测试集)都是ImageNet的子数据集。对于这么大的训练数据,传统的机器学习方法的结果不是很理想。在ILSVRC10和ILSVRC11的比赛中,人们主要使用的方法是尺度不变特征变换(Scale-invariant feature transform,SIFT)10的方法来提取图像的特征,然后结合SVM算法对图像进行分类,这些算法的特点是参数数量少,而且分类错误率相对较高。图1.1描述了理解ILSVRC从2010年到2017年优胜算法的Top 5错误率(即预测前五的图像类别不正确分类的概率),我们可以看到,从2010年到2011年,图像分类的错误率比较高,而且降低速度相对缓慢。到了2012年,由于人们对于深度学习模型的逐渐深入研究,该年度优胜的模型是基于卷积神经网络的深度学习模型AlexNet11。该模型的分类错误率降到了16.4%,相比于2011年有了一个质的飞跃。从此以后,在ILSVRC比赛中深度学习模型一直占据着优势地位。值得注意的是,在2015年ResNet的出现使得该项比赛的错误率首次降低到了5%以下(图1.1中虚线部分代表人类对这项任务的识别水平),达到了3.56%的错误率。这意味着深度学习模型通过结构的调节可以有超越人类的能力。

图1.1 历届ILSVC(2012—2017)优胜模型一览表

当然,深度学习在实践中的应用远不止图像识别这么简单。在计算机视觉的另一个领域,即目标检测(Object Detection)领域,深度学习也得到了广泛的应用。目标检测任务的任务目标可以简述如下:在一张照片中找到所有物体的位置,并且对物体进行分类。如图1.2所示,在目标检测的过程中,主要是把一张图片分割成若干个小区域(黑色的网格),每个小区域各自找到可能的物体的位置(图1.2中不同大小的候选框),以及对应物体的分类(狗、自行车、汽车和相应的位置)。在基于深度学习的目标检测被发明之前(2010—2012),由于缺乏很好的方法来选择有效的候选框,目标检测算法处在一种计算速度较慢、准确率也比较低的状态。同时,在这个阶段,机器学习算法的调整对提高检测的准确率也比较有限。

图1.2 目标检测任务概述

随着深度学习算法被大规模应用于计算机视觉领域,人们也开始在目标检测算法中应用深度学习算法。人们发明了一系列的算法来产生候选框和对候选框进行分类。其中代表性的算法包括RCNN、YOLO和SSD等。图1.3列举了一系列的目标检测算法和这些算法在COCO目标检测数据集上的表现。我们可以看到,表现最好的算法能够在该数据集上达到接近60%的mAP分数(可以粗略地认为图片中有60%的物体被算法识别出来了),而且对于一张图片的识别能够在最少22ms(YOLOv3-320的结果)以内完成。

图1.3 不同目标检测模型在COCO数据集上的表现

1.1.3 深度学习在自然语言处理和其他领域的发展

除在计算机视觉上的优异表现外,深度学习在自然语言处理(Natural Language Processing,NLP)任务中也得到了广泛的应用,而且在许多任务中表现优异。在各项自然语言处理的任务中,机器翻译(Machine Translation)作为自然语言处理的核心任务之一,很好地体现了深度学习模型的强大威力,用于机器翻译的模型称为神经网络机器翻译(Neural Machine Translation,NMT)。早在基于神经网络的机器翻译算法发明之前,人们就开始研究基于机器学习和统计模型的机器翻译,这种机器翻译被称为统计机器翻译(Statistical Machine Translation,SMT)。这个算法的主要原理是创建一个源语言和目标语言对应的数据库,然后构建一个机器学习模型根据源语言的单词或词组计算概率最大的目标语言的对应单词或词组。其主要缺点是需要花费大量时间进行预处理(构建对应的词汇数据库),而且算法很难考虑整个句子中单词之间的相关性(即单词的上下文语义)。相比之下,神经网络机器翻译不需要复杂的预处理(直接使用单词构造词向量),而且能够很容易地考虑上下文的单词(使用循环神经网络或者注意力机制),从而有效地提高了翻译结果的准确性和流畅性。神经机器翻译相对于统计机器翻译的优势可以通过图1.4表现出来。从图中可以看到,神经机器翻译算法(在图中使用的是GNMT模型12)相对于统计机器翻译算法(在图中使用的是PBMT模型13)在翻译质量上有着明显的优势,有的语言之间的翻译(比如法语到英语之间的翻译)因为语言之间的相似性甚至已经接近了人类的水平。虽然在现阶段的技术条件下,神经网络机器翻译和人类的翻译水平还有一定距离,但是随着技术的不断进步,可以预见在将来,深度学习在机器翻译方面将会逐渐赶上甚至超过人类的水平。

图1.4 不同翻译模型结果的比较,GNMT是一种NMT模型,PBMT是一种SMT模型

当然,除了计算机视觉和自然语言处理这两个领域,深度学习在很多其他的领域也有着惊人的表现。在语音识别方面,LAS模型14和DS(DeepSpeech)模型15等模型均在单词错误率(Word Error Rate,WER)上达到了很低的水平,超越了传统的机器学习模型的效果。在语音合成方面,使用Tacotron模型16和WaveNet模型17从文本合成语音的深度学习模型也得到了广泛的应用,并且达到了接近人类声音的水平。另外,随着深度学习研究的逐渐深入,深度学习模型也出现在一些传统上使用机器学习模型的领域,并开始逐渐代替机器学习模型的一些作用,比如,广告和商品的推荐系统,比较著名的有Deep Recommender18和Wide&Deep Learning19等。

综上所述,鉴于深度学习在实践中具有很好的效果,而且其效果通常远远好于传统的机器学习方法,人们正逐渐在不同的领域中使用深度学习的方法。同时,笔者也相信,深度学习作为一种新兴的技术,在未来将发挥更大的作用,为未来人工智能技术的发展作出重要的贡献。