為什麼說Swift將接任Python成為深度學習下一任“掌門”?

dicksonjyl560101發表於2019-05-29

https://mp.weixin.qq.com/s/nOvJIum4SHzyualoQ0eUzA


Yann LeCun曾說,深度學習可能需要一種新的程式語言了。現在 Swift 來了!沒錯,這就是讓萬千飽受Python缺點困擾的開發者興奮不已的深度學習語言。本文便將帶領讀者詳細瞭解一下為什麼 Swift 將成為深度學習的下一大熱門。


當你聽到Swift的時候,第一反應肯定會想到iOS或者MacOS的應用程式開發。當你玩兒過深度學習,也肯定聽說過Swift for Tensorflow(縮寫為S4TF)。


而後你就會產生困惑:“為什麼谷歌要為Swift建立TensorFlow版本呢?已經有了Python和C++版本了,為什麼還要新增另一種語言?”


在這篇文章中,作者將嘗試回答這些問題,並告訴你為什麼要認真遵循S4TF以及Swift語言本身。 本文的目的不是提供非常詳細的解釋,而是提供下文大量連結內容的一般概述,方便讀者深入挖掘。


Swift for Tensorflow官方地址:


Swift“背景硬”:背後有強大的支援


Swift是Chris Lattner在蘋果公司工作時建立的。 Swift語言的創造者現在在實驗室從事深度學習的研究,這一事實應該告訴你,這就是一個嚴肅的專案。


前段時間,谷歌的員工意識到一件事情:儘管Python是一種優秀的語言,但它有許多難以克服的侷限性—— TensorFlow需要一種新的語言


經過長時間的考慮,Swift被選為候選語言。作者沒有在本文詳細介紹,但下方連結中的文件描述了Python的缺點、在候選語言篩選過程中考慮哪些語言,以及最終為何Swift當選。



對於TensorFlow來說,Swift不僅僅是一個庫


Swift對於TensorFlow不僅僅是另一種語言的TF。


它本質上是Swift語言本身的另一個分支(在git術語中)。這意味著S4TF不是一個庫;它本身就是一種語言,內建了支援TensorFlow所需的所有功能的特性。


例如,S4TF中有非常強大的自動微分系統,這是計算梯度所需要的深度學習的基礎之一。對比一下Python,在Python中,自動微分不是語言的核心元件。最初作為S4TF的一部分開發的功能後來被整合到Swift語言本身。


Git地址:

有關自動微分:


Swift速度極快


當作者第一次知道Swift的執行速度和C程式碼一樣快時,作者表示非常驚訝。


我們知道C語言是高度最佳化的,可以達到非常高的速度,但這是以微管理記憶體為代價的,這導致C語言不是記憶體安全的。此外,C語言並不是一門很容易學的語言。


現在,Swift在數值計算中執行得和C一樣快,而且它沒有記憶體安全問題,而且它更容易學習。Swift背後的LLVM編譯器非常強大,並且有非常高效的最佳化,這就確保了程式碼執行的速度。


Swift為何和C一樣快:


在Swift中可以使用Python,C和C ++程式碼


由於適用於機器學習的Swift還處於早期階段,這意味著適合Swift的機器學習庫並不多。


但不必過於擔心這一點,因為 Swift具有驚人的Python互操作性


只需匯入Swift中的任何Python庫,它就能正常工作。類似地,可以將C和C++的庫匯入Swift(對於C++,需要確保標頭檔案是用純C編寫的,沒有C++特性)。


有關Python互操作性:

匯入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(組合語言)的語法糖”:


接下來的一步


Swift只是谷歌深度學習創新的一部分。還有一個非常相關的元件:MLIR,代表多級中間表示。


MLIR將是谷歌統一的編譯器基礎設施,允許用Swift(或任何其他受支援的語言)編寫程式碼,並將其編譯到任何受支援的硬體。


目前,針對不同的目標硬體有大量的編譯器,但是MLIR將改變這一點,不僅允許程式碼重用,還允許編寫定製的編譯器底層元件。它還將允許研究人員應用機器學習來最佳化底層演算法:


雖然MLIR充當ML的編譯器,但我們也看到它可以在編譯器中使用機器學習技術! 一點尤其重要,因為開發數值庫的工程師的擴充套件速度趕不上ML模型或硬體的多樣化。


想象一下,如果我們能夠使用深度學習來幫助最佳化資料的低階記憶體分塊演算法(類似於Halide試圖完成的任務)會怎麼樣。


有關MLIR:

有關Halide:


總結


如果你對深入學習感興趣,那麼Swift是一門你應該開始學習的語言。


與Python相比,它有許多優勢。谷歌正在大力投資,使Swift成為其TensorFlow ML基礎設施的一個關鍵元件,而且很有可能Swift將成為深度學習的語言。


所以,早點學習Swift總不會有錯的。


原文連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2646048/,如需轉載,請註明出處,否則將追究法律責任。

相關文章