當前位置:
首頁 > 知識 > Python並不完美,Swift正在成長為深度學習語言

Python並不完美,Swift正在成長為深度學習語言

選自Pechyonkin.me

作者:Max Pechyonkin

機器之心編譯

參與:熊貓

「人生苦短,我用 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 語言本身的原因。本文的目的並非進行詳盡的解釋,而是要提供一般性的概述,文中也會帶有大量鏈接以幫助你更深度地了解。

Swift 背後有強有力的支持

Swift 是 Chris Lattner 在蘋果公司工作時創造的。現在,Chris Lattner 在谷歌大腦工作,而谷歌大腦是當今世界上最優秀的人工智慧團隊之一。Swift 語言的創造者現在正在一家研究深度學習的實驗室工作,這足以說明這個項目是嚴肅的。

一段時間前,谷歌的人意識到,即使 Python 語言非常出色,也仍然存在一些難以克服的局限性。TensorFlow 需要一種新語言。經過長時間的斟酌之後,Swift 成為了一個候選項。我這裡不會談及細節,但這裡有一份文檔描述了 Python 以及其它被考慮過的語言的缺陷,還會解釋為何最終將範圍縮小到了 Swift:https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md

Swift for TensorFlow 不只是一個軟體庫

Swift for TensorFlow 不只是另一種語言的 TensorFlow。它本質上是 Swift 語言本身的另一個分支。也就是說,S4TF 不只是一個軟體庫;它本身即是一門語言,其中內置了支持 TensorFlow 所需的所有功能。舉個例子,S4TF 自帶非常強大的自動微分系統,這是深度學習在計算梯度時所需的基礎功能之一。對比一下 Python——自動微分並非該語言的核心組件。S4TF 中某些新開發的功能之後也被整合進了 Swift 語言。

Swift 速度很快

在我剛得知 Swift 的運行速度和 C 語言代碼一樣快時,我震驚了。我知道 C 語言經過高度優化,能夠達到非常高的速度,但這需要對內存進行微管理(這讓 C 語言不能保證內存安全)。另外,C 語言也非常不容易學習。

現在,Swift 在數值運算方面與 C 語言一樣快,而且還沒有內存安全問題,學習難度也低得多。Swift 背後的 LLVM 非常強大,能夠進行非常高效的優化,這能確保你的代碼高速運行。

你可以在 Swift 中使用 Python、C 和 C 代碼

因為用於機器學習的 Swift 還處於非常早期的階段,所以目前針對 Swift 的機器學習庫還不多。但你也不用過於擔心這一點,因為 Swift 具備出色的 Python 解釋能力。你可以直接將任何 Python 庫導入 Swift 進行使用。類似地,你也可將 C 和 C 庫導入 Swift(對於 C ,你要確保頭文件是以 C 語言寫的,沒有 C 的特性)。

總的來說,如果你需要特定的功能,但 Swift 中尚未實現,那麼你可以導入對應的 Python、C 或 C 軟體包。很了不起!

Swift 可以做到非常低層

如果你用過 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 語言。

Swift 的未來發展

Swift 只是谷歌在深度學習領域的創新的一部分。另外還有一個非常相關的組件:MLIR:https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d。MLIR 全稱為 Multi-Level Intermediate Representation,即多級中間表示。MLIR 將會成為谷歌的統一編譯器基礎設施,讓開發者可以用 Swift(或其它任何支持的語言)寫代碼,然後將其編譯到任何支持的硬體。目前,針對不同的目標硬體有很多不同的編譯器,而 MLIR 將改變這種情況。這不僅能讓代碼實現復用,而且還支持開發者為該編譯器編寫定製的低層組件。它還允許研究者應用機器學習來優化低層演算法:

儘管 MLIR 是用作機器學習的編譯器,我們也看到它也能在編譯器內部實現機器學習技術的應用!這是尤其重要的,因為開發數值庫的工程師的增長速度趕不上機器學習模型或硬體多樣化的速度。

想像一下,如果能夠基於數據使用深度學習來幫助優化低層的內存分片演算法(這正是 Halide 語言想要實現的功能),會怎麼樣?有關 Halide 語言的更多信息:https://www.youtube.com/watch?v=3uiEyEKji0M。這還僅僅是個開始,機器學習在編譯器中更多有創意的應用正在路上!

總結

如果你在深度學習領域,那麼你可能就應該開始學習 Swift 了。它相比於 Python 有很多優勢。谷歌正在大力投入,想要將 Swift 打造成 TensorFlow 機器學習基礎設施的一大關鍵組成部分,而且 Swift 很有可能會變成一門深度學習語言。所以,早點參與到 Swift 的發展中能為你提供先發優勢。

進一步探索

fast.ai《擁抱用於深度學習的 Swift》:https://www.fast.ai/2019/03/06/fastai-swift/

了解 Swift for TensorFlow:https://towardsdatascience.com/machine-learning-with-swift-for-tensorflow-9167df128912

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

ICML2019| 強化學慣用於推薦系統,螞蟻金服提出生成對抗用戶模型
推理速度升5.1倍參數減少88%:谷歌提出新型卷積網路EfficientNet

TAG:機器之心 |