iOS 將來 Swift 也許會取代 Python !!!

賣姑娘的小火柴發表於2019-09-17
宣告:以下純屬個人觀點,如有不同意見,歡迎評論區探討。感謝檢閱
複製程式碼

  @All Developer,如果你準備研究深度學習,提高自己的能力,個人建議你開始學習 Swift 語言。(因為 Swift 是世界上最好的語言,開玩笑的。???)

在這裡插入圖片描述

  當程式設計師聽到 Swift 時,可能會聯想到蘋果,也可能會聯想到 iOS 或 MacOS 的應用開發。如果你準備研究深度學習,那麼你一定聽說過 Swift 版的 TensorFlow。你可能不禁想問:“為什麼 Google 會建立 Swift 版的 TensorFlow?現在已經有 Python 和 C++ 版本了,為什麼還要新增另一種語言?”

  我將在這篇文章中為你解答這個問題,並概述為什麼你需要留意 Swift 版的TensorFlow 以及 Swift 語言本身。我不打算在文字中提供詳細的解釋,但是我會提供大量連結,如果你對這個話題感興趣的話,你可以深入挖掘。

1. Swift 擁有強力的後援

  Swift 是由 Chris Lattner 在蘋果工作時建立的。目前,Chris Lattner 在 Google Brain 工作 —— 這是世界上最先進的人工智慧研究團隊之一。 Swift 語言的創始人如今在研究深度學習的實驗室工作,這個事實說明這是一個重大的專案。

  前段時間,Google 意識到儘管 Python 是一種優秀的語言,但它仍有許多難以克服的侷限性。TensorFlow 需要一種新語言,經過長時間的考慮後,這個重任落到了 Swift 肩上。我不打算對此做詳細的介紹,但是你可以自行閱讀這篇文件,文中描述了Python的缺點,有關其他語言的考量,以及最終選中了 Swift 的經過。

2. Swift 版的 TensorFlow 不僅僅是一個程式碼庫

  Swift 版的 TensorFlow 不僅僅是另一種語言的 TensorFlow。

  從本質上來說,它是 Swift 語言的另一個分支(就像在 git 上建立 branch 一樣)。這意味著 Swift 版的 TensorFlow 並不是一個程式碼庫, 它本身就是一種語言,它內建的功能支援 TensorFlow 所需的所有功能。

  例如,Swift 版的 TensorFlow 擁有非常強大的自動微分系統,這是深度學習計算梯度所需的基礎。相比之下,Python 的自動微分系統不是語言的核心組成部分。有一些最初為 Swift 版的 TensorFlow 開發的功能後來被整合到了Swift語言本身中。

3. Swift 非常快

  當第一次得知 Swift 的執行速度與 C 程式碼一樣快時,我感到非常驚訝。我知道 C 經過了高度優化,且可以實現非常高的速度,但這需要以微記憶體管理為代價,因此 C 不能保證記憶體的安全。此外,C 不是一種非常容易學習的語言。

  如今,Swift 的數值計算速度與 C 一樣快,還沒有記憶體安全的問題,而且更容易學習。Swift 背後的 LLVM 編譯器功能非常強大,並且擁有非常高效的優化功能,可以確保程式碼快速地執行。

4. 你可以在 Swift 中使用 Python、C 和 C++ 程式碼

  由於 Swift 的機器學習才剛剛開始,因此 Swift 的機器學習庫並不多。然而,你無需擔心,因為 Swift 可以很好地與 Python 語言結合。你只需在 Swift 中匯入 Python 庫,就可以放心使用了。   與此同時,你還可以將 C 和 C++ 庫匯入到 Swift 中(對於 C++,你需要確保標頭檔案是用純 C 編寫的,沒有 C++ 的特性)。

  總而言之,如果你需要的某個特定的功能尚未在 Swift 中實現,則可以匯入相應的 Python、C 或 C++ 包。這一點簡直逆天了!

5. Swift 還可以深入底層

  如果你曾經使用過 TensorFlow,那麼很可能是通過 Python 包來實現的。在底層,Python 版的 TensorFlow 是用 C 實現的。所以在 TensorFlow 中呼叫函式時,你一定會在某個層面上遇到一些 C 程式碼。這意味著在你檢視原始碼的時候,會遇到一些限制。例如,你想看看卷積的實現方式,卻發現看不到 Python 程式碼,因為它是用 C 實現的。

  然而,在 Swift 中情況有所不同。Chris Lattner 稱 Swift 是 “LLVM [組合語言]的語法糖”。這意味著從本質上講,Swift 非常靠近硬體,Swift 與硬體之間沒有其他用 C 寫的附加層。這也意味著 Swift 程式碼非常快,如上所述。

  因此,開發人員能夠檢查所有的程式碼,無論是高層的程式碼還是非常底層的程式碼,都無需深入 C。

6. 將來的發展

  Swift 只是 Google 深度學習創新的一部分。還有另一個非常密切相關的元件:MLIR(Multi-Level Intermediate Representation,多層中間表示)。MLIR 將會成為 Google統一的編譯基礎設施,它允許你用 Swift(或任何其他支援的語言)編寫程式碼,並編譯成任何支援的硬體。

  目前,有許多針對不同目標硬體的編譯器,但 MLIR 將改變這種局面,它不僅可以支援程式碼的可重用性,而且還允許你編寫編譯器自定義的底層元件。同時,它還允許研究人員應用機器學習來優化低階演算法:

  雖然 MLIR 是機器學習的編譯器,但我們也看到它可以將機器學習的技術應用到編譯器本身!這一點非常重要,因為工程師開發數值計算庫的速度跟不上機器學習模型或硬體多元化的速度。

  想象一下,我們能夠使用深度學習來優化處理資料的底層記憶體切片演算法(類似於 Halide 正在努力完成的任務)。而且,這只是一個開端,還有其他機器學習的創造性應用也可以在編譯器中使用!

總結

  如果你準備研究深度學習,個人建議你開始學習 Swift 語言。與 Python 相比,Swift 擁有多方面的優勢。Google 正在大力投資,讓 Swift 成為 TensorFlow 多層基礎設施的關鍵組成部分,而且 Swift 很可能成為深度學習的語言。 因此,先下手為強,儘早開始學習Swift 吧。

相關文章