開源的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)正步入成熟,而現(xiàn)在有許多框架具備為個(gè)性化方案提供先進(jìn)的機(jī)器學(xué)習(xí)和人工智能的能力。那么如何決定哪個(gè)開源框架最適合你呢?本文試圖通過對(duì)比深度學(xué)習(xí)各大框架的優(yōu)缺點(diǎn),從而為各位讀者提供一個(gè)參考。你最看好哪個(gè)深度學(xué)習(xí)框架呢?
現(xiàn)在的許多機(jī)器學(xué)習(xí)框架都可以在圖像識(shí)別、手寫識(shí)別、視頻識(shí)別、語音識(shí)別、目標(biāo)識(shí)別和自然語言處理等許多領(lǐng)域大展身手,但卻并沒有一個(gè)完美的深度神經(jīng)網(wǎng)絡(luò)能解決你的所有業(yè)務(wù)問題。所以,本文希望下面的圖表和講解能夠提供直觀方法,幫助讀者解決業(yè)務(wù)問題。
下圖總結(jié)了在 GitHub 中最受歡迎的開源深度學(xué)習(xí)框架排名,該排名是基于各大框架在 GitHub 里的收藏?cái)?shù),這個(gè)數(shù)據(jù)由 Mitch De Felice 在 2017 年 5 月初完成。
TensorFlow
地址: https://www.tensorflow.org/
TensorFlow 最開始是由谷歌一個(gè)稱之為 DistBelief V2 的庫(kù)發(fā)展而來,它是一個(gè)公司內(nèi)部的深度神經(jīng)網(wǎng)絡(luò)庫(kù),隸屬于谷歌大腦項(xiàng)目。有一些人認(rèn)為 TensorFlow 是由 Theano 徹底重構(gòu)而來。
谷歌開源 TensorFlow 后,立即吸引了一大批開發(fā)愛好者。TensorFlow 可以提供一系列的能力,例如圖像識(shí)別、手寫識(shí)別、語音識(shí)別、預(yù)測(cè)以及自然語言處理等。2015 年 11 月 9 號(hào),TensorFlow 在 Apache 2.0 協(xié)議下開源發(fā)布。
TensorFlow 1.0 版本已于 2017 年 2 月 15 日發(fā)布,這個(gè)版本是之前 8 個(gè)版本的優(yōu)化改進(jìn)版,其致力于解決 Tensorflow 之前遇到的一系列問題以及完善一些核心能力。TensorFlow 獲得成功的因素有:
TensorFlow 提供了如下工具:
TensorBoard:對(duì)于網(wǎng)絡(luò)模型和效果來說是一個(gè)設(shè)計(jì)優(yōu)良的可視化工具。
TensorFlow Serving:可以保持相同的服務(wù)器架構(gòu)和 API,使得部署新算法和實(shí)驗(yàn)變得簡(jiǎn)單。TensorFlow Serving 提供了與 TensorFlow 模型開箱即用的整合,但同時(shí)還能很容易擴(kuò)展到其它類型的模型和數(shù)據(jù)。
TensorFlow 編程接口支持 Python 和 C++。隨著 1.0 版本的公布,Java、Go、R 和 Haskell API 的 alpha 版本也將被支持。此外,TensorFlow 還可在谷歌云和亞馬孫云中運(yùn)行。
隨著 0.12 版本的發(fā)行,TensorFlow 將支持 Windows 7、 Windows 10 和 Server 2016。由于 TensorFlow 使用 C++ Eigen 庫(kù),所以庫(kù)可在 ARM 架構(gòu)上編譯和優(yōu)化。這也就意味著你可以在各種服務(wù)器和移動(dòng)設(shè)備上部署你的訓(xùn)練模型,而無需執(zhí)行單獨(dú)的模型解碼器或者加載 Python 解釋器。
TensorFlow 支持細(xì)粒度的網(wǎng)格層,而且允許用戶在無需用低級(jí)語言實(shí)現(xiàn)的情況下構(gòu)建新的復(fù)雜的層類型。子圖執(zhí)行操作允許你在圖的任意邊緣引入和檢索任意數(shù)據(jù)的結(jié)果。這對(duì)調(diào)試復(fù)雜的計(jì)算圖模型很有幫助。
分布式 TensorFlow(Distributed TensorFlow)被加進(jìn)了 0.8 版本,它允許模型并行,這意味著模型的不同部分可在不同的并行設(shè)備上被訓(xùn)練。
自 2016 年 3 月,斯坦福大學(xué)、伯克利大學(xué)、多倫多大學(xué)和 Udacity 都將這個(gè)框架作為一個(gè)免費(fèi)的大規(guī)模在線開放課程進(jìn)行教授。
TensorFlow 的缺點(diǎn)如下:
TensorFlow 的每個(gè)計(jì)算流都必須構(gòu)造為一個(gè)靜態(tài)圖,且缺乏符號(hào)性循環(huán)(symbolic loops),這會(huì)帶來一些計(jì)算困難。
沒有對(duì)視頻識(shí)別很有用的三維卷積(3-D convolution)。
盡管 TensorFlow 現(xiàn)在比起始版本(v0.5)快了 58 倍,,但在執(zhí)行性能方面依然落后于競(jìng)爭(zhēng)對(duì)手。
Caffe
地址: http://caffe.berkeleyvision.org/
Caffe 是賈揚(yáng)清的杰作,目前他在 Facebook AI 平臺(tái)擔(dān)任首席工程師。Caffe 可能是自 2013 年底以來第一款主流的工業(yè)級(jí)深度學(xué)習(xí)工具包。正因?yàn)?Caffe 優(yōu)秀的卷積模型,它已經(jīng)成為計(jì)算機(jī)視覺界最流行的工具包之一,并在 2014 年的 ImageNet 挑戰(zhàn)賽中一舉奪魁。Caffe 遵循 BSD 2-Clause 協(xié)議。
Caffe 的快速使其完美應(yīng)用于實(shí)驗(yàn)研究和商業(yè)部署。Caffe 可在英偉達(dá)單個(gè) K40 GPU 上每天處理 6000 萬張圖像。這大概是 1 毫秒預(yù)測(cè)一張圖片,4 毫秒學(xué)習(xí)一張圖片的速度,而且最新的版本處理速度會(huì)更快。
Caffe 基于 C++,因此可在多種設(shè)備上編譯。它跨平臺(tái)運(yùn)行,并包含 Windows 端口。Caffe 支持 C++、Matlab 和 Python 編程接口。Caffe 擁有一個(gè)龐大的用戶社區(qū),人們?cè)谄渲袨楸环Q為「Model Zoo(https://github.com/BVLC/caffe/wiki/Model-Zoo)」的深度網(wǎng)絡(luò)庫(kù)做貢獻(xiàn)。AlexNet 和 GoogleNet 就是社群用戶構(gòu)建的兩個(gè)流行網(wǎng)絡(luò)。
雖然 Caffe 在視頻識(shí)別領(lǐng)域是一個(gè)流行的深度學(xué)習(xí)網(wǎng)絡(luò),但是 Caffe 卻不能像 TensorFlow、CNTK 和 Theano 那樣支持細(xì)粒度網(wǎng)絡(luò)層。構(gòu)建復(fù)雜的層類型必須以低級(jí)語言完成。由于其遺留架構(gòu),Caffe 對(duì)循環(huán)網(wǎng)絡(luò)和語言建模的支持總體上很薄弱。
Caffe2
地址: https://caffe2.ai/
目前,賈揚(yáng)清和他在 Facebook 的團(tuán)隊(duì)正在開發(fā)新一代框架 Caffe2。今年 4 月 18 日,F(xiàn)acebook 開源了 Caffe2。Caffe 2 與 Caffe 的區(qū)別是什么?Caffe2 更注重模塊化,在移動(dòng)端、大規(guī)模部署上表現(xiàn)卓越。如同 TensorFlow,Caffe2 使用 C++ Eigen 庫(kù),支持 ARM 架構(gòu)。
用一個(gè)實(shí)用腳本,Caffe 上的模型可輕易地被轉(zhuǎn)變到 Caffe2 上。Caffe 設(shè)計(jì)的選擇使得它處理視覺類型的難題時(shí)很完美。Caffe2 延續(xù)了它對(duì)視覺類問題的支持,且增加了對(duì)自然語言處理、手寫識(shí)別、時(shí)序預(yù)測(cè)有幫助的 RNN 和 LSTM 支持。
期待不久之后能看到 Caffe 2 超越 Caffe,就像它宣稱的那樣在深度學(xué)習(xí)社區(qū)流行。
在本周三英偉達(dá)推出 Volta 架構(gòu)的第一塊加速卡 Tesla V100 后,Caffe 的開發(fā)者第一時(shí)間展示了 Tesla V100 在 Caffe2 上運(yùn)行 ResNet-50 的評(píng)測(cè)。數(shù)據(jù)顯示在新框架和新硬件的配合下,模型每秒鐘可以處理 4100 張圖片。
鏈接: https://caffe2.ai/blog/2017/05/10/caffe2-adds-FP16-training-support.html
CNTK
鏈接: https://github.com/Microsoft/CNTK/wiki
微軟的 CNTK(Microsoft Cognitive Toolkit)最初是面向語音識(shí)別的框架。CNTK 支持 RNN 和 CNN 類型的網(wǎng)絡(luò)模型,從而在處理圖像、手寫字體和語音識(shí)別問題上,它是很好的選擇。使用 Python 或 C++ 編程接口,CNTK 支持 64 位的 Linux 和 Windows 系統(tǒng),在 MIT 許可證下發(fā)布。
與 TensorFlow 和 Theano 同樣,CNTK 使用向量運(yùn)算符的符號(hào)圖(symbolic graph)網(wǎng)絡(luò),支持如矩陣加/乘或卷積等向量操作。此外,像 TensorFlow 和 Theano 一樣,CNTK 有豐富的細(xì)粒度的網(wǎng)絡(luò)層構(gòu)建。構(gòu)建塊(操作)的細(xì)粒度使用戶不需要使用低層次的語言(如 Caffe)就能創(chuàng)建新的復(fù)雜的層類型。
CNTK 也像 Caffe 一樣基于 C++ 架構(gòu),支持跨平臺(tái)的 CPU/GPU 部署。CNTK 在 Azure GPU Lab 上顯示出最高效的分布式計(jì)算性能。目前,CNTK 不支持 ARM 架構(gòu),這限制了其在移動(dòng)設(shè)備上的功能。
MXNet
鏈接: http://mxnet.io/
MXNet(發(fā)音為 mix-net)起源于卡內(nèi)基梅隆大學(xué)和華盛頓大學(xué)的實(shí)驗(yàn)室。MXNet 是一個(gè)全功能、可編程和可擴(kuò)展的深度學(xué)習(xí)框架,支持最先進(jìn)的深度學(xué)習(xí)模型。MXNet 支持混合編程模型(命令式和聲明式編程)和多種編程語言的代碼(包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript)。2017 年 1 月 30 日,MXNet 被列入 Apache Incubator 開源項(xiàng)目。
MXNet 支持深度學(xué)習(xí)架構(gòu),如卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和其包含的長(zhǎng)短時(shí)間記憶網(wǎng)絡(luò)(LTSM)。該框架為圖像、手寫文字和語音的識(shí)別和預(yù)測(cè)以及自然語言處理提供了出色的工具。有些人稱 MXNet 是世界上最好的圖像分類器。
MXNet 具有可擴(kuò)展的強(qiáng)大技術(shù)能力,如 GPU 并行和內(nèi)存鏡像、快速編程器開發(fā)和可移植性。此外,MXNet 與 Apache Hadoop YARN(一種通用分布式應(yīng)用程序管理框架)集成,使 MXNet 成為 TensorFlow 有力的競(jìng)爭(zhēng)對(duì)手。
MXNet 不僅僅只是深度網(wǎng)絡(luò)框架,它的區(qū)別在于支持生成對(duì)抗網(wǎng)絡(luò)(GAN)模型。該模型啟發(fā)自實(shí)驗(yàn)經(jīng)濟(jì)學(xué)方法的納什均衡。
Torch
鏈接: http://torch.ch/
Torch 由 Facebook 的 Ronan Collobert 和 Soumith Chintala,Twitter 的 Clement Farabet(現(xiàn)任職于英偉達(dá)),以及 Google DeepMind 的 Koray Kavukcuoglu 共同開發(fā)。很多科技巨頭(如 Facebook、Twitter 和英偉達(dá))都使用定制版的 Torch 用于人工智能研究,這大大促進(jìn)了 Torch 的開發(fā)。Torch 是 BSD 3 協(xié)議下的開源項(xiàng)目。然而,隨著 Facebook 對(duì) Caffe 2 的研究,以及其對(duì)移動(dòng)設(shè)備的支持,Caffe 2 正成為主要的深度學(xué)習(xí)框架。
Torch 的編程語言為 Lua。Lua 不是主流語言,在開發(fā)人員沒有熟練掌握 Lua 之前,使用 Torch 很難提高開發(fā)的整體生產(chǎn)力。
Torch 缺乏 TensorFlow 的分布式應(yīng)用程序管理框架,也缺乏 MXNet 和 Deeplearning4J 對(duì) YARN 的支持。缺乏多種編程語言的 API 也限制了開發(fā)人員。
PyTorch
地址: http://pytorch.org/
PyTorch 由 Adam Paszke、Sam Gross 與 Soumith Chintala 等人牽頭開發(fā),其成員來自 Facebook FAIR 和其他多家實(shí)驗(yàn)室。它是一種 Python 優(yōu)先的深度學(xué)習(xí)框架,在今年 1 月被開源,提供了兩種高層面的功能:
使用強(qiáng)大的 GPU 加速的 Tensor 計(jì)算(類似 numpy)
構(gòu)建于基于 tape 的 autograd 系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)
該框架結(jié)合了 Torch7 高效靈活的 GPU 加速后端庫(kù)與直觀的 Python 前端,它的特點(diǎn)是快速成形、代碼可讀和支持最廣泛的深度學(xué)習(xí)模型。如有需要,你可以復(fù)用你最喜歡的 Python 軟件包(如 numpy、scipy 和 Cython)來擴(kuò)展 PyTorch。該框架因?yàn)槠潇`活性和速度,在推出以后迅速得到了開發(fā)者和研究人員的青睞。隨著 GitHub 上越來越多代碼的出現(xiàn),PyTorch 作為新框架缺乏資源的問題已經(jīng)得以緩解。
Deeplearning4J
地址: https://deeplearning4j.org/
Deeplearning4J(DL4J)是用 Java 和 Scala 編寫的 Apache 2.0 協(xié)議下的開源、分布式神經(jīng)網(wǎng)絡(luò)庫(kù)。DL4J 最初由 SkyMind 公司的 Adam Gibson 開發(fā),是唯一集成了 Hadoop 和 Spark 的商業(yè)級(jí)深度學(xué)習(xí)網(wǎng)絡(luò),并通過 Hadoop 和 Spark 協(xié)調(diào)多個(gè)主機(jī)線程。DL4J 使用 Map-Reduce 來訓(xùn)練網(wǎng)絡(luò),同時(shí)依賴其它庫(kù)來執(zhí)行大型矩陣操作。
DL4J 框架支持任意芯片數(shù)的 GPU 并行運(yùn)行(對(duì)訓(xùn)練過程至關(guān)重要),并支持 YARN(Hadoop 的分布式應(yīng)用程序管理框架)。DL4J 支持多種深度網(wǎng)絡(luò)架構(gòu):RBM、DBN、卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、RNTN 和長(zhǎng)短時(shí)間記憶網(wǎng)絡(luò)(LTSM)。DL4J 還對(duì)矢量化庫(kù) Canova 提供支持。
DL4J 使用 Java 語言實(shí)現(xiàn),本質(zhì)上比 Python 快。在用多個(gè) GPU 解決非平凡圖像(non-trivial image)識(shí)別任務(wù)時(shí),它的速度與 Caffe 一樣快。該框架在圖像識(shí)別、欺詐檢測(cè)和自然語言處理方面的表現(xiàn)出眾。
Theano
地址: http://deeplearning.net/software/theano/
Theano 由蒙特利爾大學(xué)算法學(xué)習(xí)人工智能實(shí)驗(yàn)室(MILA)維護(hù)。以 Theano 的創(chuàng)始人 Yoshua Bengio 為首,該實(shí)驗(yàn)室是深度學(xué)習(xí)研究領(lǐng)域的重要貢獻(xiàn)者,擁有約 30 至 40 名學(xué)生和教師。Theano 支持快速開發(fā)高效的機(jī)器學(xué)習(xí)算法,在 BSD 協(xié)議下發(fā)布。
Theano 的架構(gòu)如同一個(gè)黑箱;整個(gè)代碼庫(kù)和接口使用 Python,其中 C/CUDA 代碼被打包成 Python 字符串。這使得開發(fā)人員很難導(dǎo)航(navigate)、調(diào)試和重構(gòu)。
Theano 開創(chuàng)了將符號(hào)圖用于神經(jīng)網(wǎng)絡(luò)編程的趨勢(shì)。Theano 的符號(hào)式 API 支持循環(huán)控制(即 scan),這使得實(shí)現(xiàn) RNN 容易且高效。
Theano 缺乏分布式應(yīng)用程序管理框架,只支持一種編程開發(fā)語言。Theano 是很好的學(xué)術(shù)研究工具,在單個(gè) CPU 上運(yùn)行的效率比 TensorFlow 更有效。然而,在開發(fā)和支持大型分布式應(yīng)用程序時(shí),使用 Theano 可能會(huì)遇到挑戰(zhàn)。
開源 vs. 非開源
隨著深度學(xué)習(xí)的不斷發(fā)展,我們必將看到 TensorFlow、Caffe 2 和 MXNet 之間的不斷競(jìng)爭(zhēng)。另一方面,軟件供應(yīng)商也會(huì)開發(fā)具有先進(jìn)人工智能功能的產(chǎn)品,從數(shù)據(jù)中獲取最大收益。風(fēng)險(xiǎn):你將購(gòu)買非開源的人工智能產(chǎn)品還是使用開源框架?有了開源工具,確定最適合的深度學(xué)習(xí)框架也是兩難問題。在非開源產(chǎn)品中,你是否準(zhǔn)備了退出策略?人工智能的收益會(huì)隨著工具的學(xué)習(xí)能力的進(jìn)步而上升,所以看待這些問題都需要用長(zhǎng)遠(yuǎn)的觀點(diǎn)。
評(píng)論
查看更多