2017年深度学习框架之间的竞争
摘要:本文总结并分析了2017年的相关深度学习框架之间的竞争,包含一些主流的框架比如TensorFlow、PyTorch等,以及一些相关的应用程序接口,比如Keras等,最后展望了下后续的发展。欢迎广大读者留言说出自己支持的深度学习框架是哪一款呢。
在过去的两年多时间里,各大公司或研究机构推出自己的深度学习框架,比如Caffe、TensorFlow等,并且关于深度学习相关的框架也在随着时间不断地发生变化。Theano是第一个被广泛使用的深度学习框架,该框架是由深度学习领域中的大牛Yoshua Bengio牵头、MILA创建。然而,在今年的九月份,MILA宣布在2018年更新完最后一版Theano后,将不再继续开发该框架。这一消息来得并不是很出人意外。在过去的几年里,一些不同的开源Python深度学习框架被引入,这些深度学习框架通常是由一家大的科技公司或者来自于多家公司联合开发。
与此同时,谷歌公司开发的TensorFlow似乎成为了最为常用的深度学习框架,一些专家预计,谷歌的TensorFlow将会主导深度学习框架市场很多年。然而,一些其它类型的深度学习框架也逐渐吸引了越来越多的用户,最值得注意的是PyTorch深度学习框架。PyTorch是由Facebook公司于2017年1月份开发的深度学习框架,该框架是用C语言实现、Lua语言进行封装,并用Python语言完成GPU加速。除了GPU加速以及高效的内存使用外,PyTorch受到欢迎的其它原因是其动态计算图的使用,这类动态计算图已经被其它不主流的深度学习框架使用,比如Chainer。使用这些动态计算图的优点是图是通过运行起来才定义的,而不像传统的“定义并运行”模式,尤其是输入可变的情况下具有很大的优势,比如像文本一样的非结构化数据等。
其它的科技巨头也没有坐以待毙,微软公司开发了一款内部深度学习框架CNTK,并与2017年正式推出其第2.0版本并重命名为Microsoft Cognitive Toolkit。同年,Facebook也推出了Caffe2,该框架是众所知周的Caffe框架的继承人。原始的Caffe框架是由伯克利大学视觉和学习中心开发,依然被广泛应用于计算机视觉领域,并且还有一些成熟的模型参数能够在Model Zoo中找到,这些模型参数能够用来迁移学习、初始化部分网络参数。目前所知,Caffe2还没有跟上Caffe的脚步。
另外一个流行的深度学习框架是MXNet,该框架由微软和亚马逊两大巨头资助。MXNet已经推出有一段时间了,但当提到深度学习框架MXNet时,经常有人会误认为该框架只是针对于R语言的。其实MXNet支持多种语言,不仅包含R语言,还包含其它的语言,比如C++、Python、JavaScript及Go等。MXNet的优势在于其可扩展性及其高性能。
以上这些只是选择了一些应用较为广泛的深度学习框架来介绍,还有一些其它的开源深度学习框架比如Deeplearning4j和Dlib(基于C++语言)。此外,谷歌的DeepMind于2017年发布的Sonnet(基于TensorFlow运行的一个高层次面向对象的库)。值得一提的其它深度学习框架还有H2o.ai和Spark。
在所有的深度学习框架外,还有些框架接口需要详细介绍。最为人知以及应用最为广泛的应用界面毫无疑问是Keras,Keras是用Python写的一个高层次的深度学习应用程序接口(API),由谷歌公司的研究员 François Chollet 创建。此外,谷歌公司于2017年宣布Keras已经被选定为TensorFlow的高级API,这也意味着Keras将被包含于下一次发布的TensorFlow版本中。除了TensorFlow外,Keras也能被用在Theano或CNTK中。
Keras 的强大在于它只需简单地叠加多个层就能够创建一个深度学习模型,当使用Keras时,用户不必在层后面做数学运算。这看起来像是一个理想的快速原型制造机,并且Keras也成为了Kaggle竞赛中的热门工具。
因此,目前在一方面有高层次的Keras API,能够让你轻易地构建先进的深度学习模型;在另外一方面,有低层次的TensorFlow框架,能够让建模时变得更加灵活,这两个项目都由谷歌公司支持。正如预期的那样,其它公司也不甘人后,微软和亚马逊共同宣布其Gluon API,Gluon是一个高层次的Python深度学习界面,目前支持MXNet框架,不久将支持微软的CNTK框架。Gluon是Keras的直接竞争对手,虽然AWS(亚马逊公司旗下云计算服务平台)声称它们强力支持所有的深度学习框架,但是AWS当然会支持Gluon在AI领域的竞争中获胜。
出人意料的是,TensorFlow框架的最大竞争对手竟然似乎是PyTorch,社区中不断增长对PyTorch框架的研究兴趣,比如在最近的Kaggle竞赛中,用户经常选择使用PyTorch框架作为其部分解决方案,同时也在最新的研究论文中被使用。在谷歌公司2017年10月发布的最新TensorFlow版本中,引入了一个“运行后定义”的界面。谷歌公司希望这次版本的发布能够赢回那些喜欢PyTorch及其动态图的用户。
对于最流行的深度学习课程fast.ai的开发者而言,这次变化来得太晚了,fast.ai于9月份宣布将从Keras和TensorFlow转向PyTorch。fast.ai的创始者及Kaggle的首席科学家Jeremy Howard认为,PyTorch将能够继续保持领先的势头,时间会证明这个观点是否正确。
目前存在这么多深度学习框架,一些新手在选择一个深度学习框架时会具有面临一些挑战。坦率地说,即使是经验丰富的研究人员和开发人员都难以跟上最新进展的脚步。为了应对这个问题,微软和Facebook发布开源项目ONNX(开放神经网络交流),该项目旨在为涉及不同编程框架的神经网络创建一种共享的模型表示机制。比如,它允许你建立一个PyTorch模型并使用MXNet框架运行模型。
OXXN项目从一开始就支持Caffe2、Microsoft Cognitive Toolkit、MXNet以及PyTorch,但对于其它的开源项目也已增加了一个转化器,比如TensorFlow等。
2017年有许多令人兴奋的发展,这类似于深度学习和人工智能领域的高速发展。很难去预测明年会发生一些什么事情,但是我们可能会看到一些框架的合并。虽然,一些大型科技公司肯定希望使用并推广自己开发的技术栈,但很高兴看到由不同科技巨头支持的不同深度学习框架相互推动,加快创新。后续将从速度、内存使用、可移植性和可扩展性等方面详细地比较不同的深度学习框架,敬请期待。
作者信息
Indra den Bakker,数据科学家、深度学习导师。
Linedin:https://www.linkedin.com/in/indradenbakker/