從TensorFlow到Theano:橫向?qū)Ρ绕叽笊疃葘W(xué)習(xí)框架
在深度學(xué)習(xí)項(xiàng)目開始前,選擇一個合適的框架是非常重要的事情。最近,來自數(shù)據(jù)科學(xué)公司 Silicon Valley Data Science 的數(shù)據(jù)工程師 Matt Rubashkin(UC Berkeley 博士)為我們帶來了深度學(xué)習(xí) 7 種流行框架的深度橫向?qū)Ρ?,希望本文能對你帶來幫助?/p>
在 SVDS,我們的研發(fā)團(tuán)隊(duì)一直在研究不同的深度學(xué)習(xí)技術(shù);從識別圖像到語音,我們也在各類框架下實(shí)現(xiàn)了不少應(yīng)用。在這個過程中,我們意識到需要一個簡明的方式來獲取數(shù)據(jù)、創(chuàng)建模型、同時評估這些模型的表現(xiàn)。但當(dāng)我們一次次開始新的深度學(xué)習(xí)項(xiàng)目時,我們卻一直沒有找到一個可以參考的標(biāo)準(zhǔn)來告訴自己如何開始。
現(xiàn)在,為了回饋開源社區(qū),同時幫助后來者,我們決定以我們的經(jīng)驗(yàn)對目前流行的幾種工具(Theano、TensorFlow、Torch、Caffe、MXNet、Neon 和 CNTK)進(jìn)行一次橫向?qū)Ρ取R韵聢D表展示了各類深度學(xué)習(xí)工具的優(yōu)劣,希望對大家能有所幫助。
先放結(jié)論

這組對比參考了多種公開基準(zhǔn)評測,以及我們在圖像/語音識別應(yīng)用時對這些技術(shù)的 主觀印象。此外,你需要注意:
- 語言
當(dāng)你開始一個深度學(xué)習(xí)項(xiàng)目時,你最好使用一個支持你所會語言的框架。比如 Caffe(C++)和 Torch(Lua)只能支持有限的語言(最近,隨著 PyTorch 的出現(xiàn),情況有所改觀)。所以如果你希望選用上述兩個框架,我們建議你事先熟悉 C++或 Lua 語言。相比之下,TensorFlow 與 MXNet 具有豐富的多語言支持,即使你對 C++感到陌生也可以使用它們。


- 教程和資源
目前,各類深度學(xué)習(xí)框架的教程與可利用的資源在質(zhì)量和數(shù)量上有著顯著的不同。Theano,TensorFlow,Torch 和 MXNet 有著很詳盡的文檔教程,很容易被初學(xué)者理解和實(shí)現(xiàn)。與此相比,雖然微軟的 CNTK 和英特爾的 Nervana Neon 也是強(qiáng)大的工具,我們卻很少能見到有關(guān)它們的新手級資料。此外,在研究過程中,我們發(fā)現(xiàn) GitHub 社區(qū)的參與度不僅可以用于準(zhǔn)確地評價不同工具的開發(fā)水平,而且還是在搜索 StackOverflow 或 repo 的 Git Issues 時能否快速解決問題的參考性指標(biāo)。當(dāng)然,作為谷歌提供的框架,TensorFlow 理所當(dāng)然地在教程,資源,開發(fā)者和社區(qū)貢獻(xiàn)者的數(shù)量上遙遙領(lǐng)先。

- CNN 建模能力
卷積神經(jīng)網(wǎng)絡(luò)(CNN)經(jīng)常被用于圖像識別、推薦引擎和自然語言識別等方向的應(yīng)用。CNN 由一組多層的神經(jīng)網(wǎng)絡(luò)組成,在運(yùn)行時會將輸入的數(shù)據(jù)進(jìn)行預(yù)定義分類的評分。CNN 也可用于回歸分析,例如構(gòu)成自動駕駛汽車中有關(guān)轉(zhuǎn)向角的模型。在橫評中,我們評價一種框架的 CNN 建模能力考慮到以下幾個特性:定義模型的機(jī)會空間、預(yù)構(gòu)建層的可用性、以及可用于連接這些層的工具和功能。我們發(fā)現(xiàn),Theano,Caffe 和 MXNet 都有很好的 CNN 建模能力。其中,TensorFlow 因?yàn)橐子诮⒌?Inception V3 模型,Torch 因?yàn)槠湄S富的 CNN 資源——包括易于使用的時間卷積集使得這兩種框架在 CNN 建模能力上脫穎而出。
- RNN 建模能力
遞歸神經(jīng)網(wǎng)絡(luò)(RNN)常用于語音識別,時間序列預(yù)測,圖像字幕和其他需要處理順序信息的任務(wù)。由于預(yù)建的 RNN 模型不如 CNN 數(shù)量多,因此,如果你已經(jīng)有一個 RNN 深度學(xué)習(xí)項(xiàng)目,優(yōu)先考慮舊 RNN 模型是在哪種框架里實(shí)現(xiàn)的最重要。目前,Caffe 上的 RNN 資源最少,而 Microsoft 的 CNTK 和 Torch 有豐富的 RNN 教程和預(yù)構(gòu)建模型。當(dāng)然,最流行的 TensorFlow 中也有一些 RNN 資源,TFLearn 和 Keras 中更有很多使用 TensorFlow 的 RNN 示例。
- 架構(gòu)
為在特定框架中構(gòu)建和訓(xùn)練新模型,易于使用和模塊化的前端是至關(guān)重要的。TensorFlow,Torch 和 MXNet 都有直觀而模塊化的架構(gòu),讓開發(fā)相對變得簡單。相比之下,我們在 Caffe 這樣的框架上需要進(jìn)行大量的工作才能創(chuàng)建一個新層。另外我們發(fā)現(xiàn)在開發(fā)過程中,因?yàn)橛?TensorBoard web GUI 等應(yīng)用的存在,TensorFlow 極易在訓(xùn)練中和訓(xùn)練后進(jìn)行 debug 和監(jiān)控。
- 速度
Torch 和 Nervana 具有開源卷積神經(jīng)網(wǎng)絡(luò)基準(zhǔn)測試的最佳性能:
https://github.com/soumith/convnet-benchmarks/blob/master/README.md
Tensorflow 的性能在大多數(shù)測試中是具有競爭力的,而 Caffe 和 Theano 稍稍落后:
https://github.com/tobigithub/tensorflow-deep-learning/wiki/tf-benchmarks
微軟聲稱他們的 CNTK 在一些 RNN 訓(xùn)練任務(wù)中有最快的速度。
在另一項(xiàng)對比 Theano、Torch 和 TensorFlow 的 RNN 性能的研究中,Theano 是其中最快的:
https://arxiv.org/abs/1511.06435
- 多 GPU 支持
大多數(shù)深度學(xué)習(xí)應(yīng)用都需要用到巨量的浮點(diǎn)運(yùn)算(FLOP)。例如,百度的 DeepSpeech 識別模型需要 10s ExaFLOPs 用于訓(xùn)練,這是大于 10e18 的計算量:
https://arxiv.org/abs/1512.02595
考慮到目前英偉達(dá) Pascal 架構(gòu)的 TitanX 等頂級顯卡可以每秒執(zhí)行 11e9 FLOP:
https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal/
因此,假如需要在大型數(shù)據(jù)集上訓(xùn)練一個新模型——用單 GPU 機(jī)器的話——可能會需要一個星期之久。為了減少構(gòu)建模型所需的時間,我們需要使用多 GPU 并聯(lián)的方式組建自己的機(jī)器。幸運(yùn)的是,上述大部分架構(gòu)都可以很好地支持多 GPU 運(yùn)算。其中,據(jù)報道 MXNet 有著最好的多 GPU 優(yōu)化引擎:
http://www.allthingsdistributed.com/2016/11/mxnet-default-framework-deep-learning-aws.html
- Keras 兼容性
Keras 是一個用于快速構(gòu)建深度學(xué)習(xí)原型的高級庫。我們在實(shí)踐中發(fā)現(xiàn),它是數(shù)據(jù)科學(xué)家應(yīng)用深度學(xué)習(xí)的好幫手。Keras 目前支持兩種后端框架:TensorFlow 與 Theano,而且 Keras 再過不久就會成為 TensorFlow 的默認(rèn) API:
http://www.fast.ai/2017/01/03/keras/
盡管如此,Keras 的作者表示,這一高級庫在未來仍會作為支持多種框架的前端存在:
https://github.com/fchollet/keras/issues/5050#issuecomment-272945570
- 總結(jié)
如果你想要開始深度學(xué)習(xí),你應(yīng)該從評估自己的團(tuán)隊(duì)技能和業(yè)務(wù)需求開始。例如,如果一個以 Python 為中心的團(tuán)隊(duì)想開發(fā)圖像識別的應(yīng)用程序,你應(yīng)該使用 TensorFlow,因?yàn)樗胸S富的資源,較好性能和完整的原型工具。如果一個有 Lua 能力的團(tuán)隊(duì)希望將 RNN 大規(guī)模應(yīng)用到生產(chǎn)環(huán)境中去,他們則會受益于 Torch 的高速和強(qiáng)大的 RNN 建模能力。






