共计 3395 个字符,预计需要花费 9 分钟才能阅读完成。
导读 | 近几年,随着深度学习爆炸式发展,在人工智能领域除了理论方面的突破外,还有基础架构的突破,它们奠定了深度学习繁荣发展的基础。这其中涌现了几个著名的深度学习平台,本文将对这些平台进行逐一介绍。 |
Theano 是在 BSD 许可证下发布的一个开源项目,诞生于加拿大魁北克蒙特利尔大学的 LISA 实验室,是用一位希腊数学家的名字命名的。
Theano 是一个 Python 库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。在解决包含大量数据的问题时,使用 Theano 可实现比手写 C 语言更快的编程速度。而通过 GPU 加速,Theano 甚至可以比基于 CPU 计算的 C 语言快上好几个数量级。
Theano 结合了计算机代数系统 (Computer Algebra System,CAS) 和优化编译器,还可以为多种数学运算生成定制的 C 语言代码。对于包含重复计算的复杂数学表达式任务,计算速度很重要,因此这种 CAS 和优化编译器的组合是很有用的。
对于需要将每种不同数学表达式都计算一遍的情况,Theano 能够实现编译 / 解析计算量的最小化,但仍然会给出如自动微分那样的符号特征。
在过去很长一段时间内,Theano 是深度学习开发与研究的行业标准。而且由于诞生于学界,Theano 最初是为学术研究而设计的,深度学习领域的许多学者至今仍在使用 Theano。
但随着 TensorFlow 在谷歌的支持下强势崛起,Theano 日渐式微,使用的人越来越少。在这个过程中标志性事件是:Theano 创始者之一 Ian Goodfellow 放弃 Theano 转去谷歌开发 TensorFlow 了。
2017 年 9 月 28 日,在 Theano 1.0 正式版发布前夕,LISA 实验室负责人、深度学习三巨头之一的 Yoshua Bengio 宣布 Theano 将停止继续开发:“Theano is Dead.”
尽管 Theano 正慢慢退出历史舞台,但作为第一个 Python 深度学习框架,Theano 很好地完成了自己的使命,为深度学习研究人员早期拓荒提供了极大的帮助,同时也为之后深度学习框架的开发奠定了基本设计方向:以计算图为框架的核心,采用 GPU 加速计算。
总结:深度学习新手可以使用 Theano 来练习,但对于职业开发者,建议使用其他主流深度学习框架。
2015 年 11 月 10 日,Google 宣布推出全新的机器学习开源工具 TensorFlow。TensorFlow 最初是由 Google 机器智能研究部门 Google Brain 团队基于 Google 2011 年开发的深度学习基础架构 DistBelief 构建的。
TensorFlow 涉及大量数学运算的算法库,是目前使用最广泛的机器学习工具之一。Google 在大部分应用程序中都使用 TensorFlow 来实现机器学习。例如,我们使用 Google 照相或 Google 语音搜索功能时,就是间接使用了 TensorFlow 模型,它们在大型 Google 硬件集群上工作,在感知任务方面功能强大。
TensorFlow 在很大程度上可以看作 Theano 的后继者,不仅因为它们有很大一批共同的开发者,更是因为它们还拥有相近的设计理念——基于计算图实现自动微分系统。
TensorFlow 编程接口支持 Python 和 C ++。随着 1.0 版本的公布,相继支持了 Java、Go、R 和 Haskell API 的 alpha 版本。此外,TensorFlow 可在 Google Cloud 和 AWS 中运行。TensorFlow 还支持 Windows 7、Windows 10 和 Windows Server 2016。
由于 TensorFlow 使用 C ++ Eigen 库,所以库可在 ARM 架构上进行编译和优化。这也就意味着用户可以在各种服务器和移动设备上部署自己的训练模型,无须执行单独的模型解码器或者加载 Python 解释器。
作为当前主流的深度学习框架,TensorFlow 获得了极大的成功,但在学习过程中,读者也需要注意如下问题。
- 由于 TensorFlow 的接口一直处于快速迭代之中,并且版本之间存在不兼容的问题,因此开发和调试过程可能会出现问题(许多开源代码无法在新版的 TensorFlow 上运行)。
- 想学习 TensorFlow 底层运行机制的读者需要做好心理准备,TensorFlow 在 GitHub 代码仓库的总代码量超过 100 万行,系统设计比较复杂,因此这将是一个漫长的学习过程。
- 在代码层面,面对同一个功能,TensorFlow 提供了多种实现,这些实现良莠不齐,使用中还有细微的差异,请读者注意区分。另外,TensorFlow 创造了图、会话、命名空间、PlaceHolder 等诸多抽象概念,对普通用户来说难以理解。
总结:凭借 Google 强大的推广能力,TensorFlow 已经成为当今最炙手可热的深度学习框架,虽不完美但是最流行。目前各公司使用的框架也不统一,读者有必要多学习几个流行框架以作为知识储备,TensorFlow 就是一个不错的选择。
Keras 是一个高层神经网络 API,由纯 Python 编写而成并使用 TensorFlow、Theano 及 CNTK 作为后端。Keras 为支持快速实验而生,能够把想法迅速转换为结果。Keras 应该是深度学习框架之中最容易上手的一个,它提供了一致而简洁的 API,能够极大地减少一般应用下用户的工作量,避免用户重复造轮子。
严格意义上讲,Keras 并不能算是一个深度学习框架,它更像一个构建于第三方框架之上的深度学习接口。Keras 的缺点很明显:过度封装导致丧失灵活性。
Keras 最初作为 Theano 的高级 API,后来增加了 TensorFlow 和 CNTK 作为后端。为了屏蔽后端的差异性,提供一致的用户接口,Keras 做了层层封装,导致用户在新增操作或获取底层的数据信息时过于困难。
同时,过度封装也使得 Keras 的程序执行十分缓慢,许多 Bug 都隐藏于封装之中,在绝大多数场景下,Keras 是本书介绍的所有框架中运行最慢的一个。
学习 Keras 十分容易,但是很快就会遇到瓶颈,因为它缺少灵活性。另外,在使用 Keras 的大多数时间里,用户主要是在调用接口,很难真正学到深度学习的内容。
总结:Keras 比较适合作为深度学习框架,但是过度的封装并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。
PyTorch 是一个 Python 优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经网络。
PyTorch 是一个 Python 软件包,提供了如下两种高层面的功能。
- 使用强大的 GPU 加速的 Tensor 计算(类似 Numpy)。
- 构建基于 tape 框架的 autograd 系统深度神经网络。
除此之外,PyTorch 提供了完整的官方文档、帮助用户循序渐进地学习的用户指南,以及作者亲自维护的论坛以供用户交流和求教。
Facebook 人工智能研究院 FAIR 对 PyTorch 提供了强力支持,作为当今世界排名前三的深度学习研究机构,FAIR 的力挺足以确保 PyTorch 获得持续开发、更新的支持,不至于像许多由个人开发的框架那样只是昙花一现。
如有需要,你也可以使用自己喜欢的 Python 软件包 (如 Numpy、scipy 和 Cython) 来扩展 PyTorch。
相对于 TensorFlow,PyTorch 有一个显著优点,就是它的图是动态的,而 TensorFlow 是静态的,不利于扩展。同时,PyTorch 的使用非常方便。
总结:如果说 TensorFlow 的设计是“Make it complicated”,Keras 的设计是“Make it complicated and hide it”,那么 PyTorch 的设计真正做到了“Keep it Simple,Stupid”。
初学者往往纠结于选择哪个深度学习框架作为学习的开始。在这里笔者建议初学者选择容易上手、非过度调用接口的框架。另外对于初学者来说,所选框架应具备易用性强、性能佳、社区完善以及平台支持等特点。
当今行业内各大公司使用的框架也都不尽相同,因此初学者可以考虑掌握多个框架 (比如 PyTorch 和 TensorFlow) 以应对未来的职场要求。