声明:以下纯属个人观点,如有不同意见,欢迎评论区探讨。感谢检阅
@All Developer,如果你准备研究深度学习,提高自己的能力,个人建议你开始学习 Swift
语言。(因为 Swift 是世界上最好的语言,开玩笑的。???)
当程序员听到 Swift
时,可能会联想到苹果,也可能会联想到 iOS 或 MacOS 的应用开发。如果你准备研究深度学习,那么你一定听说过 Swift
版的 TensorFlow。你可能不禁想问:“为什么 Google 会创建 Swift
版的 TensorFlow?现在已经有 Python 和 C++ 版本了,为什么还要添加另一种语言?”
我将在这篇文章中为你解答这个问题,并概述为什么你需要留意 Swift
版的TensorFlow 以及 Swift
语言本身。我不打算在文本中提供详细的解释,但是我会提供大量链接,如果你对这个话题感兴趣的话,你可以深入挖掘。
1. Swift 拥有强力的后援
Swift
是由 Chris Lattner 在苹果工作时创建的。目前,Chris Lattner 在 Google Brain 工作 —— 这是世界上最先进的人工智能研究团队之一。 Swift
语言的创始人如今在研究深度学习的实验室工作,这个事实说明这是一个重大的项目。
前段时间,Google 意识到尽管 Python 是一种优秀的语言,但它仍有许多难以克服的局限性。TensorFlow 需要一种新语言,经过长时间的考虑后,这个重任落到了 Swift 肩上。我不打算对此做详细的介绍,但是你可以自行阅读这篇文档,文中描述了Python的缺点,有关其他语言的考量,以及最终选中了 Swift
的经过。
2. Swift 版的 TensorFlow 不仅仅是一个代码库
Swift
版的 TensorFlow 不仅仅是另一种语言的 TensorFlow。
从本质上来说,它是 Swift
语言的另一个分支(就像在 git 上创建 branch 一样)。这意味着 Swift
版的 TensorFlow 并不是一个代码库, 它本身就是一种语言,它内置的功能支持 TensorFlow 所需的所有功能。
例如,Swift
版的 TensorFlow 拥有非常强大的自动微分系统,这是深度学习计算梯度所需的基础。相比之下,Python 的自动微分系统不是语言的核心组成部分。有一些最初为 Swift
版的 TensorFlow 开发的功能后来被集成到了Swift
语言本身中。
3. Swift 非常快
当第一次得知 Swift
的运行速度与 C 代码一样快时,我感到非常惊讶。我知道 C 经过了高度优化,且可以实现非常高的速度,但这需要以微内存管理为代价,因此 C 不能保证内存的安全。此外,C 不是一种非常容易学习的语言。
如今,Swift
的数值计算速度与 C 一样快,还没有内存安全的问题,而且更容易学习。Swift
背后的 LLVM 编译器功能非常强大,并且拥有非常高效的优化功能,可以确保代码快速地运行。
4. 你可以在 Swift 中使用 Python、C 和 C++ 代码
由于 Swift
的机器学习才刚刚开始,因此 Swift
的机器学习库并不多。然而,你无需担心,因为 Swift
可以很好地与 Python 语言结合。你只需在 Swift
中导入 Python 库,就可以放心使用了。
与此同时,你还可以将 C 和 C++ 库导入到 Swift 中(对于 C++,你需要确保头文件是用纯 C 编写的,没有 C++ 的特性)。
总而言之,如果你需要的某个特定的功能尚未在 Swift
中实现,则可以导入相应的 Python、C 或 C++ 包。这一点简直逆天了!
5. Swift 还可以深入底层
如果你曾经使用过 TensorFlow,那么很可能是通过 Python 包来实现的。在底层,Python 版的 TensorFlow 是用 C 实现的。所以在 TensorFlow 中调用函数时,你一定会在某个层面上遇到一些 C 代码。这意味着在你查看源代码的时候,会遇到一些限制。例如,你想看看卷积的实现方式,却发现看不到 Python 代码,因为它是用 C 实现的。
然而,在 Swift
中情况有所不同。Chris Lattner 称 Swift 是 “LLVM [汇编语言]的语法糖”。这意味着从本质上讲,Swift
非常靠近硬件,Swift
与硬件之间没有其他用 C 写的附加层。这也意味着 Swift
代码非常快,如上所述。
因此,开发人员能够检查所有的代码,无论是高层的代码还是非常底层的代码,都无需深入 C。
6. 将来的发展
Swift
只是 Google 深度学习创新的一部分。还有另一个非常密切相关的组件:MLIR(Multi-Level Intermediate Representation,多层中间表示)。MLIR 将会成为 Google统一的编译基础设施,它允许你用 Swift
(或任何其他支持的语言)编写代码,并编译成任何支持的硬件。
目前,有许多针对不同目标硬件的编译器,但 MLIR 将改变这种局面,它不仅可以支持代码的可重用性,而且还允许你编写编译器自定义的底层组件。同时,它还允许研究人员应用机器学习来优化低级算法:
虽然 MLIR 是机器学习的编译器,但我们也看到它可以将机器学习的技术应用到编译器本身!这一点非常重要,因为工程师开发数值计算库的速度跟不上机器学习模型或硬件多元化的速度。
想象一下,我们能够使用深度学习来优化处理数据的底层内存切片算法(类似于 Halide 正在努力完成的任务)。而且,这只是一个开端,还有其他机器学习的创造性应用也可以在编译器中使用!
总结
如果你准备研究深度学习,个人建议你开始学习 Swift
语言。与 Python 相比,Swift
拥有多方面的优势。Google 正在大力投资,让 Swift
成为 TensorFlow 多层基础设施的关键组成部分,而且 Swift
很可能成为深度学习的语言。 因此,先下手为强,尽早开始学习Swift
吧。