为什么说Swift将接任Python成为深度学习下一任“掌门”?

百家 作者:新智元 2019-05-29 08:18:49



  新智元报道  

来源:pechyonkin.me

编辑:金磊

【新智元导读】Yann LeCun曾说,深度学习可能需要一种新的编程语言了。现在Swift来了!没错,这就是让万千饱受Python缺点困扰的开发者兴奋不已的深度学习语言。本文便将带领读者详细了解一下为什么Swift将成为深度学习的下一大热门。


当你听到Swift的时候,第一反应肯定会想到iOS或者MacOS的应用程序开发。当你玩儿过深度学习,也肯定听说过Swift for Tensorflow(缩写为S4TF)。


而后你就会产生困惑:“为什么谷歌要为Swift创建TensorFlow版本呢?已经有了Python和C++版本了,为什么还要添加另一种语言?”


在这篇文章中,作者将尝试回答这些问题,并告诉你为什么要认真遵循S4TF以及Swift语言本身。 本文的目的不是提供非常详细的解释,而是提供下文大量链接内容的一般概述,方便读者深入挖掘。


Swift for Tensorflow官方地址:

https://www.tensorflow.org/swift/


Swift“背景硬”:背后有强大的支持


Swift是Chris Lattner在苹果公司工作时创建的。 Swift语言的创造者现在在实验室从事深度学习的研究,这一事实应该告诉你,这就是一个严肃的项目。


前段时间,谷歌的员工意识到一件事情:尽管Python是一种优秀的语言,但它有许多难以克服的局限性——TensorFlow需要一种新的语言


经过长时间的考虑,Swift被选为候选语言。作者没有在本文详细介绍,但下方链接中的文档描述了Python的缺点、在候选语言筛选过程中考虑哪些语言,以及最终为何Swift当选。


https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md


对于TensorFlow来说,Swift不仅仅是一个库


Swift对于TensorFlow不仅仅是另一种语言的TF。


它本质上是Swift语言本身的另一个分支(在git术语中)。这意味着S4TF不是一个库;它本身就是一种语言,内置了支持TensorFlow所需的所有功能的特性。


例如,S4TF中有非常强大的自动微分系统,这是计算梯度所需要的深度学习的基础之一。对比一下Python,在Python中,自动微分不是语言的核心组件。最初作为S4TF的一部分开发的功能后来被集成到Swift语言本身。


Git地址:

https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is

有关自动微分:

https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.md


Swift速度极快


当作者第一次知道Swift的运行速度和C代码一样快时,作者表示非常惊讶。


我们知道C语言是高度优化的,可以达到非常高的速度,但这是以微管理内存为代价的,这导致C语言不是内存安全的。此外,C语言并不是一门很容易学的语言。


现在,Swift在数值计算中运行得和C一样快,而且它没有内存安全问题,而且它更容易学习。Swift背后的LLVM编译器非常强大,并且有非常高效的优化,这就确保了代码运行的速度。


Swift为何和C一样快:

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++库:

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称Swift是“LLVM(汇编语言)的语法糖”。


从本质上说,Swift非常接近硬件,而且在硬件之间没有其他用C编写的代码层。这也意味着Swift代码运行速度非常快。这就使得开发人员能够从高到低,任何层次都可以开始检查代码,而无需使用C。


有关“LLVM(汇编语言)的语法糖”:

https://www.fast.ai/2019/03/06/fastai-swift/


接下来的一步


Swift只是谷歌深度学习创新的一部分。还有一个非常相关的组件:MLIR,代表多级中间表示。


MLIR将是谷歌统一的编译器基础设施,允许用Swift(或任何其他受支持的语言)编写代码,并将其编译到任何受支持的硬件。


目前,针对不同的目标硬件有大量的编译器,但是MLIR将改变这一点,不仅允许代码重用,还允许编写定制的编译器底层组件。它还将允许研究人员应用机器学习来优化底层算法:


虽然MLIR充当ML的编译器,但我们也看到它可以在编译器中使用机器学习技术! 一点尤其重要,因为开发数值库的工程师的扩展速度赶不上ML模型或硬件的多样化。


想象一下,如果我们能够使用深度学习来帮助优化数据的低级内存分块算法(类似于Halide试图完成的任务)会怎么样。


有关MLIR:

https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d

有关Halide:

https://www.youtube.com/watch?v=3uiEyEKji0M


总结


如果你对深入学习感兴趣,那么Swift是一门你应该开始学习的语言。


与Python相比,它有许多优势。谷歌正在大力投资,使Swift成为其TensorFlow ML基础设施的一个关键组件,而且很有可能Swift将成为深度学习的语言。


所以,早点学习Swift总不会有错的。


原文链接:

https://pechyonkin.me/portfolio/why-swift-for-tensorflow/


新智元春季招聘开启,一起弄潮 AI 之巅!

岗位详情请戳:


【加入社群】


新智元 AI 技术 + 产业社群招募中,欢迎对 AI 技术 + 产业落地感兴趣的同学,加小助手微信号:aiera2015_2   入群;通过审核后我们将邀请进群,加入社群后务必修改群备注(姓名 - 公司 - 职位;专业群审核较严,敬请谅解)。

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接
百度热搜榜
排名 热点 搜索指数