专栏首页AI研习社2017 深度学习框架发展大盘点——迎来 PyTorch,告别 Theano

2017 深度学习框架发展大盘点——迎来 PyTorch,告别 Theano

深度学习是机器学习中一种基于对数据进行表征学习的方法,作为当下最热门的话题,谷歌、Facebook、微软等巨头纷纷围绕深度学习做了一系列研究,一直在支持开源深度学习框架的建设。

深度学习是机器学习中一种基于对数据进行表征学习的方法,作为当下最热门的话题,谷歌、Facebook、微软等巨头纷纷围绕深度学习做了一系列研究,一直在支持开源深度学习框架的建设。

过去一年间,在这些巨头的加持下,深度学习框架格局发生了极大改变:新框架横空出世,旧的框架也逐渐退出历史舞台,而框架与框架之间的联系也更加紧密,生态更为开放。这一年,AI研习社也在时刻关注着这些发展和变化,下面这些话题,每一个都引起了开发者此起彼伏的讨论:

  • Facebook 开源 PyTorch,成为 TensorFlow 强敌
  • Theano 完成历史使命,功成身退
  • ONNX 开放平台横空出世,力图促进开放的开发生态
  • CNTK,Keras,MXNet 均迎来重大更新
  • 微软携手亚马逊推出 Gluon 深度学习库,英特尔推出增强学习框架 Coach
  • 针对移动终端,Caffe2 和 TensorFlow Lite 先后开源

接下来,我们会盘点上述机器学习框架之间的重大发展和改变,以飨读者。

Facebook 开源 PyTorch,以风起云涌之势占领开发者社区

2017 年初,Facebook 在机器学习和科学计算工具 Torch 的基础上,针对 Python 语言发布了全新的机器学习工具包——PyTorch。PyTorch 实际上是 NumPy 的替代,它支持 GPU,有着更高级的功能,可以用来构建和训练深度神经网络。一经发布,它便受到广泛关注和讨论。经过将近一年的发展,目前 PyTorch 已经成为从业者最重要的研发工具之一。

年初发布 PyTorch 时,Facebook 曾表示,「它有望辅助、或在一定程度上替代现有的 Python 数学库(比如 NumPy)。」目前来看,PyTorch 的使用越来越广泛,这一预言成为现实。

在众多开发者眼中,PyTorch 是 TensorFlow 之外一个非常好的选择。

以下为 PyTorch 主要优势:

  • 它处于机器学习第一大语言 Python 的生态圈之中,使得开发者能接入广大的 Python 库和软件。因此,Python 开发者能够用他们熟悉的风格写代码,而不需要针对外部 C 语言或 C++ 库的 wrapper,使用它的专门语言。
  • 不需要从头重新构建整个网络,它为改进现有的神经网络提供了更快速的方法——采用动态计算图(dynamic computational graph)结构,而不是大多数开源框架,比如 TensorFlow、Caffe、CNTK、Theano 等采用的静态计算图。
  • PyTorch 中用于数据加载的 API 设计得很好。接口在数据集、采样器和数据加载器中有明确规定。数据加载器接收数据集和采样器,根据采样器的调度,在数据集上生成迭代器。加载并行数据就像把 num_workers 语句传递到数据加载器一样简单。
  • 采用了定制的 GPU 内存分配器。这使得开发者的深度学习模型能够有「最大限度的内存效能」,训练比从前更大的深度神经网络。

GitHub 地址:https://github.com/pytorch/pytorch

TensorFlow 遇强敌,引入动态图机制等多个更新

TensorFlow 是 Google 于 2015 年底推出的深度学习框架。过去两年间,它在开发者社区享有盛誉,目前已成为最为常用的深度学习框架。它的功能全,社区好,因此使用率也一直稳定保持领先。而随着 PyTorch 等框架的横空出世,因为文档和接口混乱,使用繁琐等缺点,TensorFlow 广受诟病。

在 2017 年,开发团队不断为 TensorFlow 引入新的功能:年初发布 TensorFlow 1.0,实现对 Keras 的全面支持;年底引入 Eager Execution 动态图机制,让开发变得更加简单和直观。

以下为 TensorFlow 被大家广为称赞的优点:

  • TensorFlow 的 Saver 对象很容易使用,并为检查点(check-pointing)提供了更多选择。
  • 在序列化中,TensorFlow 的主要优点是可以将整个图保存为协议缓冲区。这包括参数和运算。此外,该图可以通过其他支持的语言 (C++,Java) 加载。这对不支持 Python 的调度栈来说至关重要。理论上,在改变模型源代码之后,你想要运行旧模型时它也能有所帮助。
  • 支持移动和嵌入式部署,虽然将 TensorFlow 部署到 Android 或 iOS 上需要大量的工作,但不必用 Java 或 C++ 重写模型的整个推理程序。

此外,TensorFlow Serving 支持高性能的服务器端部署,可以支持用户轻松地换用模型而不会降低服务性能。

另外,它在年底引入 Eager Execution——一种命令式、由运行定义的接口,一旦从 Python 被调用可立即执行操作,这使得 TensorFlow 的入门学习变得更简单,也使得研发工作变得更直观。

GitHub 地址:https://github.com/tensorflow/tensorflow

Theano 完成历史使命,功成身退

作为深度学习框架中祖师级的存在,由 Yoshua Bengio 主导的 Theano 在完成自己的历史使命之后,退出历史舞台。

据AI研习社了解,Theano 基于 Python,是个擅长处理多维数组的库(这方面类似于 NumPy),它的设计初衷是执行深度学习中大规模神经网络算法的运算。大家可以把它理解为一个数学表达式的编译器:用符号式语言定义你想要的结果,该框架会对你的程序进行编译,来高效运行于 GPU 或 CPU。

在过去的很长一段时间内,Theano 都是深度学习开发与研究的行业标准。比起深度学习库,它更像是一个研究平台,需要开发者从底层开始做许多工作,来创建自己需要的模型。Theano 早期的开发者有 Yoshua Bengio 和 Ian Goodfellow,由于出身学界,它最初是为学术研究而设计。

对于 Theano 的退出,有开发者这样评价,「它开启了基于符号运算的机器学习框架的先河,然后随着 TensorFlow 和 PyTorch 的崛起,完成自己的历史任务。」

Bengio 在告别邮件中表示:

支持深度学习研究的软件生态系统快速进化,且状态良好;开源软件成为规范,还有很多别的深度学习框架可选,满足着从探索全新想法到将其部署实现的全部需求;在激烈竞争中,行业参与者们支持着不同的软件堆栈。 多年以来,我们都以 Theano 的创新深感自豪,其创新也正被其他框架继承和优化。比如,把模型表达为数学表达式、重写计算图以获得更优性能和内存使用、GPU 上的透明执行、更高阶的自动微分,正在全部成为主流。 在这一背景下,我们认为继续维护 Theano 不再是推动全新研究与应用的最佳方式。即使来自学界、业界的贡献与支持在不断增加,但维持陈旧的代码库已经成为了创新的阻碍。

Theano 虽然已经停止更新了,但基本上所有的框架都参考过 Theano,它并不算彻底消失。

GitHub 地址:https://github.com/Theano/Theano

Facebook 联手微软推出 ONNX 标准,共筑开放 AI 生态

2017 年 9 月,Facebook 联手微软发布了一个全新的开源项目——ONNX(Open Neural Network Exchange),欲借此打造一个开放的深度学习开发工具生态系统,让不同的神经网络开发框架做到互通互用。目前,CNTK,PyTorch , Caffe2,MXNet 已宣布支持 ONNX。

为何要共同打造 ONNX 开放平台?

目前的开发现状如下:大体上,每个框架都会针对某个特定属性进行优化,比如训练速度、对网络架构的支持、能在移动设备上推理等等。在大多数情况下,研发阶段最需要的属性和产品阶段是不一样的。而在任意一个框架上训练的神经网络模型,无法直接在另一个框架上用。开发者需要耗费大量时间精力把模型从一个开发平台移植到另一个。这导致效率的降低以及进度延迟。

而借助 ONNX,开发者能实时跟踪某个神经网络是如何在框架上生成的,接着,使用这些信息创建一个符合 ONNX 标准的通用计算图。大家能更方便地在不同框架间切换,为不同任务选择最优工具。使用支持 ONNX 表示方式的框架,大幅简化了切换过程,让开发者的工具选择更灵活。

GitHub 地址:https://github.com/onnx/onnx

微软基于 CNTK,推出 CNTK 2

2016 年初,微软开源 CNTK 深度学习工具包。作为语音识别领域声名卓著的开发工具,CNTK 具有相当不错的可扩展性、速度和精确性。

2017 年 6 月,微软在 GitHub 上放出了 CNTK 的第一个候选(RC)版本,完成内测。在 Blog 中,微软表示,CNTK 是一个针对深度学习的系统,可以用来加速诸如语音、图像识别以及搜索相关性(search relevance)等领域相关研究,并可运行于 CPU 或英伟达 GPU。此外,CNTK 既可本地运行,也可在云端基于 Azure GPU 运行。

在 6 月更新的这一版本中,Layers 算法库得到了大幅升级。大量的通用「layers」已预定义,使编写包含标准层级的简单网络变得十分容易。新的 Cognitive Toolkit 评估算法库在易用性和性能上也得到大幅升级。

此后,在 2.0 的多个 Beta 和 RC 版本中,微软逐步更新了 CNTK 对 Python、C++、C#、Java 等的 API 支持,对 Keras 的后端支持等新功能。在 2.1 中,cuDNN 版本升级到 6.0,支持 Universal Windows Platform。在 2.2 中,微软又做了许多模型支持相关的改进。

在 2017 年底的 2.3 版本中,又有如下几个改进:提供了对 ONNX 标准的更好支持,分布式训练支持切换到 NCCL2,改进了 C# API 的支持,增加了网络优化 API,以及更快的稀疏 Adadelta。

GitHub 地址:https://github.com/Microsoft/CNTK

Keras 2 带来惊喜,与 TensorFlow 联系更加紧密

Keras 是一个崇尚极简、高度模块化的神经网络库,于 2015 年 3 月发布。

2017 年 3 月,keras 迎来全新版本——Keras 2。Keras 开发人员此前在博客中表示,他们更愿意人们将 Keras 视为一种通用的 API 规范,而不仅仅是一个代码库。当时,开发人员将此前的 Keras 实现归结为两个大类:

  • TensorFlow 的内部实现,即 TensorFlow 1.0 版本中发布的 tf.keras 模块——完全基于 TensorFlow 编写,并且与所有 TensorFlow 功能深度兼容;
  • 通用实现,兼容多种运行后端,包括 Theano 和 TensorFlow 等(将来可能会支持更多其他的后端)。

3 月的版本中,最重要的一项内容就是增强了 Keras 与 TensorFlow 的逻辑一致性。另一项重要更新就是 API 的变化。他们重新设计了绝大部分 API,为将来的扩展和更新预留了充足的修改空间,并且新设计的 API 完全兼容于谷歌 TensorFlow 规范。

而在 2017 年 8 月,Keras 又做了如下几点更新:修复漏洞,性能提升,文件改善,为在 TensorFlow 的数据张量(比如 Datasets, TFRecords)上训练模型提供了更好的支持,提升 TensorBoard 用户体验,提升测试覆盖范围。此外,还迎来两个重大变化:一是让约束管理(constraint management)基于变量属性;二是把层和模型中已经不再使用的约束属性移除(不会影响任何用户)。

GitHub 地址:https://github.com/keras-team/keras

微软携手亚马逊推出 Gluon 深度学习库,全面支持符号式和命令式编程

2017 年 10 月,微软携手亚马逊推出全新 Gluon 深度学习库。它是一个支持符号式和命令式编程的 API,在创造深度学习模型的过程中能极大的简化进程,而不会使训练速度减慢。据悉,Gluon 能让开发者更简单的学习、规定和调试深度神经网络,也可以让接下来的迭代和保持更加简单,也支持开发作者快速构建和训练神经网络。目前 Gluon 已全面支持亚马逊 MXNet,接下来也将支持 CNTK,主要的亮点如下:

  • 对于高级用户,Gluon 支持很多复杂技术,如动态图和灵活结构。
  • Gluon 包含完全的符号化的自动微分代码,这些代码已经被程序执行了,也包括控制流。Gluon 通过 hybridization 实现这一点:静态计算图先被计算出来,然后在随后的迭代中缓存和重用。计算图也可以被导出,例如给移动设备提供服务。
  • 自带一个丰富的内嵌层库,通过重用库中预建的构件,可以大大简化规定复杂模型架构的任务。
  • Gluon 支持循环和不规则张量(ragged tensors)(能批处理变长度序列),对于 RNN 和 LSTM 模型具有空前的效率。
  • 提供对稀疏和量化数据及操作的全面支持,可以用于计算和通信。稀疏性在 NLP 领域的深度神经网络中非常常见,而量化对于运行时性能评估至关重要。
  • 虽然在单个 GPU 上进行调度很容易,但在多个 GPU 上操作要复杂得多。通过 MXNet 或 CNTK 后端,Gluon 在符号式和命令式模式下都提供自动分配。

GitHub 地址:https://github.com/gluon-api/gluon-api/

背靠亚马逊,MXNet 继续改进

MXNet 由华盛顿大学和卡内基梅隆大学的研究人员联合发起,2016 年底,它被 Amazon AWS 选为官方深度学习平台。

它的作者李沐曾表示,

MXNet 最早就是几个人抱着纯粹对技术和开发的热情做起来的兴趣项目,既没有指望靠它毕业,也没想着用它赚钱。 能够一步一步慢慢的扩大,我觉得最重要的是每个小伙伴对这个事情的投入,和抱着降低深度学习门槛的使命。也是让大家只需要关心「数据量和运算量」,而不是如何有效实现利用硬件;只需要「数学公式写好,根本就不想知道你支持哪些 layer,分别是干什么的」,不用管自动求导如何训练;只需要「把手上的数据交出去给云即可,然后花钱租算力」,而不是云上如何管理如何优化。

在 2017 年,开发人员一直在不断改进和优化该框架,目前 MXNet 已经迎来 1.0.0 版。

MXNet 于 2017 年 8 月加入了动态图接口 Gluon,于 2017 年 11 月加入 ONNX 开放体系。

MXNet 主要有如下 3 方面的优势:

  • 效率:节省计算资源,资源利用效率高;
  • 速度:可以随着机器和 GPU 的扩展呈线性增长,而且在单台机器上也有很高的效率;
  • 简单易用:同时支持命令式编程(imperative programming)和声明式编程(declarative programming)

GitHub 地址:https://github.com/apache/incubator-mxnet

Intel 开源 Coach,用于训练和评估增强学习 Agent

2017 年 10 月,英特尔开源增强学习框架 Coach。该框架利用多核 CPU 处理能力,用于训练和评估增强学习 Agent。

Coach 包含许多 Agent 类型的实现,包括从单线程实现到多线程实现的无缝转换。Agent 以模块化方式实现,以允许重用不同的构建块来构建新的和更复杂的代理。此外,Coach 可以在单个任务的基础上编写新的 Agent,并切换到同步或异步的多任务实现,并进行最少的更改。

它的主要特点如下:

  • 包含一些领先的增强学习算法的多线程实现,适用于各种游戏和机器人环境。它能够在台式计算机上高效地训练强化学习 Agent,而无需任何额外的硬件。
  • 可与如 OpenAI Gym、Roboschool 和 ViZDoom 等顶级环境进行集成,同时还提供了可视化培训过程和了解 Agent 的基本机制的各种技术,所有的算法都是使用英特尔优化的 TensorFlow 来实现的,也可以通过 Intel 的 neon™框架来实现。

GitHub 地址:https://github.com/NervanaSystems/coach

针对移动终端,Facebook Caffe2 VS 谷歌 TensorFlow Lite

2017 年 4 月,Facebook 开源深度学习框架 Caffe2。根据官网介绍,它最大的特点就是轻量、模块化和扩展性好。Caffe2 可以方便地为手机等移动终端设备带来 AI 加持,让 AI 从云端走向终端。

据 Caffe2 官方博客表示:

长期以来,提起 AI 模型的训练和部署,人们通常都会联想到大数据中心或超级计算机。之所以会出现这种现象,是因为小型计算设备在大规模图像、视频、文本和语音处理上具有明显的短板,无论在速度还是可靠性上都远远不及大型数据中心。 因此在移动设备上部署 AI 模型,使其能够快速准确地处理相关分析任务,一直是一项有待解决的难题。要解决这个难题,让 AI 终端化,除了有赖于移动硬件平台的发展之外,在软件框架层面也需要一个灵活轻便的框架支持。

而 Caffe2 正是这样一个框架。它是在此前流行的开源框架 Caffe 基础上的重构和升级,一方面集成了诸多新出现的算法和模型,另一方面在保证运算性能和可扩展性的基础上重点加强了框架在轻量级硬件平台的部署能力。

GitHub 地址:https://github.com/caffe2/caffe2

2017 年 11 月,谷歌发布 TensorFlow Lite 预览版,与 Caffe2 类似,这款框架针对移动和嵌入式设备等。TensorFlow Lite 是一种全新的设计,具备如下三点特性:

  • 轻量级(Lightweight):支持机器学习模型的推理在较小二进制数下进行,能快速初始化 / 启动。
  • 跨平台(Cross-platform):可以在许多不同的平台上运行,现在支持 Android 和 iOS。
  • 快速(Fast):针对移动设备进行了优化,包括大大减少了模型加载时间、支持硬件加速。

TensorFlow Lite 支持 Android 神经网络 API(Android Neural Networks API),当加速器(硬件设备)不可用时,TensorFlow Lite 会返回到 CPU 来执行,它目前支持很多针对移动端训练和优化好的模型,如 MobileNet,Inception v3,Smart Reply。

开发人员也表示,TensorFlow Lite 应该被看作是 TensorFlow Mobile 的升级,它的功能有很多,目前仍处于紧锣密鼓的开发阶段。

地址:http://tensorflow.org/mobile/tflite

本文分享自微信公众号 - AI研习社(okweiwu),作者:思颖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【教程】深度学习全网最全学习资料汇总之入门篇

    【AI研习社】关注AI前沿、开发技巧及技术教程等方面的内容。欢迎技术开发类文章、视频教程等内容投稿,邮件发送至:zhangxian@leiphone.com ...

    AI研习社
  • 深度学习入门指北——从硬件到软件

    近日,Rachel Thomas在fast.ai上发布了一篇博文《What you need to do deep learning》,他希望通过这篇文章回答一...

    AI研习社
  • 这些关于TensorFlow问题的解答,你不能错过

    作为目前最普及的深度学习框架,TensorFlow 实不必多做介绍。 无论国内外,有相当数量程序员以 TensorFlow 入门深度学习开发,逐步走上职业机器学...

    AI研习社
  • 8个深度学习框架

    随着越来越多的企业希望扩大其运营规模,它们已成为接受机器学习和预测分析的必要条件。人工智能与正确的深度学习框架相结合,真正放大了企业在其领域内可以实现和获得的整...

    February
  • 搭建技术分享平台,携程技术中心深度学习Meetup回顾

    今天由携程技术中心主办的深度学习Meetup在凌空SOHO举办。作为上海最顶级的深度学习大会,活动吸引了BI、机器学习、大数据等领域的工程师和高校教授们参与,会...

    携程技术
  • 为什么要学会用python处理脑电数据?

    可以说随着人工智能技术的发展,Python语言也迎来了新的生机。由于Python易上手,语法简洁,工具库多等特点,Python已成为人工智能领域最流行的语言。

    脑机接口社区
  • 特别专题 | 传统企业大数据应用案例【四】

    导读:本期“谁是数据英雄?传统企业大数据应用案例”给大家介绍《 新奥能源:智能运营背后的数据价值链》。能源行业是国民经济中的支柱产业,也是产生海量数据并对数据分...

    钱塘数据
  • 餐饮行业如何通过线上+线下智能解决方案扩展业务

    由于疫情的影响,大量的餐饮行业都迎来了黑暗的几个月。经历了店铺关停、存货积压,导致了现金流入受阻,大量的餐饮行业纷纷倒闭。然而,却有一些餐饮商家快速地找到了解决...

    耐思智慧
  • java小技术之生成二维码

    把我们需要的链接或者内容生成二维码其实是一件非常容易的事情,有很多办法可以实现,这里我们采用JS方法生成。 <!DOCTYPE HTML PUBLIC "-//...

    生活创客
  • 高斯滤波

    高斯滤波和均值滤波的原理一样,在均值滤波中所有的像素点的权重都一样,而在高斯滤波中则是越靠近中心的像素点权重远大,权重的分配由二维高斯公式生成的矩阵决定,矩阵的...

    渔父歌

扫码关注云+社区

领取腾讯云代金券