要说哪门措辞能扛起深度学习的大旗,搁以前便是妥妥的 Python。
但深度学习“三巨子”之一 Yann LeCun 就断言,深度学习可能须要一种新的编程措辞了,Python 已成为“过去式”。
而 Swift 一经开源,就让浩瀚饱受 Python 性能和灵巧性困扰的开拓者愉快高呼:“终于可以抛弃 Python 了!
”TensorFlow 官网也曾发文吐槽过 Python 各类缺陷,如性能极差、运行时依赖包过多,不善于并发处理等等。
研究职员 Max Pechyonkin 日前撰文认为,就深度学习而言, Swift 会是下一个大热门。
为什么 Swfit 如此备受青睐?让我们看看 Max Pechyonkin 是怎么说的。

前 言

为什么说 Swift 会是深度进修的下一个大年夜热门?_措辞_深度 文字写作

如果你非常喜好编程,当你听到 Swift 时,你可能会遐想到 iOS 或 MacOS 的运用程序开拓。
如果你对深度学习感兴趣,那你一定听说过 Swift for TensorFlow(缩写为 S4TF)。
然后你就可以扪心自问:“为什么 Google 要为 Swift 创建 TensorFlow 版呢?不是已经有了 Python 版和 C++ 版吗?那为什么还要添加另一种版本呢?”在本文中,我将尽力回答这一问题,并概述为什么该当要负责遵照 S4TF 以及 Swift 措辞本身。
本文写作目的并非供应非常详细的阐明,而是供应包含大量链接的总体概述,这样如果你感兴趣的话,就可以点击这些链接进行更为深入的研究。

译注:Swift for TensorFlow 官网:https://www.tensorflow.org/swift/

Swift 背后有强大的支持

Swift 是 Chris Lattner 在 Apple 事情时创造的一门措辞。
Chris Lattner 目前已经跳槽到 Google Brain 事情,Google Brain 是环球最精良的人工智能研究团队之一。
Swift 措辞的创建者目前在实验室从事有关深度学习的研究,这一事实表明 Swift 是一个严明的项目。

不久前,Google 意识到,只管 Python 是一门精良的措辞,但它有许多难以战胜的局限性。
TensorFlow 须要一门新的措辞,经由永劫光的考虑,Swift 当选为候选者。
我并不会在本文详细阐述这些内容,不过有一个文档讲述了 Python 的缺陷,以及考虑过哪些其他措辞,并阐述了终极如何缩小范围到 Swift 的。

这个文档可参阅:https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md

Swift for TensorFlow 不仅仅是一个库

S4TF 不仅仅是另一种措辞版本的 TensorFlow。
从实质上来讲,它便是 Swift 措辞本身的另一个分支(从 Git 意义来说)。
这意味着 S4TF 并非一个库;它本身便是一门措辞,内置了支持 TensorFlow 所需的所有功能。
例如,S4TF 有一个非常强大的自动微分(automatic differentiation)系统,这是打算梯度所需的深度学习的根本之一。
比拟一下 Python,在 Python 中,自动微分并不是该措辞的核心组成部分。
最初作为 S4TF 的一部分开拓的一些功能,后来集成到 Swift 措辞本身中。

译注: S4TF 的 Git 地址:https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is有关 Swift 的自动微分的资料可参阅:https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.md

Swift 运行特殊快

当我第一次知道 Swift 的运行速率和 C 代码一样快的时候,我感到很惊异。
由于我知道 C 是经由高度优化过的,可以实现非常快的运行速率,但这因此微内存管理为代价,结果导致了 C 无法担保内存安全。

现在,Swift 在数值打算中的运行速率与 C 一样块,而且还不存在内存安全问题,还有,Swift 学习起来也随意马虎得多。
Swift 背后的 LLVM 编译器非常强大,具有非常高效的性能优化,可确保你的代码运行速率非常快。

译注:Swift 在数值打算中的运算速率与 C 不相上下,可参阅 fast.ai 发布的文章《Swift 的高性能数值编程:探索与思考》(《High Performance Numeric Programming with Swift: Explorations and Reflections》)网址如下:https://www.fast.ai/2019/01/10/swift-numerics/

你可以在 Swift 中利用 Python、C、C++ 代码

鉴于用于机器学习的 Swift 还处于非常早期的阶段,这意味着 Swift 的机器学习库并不多。
但你也无需太过担心这个问题,由于 Swift 具有惊人的 Python 互操作性。
你只需在 Swift 中导入任何 Python 库,它就可以正常事情。
类似地,你也可以将 C 和 C++ 库导入 Swift(对付 C++,你须要确保头文件是用普通的 C 措辞编写的,没有 C++ 特性)。

译注:Python 互操作性,请参阅:https://github.com/tensorflow/swift/blob/master/docs/PythonInteroperability.md如何将 C 和 C++ 库导入 Swift,可参阅文章《如何利用 Swift 包管理器将 C 库导入 Swift 》(《How to import a C library in Swift using the Swift Package Manager》),网址如下:https://oleb.net/blog/2017/12/importing-c-library-into-swift/

总之,如果你须要特定的功能,但尚未在 Swift 中实现的话,你可以导入相应的 Python、C 或 C++ 包。
这点令人印象深刻!

Swift 可以在非常低的底层中运行

如果你曾经利用过 TensorFlow,那么很有可能是通过 Python 包来实现的。
在底层,Python 版的 TensorFlow 库下面有 C 代码。
因此,当你调用 TensorFlow 中的任何函数时,在某种程度上你会碰到一些 C 代码。
这意味着,当你考试测验检讨源代码时,存在一个下限。
例如,如果你想知道卷积是如何实现的,但你却无法看到干系的 Python 代码,由于它是用 C 实现的。

如果是 Swift,那情形就不一样了。
Chris Lattner 称 Swfit 是“LLVM『汇编措辞』的语法糖”。
也便是说,从实质上来讲,Swift 非常靠近硬件,而且在这两者之间没有用 C 措辞编写的其他代码层。
这就意味着,Swift 代码运行速率如上所述非常快。
这统统使得开拓职员能够从非常高的层次开始检讨代码到非常低的层次,而无需利用 C。

译注:语法糖,syntactic sugar,也译为糖衣语法,是由英国打算机科学家 Peter John Landin 发明的一个术语,指打算机措辞中添加的某种语法,这种语法对措辞的功能并没有影响,但是更方便进程员利用。
常日来说利用语法糖能够增加进程的可读性,从而减少进程代码出错的机会。
LLVM 的语法糖可参阅文章《fast.ai 拥抱 Swift 进行深度学习》(《fast.ai Embracing Swift for Deep Learning》),网址如下:https://www.fast.ai/2019/03/06/fastai-swift/

下一步的方向

Swift 只是 Google 深度学习创新的一部分,还有一个非常密切干系的组成部分:MLIR,表示多级中间措辞。
MLIR 将是 Google 的统一编译器根本,许可用 Swift(或任何其他支持的措辞)编写代码,并将其编译到任何支持的硬件。
目前,有许多针对不同目标硬件的编译器,但 MLIR 将改变这一点,不仅许可代码重用,而且还许可编写编译器的自定义底层组件。
它还许可研究职员运用机器学习来优化低级算法。

译注:中间措辞(英语:Intermediate language),在打算机科学中,是指一种运用于抽象机器(abstract machine)的编程措辞,它设计的目的,是用来帮助我们剖析打算机进程。
这个术语源自于编译器,在编译器将源代码编译为目标代码的过程中,会先将源代码转换为一个或多个的中间表述,以方便编译器进行最佳化,并产生出目的机器的机器措辞。
有关 MLIR 更多信息可参阅《MLIR:一种新的中间措辞和编译框架》(《MLIR: A new intermediate representation and compiler framework》),网址如下:https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d虽然 MLIR 充当了机器学习的编译器,但我们也看到了它支持在编译器中利用机器学习技能!
这一点尤为主要,由于开拓数值库的工程师的扩展速率赶不上机器学习模型,也不及硬件的多样化。

想象一下,如果我们能够利用深度学习来帮助优化数据的低级内存分块算法(memory tiling algorithms)(类似于 Halide 试图完成的任务)会怎么样。
此外,这只是机器学习在编译器中的开始,还有其他创造性运用等待我们去开拓!

译注:有关 Halide 更多信息可不雅观看视频《利用 Halide 进行快速图像处理》(《Fast Image Processing using Halide》),视频网址如下:https://www.youtube.com/watch?v=3uiEyEKji0M

结 语

如果你对深度学习很感兴趣,那么 Swift 便是一门你该当开始学习的措辞。
和 Python 比较,Swift 有很多上风。
Google 正大力投资,使 Swift 成为其 TensorFlow 机器学习根本的关键组成部分,而 Swift 有望成为深度学习的措辞。
因此,现在就开始学 Swift 吧,及早加入,你将得到先发上风。

推举阅读

《阿里线下智能方案进化史》

《阿里妈妈:电商预估模型的发展与寻衅》

《推举系统工程师必看:Embedding 技能在深度学习 CTR 模型中的运用》

......

本专题收录了深度学习话题下的 249 篇文章,查看理解更多