訂閱
糾錯
加入自媒體

深度學習入門課:你需要了解的十大框架和選型攻略

深度學習框架是幫助使用者進行深度學習的工具,它的出現(xiàn)降低了深度學習入門的門檻,你不需要從復雜的神經網絡開始編代碼,就可以根據(jù)需要使用現(xiàn)有的模型。

做個比喻,一套深度學習框架就像是一套積木,各個組件就是某個模型或算法的一部分,使用者可以自己設計和組裝符合相關數(shù)據(jù)集需求的積木。

當然也正因如此,沒有什么框架是完美的,就像一套積木里可能沒有你需要的那一種積木,所以不同的框架適用的領域不完全一致。

深度學習的框架有很多,不同框架之間的“好與壞”卻沒有一個統(tǒng)一的標準,因此,當大家要開始一個深度學習項目時,在研究到底有哪些框架具有可用性,哪個框架更適合自己時,卻找不到一個簡明扼要的“說明書”告訴大家從何著手。

首先,我們先熟悉一下深度學習的框架。

Caffe

Caffe是最成熟的框架之一,由Berkeley Vision and Learning Center開發(fā)。它是模塊化的,而且速度非?,并且只需要很少的額外工作就可以支持多個GPU。它使用類似JSON的文本文件來描述網絡架構以及求解器方法。

此外,在一個可以下載Caffe模型以及網絡權重的網站——“model zoo”中,還可以幫助你快速地準備樣本。但是,需要注意的是,在Caffe框架中,要調整超參數(shù)比其他框架更為繁瑣,部分原因是需要為每組超參數(shù)單獨定義不同的求解器和模型文件。

深度學習入門課:你需要了解的十大框架和選型攻略

▲ 使用Caffe編寫的LeNet CNN實現(xiàn)代碼示例

上圖是LeNet CNN架構的代碼片段,該模型由卷積最大池化(convolution max pooling)和激活層組成的7層卷積網絡構成。

Deeplearning4j

Deeplearning4j是由Andrej Karpathy開發(fā)的、支持GPU的多平臺框架,它是用Java編寫的,并擁有一個Scala API。Deeplearning4j也是一個成熟的框架(用Lua編寫),在互聯(lián)網上有許多可以使用的樣本,并且支持多個GPU。

Tensorflow

Tensorflow是一個由谷歌開發(fā)的、相對比較新的框架,但已經被廣泛采用。它性能良好,支持多個GPU和CPU。Tensorflow提供了調整網絡和監(jiān)控性能的工具,就像Tensorboard一樣,它還有一個可用作網絡應用程序的教育工具。

Theano

Theano是使用符號邏輯創(chuàng)建網絡的框架,是以Python編寫的,但利用了numpy的高效代碼庫,從而提高了性能,超過了標準的Python。Theano在構建網絡方面有很大的優(yōu)勢,但是在創(chuàng)造完整的解決方案中則具有比較大的挑戰(zhàn)。Theano將機器學習中使用的梯度計算作為網絡創(chuàng)建的“免費”副產品,對于那些希望更多地關注網絡架構而不是梯度計算的人來說,這可能是有用的。此外,它的文本文件質量也相當不錯。

但需要提醒大家的一點是,Theano目前已停止更新。

Lasagne

Lasagne是用Python編寫的,建立在Theano之上的框架。它是一個相對簡單的系統(tǒng),能夠使得網絡構建比直接使用Theano更容易。因此,其表現(xiàn)極大地反映了Theano的潛能。

Keras

Keras是用Python編寫的框架,可以作為Theano或Tensorflow的后端(如下圖)。這使得Keras在構建完整的解決方案中更容易,而且因為每一行代碼都創(chuàng)建了一個網絡層,所以它也更易于閱讀。此外,Keras還擁有最先進算法(優(yōu)化器(optimizers)、歸一化例程(normalization routines)、激活函數(shù)(activation functions))的最佳選擇。

需要說明的是,雖然Keras支持Theano和Tensorflow后端,但輸入數(shù)據(jù)的維度假設是不同的,因此需要仔細的設計才能使代碼支持兩個后端工作。該項目有完備的文本文件,并提供了一系列針對各種問題的實例以及訓練好了的、用于傳輸學習實現(xiàn)常用體系的結構模型。

在編寫的時候,有消息宣稱Tensorflow將采用Keras作為首選的高級包。其實,這并不奇怪,因為Keras的開發(fā)者Francois Chollet本身就是谷歌的軟件工程師。

深度學習入門課:你需要了解的十大框架和選型攻略

▲ 使用Keras編寫的LeNet CNN實現(xiàn)代碼示例

MXNet

MXNet是一個用C ++編寫的深度學習框架,具有多種語言綁定,并支持分布式計算,包括多GPU。它提供對低級結構以及更高級/符號級API的訪問。在性能上被認為可以與Tensorflow、Caffe等在內的其他框架匹敵。GitHub中提供了很多關于MXNet的教程和培訓示例。

Cognitive Network Toolkit (CNTK)

CNTK是由微軟開發(fā)的框架,并被描述為機器學習的“Visual Studio”。對于那些使用Visual Studio進行編程的人,這可能是一種更溫和、更有效的進入深度學習的方式。

DIGITS

DIGITS是由英偉達開發(fā)的,一款基于網絡的深層開發(fā)工具。在很多方面,它像Caffe一樣,能夠使用文本文件而不是編程語言來描述網絡和參數(shù)。它具有網絡可視化工具,因此文本文件中的錯誤更容易被識別出來。此外,它還具有用于可視化學習過程的工具,并支持多個GPU。

Torch

Torch是一款成熟的機器學習框架,是用C語言編寫的。它具有完備的文本,并且可以根據(jù)具體需要進行調整。由于是用C語言編寫的,所以Torch的性能非常好。

PyTorch

PyTorch是Torch計算引擎的python前端,不僅能夠提供Torch的高性能,還能夠對GPU的提供更好支持。該框架的開發(fā)者表示,PyTorch與Torch的區(qū)別在于它不僅僅是封裝,而是進行了深度集成的框架,這使得PyTorc在網絡構建方面具有更高的靈活性。(如下圖)

深度學習入門課:你需要了解的十大框架和選型攻略

▲ PyTorch代碼示例和等效方框圖

Chainer

Chainer與其他框架有點不同,它將網絡構建視為其計算的一部分。它的開發(fā)者介紹說,在這一框架中,大多數(shù)工具都是“定義然后運行”,這意味著你要定義架構,然后才能運行它。Chainer嘗試構建并優(yōu)化其架構,使其成為學習過程的一部分,或者稱之為“通過運行定義”。

其他

除了上述的深度學習框架之外,還有更多的專注于具體任務的開源解決方案。例如,Nolearn專注于深度信念網絡(deep belief networks); Sklearn-theano提供了一個與scikit-learn(即Python中一個重要的機器學習的庫)匹配的編程語法,可以和Theano庫配合使用;Paddle則可以提供更好的自然語言處理能力……

面對如此之多的深度學習框架,使用者該如何做出合適的選擇?對此,LexiconAI的CEO兼創(chuàng)始人Matthew Rubashkin及其團隊通過對不同的框架在計算機語言、教程(Tutorials)和訓練樣本、CNN建模能力、RNN建模能力、架構的易用性、速度、多GPU支持、Keras兼容性等方面的表現(xiàn)對比,總結出了以下圖表:

深度學習入門課:你需要了解的十大框架和選型攻略

| Matthew Rubashkin畢業(yè)于加州大學伯克利分校,是UCSF的Insight數(shù)據(jù)工程研究員和博士生。曾在硅谷數(shù)據(jù)科學(SVDS)就職,并領導SVDS的深度學習研發(fā)團隊進行項目研究,包括在IoT設備上的TensorFlow圖像識別等等。

值得注意的是,這一結果結合了Matthew Rubashkin團隊在圖像和語音識別應用方面對這些技術的主觀經驗和公開的基準測試研究,并且只是階段性檢測,未囊括所有可用的深度學習框架。我們看到,包括DeepLearning4j、Paddle、Chainer等在內的框架都還未在其列。

以下是對應的評估依據(jù):

計算機語言

編寫框架所使用的計算機語言會影響到它的有效性。盡管許多框架具有綁定機制,允許使用者使用與編寫框架不同的語言訪問框架,但是編寫框架所使用的語言也不可避免地在某種程度上影響后期開發(fā)的語言的靈活性。

因此,在應用深度學習模型時,最好能夠使用你所熟悉的計算機語言的框架。例如,Caffe(C++)和Torch(Lua)為其代碼庫提供了Python綁定,但如果你想更好地使用這些技術,就必須能夠熟練使用C++或者Lua。相比之下,TensorFlow和MXNet則可以支持多語言,即使使用者不能熟練使用C++,也可以很好地利用該技術。

深度學習入門課:你需要了解的十大框架和選型攻略

深度學習入門課:你需要了解的十大框架和選型攻略

教程(Tutorials)和訓練樣本

框架的文本質量、覆蓋范圍以及示例對于有效使用框架至關重要。高質量的文本文件以及待處理的問題的示例將有助于有效解決開發(fā)者的問題。完備的文件也表明該工具已經成熟并且在短期內不會改變。

而不同的深度學習框架之間在教程和訓練樣本的質量和數(shù)量的需求方面存在很大的區(qū)別。舉例來說,Theano、TensorFlow、Torch和MXNet由于具有很好的文本化教程(documented tutorials),所以非常易于理解和實現(xiàn)。另外,我們還發(fā)現(xiàn),不同的框架在GitHub社區(qū)的參與度和活躍度高低不僅可以作為其未來發(fā)展的重要指標,同時也可以用來衡量通過搜索StackOverflow或Git報告事件來檢測和修復bug的速度。值得注意的是,在教程數(shù)量、訓練樣本以及開發(fā)人員和用戶社區(qū)方面,TensorFlow的需求量非常非常大(像是一個800磅重的大猩猩一樣的龐然大物)。

深度學習入門課:你需要了解的十大框架和選型攻略

CNN建模能力

卷積神經網絡(CNN)是由一組不同的層組成,將初始數(shù)據(jù)量轉換成預定義類分數(shù)的輸出分數(shù)。是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對于大型圖像處理有出色表現(xiàn),可用于圖像識別、推薦引擎和自然語言處理。此外,CNN還可以用于回歸分析,如自動駕駛車輛轉向角輸出模型等等。CNN建模能力包括幾個功能:定義模型的概率空間、預構建層的可用性以及可用于連接這些層的工具和功能。我們看到,Theano、Caffe和MXNet都具有很好的CNN建模功能,這意味著,TensorFlow能夠很容易地在其InceptionV3模型上進行能力構建,Torch中包括易于使用的時間卷積集在內的優(yōu)秀的CNN資源,都使得這兩種技術在CNN建模功能上能夠很好地區(qū)分開來。

RNN建模能力

有別于CNN,遞歸神經網絡(RNN)可以用于語音識別、時間序列預測、圖像字幕和其他需要處理順序信息的任務。由于預先構建的RNN模型不像CNN那樣多,因此,如果你有一個RNN深度學習項目,那么就必須考慮為特定技術預先實施和開源何種RNN模型,這是非常重要的。例如,Caffe擁有極少的RNN資源,而微軟的CNTK和Torch則擁有豐富的RNN教程和預置模型。雖然TensorFlow也具有一些RNN資源,但TFLearn和Keras中所包含的RNN示例要比使用TensorFlow多得多。

架構

為了在特定的框架中創(chuàng)建和訓練新的模型,至關重要的一點是要有一個易于使用而且是模塊化的前端架構。檢測結果表明,TensorFlow、Torch和MXNet都具有直觀的模塊化架構,這使得開發(fā)變得簡單并且直觀。相比之下,像Caffe這樣的框架則需要花大量的工作來創(chuàng)建一個新的層。另外,我們還發(fā)現(xiàn)由于TensorBoard Web GUI應用程序已經被包含在內,TensorFlow在訓練期間和訓練之后會特別容易調試和監(jiān)控。

速度

在開放源代碼卷積神經網絡(CNN)方面Torch和Nervana擁有基準測試的最佳性能記錄,TensorFlow性能在大多數(shù)測試中也“有的一拼”,而Caffe和Theano在這方面則表現(xiàn)得并不突出;在遞歸神經網絡(RNN)方面,微軟則聲稱CNTK的訓練時長最短,速度最快。當然,也有另一項直接針對RNN建模能力速度進行比較的研究表明,在Theano、Torch和TensorFlow中,Theano的表現(xiàn)最好。

多GPU支持

大多數(shù)深度學習應用程序需要大量的浮點運算(FLOP)。例如,百度的DeepSpeech識別模型需要10秒鐘的ExaFLOPs(百萬兆浮點運算)進行訓練。那可是大于10的18次方的計算量!而作為領先的圖形處理單元(GPU)——如英偉達的Pascal TitanX,每秒可以執(zhí)行11萬億次浮點運算,在一個足夠大的數(shù)據(jù)集上訓練一個新的模型需要一周的時間。為了減少構建模型所需的時間,需要多臺機器上的多個GPU。幸運的是,上面列出的大多數(shù)技術都提供了這種支持,比如,MXNet就具有一個高度優(yōu)化的多GPU引擎。

Keras兼容性

Keras是一個用于進行快速深度學習原型設計的高級庫,是一個讓數(shù)據(jù)科學家能夠自如地應用深度學習的工具。Keras目前支持兩個后端——TensorFlow和Theano,并且還將在TensorFlow中獲得正式的支持。

Matthew Rubashkin建議,當你要開始一個深度學習項目時,首先要評估好自己團隊的技能和項目需求。舉例來說,對于以Python為中心的團隊的圖像識別應用程序,他建議使用TensorFlow,因為其文本文件豐富、性能適宜并且還擁有優(yōu)秀的原型設計工具。而如果是為了將RNN擴展到具有Lua能力的客戶團隊產品上,他則推薦使用Torch,這是因為它具有卓越的速度和RNN建模能力。

總而言之,對于大多數(shù)人而言,“從零開始”編寫深度學習算法成本非常高,而利用深度學習框架中可用的巨大資源是更有效率的。如何選擇更合適的框架將取決于使用者的技能和背景,以及具體項目的需求。因此,當你要開始一個深度學習項目時,的確值得花一些時間來評估可用的框架,以確保技術價值的最大化。

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關注公眾號
OFweek人工智能網
獲取更多精彩內容
文章糾錯
x
*文字標題:
*糾錯內容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網安備 44030502002758號