如果你喜歡編程,當(dāng)你聽到Swift,你可能會(huì)想到iOS或MacOS的應(yīng)用程序開發(fā)。如果你正在進(jìn)行深度學(xué)習(xí),那么你一定聽說過Swift for Tensorflow(縮寫為S4TF)。然后,你可以問自己:“為什么谷歌要為Swift創(chuàng)建一個(gè)TensorFlow版本?”Python和c++已經(jīng)有了版本;為什么要添加另一種語(yǔ)言?在這篇文章中,我將試著回答這個(gè)問題,并概述為什么你應(yīng)該認(rèn)真遵循S4TF以及Swift語(yǔ)言本身的原因。這篇文章的目的不是給出非常詳細(xì)的解釋,而是提供一個(gè)總體概述和大量的鏈接,這樣,如果您感興趣,就可以進(jìn)行更深入的研究。
Swift背后有強(qiáng)大的支持
Swift是Chris Lattner在蘋果工作時(shí)創(chuàng)造的。現(xiàn)在,Chris Lattner就職于谷歌Brain,世界上最好的人工Max Pechyonkin之一,5月27日·5分鐘閱讀智能研究團(tuán)隊(duì)。事實(shí)上,Swift語(yǔ)言的創(chuàng)造者現(xiàn)在在實(shí)驗(yàn)室從事深度學(xué)習(xí)的研究來告訴你,這是一個(gè)嚴(yán)肅的項(xiàng)目。
不久前,谷歌的人意識(shí)到,盡管Python是一種優(yōu)秀的語(yǔ)言,但是它有許多難以克服的限制。TensorFlow需要一種新的語(yǔ)言,經(jīng)過長(zhǎng)時(shí)間的考慮,Swift被選為候選人。我不會(huì)在這里詳細(xì)介紹,但是有一個(gè)文檔描述了Python的缺點(diǎn),以及考慮了哪些其他語(yǔ)言,以及最終如何將其縮小到Swift。
不僅僅是一個(gè)庫(kù)
Swift對(duì)于TensorFlow不僅僅是另一種語(yǔ)言的TF。它本質(zhì)上是Swift語(yǔ)言本身的另一個(gè)分支(在git的意義上)。這意味著S4TF不是一個(gè)庫(kù);它本身是一種語(yǔ)言,內(nèi)置了支持TensorFlow所需的所有功能的特性。例如,S4TF中有一個(gè)非常強(qiáng)大的自動(dòng)微分系統(tǒng),這是計(jì)算梯度所需要的深度學(xué)習(xí)的基礎(chǔ)之一。對(duì)比一下Python,在Python中,自動(dòng)區(qū)分不是語(yǔ)言的核心組件。最初作為S4TF的一部分開發(fā)的一些功能后來被集成到Swift語(yǔ)言本身。
Swift很快
當(dāng)我第一次知道Swift的運(yùn)行速度和C代碼一樣快時(shí),我很驚訝。我知道C是高度優(yōu)化的,可以達(dá)到非常高的速度,但這是以微管理內(nèi)存為代價(jià)的,這導(dǎo)致C的內(nèi)存不安全)。此外,C語(yǔ)言不是一門很容易學(xué)的語(yǔ)言。
現(xiàn)在,Swift在數(shù)值計(jì)算中運(yùn)行得和C一樣快,而且它沒有內(nèi)存安全問題,而且它更容易學(xué)習(xí)。Swift背后的LLVM編譯器非常強(qiáng)大,并且有非常高效的優(yōu)化,這將確保您的代碼運(yùn)行得非常快。
在SWIFT中可以使用多種代碼
因?yàn)?a href="http://www.nxhydt.com/v/tag/557/" target="_blank">機(jī)器學(xué)習(xí)的Swift還處于非常早期的階段,這意味著適合Swift的機(jī)器學(xué)習(xí)庫(kù)并不多。不必?fù)?dān)心,因?yàn)镾wift具有驚人的Python互操作性。只需導(dǎo)入Swift中的任何Python庫(kù),它就能正常工作。
類似地,您可以將C和c++庫(kù)導(dǎo)入到Swift中(對(duì)于c++,您需要確保頭文件是用純C編寫的,而沒有c++特性)。總之,如果您需要特定的功能,但它還沒有在Swift中實(shí)現(xiàn),您可以導(dǎo)入相應(yīng)的Python、C或c++包。令人印象深刻的!
SWIFT可以降到很低的水平
如果您曾經(jīng)使用過TensorFlow,那么很可能是通過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稱Swift是“LLVM(匯編語(yǔ)言)的語(yǔ)法糖”。這意味著從本質(zhì)上說,Swift非常接近硬件,而且在硬件之間沒有其他用C編寫的代碼層。這也意味著Swift代碼非常快,如上所述。這一切都使您作為開發(fā)人員能夠從一個(gè)非常高的級(jí)別檢查代碼到一個(gè)非常低的級(jí)別,而不需要進(jìn)入C語(yǔ)言。
接下來是什么
Swift只是谷歌深度學(xué)習(xí)創(chuàng)新的一部分。還有一個(gè)非常密切相關(guān)的組件:MLIR,它代表多級(jí)中間表示。MLIR將是谷歌統(tǒng)一的編譯器基礎(chǔ)設(shè)施,允許用Swift(或任何其他受支持的語(yǔ)言)編寫代碼,并將其編譯到任何受支持的硬件。目前,針對(duì)不同的目標(biāo)硬件有大量的編譯器,但是MLIR將改變這一點(diǎn),不僅允許代碼重用,還允許編寫定制的編譯器底層組件。它還將允許研究人員應(yīng)用機(jī)器學(xué)習(xí)來優(yōu)化底層算法:
雖然MLIR充當(dāng)ML的編譯器,但是我們也看到它支持在編譯器中使用機(jī)器學(xué)習(xí)技術(shù)!這一點(diǎn)尤其重要,因?yàn)殚_發(fā)數(shù)字庫(kù)的工程師的擴(kuò)展速度趕不上ML模型或硬件的多樣化。
想象一下能夠使用深度學(xué)習(xí)來幫助優(yōu)化數(shù)據(jù)的底層內(nèi)存平鋪算法(類似于Halide試圖完成的任務(wù))。而且,這僅僅是機(jī)器學(xué)習(xí)在編譯器中的開始和其他創(chuàng)造性應(yīng)用!
總結(jié)
如果你喜歡深度學(xué)習(xí),那么Swift是一門你應(yīng)該開始學(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ì)是你一個(gè)先發(fā)制人的優(yōu)勢(shì)。
-
谷歌
+關(guān)注
關(guān)注
27文章
6142瀏覽量
105109 -
SWIFT
+關(guān)注
關(guān)注
0文章
112瀏覽量
23788
原文標(biāo)題:為什么Swift會(huì)是深度學(xué)習(xí)的下一個(gè)大熱門?
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論