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