当前位置: 首页 > 科技观察

深度学习简史:TF与PyTorch的双寡头,下一个十年的黄金时代

时间:2023-03-17 00:47:53 科技观察

过去十年,机器学习领域(尤其是深度学习)涌现了大量的算法和应用.这些深度学习算法和应用出现的背后,是各种深度学习工具和框架的出现。它们是机器学习革命的脚手架:TensorFlow和PyTorch等深度学习框架的广泛使用让许多ML从业者更容易使用适当的特定领域编程语言和丰富的构建块来组装模型。回顾深度学习框架的演进,我们可以清楚地看到深度学习框架与深度学习算法之间的紧耦合。这种相互依赖的良性循环推动了深度学习框架和工具的快速发展。作者:Nationalmuseet,CCBY-SA3.0,https://commons.wikimedia.org/w/index.php?curid=90400464石器时代(21世纪初)神经网络的概念已经存在了一段时间。在2000年代初之前,有可用于描述和开发神经网络的工具。这些工具包括MATLAB、OpenNN、Torch等,要么不是专门为神经网络模型开发量身定做,要么用户API复杂,缺乏GPU支持。在此期间,机器学习从业者在使用这些原始的深度学习框架时不得不做很多繁重的工作。作者:Nationalmuseet,CCBY-SA3.0,https://commons.wikimedia.org/w/index.php?curid=90400464青铜时代(~2012)2012年,AlexKrizhevsky等人。多伦多大学的AlexNet提出了一种深度神经网络架构,后来被称为AlexNet[1],在ImageNet数据集上实现了最先进的准确率,并显着优于第二名的竞争对手。这一出色的结果引发了深度神经网络的热潮,此后各种深度神经网络模型在ImageNet数据集上的准确率不断创新高。大约在这个时候,出现了一些早期的深度学习框架,例如Caffe、Chainer和Theano。使用这些框架,用户可以轻松构建复杂的深度神经网络模型,如CNN、RNN、LSTM等。此外,这些框架支持多GPU训练,大大减少了这些模型的训练时间,可以训练大型模型以前无法放入单个GPU的内存中。在这些框架中,Caffe和Theano采用声明式编程风格,而Chainer采用命令式编程风格。这两种不同的编程风格也为即将到来的深度学习框架设定了两条不同的发展路径。Nordiskfamiljebok—Nordiskfamiljebok(1910),第13卷,直到艺术。耶纳德恩。https://commons.wikimedia.org/w/index.php?curid=109777铁器时代(2015~2016)AlexNet的成功引起了对计算机视觉领域兴趣的高涨,重新点燃了神经网络的希望,各大科技公司纷纷加入开发深度学习框架的行列。其中,Google开源了著名的TensorFlow框架,至今仍是ML领域最流行的深度学习框架。Caffe的发明者加入了Facebook,发布了Caffe2;与此同时,FacebookAIResearch(FAIR)团队还发布了另一个流行的框架PyTorch,它基于Torch框架,但使用了更流行的Pythonapi。MicrosoftResearch开发了CNTK框架。亚马逊采用了MXNet,这是华盛顿大学、CMU等的联合学术项目。TensorFlow和CNTK借鉴了Theano的声明式编程风格,而PyTorch则继承了Torch直观易用的命令式编程风格。命令式编程风格更灵活(例如定义一个While循环等)并且易于遵循,而声明式编程风格通常提供更多的内存空间和基于计算图的运行时优化。另一方面,名为“mix”-net的MXNet既支持一组符号式(声明式)API,也支持一组命令式API,并通过一种称为混合化的方法优化了命令式API描述的使用。模型的性能因此享有两个领域的好处。2015年,何凯明等人提出了ResNet[2],再次突破了图像分类的界限,刷新了ImageNet准确率的新高。工业界和学术界已经达成共识,深度学习将成为下一个主要的技术趋势,解决过去被认为不可能的各个领域的挑战。在此期间,所有的深度学习框架都对多GPU训练和分布式训练进行了优化,提供了更多用户直观的API,以及针对计算机视觉和自然语言处理等特定任务的衍生模型动物园和工具包。还值得注意的是,FrancoisChollet几乎单枪匹马开发了Keras框架,该框架在TensorFlow和MXNet等现有框架之上提供了更直观的神经网络高级抽象和构建块。从今天开始,这种抽象是TensorFlow中模型级别的实际API。ByUserLamréonsv.wikipediahttps://commons.wikimedia.org/w/index.php?curid=801434罗马时代(2019~2020)就像人类历史的发展一样,深度学习框架经历了一轮轮的变革激烈的竞争,最终形成了两个“帝国”:TensorFlow和PyTorch的双头垄断,这两个“帝国”代表了深度学习框架开发和生产中95%以上的用例。2019年,Chainer团队将开发工作转移到PyTorch;同样,微软停止了CNTK框架的积极开发,一些团队成员转而支持Windows上的PyTorch和ONNX运行时。Keras在TensorFlow2.0中被并入了TensorFlow,成为其高级API之一。在深度学习框架领域,MXNet依然排名第三。在此期间,深度学习框架领域出现了两种趋势。首先是大模型训练。随着BERT[3]及其近亲GPT-3[4]的诞生,训练大型模型的能力已成为深度学习框架的理想特性。这需要能够在数百甚至数千台设备的规模上进行有效训练的深度学习框架。第二个趋势是可用性。这一时期的深度学习框架均采用命令式编程风格,语义灵活,调试方便。同时,这些框架还提供了用户级的装饰器或api,通过一些JIT(just-in-time)编译器技术来实现高性能。作者:Tharunbr77—自己的作品,CCBY-SA4.0,https://commons.wikimedia.org/w/index.php?curid=86866550工业时代(2021+)自动驾驶深度学习、个性化推荐、自然语言理解在从医疗保健到医疗保健的广泛领域取得了巨大成功,带来了前所未有的用户、开发人员和投资者浪潮。这也是未来十年深度学习工具和框架发展的黄金时期。尽管深度学习框架自诞生以来已经走过了漫长的道路,但它们对于深度学习的成熟程度远不如编程语言JAVA/C++对于互联网应用的成熟。有许多令人兴奋的机会和工作有待探索和完成。展望未来,有几种技术趋势有望成为下一代深度学习框架的主流:基于编译器的运算符优化。如今,许多算子内核都是手动或通过第三方库实现的,例如BLAS、CuDNN、OneDNN等,它们针对特定的硬件平台。当在不同的硬件平台上训练或部署模型时,这会产生大量开销。此外,新的深度学习算法的增长速度往往比这些库的迭代速度快得多,这使得这些库通常不支持新的运算符。深度学习编译器,如ApacheTVM、MLIR、FacebookGlow等,已经提出在任何硬件后端上高效优化和运行计算。它们可以作为深度学习框架的整个后端。统一的API标准。许多深度学习框架共享相似但略有不同的用户API。这给用户从一个框架切换到另一个框架带来了困难和不必要的学习曲线。虽然大多数机器学习从业者和数据科学家都熟悉NumPy库,但在新的深度学习框架中,NumPyAPI自然会成为tenor操作API的标准。我们已经看到快速发展的框架JAX获得了用户的广泛欢迎,其api与NumPy完全兼容。作为一等公民的数据移植。多节点或多设备训练正在成为深度神经网络训练的常态。最近开发的深度学习框架,如OneFlow,从第一天起就将这种观点融入到他们的设计中,并将数据通信视为模型训练的整体计算图的一部分。这为性能优化开辟了更多机会,并且由于它不需要像以前的深度学习框架那样维护多种训练策略(单设备vs分布式训练),因此除了提供更好的性能外,它还可以提供更简单的用户界面.总结我们正处于人工智能革命的开端。人工智能的新研究和应用正在以前所未有的速度涌现。八年前,AlexNet网络包含6000万个参数,最新的GPT-3网络包含1750亿个参数。8年网络规模增长3000倍!另一方面,人脑包含大约100万亿个参数(即突触)。这表明,如果可能的话,神经网络远未达到人类智能水平。这种不可接受的网络规模对模型训练和推理的硬件和软件计算效率都提出了巨大挑战。未来的深度学习框架很可能是算法、高性能计算、硬件加速器和分布式系统的跨学科成果。