原文链接:https://towardsdatascience.com/a-brief-history-of-deep-learning-frameworks-8debf3ba6607
作者:Lin Yuan
Machine Learning @ Waymo | ex-Amazonian
翻译:赵露阳
过去十年,机器学习(尤其是深度学习)领域涌现了大量算法和应用。在这些深度学习算法和应用涌现的背后,是各种各样的深度学习工具和框架。它们是机器学习革命的脚手架:TensorFlow和PyTorch等深度学习框架的广泛使用,使许多ML从业者能够使用适合的领域特定的编程语言和丰富的构建模块更容易地组装模型
回顾深度学习框架的演变,我们可以清楚地看到深度学习框架和深度学习算法之间的紧密耦合关系。这种相互依赖的良性循环推动了深度学习框架和工具的快速发展
By U.S. National Park Service, Mississippi River Mussels: Tools From Mussel Shells, Public Domain, https://commons.wikimedia.org/w/index.php?curid=964040
神经网络的概念已经出现一段时间了。在21世纪初之前,有一些工具可以用来描述和开发神经网络。这些工具包括MATLAB、OpenNN、Torch等。它们要么不是专门为神经网络模型开发定制的,要么拥有复杂的用户api,缺乏GPU支持。在此期间,ML实践者在使用这些原始的深度学习框架时不得不做很多繁重的工作。
By Nationalmuseet, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=90400464
2012年,多伦多大学的Alex Krizhevsky等人提出了一种深度神经网络架构,后来被称为AlexNet[1],该架构在ImageNet数据集上达到了最先进的精度,并大大超过了第二名的选手。这一出色的结果引发了深度神经网络的热潮,此后各种深度神经网络模型在ImageNet数据集的准确性上不断创下新高。
大约在这个时候,一些早期的深度学习框架,如Caffe、Chainer和Theano应运而生。使用这些框架,用户可以方便地建立复杂的深度神经网络模型,如CNN、RNN、LSTM等。此外,这些框架还支持多GPU训练,这大大减少了对这些模型的训练时间,并且能够对以前无法装入单一GPU内存的大型模型进行训练。在这些框架中,Caffe和Theano使用声明式编程风格,而Chainer采用命令式编程风格。这两种不同的编程风格也为即将到来的深度学习框架设定了两条不同的开发路径。
Nordisk familjebok — Nordisk familjebok (1910), vol.13, Till art. Järnåldern. https://commons.wikimedia.org/w/index.php?curid=109777
随着AlexNet的成功引起了计算机视觉领域的高度关注,并重新点燃了神经网络的希望,大型科技公司加入了开发深度学习框架的行列。其中,谷歌开源了著名的TensorFlow框架,它至今仍是ML领域最流行的深度学习框架。Caffe的发明者加入了Facebook并发布了Caffe2;与此同时,Facebook AI研究(FAIR)团队也发布了另一个流行的框架PyTorch,它基于Torch框架,但使用了更流行的Python api。微软研究院开发了CNTK框架。亚马逊采用了MXNet,这是华盛顿大学、CMU和其他机构的联合学术项目。TensorFlow和CNTK借鉴了Theano的声明式编程风格,而PyTorch则继承了Torch的直观和用户友好的命令式编程风格。命令式编程风格更加灵活(比如定义一个While循环等)并且容易跟踪,而声明式编程风格通常为内存和基于计算图的运行时优化提供了更多的空间。另一方面,被称为“mix”-net的MXNet同时支持一组符号(声明性)api和一组命令式API,并通过一种称为杂交(hybridization)的方法优化了使用命令式api描述的模型的性能,从而享受了这两个领域的好处。
2015年,何凯明等人提出了ResNet[2],再次突破了图像分类的边界,在ImageNet的准确率上再创新高。业界和学术界已经达成共识,深度学习将成为下一个重大技术趋势,解决各种领域的挑战,这些挑战在过去被认为是不可能的。在此期间,所有深度学习框架都对多gpu训练和分布式训练进行了优化,提供了更加用户直观的api,并衍生出了专门针对计算机视觉、自然语言处理等特定任务的model zoo和工具包。还值得注意的是,Francois Chollet几乎是独自开发了Keras框架,该框架在现有框架(如TensorFlow和MXNet)之上提供了神经网络和构建块的更直观的高级抽象。从今天开始,这种抽象成为TensorFlow中模型层面事实上的API。
By User Lamré on sv.wikipedia https://commons.wikimedia.org/w/index.php?curid=801434
正如人类历史的发展一样,深度学习框架经过一轮激烈的竞争,最终形成了两大“帝国”:TensorFlow和PyTorch的双头垄断,这两大“帝国”代表了深度学习框架研发和生产中95%以上的用例。2019年,Chainer团队将他们的开发工作转移到PyTorch;类似地,微软停止了CNTK框架的积极开发,部分团队成员转而支持Windows和ONNX运行时上的PyTorch。Keras被TensorFlow收编,并在TensorFlow 2.0版本中成为其高级API之一。在深度学习框架领域,MXNet仍然位居第三。
在此期间,深度学习框架空间有两种趋势。首先是大型模型训练。随着BERT[3]的诞生,以及它的近亲GPT-3[4]的诞生,训练大型模型的能力成为了深度学习框架的理想特性。这就要求深度学习框架能够在数百台(如果不是数千台的话)设备的规模下有效地进行训练。第二个趋势是可用性。这一时期的深度学习框架都采用命令式编程风格,语义灵活,调试方便。同时,这些框架还提供了用户级的装饰器或API,以通过一些JIT(即时)编译器技术实现高性能。
By Tharunbr77 — Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=86866550
深度学习在从自动驾驶、个性化推荐、自然语言理解到医疗保健等广泛领域的巨大成功,带来了前所未有的用户、开发者和投资者浪潮。这也是未来十年开发深度学习工具和框架的黄金时期。尽管深度学习框架从一开始就有了长足的发展,但它们之于深度学习的地位还远远不如编程语言JAVA/ c++之于互联网应用那样的成熟。还有很多令人兴奋的机会和工作有待探索和完成。
展望未来,有几个技术趋势有望成为下一代深度学习框架的主流:
我们正处于一场人工智能革命的黎明。人工智能领域的新研究和新应用正在以前所未有的速度涌现。八年前,AlexNet网络包含6000万个参数;最新的GPT-3网络包含1750亿参数,网络规模在8年内增加了3000倍!另一方面,人类的大脑包含大约100万亿个参数(即突触)。这表明,如果有可能的话,神经网络要达到人类的智能水平还有很大的差距。
这种难以接受的网络规模对模型训练和推理的硬件和软件计算效率都提出了很大的挑战。未来的深度学习框架很可能是算法、高性能计算、硬件加速器和分布式系统的跨学科成果。
作者简介
Lin Yuan是Waymo的一名资深软件工程师。他为自动驾驶汽车的感知和规划任务开发了机器学习平台。在加入Waymo之前,他曾在Amazon AI从事大规模分布式学习。他是Apache深度学习框架MXNet和LFAI分布式学习库Horovod的代码提交者和主要贡献者。
在从事AI领域的工作之前,他在VLSI设计和自动化方面积累了丰富的经验。他曾担任半导体设计自动化会议ICCAD和DAC的技术程序委员会(Technical Program Committee)委员。他获得了马里兰大学帕克分校的计算机工程博士学位。
注释
[1] Alex Krizhevsky et al., ImageNet Classification with Deep Convolutional Neural Networks (2012), NeurIPS 2012
[2] Kaiming He et al., Deep Residual Learning for Image Recognition (2016), CVPR 2016
[3] Jacob Devlin et al., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
[4] Tom B. Brown et al., Language Models are Few-Shot Learners (2020), NeurIPS 2020
[5] Announcing the Consortium for Python Data API Standards (2020)