Peter Goldsborough寫的文章,我個(gè)人覺得很不錯(cuò),就全文翻譯過來,原文在此
摘要:深度學(xué)習(xí)是人工智能使用深度神經(jīng)網(wǎng)絡(luò)架構(gòu)的一個(gè)分支,它已經(jīng)在計(jì)算機(jī)視覺,語音識(shí)別,自然語言處理等領(lǐng)域取得顯著成果。2015年11月,谷歌開源其內(nèi)部使用多年的用來定義,訓(xùn)練和發(fā)布機(jī)器學(xué)習(xí)模型的軟件庫,Tensorflow。本文將會(huì)把Tensorflow放到現(xiàn)代深度學(xué)習(xí)理論和軟件實(shí)現(xiàn)的框架下評估。我們將討論Tensorflow的基本計(jì)算范式和分布式計(jì)算模型,它的編程接口還有可視化組件。然后我們再把它和其它深度學(xué)習(xí)庫,比如Theano,Torch或Caffe做定性和定量對比分析,最后對Tensorflow的已知的學(xué)術(shù)界和工業(yè)界使用實(shí)例作評估。
一,簡介
? ? ? ? 現(xiàn)代人工智能系統(tǒng)和機(jī)器學(xué)習(xí)算法在各個(gè)領(lǐng)域都取得了革命性的進(jìn)步。我們注意到在計(jì)算機(jī)視覺,語音識(shí)別和自然語言處理等技術(shù)領(lǐng)域的長足進(jìn)步。更進(jìn)一步,這些技術(shù)進(jìn)步已經(jīng)惠及我們個(gè)人生活的方方面面。個(gè)人定制數(shù)字化助理,電商平臺(tái)的推薦系統(tǒng),金融詐騙檢測,定制化網(wǎng)頁搜索和社交網(wǎng)絡(luò)訂閱以及新穎的地理位置經(jīng)濟(jì)學(xué)發(fā)現(xiàn)都得益于當(dāng)前機(jī)器學(xué)習(xí)算法。
? ? ? ? ?近幾年,一種稱之為深度學(xué)習(xí)的機(jī)器學(xué)習(xí)的分支已經(jīng)被證明特別有效。深度學(xué)習(xí)屬于表現(xiàn)學(xué)習(xí)算法類,它使用復(fù)雜神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),其中包含巨大數(shù)量的隱藏層。每個(gè)隱藏層包含對輸入數(shù)據(jù)進(jìn)行簡單但卻是非線性轉(zhuǎn)換。給定足夠這樣的轉(zhuǎn)換模塊可以構(gòu)成非常復(fù)雜的功能模型去實(shí)現(xiàn)分類,回歸,翻譯和很多其他的事情【1】。
? ? ? ? 值得注意的是,深度學(xué)習(xí)的崛起也就是近幾年的事情,這都得益于越來越多可用的大數(shù)據(jù)集可以作為訓(xùn)練樣本;得益于有效使用GPU和大量并行硬件在大數(shù)據(jù)集上訓(xùn)練深度學(xué)習(xí)模型;也得益于一些新方法的發(fā)現(xiàn),比如修正線性單元(ReLU)激活函數(shù)或者退化(Dropout)作為一種正規(guī)化技術(shù)【1】【2】【3】【4】。
? ? ? ? 在深度學(xué)習(xí)算法和單獨(dú)算法模塊比如表示轉(zhuǎn)換,激活函數(shù),或者正規(guī)化方法在開始還是數(shù)學(xué)公式的時(shí)候,接下來它們必須要轉(zhuǎn)化為某種計(jì)算機(jī)程序?qū)崿F(xiàn)才能用于應(yīng)用。因此,市場上存在很多這樣的開源和商業(yè)軟件。在這些眾多的軟件中,Theano【5】,Torch【6】,scikit-learn【7】和許多其它的軟件會(huì)在本文第二部分有更詳細(xì)的評估。而Tensorflow是在2015年11月由谷歌發(fā)布的全新機(jī)器學(xué)習(xí)軟件庫【8】。根據(jù)開始公布的情況來看,Tensorflow旨在擔(dān)當(dāng)在“大規(guī)模”異構(gòu)分布式系統(tǒng)上的“快速機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)”【8】。
? ? ? ? 本文接下來將完整評估Tensorflow,并且將其放在當(dāng)前機(jī)器學(xué)習(xí)的大背景下來討論。本文詳細(xì)架構(gòu)如下,第二部分將介紹機(jī)器學(xué)習(xí)軟件發(fā)展歷史,不局限于Tensorflow相似項(xiàng)目。接下來,第三部分將深入討論Tenorflow的計(jì)算范式。在第四部分,我們會(huì)解釋各類編程語言的編程接口。第五部分會(huì)介紹Tensorflow的調(diào)錯(cuò)可視化工具。第六部分是Tensorflow和其它類似軟件庫的定性和定量分析。在最后第八部分總結(jié),第七部分對于Tensorflow的學(xué)術(shù)界和工業(yè)界使用做了研究。
二,機(jī)器學(xué)習(xí)軟件庫歷史
? ? ? ? 本章旨在提供一個(gè)機(jī)器學(xué)習(xí)軟件庫歷史和關(guān)鍵里程碑的描述。開始,我們回顧20年前一系列廣泛用于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的軟件庫。然后,我們聚焦到最近適合于深度學(xué)習(xí)的編程框架研究。圖一展示的是這一研究在時(shí)間軸上的展開。本章不會(huì)比較比較Tensorflow和這些軟件庫,因?yàn)檫@一部分將會(huì)在第六部分具體討論。
A. 通用機(jī)器學(xué)習(xí)
? ? ? ? 在接下來的文字,我們將會(huì)列舉和回顧一組通用機(jī)器學(xué)習(xí)軟件庫。所謂“通用”,意味著這些軟件庫用于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析,并不局限于深度學(xué)習(xí)。所以,它們可能用于統(tǒng)計(jì)分析,聚類,降維分析,結(jié)構(gòu)化預(yù)測,異常檢測,淺神經(jīng)網(wǎng)絡(luò)(相對于深度神經(jīng)網(wǎng)絡(luò)而言)和其它。
讓我們從Tensorflow發(fā)布21年前的一個(gè)庫開始說起,MLC++【9】。MLC++是用C++開發(fā)的算法庫,包含了一系列數(shù)據(jù)挖掘,統(tǒng)計(jì)分析,模式識(shí)別技術(shù)的比較框架。它誕生于斯坦福大學(xué),現(xiàn)在被Silicon Graphics Inc公司(SGI)維護(hù)。據(jù)我們所知,這是迄今為止歲數(shù)最大的機(jī)器學(xué)習(xí)庫。
? ? ? ? 排在MLC++后面的,當(dāng)屬Bradski等人在2000年發(fā)布的OpenCV【10】。它主要解決計(jì)算機(jī)視覺和圖像識(shí)別問題,包括一系列人臉識(shí)別,對象識(shí)別,3D模型提取等。它遵循BSD開源,擁有C++,Python和MATLAB等多種編程接口。
? ? ? ? 另一種機(jī)器學(xué)習(xí)庫我們希望提及的是scikit-learn【7】。2008年由David Cournapeu作為谷歌編碼之夏項(xiàng)目的一部分開發(fā)出來。它是使用Python編寫的開源庫,基于NumPy,SciPy和matplotlib框架。它能夠用于廣泛的監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)問題。
? ? ? ? Accord.NET和前述庫不一樣,它是2008年使用C#開發(fā)的,除了一些機(jī)器學(xué)習(xí)算法,它還包括了用于語音識(shí)別和圖像識(shí)別的信號處理模塊。【11】
? ? ? ? Massive Online Analysis(MOA)是一個(gè)可以支持在線和離線大數(shù)據(jù)分析的開源庫。MOA包括了一系列用于分類,回歸,推薦系統(tǒng)和其它訓(xùn)練能力。它于2010年發(fā)布,使用JAVA編程語言,由新西蘭的Waikato大學(xué)維護(hù)【12】。
? ? ? ? Mahout是Apache軟件基金會(huì)支持的一個(gè)Java開源庫,基于Hadoop平臺(tái),支持可伸縮的機(jī)器學(xué)習(xí)應(yīng)用。它可以憑借Hadoop分布式文件系統(tǒng)(HDFS)對于大數(shù)據(jù)集的很好支持進(jìn)行分析。Mahout提供了分類,回歸和過濾算法。
? ? ? ? Pattern在我們認(rèn)可的Python機(jī)器學(xué)習(xí)庫列表之中,得益于它提供豐富的網(wǎng)頁挖掘能力。它包含了不僅僅是機(jī)器學(xué)習(xí)算法(比如,聚類,分類或者最近鄰近搜索),自然語言處理(n-gram搜索用于情感分析),還提供了網(wǎng)絡(luò)爬蟲,比如抓去Tweets或者Wiki百科的數(shù)據(jù)來幫助快速分析。它由Antwerp大學(xué)于2012年開發(fā),開源并維護(hù)。
? ? ? ? 最后一個(gè)需要介紹的是Spark MLib,也是一款開源機(jī)器學(xué)習(xí)庫,發(fā)布于2015年,看名字很容易知道,這是基于Spark開發(fā)而成分布式分析系統(tǒng)。它支持處理大規(guī)模分布式數(shù)據(jù)集,并且在集群硬件環(huán)境下進(jìn)行機(jī)器訓(xùn)練。它包含了分類,回歸,聚類和其它機(jī)器學(xué)習(xí)的算法【14】。
B. 深度學(xué)習(xí)
? ? ? ? 上述軟件庫能夠用于非常廣泛的機(jī)器學(xué)習(xí),統(tǒng)計(jì)分析應(yīng)用。接下來介紹的庫在訓(xùn)練深度模型方面特別有效。
? ? ? ? 首先介紹的是發(fā)布于2002年的,最古老的Torch【6】。Torch包含了一個(gè)純C++實(shí)現(xiàn)和編程接口。現(xiàn)在,他的核心是C/CUDA實(shí)現(xiàn),對外暴露的語言是Lua腳本語言。Torch采用一個(gè)LuaJIT(實(shí)時(shí))編譯器把Lua的函數(shù)過程連接到C語言的具體實(shí)現(xiàn)。它包括了內(nèi)部別名,數(shù)值優(yōu)化過程,神經(jīng)網(wǎng)絡(luò)模型,同時(shí)能夠產(chǎn)生通用的N維數(shù)組(張量)對象。
? ? ? ? Theano發(fā)布于2008年【5】,是另外值得一提的庫。我們注意到Theano在機(jī)器學(xué)習(xí)社區(qū)具有極高的人氣,但是它實(shí)際上并不是機(jī)器學(xué)習(xí)庫。它只是符號化數(shù)理編程框架,比如生成計(jì)算圖,然后編譯和優(yōu)化在CPU或者GPU上運(yùn)行,所以Theano更多時(shí)候只是“數(shù)理編譯器”。
? ? ? ? Caffe是由Berkley視覺與學(xué)習(xí)中心(BVLC)維護(hù)的開源深度學(xué)習(xí)庫。它于2014年發(fā)布,并遵循BSD開源【15】。Caffe使用C++實(shí)現(xiàn),神經(jīng)網(wǎng)絡(luò)層是它的計(jì)算單元(這和Theano那些需要用戶自己定義詳細(xì)的數(shù)學(xué)公式去構(gòu)成神經(jīng)網(wǎng)絡(luò)層不同)。包含很多層的深度學(xué)習(xí)模型采用谷歌協(xié)議緩沖格式保存(GPBF)。模型能夠使用協(xié)議緩沖“語言”定義,然后通過和Python或者M(jìn)ATLAB已有的綁定,自動(dòng)生成神經(jīng)網(wǎng)絡(luò)。Caffe特別適合于訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)(CNNs,或者ConvNets)用于圖像識(shí)別領(lǐng)域。
? ? ? ? 上面介紹的機(jī)器學(xué)習(xí)庫都是使用Python,MTATLAB或者Lua定義深度學(xué)習(xí)模型,而Deeplearning4J(DL4J)則是使用Java去創(chuàng)建深度神經(jīng)網(wǎng)絡(luò)。DL4J能夠創(chuàng)建有限波資曼機(jī),卷積神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)。DL4J還能夠使用Hadoop或者Spark這樣的分布式計(jì)算平臺(tái)進(jìn)行工作。Adam Gibson2014年編寫的DL4J遵循Apache 2.0開源協(xié)議。
? ? ? ? 最后我們要介紹的是NVIDIA的深度學(xué)習(xí)SDK。這個(gè)SDK能夠充分利用GPU來加速計(jì)算。SDK首先提供了基于GPU的高性能深度算法(cuDNN),用于加速卷積,激活函數(shù)和張量轉(zhuǎn)換。其次,它提供了一個(gè)線性代數(shù)庫,cuBLAS。最后,cuSPARSE包含了基于GPU的高效空間矩陣運(yùn)算。它可以單獨(dú)使用,也可以和其它庫聯(lián)合使用,比如Torch。