- 深度学习之模型设计:核心算法与案例实践
- 言有三
- 6089字
- 2021-04-04 03:40:14
2.2 神经网络第三次复兴简史
滚滚的历史车轮告诉我们,技术虽然由人创造,但时间才是推动技术进步的最大推手。合适的时机到了,神经网络总会归来。
2.2.1 互联网与大数据来了
大数据是伴随互联网的诞生而诞生的,维克托·迈尔·舍恩伯格在撰写的《大数据时代》一书中指出,在2000年的时候,数字存储信息只占全球数据量的1/4,另外3/4的信息都存储在报纸、胶片、黑胶唱片和盒式磁带这类媒介上。但是,随着互联网的迅速扩张,数字信息量增长越来越快。该书中列举了几个对比非常强烈的例子:以天文学为例,2000年斯隆数字巡天(Sloan Digital Sky Survey)项目启动时,位于新墨西哥州的望远镜在短短几周内收集到的数据,已经比天文学历史上总共收集的数据还要多;谷歌公司在2012年时每天要处理超过24PB的数据,这意味着其每天的数据处理量是美国国家图书馆所有纸质出版物所含数据量的上千倍。
大数据时代给人们带来的最大改变是人们不再热衷于寻找因果关系,很多的决策开始基于数据和分析做出,而并非基于经验和直觉。
图像处理领域早期的MNIST和CIFAR数据集,都只有60000个样本,随后发展出来的ImageNet包括10000000个以上的样本,数据集规模增长了3个数量级。大型数据集的诞生,使很多机器学习模型有了足够多的数据来训练出泛化性能足够好的模型。
2.2.2 GPU的普及
1.什么是GPU
计算机常见的处理器包括CPU和GPU。CPU(Central Processing Unit)即中央处理单元,它是计算机的控制核心。CPU需要很强的通用性来处理各种不同的数据类型,同时在大量的逻辑判断中包含了大量的分支跳转和中断处理,使得CPU的内部结构异常复杂,不擅长快速计算。
GPU(Graphics Processing Unit)即图形处理器,它是用于处理图形信号的单芯片处理器,在独立显卡中,一般位于PCB板的中心。GPU是专为图像处理设计的处理器,它的存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑,并且省去了Cache。
1999年,第一款真正意义上的显卡芯片GeForce256由NVIDIA推出,其具有完整的顶点变换、光照计算、参数设置及渲染4种3D计算引擎,极大地加快了计算机3D程序的运行速度,减轻了CPU的负担。
2.GPU架构与软件平台
尽管GeForce256中的固定管线能实现完整的3D图形计算,但其处理算法固定,弊端日渐凸显,因此人们开始考虑一种可编程的GPU,于是NVIDIA推出了GeForce3,ATI推出了Radeon8500,这就是第二代GPU。接下来的几年,GPU都以这种独立的可编程架构设计发展,时间是1999年到2002年。
但是此时的GPU编程能力有限,这一问题直到2003年第三代GPU被推出后才得到改善。特别是2006年NVIDIA与ATI分别推出了CUDA(Computer Unified Device Architecture,统一计算架构)编程环境和CTM(Close To the Metal)编程环境,使GPU通用计算编程的复杂性大幅度降低。
GPU的发展历程可以从并行体系结构的角度划分为以下3个阶段。
(1)固定功能架构阶段。
这个阶段是1995—2000年,此阶段各硬件单元形成了一条图形处理流水线,每条流水线功能固定,且硬化了一些给定的函数,其计算模型采用流式计算(Stream Computing)。GPU卸去了CPU的计算负担,聚焦于图形绘制功能,促进了图形学的发展。
(2)分离渲染架构阶段。
这个阶段是2001—2005年,此时GPU用可编程的顶点渲染器替换了变换与光照相关的固定单元,用可编程的像素渲染器替换了纹理采样与混合相关的固定单元。这两部分是实现图形特效最密集的部分,使用渲染器大大加强了图形处理的灵活性与表现力。
(3)统一渲染架构阶段。
从2006年开始到现在,GPU技术一直处于统一渲染架构阶段。在这一阶段,GPU首次提供几何渲染程序(Geometry Shader Program)功能,并动态调度统一的渲染硬件(Unified Shader)来执行顶点、几何、像素程序,在体系结构上不再是流水线的形式,而呈现并行机的特征。
如今GPU厂商开始从硬件和API方面对GPU提供专门的支持,且推出了专门做通用计算的GPU(如AMD FireStream和NVIDIA Tesla),GPU的服务对象也从以图形为主发展为图形和高性能计算并重。
3.GPU与CPU运算能力对比
GPU有高速的浮点运算能力,那么其计算能力到底有多大呢?CPU的浮点运算能力一般在10GFLOPS以下(每秒可进行10亿次浮点运算),而目前的TITAN V GPU峰值浮点运算能力(特指深度学习)为110TFLOPS,可以看出GPU的浮点运算能力远超CPU。
GPU特殊的硬件架构使其相比CPU具有以下优势:拥有高带宽的独立显存;浮点运算性能高;几何处理能力强;适合处理并行计算任务;适合进行重复计算;适合图像或视频处理任务;能够大幅度降低系统成本。
GPU非常适合做并行计算和密集型计算,随着NVIDIA等企业GPU产品线的成熟,面向个人和企业的GPU相继面世,并快速迭代。
显存为8GB的NVIDIA显卡已经可以满足研究人员在大部分情况下进行深度学习训练和测试的需求,这样的显卡只需要3000元左右,几乎每个人都可以承担这样的硬件成本。而企业则可以选择更高显存和计算能力的显卡,人人从事深度学习研究的时代已经来临。
2.2.3 深层神经网络华丽归来
2006年,Geoffrey Hinton等人在Science期刊上发表了论文Reducing the dimensionality ofdata with neural networks,揭开了新的训练深层神经网络算法的序幕。
要完成机器学习任务,往往需要学习高维特征空间到低维特征空间的变换。在传统的机器学习任务中,人工设计的特征算子如SIFT、PCA(Principal Components Analysis,主成分分析)等,都是在模型学习之前已经完成了特征空间的变换。
卷积神经网络则训练一个带有若干中间层的多层神经网络来将高维空间的输入向量映射到低维空间,但这只有当使用一个好的初始化方案时才能实现,因此限制了它的应用。
尽管在1998年已经诞生了如LeNet5可以用于工业级手写数字识别的经典网络,但之后近10年并没有更大的突破,对于超过两个隐藏层的网络,一直没有通用的优化策略。
初始化权重大,会陷入不好的局部极值;初始化权重小,则梯度太小,这两种情况都影响模型收敛。要达到稳定的效果,往往要求神经网络中的参数在初始化时不随机,Geoffrey Hinton在论文中通过RBM(Restricted Boltzmann Machine,受限玻尔兹曼机)实现了一个预训练过程来进行参数初始化。
所谓RBM,是指一个二层全连接的双向网络,其中,二层指隐藏层(h节点)和可视层(v节点),且对各层节点的大小没有要求;双向指数据既可从可视层传输到隐藏层,也可从隐藏层传输到可视层。
在Geoffrey Hinton等人提出的RBM逐层预训练方法中,一次只训练相邻两层网络间的参数,这使学习过程更加简单。
虽然现在我们训练一个深层神经网络已经不需要采用逐层预训练方法,但基于已经训练好的模型进行参数训练的策略,即迁移学习方法,仍然被广泛采用,尤其是当要进行一些比较难训练的任务时。
2.2.4 语音识别的重大突破
虽然深度学习在图像领域取得的突破远大于其他领域,广大受众所感受到的深度学习带来的技术变革如人脸检测与识别、智能驾驶等也聚焦在图像领域,但深度学习却不是率先在图像领域取得突破的。
深度学习率先取得突破的领域是语音识别,以微软亚洲研究院俞栋和邓力等人的研究为代表。
在传统的研究方法中,语音识别经历了从20世纪70年代的隐马尔可夫模型声学建模、20世纪80年代的N元组语言模型、20世纪90年代的隐马尔可夫模型状态绑定和自适应技术,到21世纪第一个十年的GMM-HMM模型几次重要的技术发展。
尽管这些技术取得了不错的成果,但仍然无法让语音识别达到可商用的地步,直到深度学习的出现,其一举让语音识别错误率相比以往最好的结果下降了30%以上,突破了语音识别技术可以商用的临界点。
在2009年Neural Information Processing Systems(NIPS)会议上,邓力和Geoffrey Hinton联合组织了Deep Learning for Speech Recognition and Related Applications Workshop。他们首次证明使用新方法训练的深层神经网络在大量语音识别基准上优于之前的方法,并联合发表了论文Deep Neural Networks for Acoustic Modeling in Speech Recognition[3]。
之后俞栋、邓力及Geoffrey Hinton等人致力于将深度学习技术广泛引入语音识别中,并撰写了Deep Learning:Methods and Applications一书[4]。
2013年,用CTC训练的Bi-directional LSTM RNNs在TIMIT上以17.7%的错误率取得了当时最好的结果。
2013年,CTC-LSTM在NIST举办的OpenHaRT2013中取得第一。
2014年,在Medium-Vocabulary和Large-Vocabulary Speech Recognition上,LSTM RNN/HMM方法一枝独秀。
2016年,微软率先实现了语音识别系统5.9%的低错误率,该系统在Switchboard对话语音识别任务中已经达到了与人类对等的水平。
2.2.5 图像识别的重大突破
在图像领域,对文本检测与识别、人脸检测与识别等的研究已有超过半个世纪的历史,但始终没有达到商用的水准。
传统的图像处理由人工设计各类具有不变性的颜色、形状、纹理等作为算子,其中非常优秀的代表有SIFT、HoG等,它们加上经典的分类器SVM、Adaboost,在很长的一段时间内成了图像识别领域的通用方案。在早期的一些图像识别竞赛中,获胜的也是这一类方案,其直到2012年才被横空出世的深层神经网络彻底打败,随后再也没有获得过胜利。2012年,在ILSVRC竞赛中,Geoffrey Hinton的学生Alex Krizhevsky提出了AlexNet网络[5],一举夺魁。
图2.3所示为ILSVRC 2012分类任务比赛前5名的错误率。
图2.3 ILSVRC 2012分类任务比赛前5名的错误率
SuperVision团队使用的正是AlexNet网络,在只使用大赛数据进行训练时取得了0.16422的错误率。第2名是ISI团队,错误率是0.26172,其使用了SIFT+FV、LBP+FV、GIST+FV、CSIFT+FV等特征组合进行训练模型的集成。第3名是OXFORD_VGG团队,错误率是0.26979,其使用了Dense SIFT和颜色统计特征等,并选择SVM作为分类器。可以看到,从第2名到第6名,错误率差距在10%以内,而第1名和第2名之间有10%的差距,这让研究者认识到了卷积神经网络的强大。
之后的几年,神经网络模型开始快速发展,从2014年开始其对图像的识别水平就已经超过了人类的识别水平,下面简单介绍一下从2013年到2017年图像分类任务精度提高的过程。
2013年,ILSVRC分类任务的冠军网络是Clarifai,不过更为我们熟知的是ZFNet。Geoffrey Hinton的学生Zeiler和Fergus在研究ZFNet网络时利用反卷积技术引入神经网络的可视化,对网络的中间特征层进行可视化,从而使研究人员检验不同特征激活及其与输入空间的关系成为可能。因此,其对AlexNet网络进行了简单改进,包括使用了更小的卷积核和步长,将11×11的卷积核变成了7×7的卷积核,将stride从4变成了2,使ZFNet网络性能超过了原始的AlexNet网络。
2014年,ILSVRC分类任务的冠亚军网络分别是GoogLeNet和VGGNet。其中,VGGNet包括16层和19层两个版本,包含的参数约为550MB,全部使用3×3的卷积核和2×2的最大池化核,简化了卷积神经网络的结构。VGGNet很好地展示了如何在先前网络架构的基础上通过简单地增加网络层数和深度来提高网络的性能。虽然VGGNet设计简单,但异常有效,现在,VGGNet仍然被很多任务选为基准模型。
GoogLeNet是Google的Christian Szegedy等人提出的22层的网络,其分类错误率只有0.067。
GoogLeNet的核心是Inception结构,它采用并行的设计方式。一个经典的Inception结构包括1×1卷积核、3×3卷积核、5×5卷积核、3×3最大池化核4个部分,最后对4个部分的运算结果进行通道上的组合。通过多个卷积核提取图像不同尺度的信息,然后进行融合,可以得到更好表征。自此,深度学习模型的分类准确率在ImageNet数据集上已经达到了人类的水平(5%~10%)。与VGGNet相比,GoogLeNet在精心设计的Inception结构下,模型更深更小,计算效率更高。
2015年,ResNet获得了ILSVRC分类任务冠军。它的错误率是3.57%,超过了人类的识别水平,并以152层的网络架构创造了新的模型记录。ResNet采用了跨层连接方式,成功地缓解了深层神经网络中的梯度消散问题,为上千层的网络训练提供了可能。
2016年依旧诞生了许多经典模型,包括赢得ILSVRC分类比赛第2名的ResNeXt,101层的ResNeXt可以达到ResNet152的精确度,在复杂度上只有后者的一半。其核心思想为分组卷积,即首先将输入通道进行分组,经过若干并行分支的非线性变换后合并通道。
在ResNet基础上,密集连接的DenseNet在前馈过程中将每层都与其他的层连接。对于每层网络来说,前面所有网络的特征通道都被作为输入,同时其特征通道也都被后面的网络层作为输入。DenseNet中的密集连接还可以缓解梯度消失的问题,相比于ResNet,DenseNet能更强化特征的传播和特征的复用,并减少参数的数目。DenseNet相较于ResNet所需的内存和计算资源更少,并能达到更好的性能。
2017年,即ILSVRC的最后一年,SeNet获得了冠军。其仅使用“特征重标定”的策略对特征进行处理,通过学习来获取每个特征通道的重要程度,并根据重要性去降低或提升相应的特征通道的权重。
至此,ILSVRC结束,给我们留下的是研究人员在探索卷积神经网络结构的过程中付出的努力和取得的巨大成功。然而这还不是最高潮,因为以上这些研究只限于技术圈子。真正让深度学习或者说人工智能技术为大众所熟知,引爆业业外人士激情的,是2016年人类顶级棋手李世石与Google的围棋AI AlphaGo的5局赛事。
AlphaGo是基于深度学习、强化学习和蒙特卡洛树搜索的AI程序,CNN模型在其整个算法中占有非常重要的位置,用于在价值网络中估计当前局面的获胜概率。
2016年,AlphoGo还因为不够“成熟”有一次失误,输给了李世石一局,但一年之后,在与排名世界第一、连续夺得围棋大赛冠军、代表当前人类围棋最高水平的棋手柯洁对决时,在柯洁最好的状态下,其连胜3局,自此AlphaGo再无对手。按照人类大脑的进化水平,在围棋这个战局里,人类可能再也赶不上AI了。
2.2.6 自然语言处理的重大突破
自然语言处理的发展可以追溯到20世纪50年代的图灵测试,其经历了从规则到统计,再到现在的深度学习的发展过程。早期基于传统机器学习模型的自然语言处理算法一般都是基于浅层模型(如SVM和logistic回归)的,这些模型都在非常高维和稀疏的特征上进行训练和学习,会面临维度爆炸等难以解决的问题。
2003年,Bengio等人在论文A Neural Probabilistic Language Model[6]中提出了神经网络语言模型,其中作为副产品,词向量掀开了用稠密的多维向量来编码词义的方式。Mikolov等人在2013年发表了文章Distributed Representations of Words and Phrases and Their Compositionality,真正使从大规模语料中获得词向量变为现实。
自然语言处理的研究者很早就开始研究如何对句子进行编码和解码。使用CNN进行句子建模可以追溯到Collobert和Weston在2008年的研究,他们使用多任务学习为不同的NLP任务输出多个预测,如词性标注、语块分割、命名实体标签和语义相似词等。
对词语序列使用RNN及其变种的研究从RNN被提出来后就没有间断过,llya Sutskever等人在2014年的文章Sequence to Sequence Learning with Neural Networks中提出了一种通用深度LSTM编码器-解码器框架,其可以实现序列之间的映射。这种seq2seq编解码结构后来被广泛用于机器翻译、生成式聊天机器人等自然语言处理任务。
2014年,Dzmitry Bahdanau和Kyunghyun Cho等人在论文Neural Machine Translation by Jointly Learning to Align and Translate中首次将注意力机制应用到机器翻译任务,改进了机器翻译在长序列上的性能,使注意力机制开始得到关注。
2017年,Ashish Vaswani等人在Attention Is All You Need中提出了Transformer,它完全去除了编码步中的循环和卷积,仅依赖注意力机制来捕捉输入和输出之间的全局关系,使整个架构更加并行化,并使在翻译、解析等任务上训练得到积极结果所需的时间更少。至此,Transformer作为一种更为强大的特征提取器在自然语言处理任务中获得了非常多的应用。
特征提取器除了RNN、CNN、Transformer,自然语言处理近年来出现了一种新的任务处理模型,即预训练模型。预训练模型最早可以追溯到词向量,在词向量中,有大量编码了的词语之间的关系信息,可用于下游的自然语言处理任务,但因为词向量是一种静态模型,无法随着语境的变化动态改变表征值,因此其无法解决多义词的问题。为解决此问题,2017年,ELMO模型在Deep Contextualized Word Representation中被提出。ELMO模型的思想是用事先训练好的语言模型来学习一个单词的Word Embedding,在实际使用Word Embedding时,再利用该语言模型根据上下文单词的语义去调整单词的Word Embedding表示。经过调整后的Word Embedding能表达单词在此上下文中的具体含义,自然也就能克服多义词的问题。
2018年,Generative Pre-Training(GPT)模型被提出,其采用单向语言模型,用Transformer作为特征抽取器,取得了非常不错的效果。2018年10月,谷歌在论文Bidirectional Encoder Representation from Transformers中推出了BERT模型,刷新了几乎所有NLP任务的榜单。
2019年2月,OpenAI基于更大的模型,以及规模更大、质量更好的数据集推出了GPT2.0,其语言生成能力令人惊叹。2019年6月,XLNet诞生于论文XLNet:Generalized Autoregressive Pretraining for Language Understanding中,它分别吸取了BERT和GPT两类模型的长处,获得了很好的效果。从2017年左右起,深度学习在自然语言处理中的应用被广泛关注。