□編譯/陳亮
AI入門 快速讀懂深度學(xué)習(xí)框架
□編譯/陳亮
陳亮 本刊編輯
本文編譯自ai.icymi,文章全面介紹了目前在GitHub上最流行的幾種深度學(xué)習(xí)框架,同時(shí)進(jìn)行了詳細(xì)的對(duì)比。希望通過此文,可以加深對(duì)開源深度學(xué)習(xí)框架的理解,并在學(xué)習(xí)過程中更好地選擇適合自己的框架類型,提高效率。
Caffe是一種流行的視覺識(shí)別深度學(xué)習(xí)網(wǎng)絡(luò)。
Caffe 2繼續(xù)強(qiáng)力支持視覺類型問題,但增加了自然語言處理、手寫識(shí)別和時(shí)間序列預(yù)測(cè)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)。
MXNet支持深度學(xué)習(xí)架構(gòu),如卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),包括長(zhǎng)短期記憶網(wǎng)絡(luò)(LTSM)。
然而,隨著Facebook最新宣布其改變航向,使Caffe 2成為主要的深入學(xué)習(xí)框架,以便在移動(dòng)設(shè)備上部署深入學(xué)習(xí)。
DL4J具有豐富的深層網(wǎng)絡(luò)架構(gòu)支持:受限玻爾茲曼機(jī)(RBM)、深信度神經(jīng)網(wǎng)絡(luò)(DBN)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、遞歸張量神經(jīng)網(wǎng)絡(luò)(RNTN)和長(zhǎng)短期記憶網(wǎng)絡(luò)(LTSM)。
開源深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)即將到來,幾種框架均通過專有解決方案提供先進(jìn)的機(jī)器學(xué)習(xí)和人工智能的功能。如何確定哪個(gè)開源框架最適合你呢?
在“大數(shù)據(jù)-智能數(shù)據(jù)的路線圖”一文中,作者描述了一套機(jī)器學(xué)習(xí)架構(gòu),它提供包括圖像、手寫、視頻、語音識(shí)別、自然語言處理和對(duì)象識(shí)別等高級(jí)功能。沒有一種完善的深度學(xué)習(xí)網(wǎng)絡(luò)可以解決你“所有”的業(yè)務(wù)問題。希望下面的內(nèi)容能夠?yàn)槟愕臉I(yè)務(wù)提供最適合目的框架的見解。
以下有關(guān)深度學(xué)習(xí)框架的內(nèi)容,總結(jié)了GitHub中最流行的開源深度網(wǎng)絡(luò)庫(kù)。排名基于開發(fā)者在GitHub收到的星星數(shù)。(數(shù)字來源于2017年5月初)
Google的TensorFlow來自早期的名為DistBelief V2的Google庫(kù),它是作為Google Brain項(xiàng)目一部分而開發(fā)的專有深度網(wǎng)絡(luò)庫(kù)。有些人形容TensorFlow是對(duì)Theano的重新設(shè)計(jì)。
當(dāng)開源TensorFlow后,谷歌立即獲得了大量的關(guān)注。TensorFlow支持廣泛的功能,如圖像、手寫、語音識(shí)別、預(yù)測(cè),以及自然語言處理。TensorFlow于2015年11月9日以Apache 2.0許可開源。
TensorFlow在2017年2月15日發(fā)布了1.0版本。此版本是八個(gè)先前版本的累積,它解決了TensorFlow很多不完整的核心功能和性能問題。以下是TensorFlow成功的性能介紹。
TensorFlow提供以下工具:
TensorFlow編程接口包括Python和C ++。隨著版本1.0的公布,將支持Java、GO、R和Haskell API的alpha版本接口。此外,TensorFlow在Google和Amazon Cloud Environment中獲得支持。
隨著 TensorFlow r0.12 版本的發(fā)布,這一開源軟件庫(kù)現(xiàn)已支持 Windows7、10 和 Server 2016。該開源軟件庫(kù)可以在ARM架構(gòu)上編譯和優(yōu)化,因?yàn)樗褂肅 ++ Eigen庫(kù)。這意味著你可以在各種服務(wù)器或移動(dòng)設(shè)備上部署經(jīng)過培訓(xùn)的模型,而無需實(shí)現(xiàn)單獨(dú)的模型解碼器或加載Python解釋器。
TensorFlow支持精細(xì)的網(wǎng)格層,允許用戶構(gòu)建新的復(fù)雜層類型,而不用低級(jí)語言實(shí)現(xiàn)。子圖執(zhí)行允許你在圖的任何邊緣引入和檢索自由數(shù)據(jù)的結(jié)果,這對(duì)于調(diào)試復(fù)雜的計(jì)算圖非常有幫助。
分布式TensorFlow引入了版本0.8,允許模型并行,這意味著模型的不同部分在不同的設(shè)備上可以并行訓(xùn)練。
該框架正在斯坦福大學(xué)、加州大學(xué)伯克利分校、多倫多大學(xué)和優(yōu)達(dá)學(xué)城(Udacity)上推出相關(guān)課程。
Caffe是領(lǐng)導(dǎo)Facebook AI平臺(tái)工程的賈揚(yáng)清的心血結(jié)晶。Caffe可能是第一個(gè)主流的行業(yè)級(jí)深度學(xué)習(xí)工具包,開創(chuàng)于2013年底。由于其優(yōu)良的卷積模型,它是計(jì)算機(jī)視覺界最受歡迎的工具包之一,并在2014年ImageNet挑戰(zhàn)賽中獲得勝利。Caffe在BSD 2-Clause開源許可后發(fā)布。
速度使Caffe成為研究實(shí)驗(yàn)和商業(yè)部署的完美選擇。Caffe可以使單個(gè)Nvidia K40 GPU每天處理超過6000萬張圖片。對(duì)于推理,速度為1毫秒/圖,對(duì)于學(xué)習(xí)過程,速度為4毫秒/圖,最新版本的庫(kù)的速度更快。
Caffe是基于C++的,可以在各種設(shè)備上編譯。它是跨平臺(tái)的,包括一個(gè)Windows的端口。Caffe支持C ++、Matlab和Python的編程接口。Caffe擁有一個(gè)龐大的用戶社區(qū),為自己的深層網(wǎng)絡(luò)存儲(chǔ)庫(kù)(稱為“Model Zoo”)作出貢獻(xiàn)。AlexNet和GoogleNet是社區(qū)可用的兩種流行的用戶網(wǎng)絡(luò)。
Caffe是視覺識(shí)別的流行深度學(xué)習(xí)網(wǎng)絡(luò)。但是,Caffe不支持像TensorFlow、CNTK和Theano那樣的細(xì)粒度網(wǎng)絡(luò)層。構(gòu)建復(fù)合層類型必須以低級(jí)語言完成。由于其傳統(tǒng)的架構(gòu),它對(duì)常規(guī)網(wǎng)絡(luò)和語言建模的支持,總體上很差。
Facebook的賈揚(yáng)清和他的團(tuán)隊(duì)正在研究Caffe 2。在2017年4月18日,F(xiàn)acebook根據(jù)BSD許可協(xié)議開源了Caffe 2。Caffe 2與Caffe有何不同? Caffe 2更側(cè)重于模塊化和卓越的移動(dòng)和大規(guī)模部署。像TensorFlow一樣,Caffe 2將使用C ++ Eigen庫(kù)來支持ARM架構(gòu)。
Caffe模型可以輕松地轉(zhuǎn)換為具有實(shí)用程序腳本的Caffe 2模型。Caffe設(shè)計(jì)選擇使其成為處理視覺類型問題的理想選擇。Caffe 2繼續(xù)強(qiáng)力支持視覺類型問題,但增加了自然語言處理、手寫識(shí)別,以及時(shí)間序列預(yù)測(cè)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)。
希望Caffe 2在不久的將來會(huì)超越Caffe,因?yàn)樵谏疃葘W(xué)習(xí)社區(qū)中受大眾熱捧。
Microsoft Cognitive Toolkit(CNTK)是一種深度神經(jīng)網(wǎng)絡(luò),最初是為了提高語音識(shí)別而開發(fā)的。CNTK支持RNN和CNN類型的神經(jīng)模型,使其成為處理圖像、手寫和語音識(shí)別問題的最佳候選。CNTK支持使用Python或C++編程接口的64位Linux和Windows操作系統(tǒng),并根據(jù)MIT許可發(fā)布。
CNTK與TensorFlow和Theano的組成相似,其網(wǎng)絡(luò)被指定為向量運(yùn)算的符號(hào)圖,如矩陣的加法/乘法或卷積。此外,像TensorFlow和Theano一樣,CNTK允許構(gòu)建網(wǎng)絡(luò)層的細(xì)粒度。構(gòu)建塊(操作)的細(xì)粒度允許用戶創(chuàng)造新的復(fù)合層類型,而不用低級(jí)語言實(shí)現(xiàn)(如Caffe)。
像Caffe一樣,CNTK也是基于C++的、具有跨平臺(tái)的CPU/GPU支持。 CNTK在Azure GPU Lab提供了最高效的分布式計(jì)算性能。目前,CNTK對(duì)ARM架構(gòu)缺乏支持,限制了其在移動(dòng)設(shè)備上的功能。
MXNet(發(fā)音為“mix-net”)起源于卡內(nèi)基梅隆大學(xué)和華盛頓大學(xué)。MXNet是一個(gè)功能齊全,可編程和可擴(kuò)展的深入學(xué)習(xí)框架,支持最先進(jìn)的深入學(xué)習(xí)模式。 MXNet提供了混合編程模型(命令式和聲明式)和大量編程語言的代碼(包括Python、C++、R、Scala、Julia、Matlab和JavaScript)的能力。2017年1月30日,MXNet進(jìn)入Apache基金會(huì),成為Apache的孵化器項(xiàng)目。
MXNet支持深度學(xué)習(xí)架構(gòu),如卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),包括長(zhǎng)短期記憶網(wǎng)絡(luò)(LTSM)。該框架為成像、手寫、語音識(shí)別、預(yù)測(cè)和自然語言處理提供了出色的功能。有些人稱MXNet是世界上最好的圖像分類器。
MXNet具有強(qiáng)大的技術(shù),包括擴(kuò)展能力,如GPU并行性和內(nèi)存鏡像、編程器開發(fā)速度和可移植性。此外,MXNet與Apache Hadoop YARN(一種通用的、分布式的應(yīng)用程序管理框架)集成,使MXNet成為TensorFlow的競(jìng)爭(zhēng)對(duì)手。
MXNet的區(qū)別就是支持生成對(duì)抗網(wǎng)絡(luò)(GAN)模型的唯一深層網(wǎng)絡(luò)框架。
亞馬遜首席技術(shù)官 Werner Vogels選擇公開支持MXNet:“今天,我們宣布MXNet將成為我們的深入學(xué)習(xí)框架?!盫ogel接著說:“我們計(jì)劃在現(xiàn)有和即將推出的新服務(wù)中使用它?!疤O果公司在2016年收購(gòu)Graphlab / Dato / Turi之后也傳聞使用它。
Torch由Facebook的Ronan Collobert和SoumithChintala、Twitter的Clement Farabet(現(xiàn)在在Nvidia),以及Google Deep Mind的KorayKavukcuoglu共同開發(fā)。Torch的主要貢獻(xiàn)者是Facebook,Twitter和Nvidia。Torch獲得BSD 3開源許可。然而,隨著Facebook最新宣布其改變航向,使Caffe 2成為主要的深入學(xué)習(xí)框架,以便在移動(dòng)設(shè)備上部署深入的學(xué)習(xí)。
Torch以Lua編程語言實(shí)現(xiàn)。 Lua不是主流語言,只有在你的員工熟練掌握之前,才會(huì)影響開發(fā)人員的整體效率。
Torch缺乏TensorFlow的分布式應(yīng)用程序管理框架或者在MXNet或Deeplearning4J中支持YARN。由于缺乏大量的API編程語言也就限制了開發(fā)人員。
Deeplearning4J(DL4J)是由Java和Scala編寫的Apache 2.0授權(quán)的開放源碼,分布式神經(jīng)網(wǎng)絡(luò)庫(kù)。DL4J是SkyMind的Adam Gibson的創(chuàng)意,是唯一與Hadoop和Spark集成的商業(yè)級(jí)深度學(xué)習(xí)網(wǎng)絡(luò),它協(xié)調(diào)多個(gè)主機(jī)線程。DL4J是獨(dú)特的深度學(xué)習(xí)框架,因?yàn)樗褂肕ap-Reduce來訓(xùn)練網(wǎng)絡(luò),同時(shí)依靠其他庫(kù)來執(zhí)行大型矩陣操作。
DL4J框架內(nèi)置GPU支持,這是訓(xù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)、遞歸張量神經(jīng)網(wǎng)絡(luò)(RNTN),和長(zhǎng)短期記憶網(wǎng)絡(luò)(LTSM)。DL4J還包括名為Canova的矢量庫(kù)的支持。
DL4J在Java中開源,本質(zhì)上就比Python快。它與Caffe一樣快,用于使用多個(gè)GPU的非平凡的圖像識(shí)別任務(wù)。該框架為圖像識(shí)別、欺詐檢測(cè)和自然語言處理提供了出色的功能。
Theano由蒙特利爾大學(xué)學(xué)習(xí)算法學(xué)院(MILA)積極維護(hù)。以Theano的創(chuàng)始人YoshuaBengio為首,該實(shí)驗(yàn)室擁有約30—40名教師和學(xué)生,是深入學(xué)習(xí)研究的重要貢獻(xiàn)者。Theano支持快速開發(fā)高效的機(jī)器學(xué)習(xí)算法,并通過BSD許可發(fā)布。
Theano架構(gòu)相當(dāng)簡(jiǎn)單,整個(gè)代碼庫(kù)和接口是Python,其中C/CUDA代碼被打包成Python字符串。對(duì)一個(gè)開發(fā)者來說這很難駕馭、調(diào)試和重構(gòu)。
Theano開創(chuàng)了使用符號(hào)圖來編程網(wǎng)絡(luò)的趨勢(shì)。Theano的符號(hào)API支持循環(huán)控制,即所謂的掃描,這使得實(shí)現(xiàn)RNN更容易、更高效。
Theano缺乏分布式應(yīng)用程序管理框架,只支持一種編程開發(fā)語言。Theano是學(xué)術(shù)研究的一個(gè)很好的工具,在一個(gè)CPU上比TensorFlow更有效地運(yùn)行。然而,在開發(fā)和支持大型分布式應(yīng)用程序時(shí),可能會(huì)遇到挑戰(zhàn)。
隨著深入學(xué)習(xí)的不斷成熟,你將會(huì)發(fā)現(xiàn)TensorFlow、Caffe 2和MXNet之間的競(jìng)爭(zhēng)是在預(yù)料之中的。隨著軟件供應(yīng)商開發(fā)具有最先進(jìn)的智能產(chǎn)品,從而在你提供的數(shù)據(jù)中獲得最大收益。風(fēng)險(xiǎn)是,你會(huì)購(gòu)買一種產(chǎn)品,是建立在專有基礎(chǔ)上的,還是建立在開源基礎(chǔ)上的?有了開放源碼,你會(huì)很難選擇哪個(gè)深入學(xué)習(xí)框架是最適合的。在專有的方法中,你的退出策略是什么?我們不應(yīng)以短期來看,因?yàn)?,人工智能的回?bào)在于其學(xué)習(xí)能力的成熟度。
手機(jī)掃碼閱讀