“欧比特杯”高光谱遥感影像智能处理行业应用大赛已于2019年5月24日开始接受网上报名。报名请关注《慧天地》微信平台大赛通知 比赛通知|关于举办“欧比特杯” 高光谱遥感影像智能处理行业应用大赛的通知
或欧比特网站https://ohs.obtdata.com
「人生苦短,我用 Python。」但在 Python 如日中天的今天,深度学习可能又需要一种新的编程语言。机器学习工程师 Max Pechyonkin 认为 Swift 可能将成为重要的深度学习语言,他在一篇博客中简要阐述了 Swift 的优势和发展前景。你会考虑学习 Swift 吗?
如果你懂编程,在听到 Swift 时,你可能会想到为 iOS 或 MacOS 开发应用程序。如果你懂深度学习,那么你肯定听闻过 Swift for Tensorflow(简称 S4TF):https://www.tensorflow.org/swift。那么你可能会问自己:「谷歌为什么要为 Swift 创建一个 TensorFlow 版本呢?毕竟已经有 Python 和 C++版本了;为什么还要增加一种语言?」我将在本文中尝试回答这一问题,并会列出你应该认真关注 S4TF 以及 Swift 语言本身的原因。本文的目的并非进行详尽的解释,而是要提供一般性的概述,文中也会带有大量链接以帮助你更深度地了解。
1Swift 背后有强有力的支持
Swift 是 Chris Lattner 在苹果公司工作时创造的。现在,Chris Lattner 在谷歌大脑工作,而谷歌大脑是当今世界上最优秀的人工智能团队之一。Swift 语言的创造者现在正在一家研究深度学习的实验室工作,这足以说明这个项目是严肃的。
Swift for TensorFlow 不只是另一种语言的 TensorFlow。它本质上是 Swift 语言本身的另一个分支。也就是说,S4TF 不只是一个软件库;它本身即是一门语言,其中内置了支持 TensorFlow 所需的所有功能。举个例子,S4TF 自带非常强大的自动微分系统,这是深度学习在计算梯度时所需的基础功能之一。对比一下 Python——自动微分并非该语言的核心组件。S4TF 中某些新开发的功能之后也被整合进了 Swift 语言。
3Swift 速度很快
在我刚得知 Swift 的运行速度和 C 语言代码一样快时,我震惊了。我知道 C 语言经过高度优化,能够达到非常高的速度,但这需要对内存进行微管理(这让 C 语言不能保证内存安全)。另外,C 语言也非常不容易学习。
现在,Swift 在数值运算方面与 C 语言一样快,而且还没有内存安全问题,学习难度也低得多。Swift 背后的 LLVM 非常强大,能够进行非常高效的优化,这能确保你的代码高速运行。
4你可以在 Swift 中使用 Python、C 和 C++ 代码
因为用于机器学习的 Swift 还处于非常早期的阶段,所以目前针对 Swift 的机器学习库还不多。但你也不用过于担心这一点,因为 Swift 具备出色的 Python 解释能力。你可以直接将任何 Python 库导入 Swift 进行使用。类似地,你也可将 C 和 C++ 库导入 Swift(对于 C++,你要确保头文件是以 C 语言写的,没有 C++ 的特性)。
总的来说,如果你需要特定的功能,但 Swift 中尚未实现,那么你可以导入对应的 Python、C 或 C++ 软件包。很了不起!
5Swift 可以做到非常低层
如果你用过 TensorFlow,那么你很可能是通过 Python 使用的。在表层之下,Python 版本的 TensorFlow 库的下面是 C 代码。所以当你调用 TensorFlow 中的任意函数时,你都会在某个层级上遇到 C 代码。这意味着如果你要检查其源代码,你所能到达的层级是很有限的。比如说,如果你想要查看卷积的实现方式,那么你不会看到为此编写的 Python 代码,因为它是用 C 语言实现的。
Swift 则不一样。Chris Lattner 将 Swift 称为「LLVM(汇编语言)的句法糖果(https://www.fast.ai/2019/03/06/fastai-swift/)」。这意味着 Swift 本质上非常靠近硬件,其间没有用 C 语言编写的其它层的代码。这也意味着 Swift 代码非常快,就像前面提到的那样。这样的特性让开发者既能在非常高的层级上检查代码,也能深入非常低的层级,同时无需涉及 C 语言。
6Swift 的未来发展
Swift 只是谷歌在深度学习领域的创新的一部分。另外还有一个非常相关的组件:MLIR:https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d。MLIR 全称为 Multi-Level Intermediate Representation,即多级中间表示。MLIR 将会成为谷歌的统一编译器基础设施,让开发者可以用 Swift(或其它任何支持的语言)写代码,然后将其编译到任何支持的硬件。目前,针对不同的目标硬件有很多不同的编译器,而 MLIR 将改变这种情况。这不仅能让代码实现复用,而且还支持开发者为该编译器编写定制的低层组件。它还允许研究者应用机器学习来优化低层算法:
如果你在深度学习领域,那么你可能就应该开始学习 Swift 了。它相比于 Python 有很多优势。谷歌正在大力投入,想要将 Swift 打造成 TensorFlow 机器学习基础设施的一大关键组成部分,而且 Swift 很有可能会变成一门深度学习语言。所以,早点参与到 Swift 的发展中能为你提供先发优势。