版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-深度學(xué)習(xí)框架

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

在開始深度學(xué)習(xí)項目之前,選擇一個合適的框架是非常重要的,因為選擇一個合適的框架能起到事半功倍的作用。研究者們使用各種不同的框架來達(dá)到他們的研究目的,側(cè)面印證出深度學(xué)習(xí)領(lǐng)域百花齊放。全世界最為流行的深度學(xué)習(xí)框架有Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。

概述在深度學(xué)習(xí)初始階段,每個深度學(xué)習(xí)研究者都需要寫大量的重復(fù)代碼。為了提高工作效率,這些研究者就將這些代碼寫成了一個框架放到網(wǎng)上讓所有研究者一起使用。接著,網(wǎng)上就出現(xiàn)了不同的框架。隨著時間的推移,最為好用的幾個框架被大量的人使用從而流行了起來。1全世界最為流行的深度學(xué)習(xí)框架有Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。

TensorflowGoogle 開源的Tensorflow是一款使用C++語言開發(fā)的開源數(shù)學(xué)計算軟件,使用數(shù)據(jù)流圖(Data Flow Graph)的形式進(jìn)行計算。圖中的節(jié)點代表數(shù)學(xué)運算,而圖中的線條表示多維數(shù)據(jù)數(shù)組(tensor)之間的交互。Tensorflow靈活的架構(gòu)可以部署在一個或多個CPU、GPU的臺式及服務(wù)器中,或者使用單一的API應(yīng)用在移動設(shè)備中。Tensorflow最初是由研究人員和Google Brain 團(tuán)隊針對機器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)進(jìn)行研究而開發(fā),開源之后幾乎可以在各個領(lǐng)域適用。

Tensorflow是全世界使用人數(shù)最多、社區(qū)最為龐大的一個框架,因為Google公司出品,所以維護(hù)與更新比較頻繁,并且有著Python和C++的接口,教程也非常完善,同時很多論文復(fù)現(xiàn)的第一個版本都是基于Tensorflow寫的,所以是深度學(xué)習(xí)界框架默認(rèn)的老大。1

Caffe和Tensorflow名氣一樣大的是深度學(xué)習(xí)框架Caffe,由加州大學(xué)伯克利的Phd賈揚清開發(fā),全稱是Convolutional Architecture for Fast Feature Embedding,是一個清晰而高效的開源深度學(xué)習(xí)框架,由伯克利視覺中心(Berkeley Vision and Learning Center,BVLC)進(jìn)行維護(hù)。

從它的名字就可以看出其對于卷積網(wǎng)絡(luò)的支持特別好,同時也是用C++寫的,提供的C++接口,也提供了matlab接口和python接口。

Caffe之所以流行,是因為之前很多ImageNet比賽里面使用的網(wǎng)絡(luò)都是用Caffe寫的,所以如果你想使用這些比賽的網(wǎng)絡(luò)模型就只能使用Caffe,這也就導(dǎo)致了很多人直接轉(zhuǎn)到Caffe這個框架下面。

Caffe的缺點是不夠靈活,同時內(nèi)存占用高,只提供了C++的接口,Caffe的升級版本Caffe2已經(jīng)開源了,修復(fù)了一些問題,同時工程水平得到了進(jìn)一步提高。1

TheanoTheano于2008年誕生于蒙特利爾理工學(xué)院,其派生出了大量的深度學(xué)習(xí)Python軟件包,最著名的包括Blocks和Keras。Theano的核心是一個數(shù)學(xué)表達(dá)式的編譯器,它知道如何獲取你的結(jié)構(gòu),并使之成為一個使用numpy、高效本地庫的高效代碼,如BLAS和本地代碼(C++)在CPU或GPU上盡可能快地運行。它是為深度學(xué)習(xí)中處理大型神經(jīng)網(wǎng)絡(luò)算法所需的計算而專門設(shè)計,是這類庫的首創(chuàng)之一(發(fā)展始于2007年),被認(rèn)為是深度學(xué)習(xí)研究和開發(fā)的行業(yè)標(biāo)準(zhǔn)。

但是開發(fā)Theano的研究人員大多去了Google參與Tensorflow的開發(fā),所以,某種程度來講Tensorflow就像Theano的孩子。1

MXNetMXNet的主要作者是李沐,最早就是幾個人抱著純粹對技術(shù)和開發(fā)的熱情做起來的,如今成了亞馬遜的官方框架,有著非常好的分布式支持,而且性能特別好,占用顯存低,同時其開發(fā)的語言接口不僅僅有Python和C++,還有R,Matlab,Scala,JavaScript,等等,可以說能夠滿足使用任何語言的人。

但是MXNet的缺點也很明顯,教程不夠完善,使用的人不多導(dǎo)致社區(qū)不大,同時每年很少有比賽和論文是基于MXNet實現(xiàn)的,這就使得MXNet的推廣力度和知名度不高。1

TorchTorch是一個有大量機器學(xué)習(xí)算法支持的科學(xué)計算框架,其誕生已有十年之久,但是真正起勢得益于Facebook開源了大量Torch的深度學(xué)習(xí)模塊和擴展。Torch的特點在于特別靈活,但是另一個特殊之處是采用了編程語言Lua,在深度學(xué)習(xí)大部分以Python為編程語言的大環(huán)境之下,一個以Lua為編程語言的框架有著更多的劣勢,這一項小眾的語言增加了學(xué)習(xí)使用Torch這個框架的成本。

PyTorchPyTorch的前身便是Torch,其底層和Torch框架一樣,但是使用Python重新寫了很多內(nèi)容,不僅更加靈活,支持動態(tài)圖,而且提供了Python接口。它是由Torch7團(tuán)隊開發(fā),是一個以Python優(yōu)先的深度學(xué)習(xí)框架,不僅能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò),這是很多主流深度學(xué)習(xí)框架比如Tensorflow等都不支持的。

PyTorch既可以看作加入了GPU支持的numpy,同時也可以看成一個擁有自動求導(dǎo)功能的強大的深度神經(jīng)網(wǎng)絡(luò)。除了Facebook外,它已經(jīng)被Twitter、CMU和Salesforce等機構(gòu)采用。1

應(yīng)用優(yōu)勢深度學(xué)習(xí)框架的出現(xiàn)降低了入門的門檻,你不需要從復(fù)雜的神經(jīng)網(wǎng)絡(luò)開始編代碼,你可以根據(jù)需要選擇已有的模型,通過訓(xùn)練得到模型參數(shù),你也可以在已有模型的基礎(chǔ)上增加自己的layer,或者是在頂端選擇自己需要的分類器和優(yōu)化算法(比如常用的梯度下降法)。當(dāng)然也正因如此,沒有什么框架是完美的,就像一套積木里可能沒有你需要的那一種積木,所以不同的框架適用的領(lǐng)域不完全一致。 總的來說深度學(xué)習(xí)框架提供了一些列的深度學(xué)習(xí)的組件(對于通用的算法,里面會有實現(xiàn)),當(dāng)需要使用新的算法的時候就需要用戶自己去定義,然后調(diào)用深度學(xué)習(xí)框架的函數(shù)接口使用用戶自定義的新算法。

本詞條內(nèi)容貢獻(xiàn)者為:

王沛 - 副教授、副研究員 - 中國科學(xué)院工程熱物理研究所