写点什么

深度学习框架:2016 年的大盘点

  • 2017-04-06
  • 本文字数:4724 字

    阅读完需:约 15 分钟

引言

刚刚过去的 2016 年,回顾这一年,深度学习无疑是 2016 年最热的词。包括 Google、Amazon、Facebook、Microsoft 等各大巨头都在不遗余力地推进深度学习的研发和应用。

与前几代人工智能不同,应用深度学习能力的人工智能是一项重大突破,机器开始可以模仿人类的神经系统进行有效学习并且进步神速,也就有了最近的神秘高手“ Master ”横扫中日韩顶级棋手,碾压人类的神话,它不是别人,正是 2016 年战胜李世石的 AlphaGo 的升级版!

深度学习的概念由加拿大多伦多大学教授 Geoffrey Hinton 等人于 2006 年提出,它本质上是一种神经网络算法,算法训练时可以不用人工干预,因此它也属于一种无监督式机器学习算法。

可以毫不夸张的说,深度学习正在重塑 Google、Facebook、Microsoft 和 Amazon。

BEEVA Labs 数据分析师 Ricardo Guerrero Gomez-Ol 在他的博客上发表了一篇博文,盘点了目前最流行的深度学习框架。他在博文中表示,他写此文的初衷是,他常常听到人们谈论深度学习时,总是问:“我应该从哪里开始呢?”“我听说TensorFlow 是最流行的,对吧?”“Caffe 很常用,但是我觉得它学起来有点困难。”

因为Ricardo 所在的 BEEVA 实验室,经常和深度学习的许多库打交道,所以他想分享有趣的发现和感想,帮助那些刚进入深度学习这一迷人世界的人们。

InfoQ 整理、结合了 Ricardo 关于深度学习框架的盘点,写成此文,以飨广大有志于深度学习领域的读者们。


Tensorflow

TensorFlow 是 Google 开源的一款深度学习工具,使用 C++ 语言开发,上层提供 Python API。在开源之后,在工业界和学术界引起了极大的震动,因为 TensorFlow 曾经是著名的 Google Brain 计划中的一部分,Google Brain 项目的成功曾经吸引了众多科学家和研究人员往深度学习这个“坑”里面跳,这也是当今深度学习如此繁荣的重要原因。

TensorFlow 在官网被定义为“用于机器智能的开源软件库”,但 Ricardo 认为下面的定义更为准确:“TensorFlow™是使用数据流图进行数值计算的开源软件库。”此处,TensorFlow 并未归类为“深度学习框架”,而是与 Theano 一起,归到“图编译器(Graph compilers)”的类别。

在 Ricardo 完成 Udacity 的深度学习课程后,他对 TensorFlow 的印象是,它一个非常好的框架,但是它非常底层。用 TensorFlow 的话,有很多代码要编写,你必须重新一遍又一遍的发明轮子。不止他有这样的抱怨,其他人亦如此,比如下图所示:

Andrej Karpathy 在 Twitter 发推文抱怨 TensorFlow。Andrej 是 OpenAI 的科学家,斯坦福大学的计算机科学博士。

几个月前,Ricardo 参加了“Google Experts Summit: TensorFlow, Machine Learning for everyone, with Sergio Guadarrama”。Sergio 是开发 Tensorflow 的一名工程师,在会上,他没有展示 Tensorflow,而是展示了一个运行在 TensorFlow 上的更高层的库 tf.contrib 。Ricardo 的印象是,他们内部已经意识到,如果想让更多的人使用 Tensorflow,他们需要通过在更高的抽象层上创建一些层来简化使用。

Tensorflow 支持 Python 和 C ++,允许在 CPU、GPU,甚至支持使用 gRPC 进行水平扩展进行计算分布。

综上所述:Tensorflow 非常好,但你必须知道好在哪里。如果你不想以手动编程和重新发明轮子来完成大部分事情,你可以使用更容易的库。

Theano

Theano 是老牌、稳定的库之一。它是深度学习开源工具的鼻祖,由蒙特利尔理工学院时间开发于 2008 年并将其开源,框架使用 Python 语言开发。它是深度学习库的发轫,许多在学术界和工业界有影响力的深度学习框架都构建在 Theano 之上,并逐步形成了自身的生态系统,这其中就包含了著名的 Keras、Lasagne 和 Blocks。

Theano 是底层库,遵循 Tensorflow 风格。因此不适合深度学习,而更合适数值计算优化。它支持自动函数梯度计算,它有Python 接口,集成了 Numpy,使得这个库从一开始就成为通用深度学习最常用的库之一。

今天,它依然健壮可用,但事实上,由于没有多 GPU 支持和水平扩展,加之 TensorFlow 的如天花乱坠的大肆宣传之下(它们都是针对同一个领域),结果,Theano 逐渐被世人遗忘了。

Keras

Ricardo 表示他很喜欢 Keras,因为它的句法相当清晰,文档也非常好的(尽管相对较新),它还支持 Ricardo 所熟知的Python语言。它如此易用,它的指令、函数和每个模块直接的连接方式都可以直观地了解。

Keras 是一个非常高层的库,工作在 Theano 或 Tensorflow(可配置)之上。此外,Keras 强调极简主义,你可以用寥寥可数的几行代码来构建神经网络。在这里,您可以看到一个Keras 代码示例,与在Tensorflow 中实现相同功能所需的代码相比较。

Lasagne

Lasagne 是一个工作在 Theano 之上的库。它的任务是将深度学习算法的复杂计算予以简单地抽象化,并提供一个更友好的Python接口。这是一个老牌的库,长久以来,它是一个具备高扩展性的工具。在 Ricardo 看来,它的发展速度跟不上 Keras。它们适用的领域相同,但是,Keras 有更好的、更完善的文档。

Caffe

Caffe 是最老的框架之一,比老牌还要老牌。 Caffe 是加州大学伯克利分校视觉与学习中心(Berkeley Vision and Learning Center ,BVLC) 贡献出来的一套深度学习工具,使用 C/C++ 开发,上层提供 Python API。Caffe 同样也在走分布式路线,例如著名的 Caffe On Spark 项目。

Ricardo 认为,它有非常好的特点,但也有一些小缺点。最初,它不是一个通用的框架,只专注于计算机视觉,但它确实很好。在实验室的实验中,CaffeNet 架构的训练时间在 Caffe 比在 Keras(使用 Theano 后端)少 5 倍。缺点是它缺乏灵活。如果你想引入新的改进,你需要在 C ++ 和 CUDA 编程。如果你要做较小的改进,你可以使用它的PythonMatlab接口来达到。

另外它的文档很贫乏,你需要大量时间检查代码才能理解它。

它最大缺点之一是安装方式。它有很多大量的依赖包才能解决,Ricardo 曾经安装过两次,他表示这一过程痛苦不堪。

但要注意的是,它并非一无是处。它作为投入生产的计算机视觉系统的工具,是无可争议的领导者。它非常健壮、非常快速。Ricardo 建议使用 Keras 进行实验和测试,然后迁移到 Caffe 进行生产。

DSSTNE

DSSTNE(Deep Scalable Sparse Tensor Network Engine,DSSTNE)是 Amazon 开源的一个非常酷的框架,由 C++ 语言实现。但它经常被忽视。为什么?因为,撇开其他因素不谈,它并不是为一般用途设计的。DSSTNE 只做一件事,但它做得很好:推荐系统。正如它的官网所言,它不是作为研究用途,也不是用于测试想法,而是为了用于生产的框架。

Ricardo 测试 DSSTNE 后得到的印象是,它是一个非常快的工具,能得到一个非常好的结果(平均精度 mAP 很高)。为了达到这种速度,它使用了 GPU,然而这也是它的一个不利之处:不同于本文提到的其他框架或库,它不允许你在 CPU 和 GPU 切换,这点对一些尝试可能有用,但他们在 DSSTNE 试图这样做的时候,被告知不允许。

Ricardo 认为目前 DSSTNE 不算是一个成熟的项目,它过于像“黑盒子”。为了了解它的工作原理和运行机制,不得不去看它的源代码,发现了很多重要的待办事项(//TODO)。他们还发现,在互联网上没有足够的教程,也没有什么人做相关实验。他的意见是,最好等待 4 个月,看看 DSSTNE 的最新版本。这是一个非常有趣的项目,它只是需要一点成熟的时间。

顺便说一句,DSSTNE 不需要编程技能。与 DSSTNE 的交互都是通过终端中的命令完成的。

Torch

Torch 是 Facebook 和 Twitter 主推的一个特别知名的深度学习框架,Facebook Reseach 和 DeepMind 所使用的框架,正是 Torch(DeepMind 被 Google 收购之后才转向 TensorFlow)。出于性能的考虑,它使用了一种比较小众的编程语言 Lua,目前在音频、图像及视频处理方面有着大量的应用。

在目前深度学习大部分以 Python 为编程语言的大环境之下,一个以 Lua 为编程语言的框架只有更多的劣势,而不是优势。Ricardo 没有 Lua 的使用经验,他表示,如果他要用 Torch 的话,就必须先学习 Lua 语言才能使用 Torch。就他个人来说,更倾向于熟悉的 Python、Matlab 或者 C++ 来实现。

mxnet

mxnet 是支持大多数编程语言的库之一,它支持 Python、R、C++、Julia 等编程语言。Ricardo 觉得使用 R 语言的人们会特别喜欢 mxnet,因为直到现在,在深度学习的编程语言领域中,Python 是卫冕之王。

Ricardo 以前并没有过多关注 mxnet,直到 Amazon AWS 宣布将 mxnet 作为其深度学习AMI 中的参考库时,提到了它巨大的水平扩展能力,他才开始关注。这就是为什么mxnet 会出现在我们2017 年的BEEVA 技术测试名单之中。

Ricardo 表示他对多 GPU 的扩展能力有点怀疑,但仍然很愿意去了解实验更多的细节。但目前还是对 mxnet 的能力抱有怀疑的态度。

DL4J

DL4J,全名是 Deep Learning for Java。正如其名,它支持 Java。Ricardo 说,他之所以能接触到这个库,是因为它的文档。当时,他在寻找限制波尔兹曼机(Restricted Boltzman Machines)自编码器(Autoencoders),在DL4J 找到这两个文档,文档写得很清楚,有理论,也有代码示例。Ricardo 表示D4LJ 的文档真的是一个艺术品,其他库的文档应该向它学习。

DL4J 背后的公司 Skymind 意识到,虽然在深度学习世界中,Python 是王,但大部分程序员都是 Java 起步的,因此,DL4J 兼容 JVM,也适用于 Java、Clojure 和 Scala。随着 Scala 的潮起潮落,它也被很多有前途的初创公司使用。

Skymind 曾发布过一篇文章《DL4J vs. Torch vs. Theano vs. Caffe vs. TensorFlow》,对这些主流的深度学习框架的优劣势进行了详细的分析比较。

顺便说一句,Skymind 有一个非常活跃的 Twitter 帐户,他们发布新的科学论文、示例和教程。非常推荐去看看。

Cognitive Toolkit

认知工具包(Cognitive Toolkit),就是之前被大家所熟知的缩略名 CNTK,但最近刚更改为现在这个名字,可能利用 Microsoft 认知服务(Microsoft Cognitive services)的影响力。在发布的基准测试中,它似乎是非常强大的工具,支持垂直和水平推移。

到目前为止,认知工具包似乎不太流行。关于这个库,还没有看到有很多相关的博客、网络示例,或者在 Kaggle 里的相关评论。Ricardo 表示这看起来有点奇怪,因为这是一个背靠微软研究的框架,特别强调自己的推移能力。而且这个研究团队在语音识别上打破了世界纪录并逼近了人类水平。

你可以在他们的项目 Wiki 中的示例,了解到认知工具包在 Python 的语法和 Keras 非常相似。


结论

Ricardo 的结论是,如果你想进入深度学习的领域,必须首先就要学习 Python。尽管这一领域支持其他很多语言,但 Python 是应用最广泛也最简单的一个。至于为什么非 Python 莫属?它运行速度太慢了。因为大多数库都是用符号式语言方法,而不是命令式语言方法。也就是说,并不是逐行执行你的指令,而是根据你给出的所有指令,生成一个计算图(computing graph)。这个图在内部被优化、编译成可执行的 C++ 代码。这样你就可以享受世界上最好的特点:Python 的开发速度和 C++ 的执行速度。

关于深度学习的讨论越来越火爆了。但是人们并不愿意为了算法训练耗费大量时间,因此,多 GPU 支持、多机器的水平扩展甚至硬件定制开始占上上风,你不要考虑 CPU,它的效能远低于 GPU。

Ricardo 建议,如果是初学者,就用 Keras;如果已经入门,也可以用它。

深度学习作为 AI 领域的一个重要分支,我们可以预见,随着以后大数据和深度学习技术的不断发展,今后越来越难的问题,将会被深度学习算法成功解决。我们也非常期待深度学习算法可应用于商业产品中,就像过去 10 年中人脸识别器被整合到消费级相机中那样。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2017-04-06 17:334634
用户头像

发布了 368 篇内容, 共 170.2 次阅读, 收获喜欢 939 次。

关注

评论

发布
暂无评论
发现更多内容

近期Master分支代码编译异常的解决方案

坚果

OpenHarmony OpenHarmony3.2 三周年连更

PDF编辑软件Acrobat Pro DC 2023 最新版+如何取消Acrobat更新教程

Rose

Acrobat Pro DC 2023 Acrobat Pro DC更新 如何取消Acrobat 自动更新

好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作

程序员小毕

数据库 性能优化 JVM 多线程 java面试

浅论分布式训练中的recompute机制

百度Geek说

机器学习 深度学习 分布式 企业号 4 月 PK 榜

通俗易懂篇:贝叶斯网络和它的应用

Bob

网络 贝叶斯算法

vue3学习-Composition API

格斗家不爱在外太空沉思

Vue 3 三周年连更

PicConvert for mac:以批处理模式转换,调整大小和重命名图像

Rose

苹果软件资源 图片格式转换 PicConvert mac mac图片编辑

跨平台应用开发进阶(五十一):HTML5(富文本内容)连续数字、字母不自动换行问题分析及解决

No Silver Bullet

html5 跨平台应用开发 三周年连更 问题分析及解决

Java异常Exception详解

timerring

Java 三周年连更

关于软件测试领域的 Happy Path

Jerry Wang

软件测试 测试 自动化测试 测试自动化 三周年连更

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

做梦都在改BUG

Java java面试 框架

基于Flutter实现跨平台离线大模型对话应用

轻口味

flutter ios android AI 三周年连更

基于树莓派设计的音视频播放器(从0开始)

DS小龙哥

三周年连更

Lambda 应用介绍及实现原理剖析

架构精进之路

Java 后端 Lamdba表达式 三周年连更

Mac音频采样器Kontakt 7最新版v7.3.0下载

Rose

mac音频采样器 Kontakt 7激活版 Native Instruments Kontakt 7 mac下载

一种面向后端的微服务低代码平台架构设计

京东科技开发者

架构 微服务 低代码 企业号 4 月 PK 榜

产教融合| 赛意信息·讯方·深信息产教融合交流研讨会暨国产工业软件人才培养战略合作示范基地揭牌仪式圆满举办

科技热闻

SpringBoot如何使用Jetty容器?超级详细,建议收藏

bug菌

springboot jetty 三周年连更

图计算引擎分析--GridGraph

京东科技开发者

系统 磁盘 图计算引擎 企业号 4 月 PK 榜 GridGraph

企业微信接入系列-扫码绑定/登录

六月的雨在InfoQ

企业微信 三周年连更 企业微信扫码 企业微信接入

Docker容器网络的七种武器

王玉川

Docker 容器 网络 VXLAN 网络虚拟化

Unity 之 查找游戏物体的几种方式汇总解析

陈言必行

Unity 三周年连更

中软国际亮相OpenHarmony开发者大会,荣获A类捐赠人授牌认可

科技热闻

Shell在日常工作中的应用实践

京东科技开发者

Linux Shell 服务器 shell脚本编程 企业号 4 月 PK 榜

告别祈祷式编程|单元测试在项目里的正确落地姿势

浅羽技术

Java 测试 单元测试 JUnit 三周年连更

如何让 Windows 应用程序在 Parallels Desktop 中启动得更快

Rose

pd虚拟机 pd18虚拟机 Parallels Desktop启动

2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

肥晨

三周年连更

从多个数据源中提取数据进行ETL处理并导入数据仓库

海拥(haiyong.site)

三周年连更

基于UDP协议的Socket通信

二哈侠

UDP协议 客户端配置 三周年连更

使用 Amazon SageMaker 构建文本摘要应用

亚马逊云科技 (Amazon Web Services)

强大易用的矢量图形设计工具Sketch v96.1最新中文版

Rose

苹果软件下载 Sketch中文版 Sketch V96.1 mac图形设计工具

深度学习框架:2016年的大盘点_语言 & 开发_刘志勇_InfoQ精选文章