人工智能安全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 人工智能第三次发展高峰的技术推手

人工智能之所以能进入第三次发展高峰,除了由于一些诸如AlphaGo战胜人类棋手的抢人眼球的事件引起了人们高度关注之外,其根本原因还是由于技术上的突破,同时大数据、移动网络、物联网、微电子技术等新技术的发展也为人工智能的进步奠定了技术基础。

1.4.1 深度学习的贡献

深度学习(Deep Learning,DL)是一种以人工神经网络为架构,对数据进行表征学习的算法。其中,表征学习的目标是寻求更好的表示方法并创建更好的模型来从大规模未标记数据中学习这些表示方法。深度学习使用了分层次抽象的思想,模拟人类大脑神经网络的工作原理,搭建多层神经网络分别处理不同层的数据信息,原始数据通过底层神经网络抽象出底层特征输出给高层神经网络,高层神经网络可以更有效率地获取高层概念,从而更精准地处理信息。深度学习的好处是能够用无监督或半监督的特征学习方法分层次地提取特征,从而替代了手工获取、设计特征,大大提高了特征提取效率,因而这些算法能被应用于其他算法无法企及的无标签数据。这类数据比有标签数据更丰富,也更容易获得。这一点也为深度学习赢得了重要的优势。

1974年,保罗·J.韦伯斯(Paul J.Werbos)提出的标准反向传播算法[92]对后来的深度神经网络的发展起到了重要的作用。翁巨扬(Juyang Weng)等在1992年发表的生长网(cresceptron)[93]可以算是一个早期的深度学习网络方案,其可以在一般自然杂乱图像中进行自然物体的识别。同年,于尔根·施密德胡伯(Jürgen Schmidhuber)发表了一种多层级神经网络模型[94],通过对一组多层的循环神经网络(Recurrent Neural Network,RNN)使用无监督的预训练以预测其下一个输入,从而训练深度神经网络的每一层。在这一模型中,神经网络中的每一层都代表观测变量的一种压缩表示,其基本上没有信息丢失,这一表示也被传递到下一层网络;然后再使用反向传播算法进行调优。施密德胡伯后来将这种多层级神经网络模型称为深度学习系统[95]。当然,在那个年代,这些学习方法尽管有效,但受计算能力的限制,这些方法距离实用还比较遥远。

然而,在过去的10年里,辛顿和其他研究人员在概念上取得了一些根本性的突破。辛顿在2007年发表的文章中提出了一种支持无监督学习的深度神经网络模型[96]:首先,在第一层前馈神经网络中用原始特征来进行有效训练,如图像中的边缘或最小的语音单元,以避免人工去标注分类数据;第二,将网络中的每一层视为无监督的受限玻尔兹曼机,以便将整个学习任务分解为多个简单的任务,使得将前一层准确识别的特征输入到下一层,以便下一层可以训练识别出更复杂的特征,该过程在连续的层中重复,直到系统能够可靠地识别对象;第三,使用有监督的反向传播算法进行调优,以提高复合模型的生成能力或辨别能力。采用这种技术,可以随着层次的增加让学习的精确性得到提升,并极大地推动无监督学习的发展,让机器具备“自学”的能力。深度学习方面的突破性进展极大地提升了人工智能的技术水平。同时,高性能图形处理器的出现也极大地提高了深度学习中数值计算和矩阵运算的速度,显著缩短了深度学习算法的运行时间,让深度学习获得了巨大的应用市场,使深度学习重新获得了社会的关注。

最近8年是深度学习快速发展的8年,使得深度学习在人工智能领域中占据了举足轻重的地位。

2012年,亚历克斯·克里热夫斯基(Alex Krizhevsky)、伊利亚·萨茨克维尔(Ilya Sutskever)和导师辛顿发表了他引54579次[1]的论文“ImageNet Classification with Deep Convolutional Neural Networks”[97](《基于深度卷积神经网络的ImageNet分类》)。ImageNet数据集在目前深度学习图像领域应用非常多,很多图像分类、定位、检测等研究工作大多基于此数据集展开[98]。该论文介绍了使用深度学习技术所开发的一个大型的深度卷积神经网络AlexNet,包含5个卷积层、1个最大池化层和2个全连接层,共有6000万个参数和50万个神经元,将130万个高分辨率图像分为1000个不同的类。因AlexNet证明了在GPU上训练的深度卷积神经网络可以将图像识别任务提升到一个新的水平,所以被业界广泛认为是一项真正的开创性工作。AlexNet在ImageNet竞赛中获得冠军[99],其对神经网络的发展产生了非常重要的影响,之后的ImageNet冠军几乎全都采用了卷积神经网络(Convolutional Neural Network,CNN)结构,使其成为了图像分类的核心模型,并由此开启了深度学习的新一波浪潮。

2013年,托马斯·米科洛夫(Tomas Mikolov)等人发表了他引17366次的论文“Distributed Representations of Words and Phrases and their Compositiona lity”[100](《单词和短语的分布式表示及其构成》),对连续Skip-gram模型进行了改进。Skip-gram模型是一种从大量非结构化文本数据中学习高质量向量表示的有效方法。改进的结果使Skip-gram模型具备更强的表示能力,通过对高频词进行二次抽样的方法,以及衡量短语的方法,使其处理速度显著提高,可以更快地学习质量更高的向量,甚至可以很好地表示由数百万个句子构成的向量。这使得深度学习对文本的处理能力又上了一个新的台阶。

2014年,伊恩· J.古德费洛(Ian J.Goodfellow)等人发表了他引15001次的论文“Generative Adversarial Nets”[101](《生成对抗网络》)。该论文提出了一个新的框架——生成对抗网络(Generative Adversarial Nets,GAN)来构建生成模型。GAN框架同时训练两个模型:一个是生成器,用以获取数据分布;另一个是鉴别器,用以鉴别样本,评估样本是来自训练数据而非生成器的概率。通过两者之间的博弈,GAN能够对数据分布进行很好的建模。生成器的目的是尽量降低鉴别器正确判断出假样本的概率,而鉴别器的目标是最大程度地降低识别假样本时发生的错误。由于GAN会训练生成器让鉴别器错误识别的概率最大化,可以减小梯度饱和,提高训练稳定性,并产生惊人的效果,因此使得GAN迅速走红,成为目前人们在机器学习、模式识别中优先采用的训练算法。

2015年,迪德里克·P.金马(Diederik P.Kingma)等人发表了他引36353次的论文“Adam:A Method for Stochastic Optimization”[102](《Adam:一种随机优化方法》)。该论文介绍了一种基于自适应低阶矩估计的随机目标函数一阶梯度优化算法Adam。该方法实现简单,计算效率高,对内存要求低,对梯度的对角线重缩放具有不变性,非常适合于数据或参数规模大的情况,也适用于非平稳目标和具有异常噪声或稀疏梯度的情况。Adam可以为每个参数单独调节学习速率,很快成为了一个非常流行的自适应优化器。Adam的出现促进了深度学习的有效运用,是目前深度学习中最受欢迎的优化算法之一。

2016年,何凯明(Kaiming He)等人发表了他引37225次的论文“Deep Residual Learning for Image Recognition”[103](《用于图像识别的深度残差学习》)。对一个普通的神经网络来说,越深的神经网络(层数越多)就越难训练,因为其准确率可能会随着深度的增加而下降。为此,何凯明等人的论文提出了一种残差学习框架,采用更深的网络但却简化了网络的训练,其思路是显式地将层重新定义,参考每层输入的同时还要学习其残余函数,即将输入从卷积层的每个块之前添加到输出中,从而构造成了残差网络。实验结果表明,这些残差网络更容易优化,并且可以从显著增加的深度中获得更高的精度。在ImageNet数据集上,当残差网络深度达152层(比VGG网络深8倍)时,仍然具有较低的复杂度,且误差仅为3.57%。这一结果赢得了ILSVRC 2015分类测评的第一名。深度残差学习最初是为了解决深度卷积神经网络中的梯度消失/梯度爆炸问题,而现在残差块已成为几乎所有卷积神经网络的基本组成部分。残差网络解决了人们对神经网络分解为更多的层会导致退化的担心,因为在最坏的情况下,残差网络可以将其他层简单地设置为恒等映射,从而使之仅仅退化为一个浅层网络而已。

2017年,阿希什·瓦斯瓦尼(Ashish Vaswani)等人发表了他引5518次的论文“Attention Is All You Need”[104](《你只需要“注意”》)。人们在从事用于翻译的序列转换时,通常在编码器和解码器结构中运用复杂的递归或卷积神经网络,为提高性能,人们还会加入注意力机制来连接编码器和解码器。该论文提出了Transformer模型。这是一种完全依赖于注意力机制来构建输入和输出之间全局依赖关系的模型,其不再需要递归和卷积神经网络,更易于并行化,在8个P100 GPU上只训练12个小时就可以使翻译质量达到更高的新水平。在两个机器翻译任务上的实验表明,模型具有更高的质量以及更高的并行性,训练时间也显著减少。Transformer模型在很大程度上优于循环神经网络(RNN),这是因为在超大型网络中前者具有计算成本上的优势。RNN中的长距离传播梯度会导致内存访问成为瓶颈,因此需要更复杂的LSTM(Long Short-Term Memory,长短期记忆网络)和GRU(Gated Recurrent Unit,门控循环单元)模型。相比之下,Transformer模型针对高度并行处理进行了优化,其计算成本最高的部分是注意力层之后的前馈网络,这可以并行化应用。再就是注意力层本身,这是大矩阵乘法,也容易优化。Transformer模型单纯使用注意力机制,放弃了卷积,这种大道至简的做法,把基于“注意”的序列神经模型推向了高潮,现在已成为几乎所有最新自然语言处理模型的基础。

2018年,雅各布·德夫林(Jacob Devlin)等人发表了他引3288次的论文“BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding”[105](《BERT:用于自然语言理解的深度双向Transformers模型预训练》)。现有翻译技术的主要局限在于,标准语言模型是单向的,在模型预训练中可以使用的架构类型很有限,制约了预训练表示的能力。该论文提出一个新的语言表示模型BERT(Bidirectional Encoder Representation from Transformers,Transformers模型的双向编码表示)。BERT通过联合训练所有层中左右两侧的语境,对未标记文本进行深层双向表示的预训练。因此,预训练的BERT表示可以通过一个额外的输出层进行微调,以创建适用于各种任务的模型,无须对特定任务的体系结构进行大幅架构修改,如问答和语言推理等。BERT的概念很简单,实验效果很好,打破了11项NLP(Natural Language Processing,自然语言处理)的测试记录,包括将GLUE(General Language Understanding Evaluation,衡量通用语言理解能力的指标)得分提高到80.5%(绝对数值提高7.7%),MultiNLI(Multi-genre Natural Language Inference,多类型文本蕴含关系识别)准确度提高到86.7%(绝对数值提高4.6%),SQuAD (StandFord Question Answering Dataset,斯坦福问答数据集)v1.1问答测试F1的得分提高到93.2(绝对值提高1.5),SQuAD v2.0问答测试F1的得分提高到83.1(绝对值提高5.1)。其中,人类的SQuAD v1.1问答测试F1的得分在2016年8月28日的测试结果是91.221,被BERT超过了2分;人类的SQuAD v2.0问答测试F1的得分在2018年6月9日的测试结果是88.977[106]。业界认为,BERT模型堪称NLP的里程碑[107],宣告NLP范式的改变,其地位类似于ResNet在图像中的地位,今后的研究工作恐怕大都要使用其来初始化,就像之前人们使用word2vec(一种词向量表示方法)一样自然。

2019年,泰罗·卡拉斯(Tero Karras)等人发表了一年内就他引443次的论文“A Style-Based Generator Architecture for Generative Adversarial Networks”[108](《一个基于风格的GAN生成器架构》)。文章借鉴风格转换文献,提出了一种可供选择的GAN的生成器架构StyleGAN。新的架构可自动学习、无监督分离高级属性(例如在人脸相关训练中的姿势和身份属性),生成的图像可随机变化(例如雀斑、头发的变化),并实现了直观、特定缩放的合成控制。新的生成器显示出更好的插值特性,还更好地消除了变化的潜在因素。在 StyleGAN 之前,GAN 的相关研究已经遇到了条件式生成困难、单纯增加模型大小的收益有限、无法生成逼真的高分辨率图像等多种困境,而StyleGAN冲破了瓶颈,在高分辨率与高清晰度等多个方面都有了大幅进步。StyleGAN吸引了很多人撰写自己的实现模型并开放动态生成的图像结果供人访问[2],包括生成人脸[3]、猫[4]、食品[5]、容器[6]、动漫女孩[7]、家居[8]、简历[9]、歌词[10]等模型。随后,卡拉斯等人又发表了关于StyleGAN2的论文[109],针对性地修正了StyleGAN 生成的图像中的缺陷等问题,并提高了图像中元素的一致性,从而把图像生成的质量带到了新的高峰。这让深度学习进一步展示出不可抵抗的魅力。

当然,深度神经网络也并非完美无缺。如果仅仅进行简单的训练,深度神经网络可能会出现很多问题,如过拟合问题、可靠性问题、不可解释性问题等。就过拟合问题而言,深度神经网络产生过拟合问题可能是因为增加的抽象层使得模型能够对训练数据中较为罕见的依赖关系进行建模,从而影响了模型的普适性。就可靠性问题而言,深度学习模型离开训练时所使用的场景数据,其实际效果就会明显降低。在实际应用中,训练数据和实际应用数据存在区别,训练出的模型被用于处理未学习过的数据时,其效果会明显降低。就不可解释性问题而言,深度学习的计算过程可以看作是黑盒操作,模型计算、特征选取等均由算法自行操作,目前尚无完备的理论能够对其做出合理解释,随着越来越多的人工智能算法应用在实际生产生活中,不可解释的问题则会存在产生结果不可控的隐患。

1.4.2 软件框架成为人工智能应用的推手

当前,人工智能基础性算法已经较为成熟,构建算法模型工具库成为各大厂商所追逐的目标。许多大厂商都将算法进行工程实现并封装为软件框架,同时以开源的方式供开发者使用,这使得开发者能够利用这些软件框架快速、便捷地开发出相应的人工智能应用系统。另一方面,这些开源的深度学习软件框架也因众人的追捧而成为打造开发及使用人工智能生态的核心,并让开源企业成为了人工智能的国际巨头企业。目前,人工智能的软件框架主要分为深度学习训练软件框架和推断软件框架两大类别。

然而,实现人工智能应用落地的推断软件框架质量参差不齐,极大地制约了业务开展。由于人工智能的应用场景众多、特点各异,用于实现最后应用落地的开源推断软件框架无论在功能还是性能层面上,距离实际需求还存在相当大的差距。

1.4.2.1 基于深度学习的训练框架

基于深度学习的训练框架主要是解决海量数据的读取、处理及训练问题,侧重于海量训练模型的实现。目前主流的深度学习训练软件框架主要有谷歌大脑(Google Brain)团队支撑的TensorFlow[110]、亚马逊公司(Amazon)主导的MXNet[111]、Facebook公司的Caffe2+PyTorch[112]、微软的CNTK[113]、百度的飞浆(PaddlePaddle)[114]等。

TensorFlow是一个端到端开源机器学习平台,以功能全面、兼容性广泛以及生态完备而著称。该框架实现了在多GPU上运行深度学习模型的功能,通过提供数据流水线的方式,具有模型检查、可视化、序列化等配套模块。TensorFlow拥有一个包含各种工具、库和社区资源的全面灵活生态系统,已经成为深度学习开源软件框架最大的活跃社区,可以让开发者轻松地构建和部署由机器学习提供支持的人工智能应用。TensorFlow有3个主要特点:

(1)可以轻松地构建模型。TensorFlow 提供多个抽象级别,开发者可以根据需求来选择合适的级别,甚至可以使用高阶 Keras API 来构建和训练模型,以便让开发者能够轻松地使用 TensorFlow,从而可以随时随地进行特定用途的机器学习。TensorFlow可以借助 Eager Execution 进行快速迭代和直观的调试;对于大规模的机器学习训练,开发者无须更改模型定义,可以直接使用Distribution Strategy API 在不同的硬件配置上进行分布式训练。

(2)可以直接提供具体的应用。不管是在服务器、移动设备和边缘设备上,甚至在网络上,无论使用何种语言或平台,TensorFlow 都可以简单地直接进入训练和部署模型的状态。

(3)强大的研究实验。TensorFlow可以构建和训练先进的模型,且不会降低速度或性能。借助 Keras Functional API 和 Model Subclassing API 等功能,TensorFlow 可以帮助开发者灵活地创建复杂拓扑并实现相关控制。TensorFlow 还支持强大的附加库和模型生态系统以供开发者进行实验。

MXNet自视为真正的开源深度学习框架,既可以依靠灵活的库来快速开发深度学习项目,还可以凭借其强大的框架来支撑机器学习方面的应用。该软件框架目前已经捐献给Apache软件基金会。MXNet以优异性能及全面的平台支持而著称。MXNet有3个主要特点:

(1)具有灵活的编程模型,可以通过Gluon Python API以支持命令式编程模型;也可以通过调用hybridize 功能简单地切换到符号式编程模型,从而可以提供更快、更优化的执行能力。

(2)支持分布式训练,可运行于多GPU、多主机等并行环境,且具有近线性的并行效率,从而可以充分利用计算集群的规模优势;MXNet还引入了对Horovod(Uber开发的分布式学习框架)的支持。

(3)提供8种语言接口,与Python深度集成,并支持Scala、Julia、Clojure、Java、C++、R和Perl。结合混合功能,使得从Python训练可以平滑地过渡到开发者所选择的语言来重新部署,从而缩短开发时间。

Caffe2是由Facebook所发布的一款开源机器学习框架。2018年4月,Caffe2代码全部并入同样在Facebook平台上开发的开源机器学习框架PyTorch中[115],从而变成了Caffe2+PyTorch,引起深度学习框架格局的剧震[116]。PyTorch以其在图像处理领域的深耕和易用性而著称,主要有以下4个特点:

(1)PyTorch脚本:TorchScript在命令行模式和图形模式之间提供无缝切换,从而可以提高开发速度。

(2)分布式训练:分布式Torch后端支持研究与应用中的可扩展分布式训练与性能优化。

(3)丰富的工具和库:PyTorch所支持的丰富的工具和库扩展了其生态系统,可支持计算机视觉、自然语言处理等方面的开发。

(4)支持云开发:PyTorch在主要的云平台上都得到了很好的支持,提供了无缝的开发环境且易于扩展。

Microsoft Cognitive Toolkit(CNTK)是微软开发的用于商业级分布式深度学习的开源工具框架,通过有向图将神经网络描述为一系列计算步骤,在语音识别、机器翻译、图像识别、语言建模等领域都有良好的应用,以其在智能语音语义领域的优势及良好性能而著称。CNTK可以让用户轻松实现并组合出流行的人工智能模型,如前馈深度神经网络、用于图像处理的卷积神经网络和用于自然语言处理的递归神经网络等。CNTK实现了跨多个GPU和服务器的随机梯度下降(Stochastic Gradient Descent,SGD)和反向传播学习。

飞桨(PaddlePaddle)是一种源于产业实践的开源深度学习平台,以易用性和支持工业级应用而著称。飞桨提供高性价比的解决方案,可有效地解决超大规模推荐系统、超大规模数据、自膨胀的海量特征及高频率模型迭代的问题,实现高吞吐量和高加速比。飞浆有3个主要特点:

(1)为用户提供动态图和静态图两种计算图,兼顾灵活性和高性能。

(2)基于实际的业务,提供应用效果领先的官方模型。飞桨提供的80余种官方模型,包含“更懂中文”的自然语言处理模型,同时也开源了多个在视觉领域国际竞赛获冠军的算法。

(3)源于产业实践,具有输出超大规模并行深度学习平台的能力。飞桨支持稠密参数和稀疏参数场景下的超大规模深度学习并行训练,支持万亿规模参数、数百个节点的高效并行训练,提供强大的深度学习并行技术。

1.4.2.2 深度学习推断软件框架

基于深度学习进行推断只需要将数据输入神经网络执行正向的计算,不需要通过反向传播过程修正连接权重,因此需要的计算量相对训练过程少很多,但是推断过程仍涉及大量的矩阵卷积、非线性变换等运算。由于推断过程不需要大量的训练,因此很多终端设备(如摄像头等)均可以运行推断程序进行判断。但是终端侧设备的性能一般较低,部分设备也有功耗的限制,为了满足终端侧设备的计算能力,业界也开发了众多开源的终端侧推断软件框架,包括Facebook推出的Caffe2go[117]、谷歌推出的TensorFlow Lite[118]、腾讯优图实验室的NCNN[119]、苹果公司的Core ML[120]、百度公司的Paddle-Mobile[121]、英伟达的TensorRT[122]等。

Caffe2go以开源项目Caffe2为基础,是一个轻量级、模块化的终端侧推理框架,也是最早出现的终端侧深度学习平台。计算密集型移动应用的核心问题是计算速度。该框架的轻量化设计可以针对特定平台上定义的操作进行优化,能够让深层神经网络在手机上高效地运行。Facebook已将该框架嵌入到手机的创意相机移动应用程序中,目的是帮助人们将普通视频变成艺术品。这种技术称为“样式转移”,它将用于处理图像和视频的人工智能模型的大小压缩100倍,从而可以在某些手机上用不到1/20秒的时间完成AI推断,而人一眨眼的时间是1/3秒,完全可以满足手机上的应用需求。

TensorFlow Lite 是另一种用于设备端推断的开源深度学习框架。TensorFlow Lite 提供了转换 TensorFlow模型,并提供了在移动端(mobile)、嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具。TensorFlow Lite可以运行在Android和iOS 平台上,在Android平台上结合Android 生态(包括成熟的库、框架等),神经网络运行时能够取得较快的AI推断速度。

NCNN是一个手机端的高性能神经网络计算框架,无第三方依赖,能实现跨平台和适配不同手机端CPU的应用。开发者可以基于NCNN将深度学习算法非常便捷地移植到手机端,从而开发出人工智能应用。

Core ML是苹果公司开发的针对iOS平台的人工智能软件框架,其目的是将机器学习模型集成到手机端应用中。Core ML为所有模型提供统一的表示形式,能够对接Caffe、PyTorch、MXNet、TensorFlow 等绝大部分人工智能框架及模型,支持手机端应用使用Core ML框架的API接口在手机设备上运行推断程序,进行预测和模型微调等。

Paddle-Mobile是百度研发的支持Linux-ARM、iOS、Android、DuerOS等平台的移动端深度学习框架,在其最上层提供用于神经网络推断的API,服务百度的众多应用。Paddle-Mobile的底层对各种硬件平台进行了优化,包括CPU(主要是移动端的ARM CPU)、GPU(包括ARM的Mali、高通的Andreno以及苹果自研的GPU等),另外还包括华为的NPU、PowerVR、FPGA 等平台,保持了高性能、小体积等诸多优势。

TensorRT可为深度学习应用提高低延迟和高吞吐量,支持Caffe、Caffe2、TensorFlow、MXNet、PyTorch 等主流深度学习库,是英伟达的一款性能较高的人工智能框架。使用TensorRT的应用程序在推理上可比基于CPU的平台快40倍,同时TensorRT为深度学习应用程序提供了优化能力,如对视频分析、语音识别、自然语言处理的优化等,减少了应用程序的延迟。由于TensorRT的诸多优势,开发者可以专注于开发基于人工智能技术的应用,无须考虑对推理和实际部署进行优化调整。

1.4.3 解决不同软硬件的适配

在实际工程应用中,开发者在开发人工智能应用时往往有多种软件框架可供选择,各种选择也均能取得不错的效果。同时,开发者也有多种硬件选项可供选择。但是软件框架和硬件选项的多样性也带来了一些在所难免的问题。第一个问题就是不同软件框架的适用性问题。由于各个软件框架的底层实现方法不一样,不同软件框架下开发的人工智能模型很难快速转换。比如开发者在TensorFlow框架下开发了一个人脸识别神经网络并将其开源,而其他框架(如PyTorch、PaddlePaddle等)的忠实爱好者很难直接使用TensorFlow中的神经网络模型,还需要对开源的模型进行重构,才能在新的软件框架下成功运行。第二个问题是软件框架和硬件的适配性问题。计算芯片发展迅速,而软件框架往往很难跟上芯片的发展,从而导致底层芯片和软件框架的不适配,使得人工智能算法遇到一些莫名的错误。业界也有公司提出了针对深度神经网络模型的编译器,旨在通过扩充面向深度学习模型的各项专属功能,解决深度学习在不同软件框架、不同硬件设备之间的适配性和可移植性问题。但是,这样的编译器暂时没有统一的标准,各硬件厂商在中间表示层的竞争也成为了人工智能技术实用化的阻碍。如何从模型底层、硬件、存储、计算及优化等方面形成统一的标准,将是影响人工智能快速应用和普及的重要环节。

1.4.3.1 中间表示层解决可移植性问题

在具体的工程实践和应用中,一般采用中间表示(Intermediate Representation,IR)层的规定将人工智能模型(训练完成以后的模型)进行表达和存储。中间表示层可以看作是很多中间件的集合,使用中间表示层可以优化程序性能、提升通信效率。深度学习训练软件框架实现方式各异,为了打通不同的软件框架和不同的表达模式,扩充中间表示层可以使深度学习网络模型编译器更加有效地工作。在深度学习网络模型编译器中,通过新增加的专属中间件可以实现终端侧模型适配并可运行在不同的软硬件平台。当前支持中间表示层的包括亚马逊云服务(AWS)所推出的NNVM/TVM[123]和谷歌所推出的XLA-TensorFlow[124]

华盛顿大学保罗·G.艾伦(Paul G.Allen)计算机科学与工程学院的亚马逊云服务(AWS)AI团队于2017年9月在DMLC开源社区发布了TVM堆栈,旨在弥合深度学习框架与面向性能或效率的硬件后端之间的鸿沟。TVM堆栈使深度学习框架可以轻松地构建端到端编译。同年10月,威斯康星大学艾伦分校和AWS的AI团队正式发布NNVM编译器。作为一种开放式深度学习编译器,NNVM编译器将前端框架工作负载直接编译到硬件后端,从而提供了一种适用于所有框架的统一解决方案。NNVM与TVM的联手,使得NNVM编译器借助TVM堆栈可以实现:①在高级图中间表示层中表示并优化常见的深度学习工作负载;②转换计算图,最大程度地降低对内存的使用,优化数据布局并融合不同硬件后端的计算模式;③提供从前端深度学习框架到裸机硬件的端到端编译管道。

XLA(加速线性代数) 是谷歌推出的一种针对特定领域的线性代数编译器[125],能够优化TensorFlow计算。它可以提高服务器和移动平台的运行速度,改进内存使用情况和可移植性。TensorFlow是一种灵活且可扩展的深度学习框架,可定义任意数据流图并使用异构计算设备(例如CPU、GPU)以分布式方式高效执行。但TensorFlow的灵活性与其目标性能不符,尽管TensorFlow旨在支持定义任何类型的数据流图,但要使所有图都能够高效执行却是一件很有挑战的事情。当各操作之间的权重不同时就不能保证这样的组合可以以最有效的方式运行。为此,谷歌内部的XLA团队与TensorFlow团队合作,于2017年3月推出了XLA-TensorFlow,用XLA作为TensorFlow的编译器。XLA使用JIT编译技术来分析用户在运行时创建的TensorFlow图,将多个操作融合在一起,并为不同CPU、GPU以及自定义加速器(如谷歌的TPU等设备)生成高效的本机代码。

1.4.3.2 模型转换及其交换格式

为了解决不同软硬件的适配问题,除了使用统一的中间表示层对模型进行统一的表达及存储外,输入数据的格式也需要进行处理。由于不同的软件框架实现方式不一样,它们定义的输入数据格式也各有不同,并会采用不同的技术实现数据操作。例如,TensorFlow 定义了TFRecord[126],这是一种用于存储二进制记录序列的简单格式,将数据序列化并存储在一组可以线性读取的文件(每个文件100~200MB)中,可支持高效地读取数据,同时也有助于缓存数据的预处理。而MXNet及PaddlePaddle 框架使用的是RecordIO[127],这是一组二进制数据交换格式,其基本思想是将数据分成单独的块(也称为“记录”),先在每个记录之前添加该记录的长度值(以字节为单位),然后再保存记录中的数据。但是,RecordIO并没有正式的格式规范,因此RecordIO在实际使用时往往存在一些不兼容的问题。

深度学习网络模型的表示规范主要有两类:一类是Facebook和Microsoft创建的社区项目所推出的ONNX(Open Neural Network Exchange,开放神经网络交换)[128];另一类是由开放行业联盟Khronos集团所推出的NNEF(Neural Network Exchange Format,神经网络交换格式)[129]

ONNX是由Facebook和Microsoft创建的社区推出的一种代表深度学习模型的开放格式,可使模型在不同软件框架之间进行转移。ONNX支持的软件框架目前主要包括Caffe2、PyTorch、Cognitive Toolkit、MXNet等,而谷歌的TensorFlow 并没有被包含在内。ONNX有两个主要特点:

(1)框架的互操作性:通过启用互操作性可以更快地将设计付之实现。ONNX让模型可以在一个框架中进行训练,然后转移到另一个框架中进行推理。ONNX模型已得到Caffe2、Cognitive Toolkit、MXNet和PyTorch的支持,并且具有许多其他常见的框架和库的连接器。

(2)硬件优化:ONNX通过硬件优化覆盖更多的开发人员。任何导出ONNX模型的工具都可以从ONNX兼容的RUNTIME和库中受益。这些RUNTIME和库旨在最大程度地提高深度学习领域某些硬件的最佳性能。2019年7月,ONNX v1.6正式推出,使用新数据类型和运算符可以支持更多的模型。

NNEF支持不同设备、平台的应用可以使用丰富的神经网络训练工具和推理引擎(及其组合),能很大程度减少机器学习的零散部署。NNEF支持包括PyTorch、Caffe2、TensorFlow等大多数人工智能软件框架的模型格式转换。目前已经有30 多家计算芯片企业参与到NNEF中。NNEF的目标是让使用者能够轻松地将经过训练的神经网络转移到各种各样的推理引擎中。由于神经网络在边缘设备上广泛应用,制造商对于NNEF的依赖是至关重要的。因此,NNEF封装了一个训练神经网络的结构、操作和参数的完整描述,使之独立于用于产生它的训练工具和用于执行它的推理机。

1.4.3.3 深度学习网络模型编译器解决适应性问题

传统编译器缺少对深度学习算法基础算子的优化,如深度学习算法包含大量的卷积、全连接计算甚至残差网络等,传统编译器未实现算法优化,同时其并未适配多种形态的计算芯片。为了提高深度学习的效率,需要针对人工智能底层计算芯片及上层软件框架设计专属的编译器。目前业界主要通过对传统编译器架构进行升级来解决这个问题。目前,产业界绝大多数深度学习网络模型编译器都是按照伊利诺伊大学发起的开源编译器LLVM架构设计的。LLVM是模块化、可重用的编译器及工具链技术的集合,有人认为LLVM是Low Level Virtual Machine(底层虚拟机)的缩写,但LLVM管理团队特别声明:LLVM与传统虚拟机关系不大,名称“LLVM”本身不是缩写,而是项目的全名[130]。目前有大量基于LLVM软件框架的工具投入使用,形成了具有实际标准意义的生态。当前业界主流编译器主要包括英伟达公司的NVCC[131]、英特尔公司开发的nGraph[132]、NNVM编译器等。

CUDA(Compute Unified Device Architecture,计算机统一设备架构)是显卡厂商英伟达公司开发的一种并行计算平台和编程模型,可在GPU上实现多种常规计算。英伟达的NVCC(CUDA编译器)基于LLVM开源编译器的基础结构,可支持GPU加速,为开发人员提供了很大的便利。开发者可以先通过创建特定语言的前端,将该语言编译为LLVM使用的中间表示层(IR),并添加对GPU加速的支持;然后优化前端生成的IR,以便在不同的目标设备上执行程序。开发者可以针对特定处理器的后端添加对新设备的支持。该后端将在优化的LLVM中间表示层IR上执行最终编译。英伟达与LLVM组织合作,将CUDA编译器源代码贡献给LLVM内核和并行线程执行后端,从而实现对英伟达GPU的全面支持。

nGraph是一种与框架无关的深度神经网络(Deep Neural Network,DNN)模型编译器,可以适配多种设备。借助nGraph,开发者可以不必担心如何在不同设备上调整其DNN模型来进行训练。nGraph可支持TensorFlow、MXNet、Neon,通过ONNX可以间接支持CNTK、PyTorch、Caffe2。开发者可以在英特尔架构CPU、GPU和英特尔神经网络处理器(NNP)等多种设备上运行这些框架,安装nGraph库并使用该库编写或编译框架,从而运行训练和推理模型。

1.4.4 算力大幅提升的贡献

人工智能技术的飞速发展也离不开算力的大幅提升。近年来涌现的许多新型高性能计算架构也成为了人工智能技术发展的催化剂。深度学习算法需要对网络连接权重进行多次调整,也需要很高的计算能力的支撑。由于集成电路按摩尔定律迅速发展,使计算成本迅速下降,同时云计算的出现、GPU的大规模应用等,这些都使得针对集中化数据的计算能力变得前所未有的强大。与此同时,计算芯片的架构也逐渐向深度学习应用优化的趋势发展,以传统的CPU 为主、GPU 为辅的英特尔公司也开始联手AMD公司,推出整合了AMD Vega GPU的全新产品Intel i7-8809G CPU[133]。因此说,人工智能的爆发式发展在很大程度上与硬件算力的提升有关。

1.4.4.1 专用芯片所发挥的作用

人工智能发展急需核心硬件的升级,传统芯片产品在基础能力上无法满足密集的线性代数计算和海量数据高吞吐的需求,人工智能芯片的发展也就自然而然地成为了人工智能发展的催化剂。

一般来说,深度神经网络对计算芯片的需求主要涉及通信与计算两个方面。通信方面要解决的是计算芯片和存储设备之间海量数据的通信需求,因此既需要海量数据的存储和较大的缓存,还需要计算单元和存储之间能实现海量数据交互的高带宽。计算方面要解决的是支持密集的线性代数计算(如卷积、全连接等计算类型)所需的大量计算需求,而且需要在提升运算速度的同时降低功耗。

目前,不仅CPU、GPU等通用芯片是人工智能领域的主要芯片,在深度学习训练环节,FPGA(Field Programmable Gate Array,现场可编程门阵列)和ASIC(Application Specific Integrated Circuit,专用集成电路)也发挥了重大作用,而用于深度学习终端推断的计算芯片主要以ASIC为主。英特尔、谷歌、英伟达和众多初创公司陆续推出针对深度学习算法的专用集成芯片,有望在今后数年内取代当前的通用芯片成为人工智能芯片的主力。

早期的深度学习算法使用CPU为架构进行计算,但是CPU本身是通用处理器,可用于浮点计算的计算单元偏少,无法满足深度学习(特别是训练环节)所需的大量浮点计算需求,并且CPU的并行计算效率太低,很快被浮点计算单元多、并行计算能力强的GPU 代替。GPU 以远超CPU 的并行计算能力受到业界瞩目,事实也证明其在浮点计算、并行计算等方面的优势,GPU可以达到数十倍甚至上百倍的CPU 的能力,因此GPU 成为目前深度学习的首要选择。GPU的优势主要有:①GPU的并行计算能力强,高带宽的缓存可有效提升大量数据通信的效率。GPU 的缓存结构为共享缓存,相比于CPU而言,GPU线程之间的数据通信不需要访问全局内存,而在共享内存中就可以直接访问,通信效率高。②GPU 具有数以千计的计算核心,吞吐量上可达到CPU的10~100倍。所以说,人工智能迎来了高速发展的一个重要原因是GPU与人工智能的结合。英伟达公司可以说是GPU的先驱之一,他们在1999年就利用GPU解决游戏市场对图形处理的速度需求,重新定义了现代计算机图形技术,彻底提升了并行计算能力[134]。英伟达目前仍然是显卡性能最高的霸主,其中NVIDIA TITAN RTXTM运行速度快,借助屡获殊荣的 TuringTM架构,为计算机配备具有130 Tensor TFLOPS的性能、576个Tensor核心,以及24GB的高速GDDR6显存[135]

FPGA在深度学习加速方面具有可重构、可定制的特点。FPGA没有预先定义的指令集,也没有确定的数据位宽,可以用来实现应用场景的高度定制。FPGA也有缺点:首先是FPGA的灵活性和通用性的设计会导致运行效率的损失;其次是基于FPGA的应用往往都需要支持很大的数据吞吐量,因此对内存带宽和I/O 互连带宽要求很高;再者是由于FPGA的逻辑利用率低,会产生较大的无效功耗。但是由于FPGA 省去了集成电路设计与制造中的流片过程,因此已成为深度学习应用在试验阶段的主要解决方案。

ASIC和FPGA不同,其是不可配置的高度定制化的专用计算芯片。ASIC不同于GPU 和FPGA的灵活性,一旦定制完成将不能再更改,所以ASIC的初期开发成本高、周期长,技术门槛高。但ASIC 作为专用计算芯片,其性能明显高于FPGA,如果产生规模效应也会降低ASIC 的成本。ASIC 主要生产企业及产品包括谷歌的TPU(Tensor Processing Unit,张量处理单元)[136]系列计算芯片,以及国内的寒武纪的智能芯片[137]等。

TPU是谷歌定制开发的ASIC,用于加速机器学习任务处理。谷歌推出的第二代TPU为Cloud TPU,能够帮助开发者使用TensorFlow在谷歌的TPU加速器硬件上运行深度学习算法。Cloud TPU旨在实现系统的高性能与灵活性,构建可同时使用CPU、GPU和TPU的 TensorFlow 计算集群。Cloud TPU资源提高了深度学习算法中大量使用的线性代数计算所需要的处理器计算性能。在训练大型复杂的神经网络模型时,Cloud TPU可以大幅度缩短训练时间,提高效率。

寒武纪1A处理器于2016年推出,是一款针对神经网络处理的芯片,入选了第三届世界互联网大会评选的15项“世界互联网领先科技成果”。2018年,寒武纪推出的思元100(MLU100)处理器芯片,可支持各类深度学习算法,其性能与功耗比均全面超越CPU和GPU。2019年6月,寒武纪推出的第二代云端AI芯片思元270(MLU270),在处理非稀疏深度学习模型的理论峰值性能上相较于上一代思元100提升了4倍。思元270芯片入选第六届世界互联网大会领先科技成果,并为视频分析、语音合成、AI云等多个领域提供了高能效比的解决方案。2019年11月,寒武纪发布边缘AI系列产品思元220(MLU220)芯片。思元220芯片标志寒武纪在云、边、端,实现了全方位、立体式的覆盖,丰富和完善了寒武纪端云一体产品体系,为人工智能发展提供了算法支撑。

1.4.4.2 并行计算所发挥的作用

除了计算芯片为人工智能的发展提供算法支撑之外,并行计算技术也发挥了重要作用。冯·诺依曼体系的串行结构只能让计算机串行地运行程序,而人工智能需要处理大量的数据,串行结构体系无法满足人工智能的需求,近年来云计算的出现在一定程度上解决了这个问题。云计算的基础技术是并行计算,大规模并行计算的能力也使得人工智能往前迈进了一大步。

GPU为并行计算提供了支撑,深度学习使用 GPU计算也表现出极佳的效果。随着人工智能应用的蓬勃发展,各类GPU服务器也应运而生,服务器厂商相继推出了专为人工智能设计、搭载多GPU的服务器。GPU服务器可适配多种软件框架,能支持人工智能模型的训练和推理等不同场景,可应用于图像识别、自然语言处理、音视频分析等。例如,浪潮公司2016年就推出了专用的深度学习一体机D1000,提供面向辅助驾驶、语音识别、人脸识别、图像搜索、视频分析、医学诊断等大规模深度学习的训练场景,集成16块GPU卡组成并行的Caffe-MPI并行计算框架,具有集群管理监控、作业调度等丰富功能[138]

1.4.4.3 以服务的形式助力人工智能的实现成为新趋势

云计算技术的日益普及也是推动人工智能快速发展的一大关键因素,尽管服务器等硬件设备在性能上已大大提升,而且成本也显著下降,但是要实现人工智能技术所要求的强大运算和存储能力,还需要很多硬件设备。如果对于企业而言仅在本地搭建服务器,企业需要购置大量设备,不仅投资巨大,还会占用很大的物理空间放置设备,在能耗和散热等方面也有很多问题需要解决。云计算通过大规模、分布式的并行计算,可以整合位于不同空间的计算资源,提供了以更加便捷、廉价的方式获取强大的运算能力的途径,引发了以服务的形式提供人工智能所需资源的新趋势,如提供深度学习计算平台、人脸识别、文本翻译等服务,这也成为人工智能企业打造生态系统的重要抓手。

企业自行搭建人工智能平台面临的困难很多,于是一些人工智能企业纷纷以服务的形式向人工智能从业者提供其所需要的计算资源、平台资源以及基础应用等。这些企业通过提供人工智能相关服务,既可有效提升社会智能化水平,降低企业(特别中小企业)使用人工智能技术的成本,推动人工智能与传统行业的融合,也可成为人工智能服务化转型的重要基础。

提供人工智能服务的平台不再局限于将技术封装在具体产品中,而是以服务形式提供,如包括以软件API 形式的服务和提供平台类的服务。其中,软件API 服务主要包括计算机视觉服务、智能语音类服务等。当企业拟开发人工智能应用,如人脸打卡、语音同声传译等具体应用时,传统的做法是企业自行训练人脸模型、机器翻译模型等,但是这样做的效率很低下;软件API服务则可以提供诸如光学字符识别、物体检测、图像识别、人脸检测等服务,或者提供语音识别、文本翻译等服务,从而简化了企业开发人工智能应用的成本,降低使用门槛。平台类服务主要包含GPU云服务、深度学习平台,以及类似云服务的IaaS(Infrastructure as a Service,基础设施即服务)层和PaaS(Platform as a Service,平台即服务)层。GPU云服务可以为用户提供GPU虚拟机计算资源,为用户自行构建图形图像渲染、视频编解码、自然语言处理等应用场景提供服务。

1.4.5 大数据的贡献

除了算力的提升加快了人工智能的发展以外,海量数据也是推动人工智能发展的一个重要因素。大数据的战略意义不在于掌握了庞大的数据信息,而在于能对这些大量的数据进行处理,提取出数据中蕴含的知识。有了大数据的支持,人工智能算法的输出结果会随着数据量的增大而更加准确。一般而言,训练数据的体量越大,算法的输出结果越好。大数据技术的发展激发了人工智能技术的巨大潜力,这两个领域的技术和应用也出现了彼此促进、加速发展的趋势。

人工智能领域一个比较重要的研究方向是依赖统计学等数学方法,通过使用一些统计模型处理图像、文本和语音等各种类型的数据。这些统计模型在处理数据的过程中会不断优化,而庞大的数据资源是这些方法能有效施行的基石。如今,人工智能已经应用于语音识别、图像处理、计算机视觉、机器人等多个领域,而这一系列成绩的背后是海量数据的积累与学习。大数据技术的发展为分析和存储海量数据提供了技术支持,处理海量数据的能力也是支撑人工智能发展所必需的。IBM、Facebook、推特、谷歌、阿里、百度、腾讯等大型互联网公司无一不拥有大量的数据。这些数据将有助于更好地训练其人工智能模型和系统,使这些系统变得更加智能。大数据技术及其海量数据为逐步释放人工智能的理论、方法和技术的巨大潜力做出了重要的贡献。

由于人工智能技术需要依赖大量的数据加以训练,如数字识别神经网络需要根据大量的数字图像进行训练,获得必要的模型参数,往往用于训练的数据量越大,训练得到的模型参数用于推断时越准确,因此可以说海量数据是人工智能发展的助推剂。现在全球产生的数据总量是10年前的20倍以上,如此海量的数据给人工智能的快速发展提供了足够多的素材。

中国信息通信研究院和中国人工智能产业发展联盟的研究[139]表明,人工智能数据集的参与主体主要有以下五类:一是学术机构,通常自行采集、标注、建设学术数据集,并用于开展相关的研究工作。部分学术机构也将数据集公开,用作算法测试或组织相关的竞赛,和社会各界共同推进人工智能的发展。二是政府和一些机构,以公益形式开放公共数据,如政府、银行机构等开放了行业数据,提供给人工智能从业者使用。三是数据生产企业,主要产生行业数据,如通过自行研发的软硬件产生数据,这些数据往往都是企业的核心竞争力。四是人工智能企业,为开展业务而自行建设数据集,标注后形成自用数据集,或采购专业数据公司提供的数据外包服务。五是数据处理外包服务公司,这类公司的业务包括出售现成数据训练集的使用授权,或根据用户的具体需求提供数据获取、数据清洗、数据标注等服务。

然而目前大数据的发展也存在一些问题,主要包括数据流通不畅、数据质量良莠不齐、关键数据集缺失等问题。首先,目前人工智能数据集主要集中在政府和大公司手里,但是由于受监管、商业利益等因素影响,很多数据是无法有效流动的,同时部分有价值的数据目前并没有合法的渠道可以获取,如监控数据、电话数据等高价值数据;其次,数据质量良莠不齐,数据标注主要是通过外包形式实现的,而外包的标注质量决定了数据集的质量,这往往会造成数据集质量的问题;另外,关键领域数据和学术数据集不足,例如,计算机视觉处理、自然语言处理等领域的数据资源严重不足,能用于学术研究的数据集数量较少,这在一定程度上会影响科研及前瞻性的技术研究。

1.4.6 移动互联网与传感器的贡献

移动互联网的迅猛发展也是促进人工智能发展的重要因素。移动互联网的出现使智能设备时刻与人类相伴,通过智能设备能够采集到足够充分和完整的数据。相比个人计算机,智能设备便于携带,并且智能手机、智能手环等可穿戴设备贯穿于人们的日常生活之中。这些设备贡献的数据是完善的和连续的,为后续信息处理和人工智能算法的训练提供了基础。另外,移动互联网为人们带来了不同的使用场景和使用习惯。比如移动互联网让人们可以更倾向于进行语音输入,而非键盘输入;解锁手机的时候更倾向于刷脸解锁,而非输入开机密码或图案。这些使用场景和使用习惯在很大程度上也促进了图像识别、语音识别、自然语言处理等核心技术的发展。受智能手机、可穿戴设备等爆发式增长的推动,传感器无论在数量上还是在质量上都有了巨大的飞跃。传感器的发展,如LIGA(光刻)等微电子技术日趋成熟,使得机器的感知能力变强,进而为机器变“聪明”奠定了基础。通过这些感知能力强的传感器,人们可以获取更准确的数据,如每天走路的步数、心率的变化数据等。

数据是人工智能快速发展的基石,人工智能依赖于数据支持。据We Are Social和Hootsuite两家机构发布的“Global Digital Reports 2019”(《2019年全球数字报告》)显示,全球互联网用户数已经突破了51亿,而移动设备数量巨大,意味着移动设备所贡献的数据量逐渐会成为主流。