1. 程式人生 > >幾種機器學習平臺的對比和選擇

幾種機器學習平臺的對比和選擇

存儲 檢查 基於 大型 容易 和平 計算機 caff 手寫識別

前言

選擇什麽樣的深度學習框架一直是開發者非常關心的一個話題,而且深度學習框架之間的「戰爭」也越來越激烈。隨著近幾年AI的火熱,越來越多的出現有關各個機器學習框架的對比文章,且隨著 Python 逐漸成為機器學習社區最受歡迎的語言,支持 Python的深度學習框架的性能也在持續的被關註。

由於自己想了解下機器學習,隨機查閱了諸多文獻給予此,將橫向的對比以下深度學習框架和工具的特點:

Theano

Lasagne

Blocks

TensorFlow

Keras

MXNet

PyTorch

Caffe

CNTK

Neon

開始之前,先來介紹下幾個名詞:

卷積神經網絡(Convolutional Neural Network,CNN)

CNN是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,且該網絡避免了對圖像的復雜前期預處理,可以直接輸入原始圖像,對於大型圖像處理有出色表現。主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形,由於CNN的特征檢測層是通過訓練數據進行學習的,所以在使用CNN時,避免了顯式的特征抽取,而是隱式地從訓練數據中進行學習;再者由於同一特征映射面上的神經元權值相同,所以網絡可以並行學習,這也是卷積網絡相對於神經元彼此相連網絡的一大優勢。卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有著獨特的優越性,其布局更接近於實際的生物神經網絡,權值共享降低了網絡的復雜性,特別是多維輸入向量的圖像可以直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度。

遞歸神經網絡(Recurrent neural Network,RNN)

RNN神經網絡是一種節點定向連接成環的人工神經網絡。網絡的內部狀態可以展示動態時序行為。不同於前饋神經網絡的是,RNN可以利用它內部的記憶來處理任意時序的輸入序列,這讓它可以更容易處理如不分段的手寫識別、語音識別等。具有更強的動態行為和計算能力。

NumPy(Numeric Python)

一個用Python實現的科學計算包,是Python的一種開源數值計算擴展,包括:1、一個強大的N維數組對象Array;2、比較成熟的(廣播)函數庫;3、用於整合C/C++和Fortran代碼的工具包;4、實用的線性代數、傅裏葉變換和隨機數生成函數。提供了許多高級的數值編程工具,可用來存儲和處理大型矩陣,如矩陣數據類型、矢量處理、以及精密的運算庫,是專為進行嚴格的數字處理而產生。基本可以認為NumPy將Python變成了一種免費的更強大的MatLab系統。

簡介

Theano

Theano 是一個Python 庫,允許你定義、優化並且有效地評估涉及到多維數組的數學表達式。

Theano 是數值計算的主力,它支持了許多其他的深度學習框架。Theano由 Frédéric Bastien創建,這是蒙特利爾大學機器學習研究所(MILA)背後的一個非常優秀的研究團隊。它的API 水平較低,並且為了寫出效率高的Theano,需要對隱藏在其他框架幕後的算法相當的熟悉。如果有著豐富的學術機器學習知識,正在尋找模型的精細控制方法,或者想要實現一個新奇的或不同尋常的模型,Theano是首選庫。為了靈活性,Theano犧牲了易用性。

優點:靈活,正確使用時的高性能。

缺點:較高的學習難度,低水平的 API,編譯復雜的符號圖可能很慢。

Lasagne

在 Theano上建立和訓練神經網絡的輕量級庫。

因為 Theano致力於成為符號數學中最先且最好的庫,Lasagne提供了在 Theano頂部的抽象,這使得它更適合於深度學習。它主要由當前 DeepMind研究科學家 Sander Dieleman編寫並維護。Lasagne並非是根據符號變量之間的函數關系來指定網絡模型,而是允許用戶在層級思考,為用戶提供了例如「Conv2DLayer」和「DropoutLayer」的構建塊。Lasagne在犧牲了很少的靈活性的同時,提供了豐富的公共組件來幫助圖層定義、圖層初始化、模型正則化、模型監控和模型訓練。Theano+Lasagne是很多一線開發者的最愛。

優點:仍舊非常靈活,比 Theano更高級的抽象,文檔和代碼中包含了各種 Pasta Puns。

缺點:社區小。

Blocks

用於構建和訓練神經網絡的 Theano框架。

與 Lasagne類似,Blocks 是在 Theano 頂部添加一個抽象層使深度學習模型比編寫原始的 Theano更清晰、更簡單、定義更加標準化。它是由蒙特利爾大學機器學習研究所(MILA)編寫,其中一些人為搭建Theano 和第一個神經網絡定義的高級接口(已經淘汰的PyLearn2)貢獻了自己的一份力量。比起Lasagne,Blocks靈活一點,代價是入門臺階較高,想要高效的使用它有不小的難度。除此之外,Blocks對遞歸神經網絡架構(recurrent neural network architectures)有很好的支持,所以如果有興趣探索這種類型的模型,它值得一看。

優點:仍舊非常靈活,比 Theano更高級的抽象,易於測試。

缺點:較高的學習難度,更小的社區。

TensorFlow

用於數值計算的使用數據流圖的開源軟件庫。

TensorFlow 是較低級別的符號庫(比如 Theano)和較高級別的網絡規範庫(比如Blocks 和Lasagne)的混合。雖然它是Python 深度學習庫集合的最新成員,不過在Google Brain 團隊支持下,它已經是最大的活躍社區了。它支持在多GPUs 上運行深度學習模型,為高效的數據流水線提供使用程序,並具有用於模型的檢查,可視化和序列化的內置模塊。且TensorFlow支持 Keras(一個很優秀的深度學習庫)。

優點:由軟件巨頭 Google支持,非常大的社區,低級和高級接口網絡訓練,比基於 Theano配置更快的模型編譯,完全地多 GPU支持。

缺點:雖然 Tensorflow正在追趕,但是在許多基準上比基於 Theano的慢,RNN支持仍不如 Theano。

Keras

Python 的深度學習庫。支持Convnets(基於GPU實現的卷積神經網絡)、遞歸神經網絡等。在Theano 或者TensorFlow 上運行。

Keras 也許是水平最高,對用戶最友好的庫了。由 Francis Chollet(Google Brain團隊中的另一個成員)編寫和維護。它允許用戶選擇其所構建的模型是在 Theano上或是在 TensorFlow上的符號圖上執行。Keras的用戶界面受啟發於 Torch。由於部分非常優秀的文檔和其相對易用性,Keras的社區非常大並且非常活躍。TensorFlow已經與 Keras一起支持內置,所以很快 Keras將是 TensorFlow項目的一個分組。

優點:可供選擇的 Theano或者 TensorFlow後端,直觀、高級別的端口,更易學習。

缺點:不太靈活。

MXNet

MXNet 是一個旨在提高效率和靈活性的深度學習框架。

MXNet 是亞馬遜(Amazon)選擇的深度學習庫,也許是最優秀的庫。它擁有類似於Theano 和TensorFlow 的數據流圖,架構設計得可以利用更多內存復用機會和為多GPU 配置提供了良好的配置,有著類似於Lasagne 和Blocks 更高級別的模型構建塊,並且可以在你可以想象的任何硬件上運行(包括手機)。對Python 的支持只是其冰山一角——MXNet同樣提供了對 R、Julia、C++、Scala、Matlab和Javascript 的接口。

優點:速度的標桿,非常靈活。

缺點:最小的社區,比 Theano更高的學習難度。

PyTorch

Python 中的張量(Tensors)和動態神經網絡,有著強大的GPU 加速。

PyTorch 也是Python 深度學習框架列表中的一個新成員。它是從Lua 的Torch 庫到Python 的松散端口,由Facebook 的人工智能研究團隊(Artificial Intelligence Research team (FAIR))支持且因為它較早支持用於處理動態計算圖,也是非常優秀的一款深度學習框架。

優點:來自 Facebook 組織的支持,完全地對動態圖的支持,高級和低級API 的混合。

缺點:比其他選擇,PyTorch還不太成熟,除了官方文檔以外,只有有限的參考文獻/資源。

Caffe

Caffe 起初並不是一個通用框架,而僅僅關註計算機視覺,但它具有非常好的通用性。

Caffe 具有很好的 CNN建模能力,但是 RNN資源就少很多,所以它更多的是面向圖像識別、推薦引擎和自然語言識別等方向的應用,不面向其他深度學習應用諸如語音識別、時間序列預測、圖像字幕和文本等其他需要處理順序信息的任務。

優點:良好的CNN建模能力。

缺點:不夠靈活,有限的參考文獻/資源。

CNTK

CNTK 是微軟的開源深度學習框架,是「Computational Network Toolkit(計算網絡工具包)」的縮寫。或是另一種稱呼認知工具包(Cognitive Toolkit)。雖然也是強大的工具,但是社區小,文獻資源和相關評論也是很少。

優點:豐富的 RNN教程和預構建模型。

缺點:社區小,新手級資料少。

Neon

Neon是Intel收購的一個深度學習框架,因此在Intel處理器架構平臺性能相當好,且具有良好的CNN 建模能力。至於其他方面就遜色許多。

優點:較好的 CNN建模能力和Intel架構出色的性能。

缺點:社區小,新手級資料少。

對比

教程和資源

各類深度學習框架的教程與可利用的資源在質量和數量上有著顯著的不同。

TensorFlow,MXNet,PyTorch和Theano有著很詳盡的文檔教程,與此相比,雖然微軟的CNTK 和英特爾的Nervana Neon 也是強大的工具,卻很少能見到有關它們的新手級資料。

語言和平臺

毫無疑問,python是目前機器學習語言的趨勢。

MXNet(Python、R、Scala、Julia、Matlab、Javascript、C++)與TensorFlow(python、C/C++)具有豐富的多語言支持。

多平臺的支持首屬MXNet(跨平臺Linux、OS X、Windows、Android、iOS),Theano跨平臺,TensorFlow暫時不支持Windows。

架構和速度

訓練深度網絡非常耗時,所以為在特定框架中構建和訓練新模型,易於使用和模塊化的前端是至關重要的。TensorFlow,PyTorch和 MXNet都有直觀而模塊化的架構,讓開發相對變得簡單。另外,因為有 TensorBoard web GUI等應用的存在,TensorFlow極易在訓練中和訓練後進行 debug和監控。

Caffe 也發布了一些預訓練模型/權重(model zoo),能夠作為初始權重被用於特殊領域或自定義圖像的遷移學習或微調深度網絡。能夠轉換基於caffe 的預訓練模型權重,使其可以適應MXNET。

至於速度則需要考慮每個深度學習的框架所針對的領域了,RNN性能比較出色的有CNTK和 PyTorch,CNN性能比較出色的有Theano,Caffe和MXNet。另外Theano和MXNet在綜合性能中是比較出色的,Tensorflow的性能在大多數測試中也是很有競爭力的。

多GPU和Keras兼容性

大多數深度學習應用都需要用到巨量的浮點運算(FLOP),了減少構建模型所需的時間,需要使用多 GPU並聯的方式組建自己的學習平臺。根據公開發表的文獻,MXNet有著最好的多 GPU優化引擎,這也是其綜合性能中比較出色的原因之一。另外TensorFlow和PyTorch對多GPU也有很好的支持。

基於Theano的深度學習框架(Lasagne)和 Keras是深度學習模型中較早且較廣泛使用的框架,很容易用 Lasagne/Keras 實現新網絡或者編輯現存網絡。且Keras是一個用於快速構建深度學習原型的高級庫,是數據科學家應用深度學習的好幫手,目前兼容Keras的只有Theano和TensorFlow。

CNN 建模能力

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

RNN 建模能力

循環神經網絡(RNN)常用於語音識別,時間序列預測,圖像字幕和其他需要處理順序信息的任務。目前,Microsoft的 CNTK和 PyTorch 有著豐富的 RNN教程和預構建模型。另外,目前很流行的 TensorFlow中也有一些 RNN 資源,且Keras中更是有很多使用 TensorFlow的 RNN 示例。

高級支持和擴展

主要考慮低級的張量(Tensor)運算符和控制流運算符的支持程度,高效的低級運算符實現能充當新模型的原料,控制流運算符增加符號引擎的表達性和通用性,這方面表現良好的主要是Theano和TensorFlow。

基於Theano的架構庫可以說是最多的,Keras、Lasagne、blocks就是成功的案例。而TensorFlow是較低級別的符號庫(比如Theano)和較高級別的網絡規範庫(比如Blocks 和Lasagne)的混合,且兼容Keras,良好的設計使得圖像、隊列、圖像增加器等能成為更高級包裝的有用構造塊。

總結

語言和平臺的支持:

MXNet:真正的跨平臺,語言支持豐富。

Theano:跨平臺Win、Linux、Mac,語言Python。

TensorFlow:Linux、Mac,語言Python、C、C++。

PyTorch:Linux、Mac,Python、Lua

教程和資源的比較:

TensorFlow、Theano、MXNet、PyTorch。

架構和擴展的比較:

Theano、TensorFlow、PyTorch、MXNet。

CNN建模能力的比較:

Caffe、MXNet、Theano,TensorFlow、PyTorch。

RNN建模能力的比較:

CNTK、PyTorch、TensorFlow、MXNet。

多GPU支持:

MXNet、TensorFlow、PyTorch、Theano。

綜合性能:

MXNet、Theano、TensorFlow、PyTorch。

對比

框架

語言和平臺

教程和資源

架構和擴展

Theano

Python/

Win、Linux、Mac

++++

+++++

TensorFlow

Python、C、C++/

Linux、Mac

+++++

+++++

MXNet

Python、R、Scala、Julia、Matlab、Javascript、C++/

跨平臺

+++

+++

PyTorch

Python、Lua/

Linux、Mac

+++

+++

Caffe

C++/

Linux、Mac

+

+

CNTK

C++/

Win、Linux

+

+

Neon

Python/

Linux、Mac

+

+

註:Theano、Lasagne、Blocks在此處統一列為Theano項。

Keras是在 Theano或者 TensorFlow上運行的。

續表

對比

框架

多GPU支持

RNN建模能力

CNN建模能力

綜合性能

Theano

++

++

+++

+++

TensorFlow

+++

++

++

+++

MXNet

++++

+++

++++

++++

PyTorch

++

+++

++

++

Caffe

+

++++

++

CNTK

+

++++

+

++

Neon

+

++

++

++

幾種機器學習平臺的對比和選擇