目前流行的幾種工具包括:Theano、TensorFlow、Torch、Caffe、MXNet、Neon 和 CNTK。
開始一個深度學習項目時,最好使用一個支持所會語言的工具。比如 Caffe(C++)和 Torch(Lua)只能支持有限的語言(最近,隨著PyTorch 的出現,情況有所改觀)。所以如果你希望選用上述兩個工具,建議事先熟悉 C++或 Lua 語言。相比之下,TensorFlow 與 MXNet 具有豐富的多語言支持,即使你對 C++感到陌生也可以使用它們。GitHub 社區的參與度不僅可以用于準確地評價不同工具的開發水平,而且還是在搜索 StackOverflow 或 repo 的 Git Issues 時能否快速解決問題的參考性指標。作為谷歌提供的框架,TensorFlow 理所當然地在教程,資源,開發者和社區貢獻者的數量上遙遙領先。
卷積神經網絡(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 具有開源卷積神經網絡基準測試的最佳性能。TensorFlow 的性能在大多數測試中是具有競爭力的,而 Caffe 和 Theano 稍稍落后。微軟聲稱他們的 CNTK 在一些 RNN 訓練任務中有最快的速度。在另一項對比 Theano、Torch 和 TensorFlow 的 RNN 性能的研究中,Theano 是其中最快的。
多 GPU 支持。大多數深度學習應用都需要用到巨量的浮點運算(FLOP)。例如,百度的 DeepSpeech 識別模型需要 10s ExaFLOPs 用于訓練,這是大于 10e18 的計算量。考慮到目前英偉達 Pascal 架構的 TitanX 等頂級顯卡可以每秒執行 10e9 FLOP。因此,假如需要在大型數據集上訓練一個新模型——用單 GPU 機器的話——可能會需要一個星期之久。為了減少構建模型所需的時間,我們需要使用多 GPU 并聯的方式組建自己的機器。幸運的是,上述大部分架構都可以很好地支持多 GPU 運算。其中,據報道 MXNet 有著最好的多 GPU 優化引擎。(英偉達3月15日發布了基于其最新的 Pascal 架構的新一代 Quadro 系列顯卡。新的芯片組可將桌面工作站轉變成為具有突破性能力的超級計算機,為不同行業的專業任務提供保障。新 Quadro 芯片組可以為設計、工程和有關虛擬現實以及深度學習的各種領域提供硬件支持。這些顯卡可以構建企業級視覺計算平臺,為用戶簡化設計和模擬工作流難度,與上一代產品相比,新顯卡速度最多可以提升兩倍。)
Keras 兼容性。Keras 是一個用于快速構建深度學習原型的高級庫。我們在實踐中發現,它是數據科學家應用深度學習的好幫手。Keras 目前支持兩種后端框架:TensorFlow 與 Theano,而且 Keras 再過不久就會成為 TensorFlow 的默認 API。盡管如此,Keras 的作者表示,這一高級庫在未來仍會作為支持多種框架的前端存在。
如果你想要開始深度學習,你應該從評估自己的團隊技能和業務需求開始。例如,如果一個以 Python 為中心的團隊想開發圖像識別的應用程序,你應該使用 TensorFlow,因為它有豐富的資源,較好性能和完整的原型工具。如果一個有 Lua 能力的團隊希望將 RNN 大規模應用到生產環境中去,他們則會受益于 Torch 的高速和強大的 RNN 建模能力。未來將繼續討論在更大規模的應用中這些工具的表現。這些挑戰包括多機并聯時的多 GPU 優化,多種開源庫的兼容性,如 CMU Sphinx 和 Kaldi 等。