2020 年 7 月 9 日,以“智联世界 共同家园”为主题,以“高端化、国际化、专业化、市场化、智能化”为特色的世界人工智能大会云端峰会开幕。会上集聚了众多全球智能领域最具影响力的科学家和企业家,以及相关政府的领导人,围绕智能领域的技术前沿、产业趋势和热点问题发表演讲和进行高端对话。会议第二天,亚马逊首席科学家李沐在主题为“当AI在云端生长”的AWS论坛上发表了的演讲。以下为 InfoQ 根据嘉宾演讲进行的内容整理。
内容未经本人确认,由 InfoQ 依据现场视频进行整理,以下为李沐的演讲全文整理。
首先我们今天的报告是基于深度学习,深度学习在 google 趋势中的热度如下图所示:
在过去 10 年里面我们可以认为从 2012 年-2015 年是深度学习的开始,几个算法上的突破使得深度学习在研究届得到了应用。2016 年-2017 年随着资本的介入、媒体的介入,使得深度学习和 AI 被大家知道和报道,2018 年到 2020 年,可以认为是用户趋向于理性的阶段。我们知道了机器学习的一些局限性,我们也看到了深度学习在过去几年在不断地被简化并且成功地应用到工业界的应用上。
深度学习发展的三个阶段
针对上述三个阶段,我们也做过的思考也是不一样的。深度学习的黄金时代是 2012 年到 2015 年。2012 年时,AlexNet 赢下了 ImageNet,这被认为是深度学习热潮的一个开端。AlexNet 跟传统模型不一样的地方在于它有数十层的神经网络,以及它需要用多个 GPU 才能够有效地训练,这两点使得它的开发非常困难。这也导致了大量开发者需要有专有的深度学习框架才能很方便地进行深度学习的开发。当时,我们的第一个尝试是想做一个 Theano,Theano 是一个很早期的神经网络框架,它非常灵活,但是它比较慢。所以我们思考能不能做一个 C++版的 Theano 使得它能更快一点。做出来后发现它特别像 Caffe。第二个同时期的项目是 Minerva 想把 NumPy 拓展到 GPU 和自动求导上,使得深度学习能够用 NumPy 来开发。
这两个项目我们当时做得都不是那么完善,C++Net 虽然比较高效,但是它不那么灵活,Minerva 虽然灵活,但是它的性能也不那么高效。
2015 年的时候我们在思考,要不要把这两个项目的所长结合在一起,这个项目的名字叫做 MXNet,之后进入了 Apache。当然,同年还有很多神经网络框架出现,包括在日本开发的对 Python 很友好的 Chainer、Keras (Theano 易用前端)以及 TensorFlow(Theano 增强版)。
2016 年到 2017 年有比较大的两大趋势,第一个是自然语言应用的兴起。自然语言的兴起使得我们需要更灵活的前端,原因是自然语言处理直接处理的是文本,它有不一样的长度,结构可能也比较复杂,对于模型上的要求也更加高。第二个趋势是,近两年 AI 被广泛地报道,很多新的用户涌进来,他们需要门槛更低的框架。最典型的一个框架是 PyTorch,它继承了来自于 Torch 大量的特性,并借鉴了 Chainer。看到 PyTorch 的兴起,我们也借鉴了 PyTorch 的特性推出了 Gluon 前端。MXNet 有三大可以关注的特性是:第一、我们有类似于 Numpy 的张量计算 NDArray;第二、用户可以通过 Gluon 在 Python 比较友好的情况下进行神经网络的构建和训练;第三、通过 hybridize 切换到计算图后端来优化和脱离 Python 部署。
2018 年到 2019 年,我们看到深度学习的热度在下降,这时候 Theano 停止了开发,Karas 进入了到了默认的前端,Torch 和 Caffe 停止了开发,继任者 Caffe2 也并入了 PyTorch。目前市面上比较流行的框架包括了 TensorFlow,它有强大的后端和生态链,使得它广泛地被公司开发者使用。PyTorch 灵活的前端广受研究者的欢迎。
MXNet 我们尝试让它像 TensorFlow 一样就比较好,有强大的后端,甚至能像 PyTorch 一样有比较灵活的前端,使它能够平衡研究者和工业级用户。当然这个远远不是结局。随着硬件需求的不断变化,系统也需要不断地迭代。
在 2019 年到 2020 年,我们做了两大比较重要的事情,第一,我们将 Tensor API 完全兼容 NumPy,因为我们发现大部分 Python 用户在学习机器学习或者深度学习之前已经接触过 NumPy,但是 NumPy 还是不够被深度学习用户所使用,我们需要对 NumPy 进行 GUP 加速,以及提供求导。在过去 5 年的技术积累上,我们也在编译器上做了大量的工作。终于使得我们可以完全进入 NumPy,而且保证性能,使用起来也很方便。
同时,我们提到深度学习框架是基于 Gluon,但是我们还是需要用户来 hybridize 到后端计算图,使得用户需要考虑到一些事情。现在,用户不需要再考虑计算图和符号来执行,因为我们的优化已经做得足够好。用户只需要关心怎样在 Python 上使用 NumPy 接口来实现它的代码,然后系统可以将所有的代码转化成计算图,并且脱离 Python 来执行。
2017 年,当大量用户进来的时候,我们观察到一个现象,当下的用户不再为深度学习框架感到兴奋,而是当它们本应该存在。那么,这时候,快速落地最为关键。如何有效、高效地处理数据,能够快速地训练模型,然后能够流畅地部署,这是用户关心的问题。因此,我们于 2017 年的时候在框架的基础上开始开发算法工具包,方便特定领域的模型的训练和部署,包括面向计算机视觉的 GluonCV。
在算法工具包开发过程中,我们经历了两个阶段,第一个阶段我们更关注细节,我们保证每个模型都能提供很好的精度。我们发现论文中很多细节都被一笔带过,于是我们在实现 GluonCV 的时候,调用了大量的论文和代码,然后尝试把所有细节都用在一起。
下图是一个基于 ResNet 的结果,下图显示了三个 ResNet 模型,X 轴表示速度,Y 轴表示精度,可以看到,每个红色点的最上方横线是此模型在论文中的精度,ResNet-50 是最快的,精度也是最低的,ResNet-152 和 ResNet-101 虽然比 ResNet-50 要慢,但是它们的精度也要更高。如果我们能将一些训练的技巧运用过来,可以看到它可以对整个模型进行显著的提升。如果允许模型进行细微的调动,在不影响太多速度的情况下,我们能更加进一步地提升它的精度。
更多地,我们发现这些结果不仅仅对一个模型适用,它几乎可以改变所有模型的精度。如下图所示,可能两条黄线的区别看起来不大,但实际上可能代表的是计算机视觉近几年的一些进展的总和。
工具包开发的第二个阶段是我们能够做一些解决用户问题的研究。举个例子,迁移学习是深度学习在计算机视觉领域兴起的一大原因,我们可以通过训练好的深度卷积神经网络来抽取图片的语义特征,然后用在其他诸如物体识别、图片分割等任务上。但是,深度卷积神经网络的研究主要关注在能够得到更好的 ImageNet 分上,实际使用中,大家仍然主要使用结构简单的 RestNet。
我们的想法是,是不是能在不改变 ResNet 的结构的前提下,加入分裂注意力层,使将其能更好抽取语义特征。
我们还在 GluonCV 之外开发了面向自然语言处理的工具包 GluonNLP。NLP 和计算机视觉不一样的地方在于它的应用比较多样化。
此外,我们比较关注的方向是加速 BERT 在工业界的应用。我们第一个工作是在公有云的硬件上将 BERT 训练时间减少到一个小时之内,之前在一个小时之内的结果都是基于特制的集群。第二个工作是,我们在 AWS G4 实例上,一百万次的 BERT 推理开销降到 1.5 元钱以内。这样就使得 BERT 能够大量地、很便宜地应用在工业界的应用上。
如何入门深度学习?
2018 年的时候,随着 AI 和深度学习的广泛普及,我们不断收到用户和工程师的反馈,他们都在询问想要学习深度学习,但是不知道如何开始。学习深度学习需要知道数学、模型、调参、实现、性能一样都不能少。对我个人而言,我发现最好学习的方法是将文字和公式转换成代码,并在实际数据上跑上几次,才能大概知道怎么回事儿。
在过去几年里面,我们针对不一样的用户提供了不一样的工具,针对骨灰级用户,我们提供深度学习框架,对资深用户,我们提供 Python 更加友好的前端,针对入门用户我们提供算法工具包。
那么,在接下来一年里,我们也在针对不一样的用户群做不一样的突破。
评论