為什麼說 Swift 將接任 Python 成為深度學習下一任 「掌門」?
【新智元導讀】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 地址:
What a Branch Is有關自動微分:
https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.mdSwift 速度極快
當作者第一次知道 Swift 的運行速度和 C 代碼一樣快時,作者表示非常驚訝。
我們知道 C 語言是高度優化的,可以達到非常高的速度,但這是以微管理內存為代價的,這導致 C 語言不是內存安全的。此外,C 語言並不是一門很容易學的語言。
現在,Swift 在數值計算中運行得和 C 一樣快,而且它沒有內存安全問題,而且它更容易學習。Swift 背後的 LLVM 編譯器非常強大,並且有非常高效的優化,這就確保了代碼運行的速度。
Swift 為何和 C 一樣快:
High Performance Numeric Programming with Swift: Explorations and Reflections在 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++ 庫:
How to import a C library in Swift using the Swift Package Manager總而言之,如果需要特定功能,但尚未在 Swift 中實現,則可以導入相應的 Python,C 或 C ++ 包。
Swift 可以在非常底層的地方運行
如果你曾經使用過 TensorFlow,那麼通常情況下可能是通過 Python 包完成的。
在底層,Python 版本的 TensorFlow 庫底層有 C 代碼。所以當你調用 TensorFlow 中的任何函數時,在某種程度上你會碰到一些 C 代碼。
這意味著檢查源代碼的速度是有限的。例如,如果你想了解卷積是如何實現的,你無法看到 Python 代碼,因為它是在 C 語言中實現的。
在 Swift 中,情況就不同了。Chris Lattner 稱 Swift 是 「LLVM (彙編語言) 的語法糖」。
從本質上說,Swift 非常接近硬體,而且在硬體之間沒有其他用 C 編寫的代碼層。這也意味著 Swift 代碼運行速度非常快。這就使得開發人員能夠從高到低,任何層次都可以開始檢查代碼,而無需使用 C。
有關 「LLVM (彙編語言) 的語法糖」:
fast.ai Embracing Swift for Deep Learning接下來的一步
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 總不會有錯的。
原文鏈接:
Why Swift May Be the Next Big Thing in Deep Learning新智元 · AI_era
每日推送 AI 領域前沿學術解讀、AI 產業最新資訊
戳右上角【+ 關注】↗↗
喜歡請分享、點贊吧
推薦閱讀: