2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣

深度学习前景日新月异。Theano是第一个被广泛采用的深度学习框架,由 MILA创建和维护——由深度学习的先驱者之一yojoshua Bengio领导。然而,事情发生了变化。今年9月,MILA宣布,在发布最新版本后,2018年将不会持续更新。这消息其实不并不令人意外,因为在过去的几年里,许多由大型科技公司开发或支持的很吸引力的开源Python深度学习框架诞生了。

《2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣》

当前,Google 推出的 TensorFlow 似乎是最被广泛使用的深度学习框架了——基于 Github 上的 stars 数量,forks 次数和 Stack Overflow 活跃度来看的话。有人预测,随着 TensorFlow 的推出,Google 将在未来几年统治整个市场。不过,看起来其他的框架也设法吸引到了不断增长且富有激情的用户基础。其中最值得注意的恐怕就是 PyTorch 的推出和成长了。PyTorch 由 Facebook 推出,值得一提的是,时间是在2017年1月。它是流行深度学习框架 Torch(由 C 语言实现并通过 Lua 封装)的移植版,通过使用 GPU 加速的 Python 封装 Torch 的二进制库来实现。

除了实现 GPU 加速和对内存的高效利用外,PyTorch 饱受欢迎背后的主要驱动力,就是对动态计算图的使用。这类动态计算图其实早已被其他的一些并不知名的深度学习框架所采用过,比如 Chainer。动态图的优势在于图是由运行状态所定义的(“运行中定义”)而不是传统的“先定义后运行”。尤其对于输入数据多样的场景,比如非结构化数据(如文本),这是极其管用且高效的。

《2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣》

PyTorch 动态计算图 —来源: http://pytorch.org/about/

其他的科技巨头们也没有干坐着。微软开发了一个内部的深度学习框架,名为 CNTK,并在将其重命名为微软认知工具包后于2017年正式发布了其2.0版本。在2017年,Facebook 也发布了 Caffe2。这意味着它是先前著名的 Caffe 框架的继任者。原本的 Caffe 框架由伯克利视觉与学习中心开发,曾经是且现在仍是极其受欢迎的框架,这也多亏了其社区、其在计算机视觉方面的应用及其 Model Zoo ——一个预训练模型的精选集。然而,似乎 Caffe2 目前还没有赶上 Caffe 的脚步。

另一个流行的深度学习框架是受到微软和亚马逊支持的 MXNet。MXNet 已经现世有一段时间了,但每当 MXNet 作为深度学习框架所被提及时,我经常听到的人们的反应却是“这不是个针对 R 语言的深度学习框架吗?”。没错,但远不止如此。它实际上支持多种语言,从 C++ 到 Python,JavaScript,Go,以及,当然了,R 语言。MXNet 的表现突出在于它的可扩展性和性能(敬请期待第二部分——我们将在第二部分中重点阐述那些最受欢迎的深度学习框架间的速度对比)。

这些只是从广大框架中选取的一小部分。其他的开源深度学习框架包括 Deeplearning4j 和 Dlib(基于 C++)。并且同样是在2017年,Google 的 DeepMind 发布了 Sonnet(一个构建在 Tensorflow 上层的高级面向对象库)。其他值得提一下的框架还有 H20.ai 和 Spark。

《2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣》

使用 Keras 进行简单易懂的模型构建 — 来源: https://github.com/keras-team/keras

除了这些框架外,我们还有封装了一个或多个框架的接口。最广为人知且被广泛使用的深度学习接口无疑是 Keras。Keras 是一套深度学习高级 API,由在 Google 的深度学习研究者 François Chollet 使用 Python 编写而成。Google 在2017年宣布 Keras 已被选定作为 Tensorflow 的高级 API。这意味着 Keras 将被包含在 Tensorflow 的下一个发行版当中。除了 Tensorflow 外,Keras 也可以使用 Theano 或者 CNTK 作为其后端(译者注:现在 MXNet 也可以作为其后端了)。

Keras 的强大之处在于,它那通过堆砌多种层来实现深度学习模型创建的方法实在是太简单易懂了。当使用 Keras 时,用户无需考虑层背后的数学计算。这对于快速生成原型来说十分理想,此外 Keras 也是在 Kaggle 竞赛中很受欢迎的工具。

所以,一方面我们当前拥有 Keras 高级 API,能让你轻松构建简单和先进的深度学习模型;另一方面,底层的 Tensorflow 框架能在构建模型时带给我们更多的灵活性。这两个工具都由 Google 所支持。不出我们所料,竞赛并没有停滞不前。在2017年10月,微软和亚马逊 AWS 联合发布了 Gluon API。Gluon 是一个 Python 的深度学习高级接口,它封装了 MXNet,并且很快也将包含微软的 CNTK。Gluon 是 Keras 的直接竞争者,并且虽然 AWS 声称他们坚定地对所有深度学习框架提供支持,但无需赘言的是,他们在 AI 平民化中将赌注投向了 Gluon。

《2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣》

使用 Gluon 堆砌卷积层和全连接层以及参数初始化

令人感到震惊的是,如今 Tensorflow 最大的竞争者似乎是 PyTorch。在社区对 PyTorch 兴趣盎然之际——例如,在最新的 Kaggle 竞赛中用户经常会选用 PyTorch 作为他们解决方案中的一部分,并且 PyTorch 也已经被运用在了最新的研究论文中——TensorFlow于2017年10月推出了Eager Execution,一个针对 Tensorflow 的“运行中定义”的接口。借助这一接口的推出,Google 希望能够赢回那些已经与 PyTorch 及其动态图坠入爱河的用户的心。

对于流行深度学习课程 fast.ai 的开发者们来说,这一改变来的太晚了些。在九月份,fast.ai 宣布从 Keras & TensorFlow 转向 PyTorch。Jeremy Howard,fast.ai 的创始研究员,前总裁以及 Kaggle 的首席科学家,认为 PyTorch 将会保持领先地位。不过只有时间能告诉我们答案。

对于新手来说,有这么多的深度学习框架,究竟该选择什么框架是很难决定的。坦率地说,即便对于资深研究员和开发者们,要紧跟着最前沿的发展也是很难的。对于这一问题,一个好消息是 Open Neural Network Exchange (ONNX) 的发布。ONNX 公布于2017年9月,并于12月发布了 V1 版本。ONNX 是一个用于表达深度学习模型的开源格式。它能够允许用户更轻松地将模型搬运于在不同的框架间。比如,它允许你构建一个 PyTorch 模型并使用 MXNet 运行模型来完成推断过程。
《2017 年 Python 深度学习框架之战总结 - 百花齐放百家争鸣》

Open Neural Network Exchange (开放式神经网络交换,ONNX) Github 主页 — 来源: https://github.com/onnx/onnx

ONNX 由 Microsoft,AWS 和 Facebook 等发起,Google 不在其中之列也就并不值得大惊小怪了。ONNX 支持 Caffe2,微软认知工具集,MXNet,以及从一开始就支持的 PyTorch。但是如同其他开源项目一样, 社区也已经为 Tensorflow 添加了转换功能。

2017年有着大量激动人心的进展,总的来说就如同深度学习与 AI 领域的快速进步一般。很难预测新的一年将会发生些什么。尽管我们可能会见证很多合并案例,大型科技公司必定会想要使用并推广他们自己的技术栈。能看到不同的科技巨头扶持着不同的框架来逼迫彼此实现更快的创新总归是件好事。在第二部分我们将会更详细地基于速度,内存使用,可移植性和可扩展性等不同的测度来对这些不同的框架进行对比。


Practice makes perfect.

原文地址:https://towardsdatascience.com/battle-of…

译文地址:https://learnku.com/python/t/22972/a-sum…

点赞