【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

深度学习框架: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 )关注我们。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2017-04-06 17:334639
用户头像

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

关注

评论

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

真·Redis缓存优化—97%的优化率你见过嘛? | 京东云技术团队

京东科技开发者

redis 缓存 中间件 企业号9月PK榜 缓存优化

【稳定性】关于缩短MTTR的探索 | 京东物流技术团队

京东科技开发者

系统稳定性 系统稳定高可用 MTTR 企业号9月PK榜

华为云828 B2B企业节优惠进行中,华为云耀云服务器L实例为中小企业和开发者量身定制

平平无奇爱好科技

工作流如何实现?集成?springboot+vue+activiti技术栈

金陵老街

OpenHarmony装饰指定自定义组件:@BuilderParam装饰器

OpenHarmony开发者

OpenHarmony

使用ChatGPT快速构建优质网站模板的方法

百度开发者中心

#人工智能 ChatGPT 千帆大模型平台

EditReady for Mac(专业视频转码器) 23.1.1激活版

mac

苹果mac Windows软件 EditReady 视频转码器

蓝易云:sourcetree的使用详解!

百度搜索:蓝易云

Linux 运维 Git Submodule sourcetree

打造企业界双11效应丨华为云828 B2B企业节全面驱动企业商业增长

平平无奇爱好科技

华为云828 B2B企业节,深度激活企业数实融合新动能

平平无奇爱好科技

王文京受邀在财政部“会计大讲堂”做信息技术驱动当代会计创新发展的专题报告

用友BIP

智能会计

WorkPlus Meet:高效私有音视频会议,助力多场景协作

WorkPlus

Tomcat目录结构 | 京东云技术团队

京东科技开发者

tomcat tomcat构建 tomcat剖析 企业号9月PK榜 Tomcat目录

利用ChatGPT,SQL数据分析学习效率翻倍

百度开发者中心

#人工智能 ChatGPT SQL Server

降维算法了解一下

小魏写代码

中国信通院马飞:小程序生态与标准建设规划

TRaaS

小程序

征稿啦!第 18 届「中国 Linux 内核开发者大会」重磅启动

OpenAnolis小助手

Linux 开发者 内核 龙蜥社区 CLK

解析Prompt自然语言处理的关键因素

百度开发者中心

#人工智能 ChatGPT Prompt 千帆大模型平台

基于Prompt和迁移学习的文本分类优化

百度开发者中心

自然语言处理 #人工智能

蓝易云:Elasticsearch 底层技术原理以及性能优化实践

百度搜索:蓝易云

云计算 elasticsearch Linux 运维 云服务器

在 Kubernetes 环境中实现证书管理的自动化

NGINX开源社区

nginx Kubernetes 证书管理

IPQ4019, IPQ4029, IPQ4018 and IPQ4028 Different Wi-Fi standards - offering a choice of different performance levels

wifi6-yiyi

IPQ4019 802.11ac 802. 11AC/AN

QCN9074|Configuring the Wallys DR9074 4x4 WLAN WiFi 6 Module on an X86 Linux Platform

wallyslilly

QCN9074

【免费】2023云栖大会门票开抢啦!数量有限,先到先得!

阿里云视频云

云计算 阿里云 云栖大会

使用Triton部署chatglm2-6b模型 | 京东云技术团队

京东科技开发者

人工智能 大模型 ChatGLM2-6B 企业号9月PK榜

基于Java开发的数字采购系统(供应商、询价、招标、订单送货)

金陵老街

DME²,端点科技定义未来企业信息管理架构

科技热闻

从终端到云端,华为云828 B2B企业节加速中小企业数字化

平平无奇爱好科技

华为云828 B2B企业节:精选优惠助力企业降本增效

平平无奇爱好科技

高管解读:华为云828 B2B企业节意义非凡

平平无奇爱好科技

软件开发、管理全周期文档整理,满足开发、验收、投标支撑

金陵老街

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