從TensorFlow到Theano:橫向對比七大深度學習框架

在深度學習項目開始前,選擇一個合適的框架是非常重要的事情。最近,來自數據科學公司 Silicon Valley Data Science 的數據工程師 Matt Rubashkin(UC Berkeley 博士)為我們帶來了深度學習 7 種流行框架的深度橫向對比,希望本文能對你帶來幫助。

在 SVDS,我們的研發團隊一直在研究不同的深度學習技術;從識別圖像到語音,我們也在各類框架下實現了不少應用。在這個過程中,我們意識到需要一個簡明的方式來獲取數據、創建模型、同時評估這些模型的表現。但當我們一次次開始新的深度學習項目時,我們卻一直沒有找到一個可以參考的標準來告訴自己如何開始。

現在,為了回饋開源社區,同時幫助後來者,我們決定以我們的經驗對目前流行的幾種工具(Theano、TensorFlow、Torch、Caffe、MXNet、Neon 和 CNTK)進行一次橫向對比。以下圖表展示了各類深度學習工具的優劣,希望對大家能有所幫助。

先放結論:

這組對比參考了多種公開基準評測,以及我們在圖像/語音識別應用時對這些技術的主觀印象。此外,你需要注意:

語言

當你開始一個深度學習項目時,你最好使用一個支持你所會語言的框架。比如 Caffe(C++)和 Torch(Lua)只能支持有限的語言(最近,隨著 PyTorch 的出現,情況有所改觀)。所以如果你希望選用上述兩個框架,我們建議你事先熟悉 C++或 Lua 語言。相比之下,TensorFlow 與 MXNet 具有豐富的多語言支持,即使你對 C++感到陌生也可以使用它們。

教程和資源

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

CNN 建模能力

卷積神經網路(CNN)經常被用於圖像識別、推薦引擎和自然語言識別等方向的應用。CNN 由一組多層的神經網路組成,在運行時會將輸入的數據進行預定義分類的評分。CNN 也可用於回歸分析,例如構成自動駕駛汽車中有關轉向角的模型。在橫評中,我們評價一種框架的 CNN 建模能力考慮到以下幾個特性:定義模型的機會空間、預構建層的可用性、以及可用於連接這些層的工具和功能。我們發現,Theano,Caffe 和 MXNet 都有很好的 CNN 建模能力。其中,TensorFlow 因為易於建立的 Inception V3 模型,Torch 因為其豐富的 CNN 資源——包括易於使用的時間卷積集使得這兩種框架在 CNN 建模能力上脫穎而出。

RNN 建模能力

循環神經網路(RNN)常用於語音識別,時間序列預測,圖像字幕和其他需要處理順序信息的任務。由於預建的 RNN 模型不如 CNN 數量多,因此,如果你已經有一個 RNN 深度學習項目,優先考慮舊 RNN 模型是在哪種框架里實現的最重要。目前,Caffe 上的 RNN 資源最少,而 Microsoft 的 CNTK 和 Torch 有豐富的 RNN 教程和預構建模型。當然,最流行的 TensorFlow 中也有一些 RNN 資源,TFLearn 和 Keras 中更有很多使用 TensorFlow 的 RNN 示例。

架構

為在特定框架中構建和訓練新模型,易於使用和模塊化的前端是至關重要的。TensorFlow,Torch 和 MXNet 都有直觀而模塊化的架構,讓開發相對變得簡單。相比之下,我們在 Caffe 這樣的框架上需要進行大量的工作才能創建一個新層。另外我們發現在開發過程中,因為有 TensorBoard web GUI 等應用的存在,TensorFlow 極易在訓練中和訓練後進行 debug 和監控。

速度

Torch 和 Nervana 具有開源卷積神經網路基準測試的最佳性能:

convnet-benchmarks/README.md at master · soumith/convnet-benchmarks · GitHub

TensorFlow 的性能在大多數測試中是具有競爭力的,而 Caffe 和 Theano 稍稍落後:

tf benchmarks · tobigithub/tensorflow-deep-learning Wiki · GitHub

微軟聲稱他們的 CNTK 在一些 RNN 訓練任務中有最快的速度。

在另一項對比 Theano、Torch 和 TensorFlow 的 RNN 性能的研究中,Theano 是其中最快的:

[1511.06435] Comparative Study of Deep Learning Software Frameworks

多 GPU 支持

大多數深度學習應用都需要用到巨量的浮點運算(FLOP)。例如,百度的 DeepSpeech 識別模型需要 10s ExaFLOPs 用於訓練,這是大於 10e18 的計算量:

End-to-End Speech Recognition in English and Mandarin

考慮到目前英偉達 Pascal 架構的 TitanX 等頂級顯卡可以每秒執行 10e9 FLOP:

TITAN X Graphics Card with Pascal from NVIDIA GeForce

因此,假如需要在大型數據集上訓練一個新模型——用單 GPU 機器的話——可能會需要一個星期之久。為了減少構建模型所需的時間,我們需要使用多 GPU 並聯的方式組建自己的機器。幸運的是,上述大部分架構都可以很好地支持多 GPU 運算。其中,據報道 MXNet 有著最好的多 GPU 優化引擎:

allthingsdistributed.com

Keras 兼容性

Keras 是一個用於快速構建深度學習原型的高級庫。我們在實踐中發現,它是數據科學家應用深度學習的好幫手。Keras 目前支持兩種後端框架:TensorFlow 與 Theano,而且 Keras 再過不久就會成為 TensorFlow 的默認 API:

Big deep learning news: Google Tensorflow chooses Keras

儘管如此,Keras 的作者表示,這一高級庫在未來仍會作為支持多種框架的前端存在:

Good news, Tensorflow chooses Keras! · Issue #5050 · fchollet/keras · GitHub

總結

如果你想要開始深度學習,你應該從評估自己的團隊技能和業務需求開始。例如,如果一個以 Python 為中心的團隊想開發圖像識別的應用程序,你應該使用 TensorFlow,因為它有豐富的資源,較好性能和完整的原型工具。如果一個有 Lua 能力的團隊希望將 RNN 大規模應用到生產環境中去,他們則會受益於 Torch 的高速和強大的 RNN 建模能力。

未來,我們將繼續討論在更大規模的應用中這些框架的表現。這些挑戰包括多機並聯時的多 GPU 優化,多種開源庫的兼容性,如 CMU Sphinx 和 Kaldi 等,盡請期待。

選自SVDS機器之心編譯

推薦閱讀:

目前,人工智慧語音在說中文時的語氣感覺上還比較機械,怎樣使人工智慧語音的語氣更自然一些?
傳統的CTR或推薦系統擁有高維特徵和稀疏數據,轉向深度學習如何高效實現?
如何評價微軟亞洲研究院提出的LightRNN?
b大的深度學習框架有什麼獨到之處?
從事深度學習等人工智慧研究在未來的職業發展前景如何?

TAG:TensorFlow | 深度学习DeepLearning | 机器学习 |