Yann LeCun曾說(shuō),深度學(xué)習(xí)可能需要一種新的編程語(yǔ)言了。現(xiàn)在Swift來(lái)了!沒(méi)錯(cuò),這就是讓萬(wàn)千飽受Python缺點(diǎn)困擾的開(kāi)發(fā)者興奮不已的深度學(xué)習(xí)語(yǔ)言。本文便將帶領(lǐng)讀者詳細(xì)了解一下為什么Swift將成為深度學(xué)習(xí)的下一大熱門(mén)。
當(dāng)你聽(tīng)到Swift的時(shí)候,第一反應(yīng)肯定會(huì)想到iOS或者M(jìn)acOS的應(yīng)用程序開(kāi)發(fā)。當(dāng)你玩兒過(guò)深度學(xué)習(xí),也肯定聽(tīng)說(shuō)過(guò)Swift for Tensorflow(縮寫(xiě)為S4TF)。
而后你就會(huì)產(chǎn)生困惑:“為什么谷歌要為Swift創(chuàng)建TensorFlow版本呢?已經(jīng)有了Python和C++版本了,為什么還要添加另一種語(yǔ)言?”
在這篇文章中,作者將嘗試回答這些問(wèn)題,并告訴你為什么要認(rèn)真遵循S4TF以及Swift語(yǔ)言本身。 本文的目的不是提供非常詳細(xì)的解釋?zhuān)翘峁┫挛拇罅挎溄觾?nèi)容的一般概述,方便讀者深入挖掘。
Swift for Tensorflow官方地址:
https://www.tensorflow.org/swift/
Swift“背景硬”:背后有強(qiáng)大的支持
Swift是Chris Lattner在蘋(píng)果公司工作時(shí)創(chuàng)建的。Swift語(yǔ)言的創(chuàng)造者現(xiàn)在在實(shí)驗(yàn)室從事深度學(xué)習(xí)的研究,這一事實(shí)應(yīng)該告訴你,這就是一個(gè)嚴(yán)肅的項(xiàng)目。
前段時(shí)間,谷歌的員工意識(shí)到一件事情:盡管Python是一種優(yōu)秀的語(yǔ)言,但它有許多難以克服的局限性——TensorFlow需要一種新的語(yǔ)言。
經(jīng)過(guò)長(zhǎng)時(shí)間的考慮,Swift被選為候選語(yǔ)言。作者沒(méi)有在本文詳細(xì)介紹,但下方鏈接中的文檔描述了Python的缺點(diǎn)、在候選語(yǔ)言篩選過(guò)程中考慮哪些語(yǔ)言,以及最終為何Swift當(dāng)選。
https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md
對(duì)于TensorFlow來(lái)說(shuō),Swift不僅僅是一個(gè)庫(kù)
Swift對(duì)于TensorFlow不僅僅是另一種語(yǔ)言的TF。
它本質(zhì)上是Swift語(yǔ)言本身的另一個(gè)分支(在git術(shù)語(yǔ)中)。這意味著S4TF不是一個(gè)庫(kù);它本身就是一種語(yǔ)言,內(nèi)置了支持TensorFlow所需的所有功能的特性。
例如,S4TF中有非常強(qiáng)大的自動(dòng)微分系統(tǒng),這是計(jì)算梯度所需要的深度學(xué)習(xí)的基礎(chǔ)之一。對(duì)比一下Python,在Python中,自動(dòng)微分不是語(yǔ)言的核心組件。最初作為S4TF的一部分開(kāi)發(fā)的功能后來(lái)被集成到Swift語(yǔ)言本身。
Git地址:
https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is
有關(guān)自動(dòng)微分:
https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.md
Swift速度極快
當(dāng)作者第一次知道Swift的運(yùn)行速度和C代碼一樣快時(shí),作者表示非常驚訝。
我們知道C語(yǔ)言是高度優(yōu)化的,可以達(dá)到非常高的速度,但這是以微管理內(nèi)存為代價(jià)的,這導(dǎo)致C語(yǔ)言不是內(nèi)存安全的。此外,C語(yǔ)言并不是一門(mén)很容易學(xué)的語(yǔ)言。
現(xiàn)在,Swift在數(shù)值計(jì)算中運(yùn)行得和C一樣快,而且它沒(méi)有內(nèi)存安全問(wèn)題,而且它更容易學(xué)習(xí)。Swift背后的LLVM編譯器非常強(qiáng)大,并且有非常高效的優(yōu)化,這就確保了代碼運(yùn)行的速度。
Swift為何和C一樣快:
https://www.fast.ai/2019/01/10/swift-numerics/
在Swift中可以使用Python,C和C ++代碼
由于適用于機(jī)器學(xué)習(xí)的Swift還處于早期階段,這意味著適合Swift的機(jī)器學(xué)習(xí)庫(kù)并不多。
但不必過(guò)于擔(dān)心這一點(diǎn),因?yàn)镾wift具有驚人的Python互操作性。
只需導(dǎo)入Swift中的任何Python庫(kù),它就能正常工作。類(lèi)似地,可以將C和C++的庫(kù)導(dǎo)入Swift(對(duì)于C++,需要確保頭文件是用純C編寫(xiě)的,沒(méi)有C++特性)。
有關(guān)Python互操作性:
https://github.com/tensorflow/swift/blob/master/docs/PythonInteroperability.md
導(dǎo)入C和C++庫(kù):
https://oleb.net/blog/2017/12/importing-c-library-into-swift/
總而言之,如果需要特定功能,但尚未在Swift中實(shí)現(xiàn),則可以導(dǎo)入相應(yīng)的Python,C或C ++包。
Swift可以在非常底層的地方運(yùn)行
如果你曾經(jīng)使用過(guò)TensorFlow,那么通常情況下可能是通過(guò)Python包完成的。
在底層,Python版本的TensorFlow庫(kù)底層有C代碼。所以當(dāng)你調(diào)用TensorFlow中的任何函數(shù)時(shí),在某種程度上你會(huì)碰到一些C代碼。
這意味著檢查源代碼的速度是有限的。例如,如果你想了解卷積是如何實(shí)現(xiàn)的,你無(wú)法看到Python代碼,因?yàn)樗窃贑語(yǔ)言中實(shí)現(xiàn)的。
在Swift中,情況就不同了。Chris Lattner稱(chēng)Swift是“LLVM(匯編語(yǔ)言)的語(yǔ)法糖”。
從本質(zhì)上說(shuō),Swift非常接近硬件,而且在硬件之間沒(méi)有其他用C編寫(xiě)的代碼層。這也意味著Swift代碼運(yùn)行速度非常快。這就使得開(kāi)發(fā)人員能夠從高到低,任何層次都可以開(kāi)始檢查代碼,而無(wú)需使用C。
有關(guān)“LLVM(匯編語(yǔ)言)的語(yǔ)法糖”:
https://www.fast.ai/2019/03/06/fastai-swift/
接下來(lái)的一步
Swift只是谷歌深度學(xué)習(xí)創(chuàng)新的一部分。還有一個(gè)非常相關(guān)的組件:MLIR,代表多級(jí)中間表示。
MLIR將是谷歌統(tǒng)一的編譯器基礎(chǔ)設(shè)施,允許用Swift(或任何其他受支持的語(yǔ)言)編寫(xiě)代碼,并將其編譯到任何受支持的硬件。
目前,針對(duì)不同的目標(biāo)硬件有大量的編譯器,但是MLIR將改變這一點(diǎn),不僅允許代碼重用,還允許編寫(xiě)定制的編譯器底層組件。它還將允許研究人員應(yīng)用機(jī)器學(xué)習(xí)來(lái)優(yōu)化底層算法:
雖然MLIR充當(dāng)ML的編譯器,但我們也看到它可以在編譯器中使用機(jī)器學(xué)習(xí)技術(shù)!一點(diǎn)尤其重要,因?yàn)殚_(kāi)發(fā)數(shù)值庫(kù)的工程師的擴(kuò)展速度趕不上ML模型或硬件的多樣化。
想象一下,如果我們能夠使用深度學(xué)習(xí)來(lái)幫助優(yōu)化數(shù)據(jù)的低級(jí)內(nèi)存分塊算法(類(lèi)似于Halide試圖完成的任務(wù))會(huì)怎么樣。
有關(guān)MLIR:
https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d
有關(guān)Halide:
https://www.youtube.com/watch?v=3uiEyEKji0M
總結(jié)
如果你對(duì)深入學(xué)習(xí)感興趣,那么Swift是一門(mén)你應(yīng)該開(kāi)始學(xué)習(xí)的語(yǔ)言。
與Python相比,它有許多優(yōu)勢(shì)。谷歌正在大力投資,使Swift成為其TensorFlow ML基礎(chǔ)設(shè)施的一個(gè)關(guān)鍵組件,而且很有可能Swift將成為深度學(xué)習(xí)的語(yǔ)言。
所以,早點(diǎn)學(xué)習(xí)Swift總不會(huì)有錯(cuò)的。
-
SWIFT
+關(guān)注
關(guān)注
0文章
112瀏覽量
23788 -
python
+關(guān)注
關(guān)注
56文章
4782瀏覽量
84456 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5493瀏覽量
120979
原文標(biāo)題:為什么說(shuō)Swift將接任Python成為深度學(xué)習(xí)下一任“掌門(mén)”?
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論