概述
在深度學習初始階段,每個深度學習研究者都需要寫大量的重複代碼。為了提高工作效率,這些研究者就將這些代碼寫成了一個框架放到網上讓所有研究者一起使用。接著,網上就出現了不同的框架。隨著時間的推移,最為好用的幾個框架被大量的人使用從而流行了起來。全世界最為流行的深度學習框架有PaddlePaddle、Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。
PaddlePaddle
PaddlePaddle是百度研發的開源開放的深度學習平台,是國內最早開源、也是當前唯一一個功能完備的深度學習平台。依託百度業務場景的長期錘鍊,PaddlePaddle有最全面的官方支持的工業級套用模型,涵蓋自然語言處理、計算機視覺、推薦引擎等多個領域,並開放多個領先的預訓練中文模型,以及多個在國際範圍內取得競賽冠軍的算法模型。
PaddlePaddle同時支持稠密參數和稀疏參數場景的超大規模深度學習並行訓練,支持千億規模參數、數百個幾點的高效並行訓練,也是最早提供如此強大的深度學習並行技術的深度學習框架。PaddlePaddle擁有強大的多端部署能力,支持伺服器端、移動端等多種異構硬體設備的高速推理,預測性能有顯著優勢。目前PaddlePaddle已經實現了API的穩定和向後兼容,具有完善的中英雙語使用文檔,形成了易學易用、簡潔高效的技術特色。
PaddlePaddle 3.0版本升級為全面的深度學習開發套件,除了核心框架,還開放了VisualDL、PARL、AutoDL、EasyDL、AI Studio等一整套的深度學習工具組件和服務平台,更好地滿足不同層次的深度學習開發者的開發需求,具備了強大支持工業級套用的能力,已經被中國企業廣泛使用,也擁有了活躍的開發者社區生態。
Tensorflow
Google 開源的Tensorflow是一款使用C++語言開發的開源數學計算軟體,使用數據流圖(Data Flow Graph)的形式進行計算。圖中的節點代表數學運算,而圖中的線條表示多維數據數組(tensor)之間的互動。Tensorflow靈活的架構可以部署在一個或多個CPU、GPU的台式及伺服器中,或者使用單一的API套用在移動設備中。Tensorflow最初是由研究人員和Google Brain 團隊針對機器學習和深度神經網路進行研究而開發,開源之後幾乎可以在各個領域適用。
Tensorflow是全世界使用人數最多、社區最為龐大的一個框架,因為Google公司出品,所以維護與更新比較頻繁,並且有著Python和C++的接口,教程也非常完善,同時很多論文復現的第一個版本都是基於Tensorflow寫的,所以是深度學習界框架默認的老大。
Caffe
和Tensorflow名氣一樣大的是深度學習框架Caffe,由加州大學伯克利的Phd賈揚清開發,全稱是Convolutional Architecture for Fast Feature Embedding,是一個清晰而高效的開源深度學習框架,由伯克利視覺中心(Berkeley Vision and Learning Center,BVLC)進行維護。
從它的名字就可以看出其對於卷積網路的支持特別好,同時也是用C++寫的,提供的C++接口,也提供了matlab接口和python接口。
Caffe之所以流行,是因為之前很多ImageNet比賽裡面使用的網路都是用Caffe寫的,所以如果你想使用這些比賽的網路模型就只能使用Caffe,這也就導致了很多人直接轉到Caffe這個框架下面。
Caffe的缺點是不夠靈活,同時記憶體占用高,Caffe的升級版本Caffe2已經開源了,修復了一些問題,同時工程水平得到了進一步提高。
Theano
Theano於2008年誕生於蒙特婁理工學院,其派生出了大量的深度學習Python軟體包,最著名的包括Blocks和Keras。Theano的核心是一個數學表達式的編譯器,它知道如何獲取你的結構,並使之成為一個使用numpy、高效本地庫的高效代碼,如BLAS和本地代碼(C++)在CPU或GPU上儘可能快地運行。它是為深度學習中處理大型神經網路算法所需的計算而專門設計,是這類庫的首創之一(發展始於2007年),被認為是深度學習研究和開發的行業標準。
但是開發Theano的研究人員大多去了Google參與Tensorflow的開發,所以,某種程度來講Tensorflow就像Theano的孩子。
MXNet
MXNet的主要作者是李沐,最早就是幾個人抱著純粹對技術和開發的熱情做起來的,如今成了亞馬遜的官方框架,有著非常好的分散式支持,而且性能特別好,占用顯存低,同時其開發的語言接口不僅僅有Python和C++,還有R,Matlab,Scala,JavaScript,等等,可以說能夠滿足使用任何語言的人。
但是MXNet的缺點也很明顯,教程不夠完善,使用的人不多導致社區不大,同時每年很少有比賽和論文是基於MXNet實現的,這就使得MXNet的推廣力度和知名度不高。
Torch
Torch是一個有大量機器學習算法支持的科學計算框架,其誕生已有十年之久,但是真正起勢得益於Facebook開源了大量Torch的深度學習模組和擴展。Torch的特點在於特別靈活,但是另一個特殊之處是採用了程式語言Lua,在深度學習大部分以Python為程式語言的大環境之下,一個以Lua為程式語言的框架有著更多的劣勢,這一項小眾的語言增加了學習使用Torch這個框架的成本。
PyTorch
PyTorch的前身便是Torch,其底層和Torch框架一樣,但是使用Python重新寫了很多內容,不僅更加靈活,支持動態圖,而且提供了Python接口。它是由Torch7團隊開發,是一個以Python優先的深度學習框架,不僅能夠實現強大的GPU加速,同時還支持動態神經網路,這是很多主流深度學習框架比如Tensorflow等都不支持的。
PyTorch既可以看作加入了GPU支持的numpy,同時也可以看成一個擁有自動求導功能的強大的深度神經網路。除了Facebook外,它已經被Twitter、CMU和Salesforce等機構採用。
套用優勢
深度學習框架的出現降低了入門的門檻,你不需要從複雜的神經網路開始編代碼,你可以根據需要選擇已有的模型,通過訓練得到模型參數,你也可以在已有模型的基礎上增加自己的layer,或者是在頂端選擇自己需要的分類器和最佳化算法(比如常用的梯度下降法)。當然也正因如此,沒有什麼框架是完美的,就像一套積木里可能沒有你需要的那一種積木,所以不同的框架適用的領域不完全一致。 總的來說深度學習框架提供了一些列的深度學習的組件(對於通用的算法,裡面會有實現),當需要使用新的算法的時候就需要用戶自己去定義,然後調用深度學習框架的函式接口使用用戶自定義的新算法。