0
深度學(xué)習(xí)是機器學(xué)習(xí)中一種基于對數(shù)據(jù)進行表征學(xué)習(xí)的方法,作為當(dāng)下最熱門的話題,谷歌、Facebook、微軟等巨頭紛紛圍繞深度學(xué)習(xí)做了一系列研究,一直在支持開源深度學(xué)習(xí)框架的建設(shè)。
過去一年間,在這些巨頭的加持下,深度學(xué)習(xí)框架格局發(fā)生了極大改變:新框架橫空出世,舊的框架也逐漸退出歷史舞臺,而框架與框架之間的聯(lián)系也更加緊密,生態(tài)更為開放。這一年,雷鋒網(wǎng) AI 科技評論也在時刻關(guān)注著這些發(fā)展和變化,下面這些話題,每一個都引起了開發(fā)者此起彼伏的討論:
Facebook 開源 PyTorch,成為 TensorFlow 強敵
Theano 完成歷史使命,功成身退
ONNX 開放平臺橫空出世,力圖促進開放的開發(fā)生態(tài)
CNTK,Keras,MXNet 均迎來重大更新
微軟攜手亞馬遜推出 Gluon 深度學(xué)習(xí)庫,英特爾推出增強學(xué)習(xí)框架 Coach
針對移動終端,Caffe2 和 TensorFlow Lite 先后開源
接下來,雷鋒網(wǎng) AI 科技評論會盤點上述機器學(xué)習(xí)框架之間的重大發(fā)展和改變,以饗讀者。
Facebook 開源 PyTorch,以風(fēng)起云涌之勢占領(lǐng)開發(fā)者社區(qū)
2017 年初,F(xiàn)acebook 在機器學(xué)習(xí)和科學(xué)計算工具 Torch 的基礎(chǔ)上,針對 Python 語言發(fā)布了全新的機器學(xué)習(xí)工具包——PyTorch。PyTorch 實際上是 NumPy 的替代,它支持 GPU,有著更高級的功能,可以用來構(gòu)建和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)。一經(jīng)發(fā)布,它便受到廣泛關(guān)注和討論。經(jīng)過將近一年的發(fā)展,目前 PyTorch 已經(jīng)成為從業(yè)者最重要的研發(fā)工具之一。
年初發(fā)布 PyTorch 時,F(xiàn)acebook 曾表示,「它有望輔助、或在一定程度上替代現(xiàn)有的 Python 數(shù)學(xué)庫(比如 NumPy)。」目前來看,PyTorch 的使用越來越廣泛,這一預(yù)言成為現(xiàn)實。
在眾多開發(fā)者眼中,PyTorch 是 TensorFlow 之外一個非常好的選擇。
以下為 PyTorch 主要優(yōu)勢:
它處于機器學(xué)習(xí)第一大語言 Python 的生態(tài)圈之中,使得開發(fā)者能接入廣大的 Python 庫和軟件。因此,Python 開發(fā)者能夠用他們熟悉的風(fēng)格寫代碼,而不需要針對外部 C 語言或 C++ 庫的 wrapper,使用它的專門語言。
不需要從頭重新構(gòu)建整個網(wǎng)絡(luò),它為改進現(xiàn)有的神經(jīng)網(wǎng)絡(luò)提供了更快速的方法——采用動態(tài)計算圖(dynamic computational graph)結(jié)構(gòu),而不是大多數(shù)開源框架,比如 TensorFlow、Caffe、CNTK、Theano 等采用的靜態(tài)計算圖。
PyTorch 中用于數(shù)據(jù)加載的 API 設(shè)計得很好。接口在數(shù)據(jù)集、采樣器和數(shù)據(jù)加載器中有明確規(guī)定。數(shù)據(jù)加載器接收數(shù)據(jù)集和采樣器,根據(jù)采樣器的調(diào)度,在數(shù)據(jù)集上生成迭代器。加載并行數(shù)據(jù)就像把 num_workers 語句傳遞到數(shù)據(jù)加載器一樣簡單。
采用了定制的 GPU 內(nèi)存分配器。這使得開發(fā)者的深度學(xué)習(xí)模型能夠有「最大限度的內(nèi)存效能」,訓(xùn)練比從前更大的深度神經(jīng)網(wǎng)絡(luò)。
GitHub 地址:https://github.com/pytorch/pytorch
TensorFlow 遇強敵,引入動態(tài)圖機制等多個更新
TensorFlow 是 Google 于 2015 年底推出的深度學(xué)習(xí)框架。過去兩年間,它在開發(fā)者社區(qū)享有盛譽,目前已成為最為常用的深度學(xué)習(xí)框架。它的功能全,社區(qū)好,因此使用率也一直穩(wěn)定保持領(lǐng)先。而隨著 PyTorch 等框架的橫空出世,因為文檔和接口混亂,使用繁瑣等缺點,TensorFlow 廣受詬病。
在 2017 年,開發(fā)團隊不斷為 TensorFlow 引入新的功能:年初發(fā)布 TensorFlow 1.0,實現(xiàn)對 Keras 的全面支持;年底引入 Eager Execution 動態(tài)圖機制,讓開發(fā)變得更加簡單和直觀。
以下為 TensorFlow 被大家廣為稱贊的優(yōu)點:
TensorFlow 的 Saver 對象很容易使用,并為檢查點(check-pointing)提供了更多選擇。
在序列化中,TensorFlow 的主要優(yōu)點是可以將整個圖保存為協(xié)議緩沖區(qū)。這包括參數(shù)和運算。此外,該圖可以通過其他支持的語言 (C++,Java) 加載。這對不支持 Python 的調(diào)度棧來說至關(guān)重要。理論上,在改變模型源代碼之后,你想要運行舊模型時它也能有所幫助。
支持移動和嵌入式部署,雖然將 TensorFlow 部署到 Android 或 iOS 上需要大量的工作,但不必用 Java 或 C++重寫模型的整個推理程序。
此外,TensorFlow Serving 支持高性能的服務(wù)器端部署,可以支持用戶輕松地?fù)Q用模型而不會降低服務(wù)性能。
另外,它在年底引入 Eager Execution——一種命令式、由運行定義的接口,一旦從 Python 被調(diào)用可立即執(zhí)行操作,這使得 TensorFlow 的入門學(xué)習(xí)變得更簡單,也使得研發(fā)工作變得更直觀。
GitHub 地址:https://github.com/tensorflow/tensorflow
Theano 完成歷史使命,功成身退
作為深度學(xué)習(xí)框架中祖師級的存在,由 Yoshua Bengio 主導(dǎo)的 Theano 在完成自己的歷史使命之后,退出歷史舞臺。
據(jù)雷鋒網(wǎng) AI 科技評論了解,Theano 基于 Python,是個擅長處理多維數(shù)組的庫(這方面類似于 NumPy),它的設(shè)計初衷是執(zhí)行深度學(xué)習(xí)中大規(guī)模神經(jīng)網(wǎng)絡(luò)算法的運算。大家可以把它理解為一個數(shù)學(xué)表達(dá)式的編譯器:用符號式語言定義你想要的結(jié)果,該框架會對你的程序進行編譯,來高效運行于 GPU 或 CPU。
在過去的很長一段時間內(nèi),Theano 都是深度學(xué)習(xí)開發(fā)與研究的行業(yè)標(biāo)準(zhǔn)。比起深度學(xué)習(xí)庫,它更像是一個研究平臺,需要開發(fā)者從底層開始做許多工作,來創(chuàng)建自己需要的模型。Theano 早期的開發(fā)者有 Yoshua Bengio 和 Ian Goodfellow,由于出身學(xué)界,它最初是為學(xué)術(shù)研究而設(shè)計。
對于 Theano 的退出,有開發(fā)者這樣評價,「它開啟了基于符號運算的機器學(xué)習(xí)框架的先河,然后隨著 TensorFlow 和 PyTorch 的崛起,完成自己的歷史任務(wù)?!?/p>
Bengio 在告別郵件中表示:
支持深度學(xué)習(xí)研究的軟件生態(tài)系統(tǒng)快速進化,且狀態(tài)良好;開源軟件成為規(guī)范,還有很多別的深度學(xué)習(xí)框架可選,滿足著從探索全新想法到將其部署實現(xiàn)的全部需求;在激烈競爭中,行業(yè)參與者們支持著不同的軟件堆棧。
多年以來,我們都以 Theano 的創(chuàng)新深感自豪,其創(chuàng)新也正被其他框架繼承和優(yōu)化。比如,把模型表達(dá)為數(shù)學(xué)表達(dá)式、重寫計算圖以獲得更優(yōu)性能和內(nèi)存使用、GPU 上的透明執(zhí)行、更高階的自動微分,正在全部成為主流。
在這一背景下,我們認(rèn)為繼續(xù)維護 Theano 不再是推動全新研究與應(yīng)用的最佳方式。即使來自學(xué)界、業(yè)界的貢獻(xiàn)與支持在不斷增加,但維持陳舊的代碼庫已經(jīng)成為了創(chuàng)新的阻礙。
Theano 雖然已經(jīng)停止更新了,但基本上所有的框架都參考過 Theano,它并不算徹底消失。
GitHub 地址:https://github.com/Theano/Theano
Facebook 聯(lián)手微軟推出 ONNX 標(biāo)準(zhǔn),共筑開放 AI 生態(tài)
2017 年 9 月,F(xiàn)acebook 聯(lián)手微軟發(fā)布了一個全新的開源項目——ONNX(Open Neural Network Exchange),欲借此打造一個開放的深度學(xué)習(xí)開發(fā)工具生態(tài)系統(tǒng),讓不同的神經(jīng)網(wǎng)絡(luò)開發(fā)框架做到互通互用。目前,CNTK,PyTorch , Caffe2,MXNet 已宣布支持 ONNX。
為何要共同打造 ONNX 開放平臺?
目前的開發(fā)現(xiàn)狀如下:大體上,每個框架都會針對某個特定屬性進行優(yōu)化,比如訓(xùn)練速度、對網(wǎng)絡(luò)架構(gòu)的支持、能在移動設(shè)備上推理等等。在大多數(shù)情況下,研發(fā)階段最需要的屬性和產(chǎn)品階段是不一樣的。而在任意一個框架上訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型,無法直接在另一個框架上用。開發(fā)者需要耗費大量時間精力把模型從一個開發(fā)平臺移植到另一個。這導(dǎo)致效率的降低以及進度延遲。
而借助 ONNX,開發(fā)者能實時跟蹤某個神經(jīng)網(wǎng)絡(luò)是如何在框架上生成的,接著,使用這些信息創(chuàng)建一個符合 ONNX 標(biāo)準(zhǔn)的通用計算圖。大家能更方便地在不同框架間切換,為不同任務(wù)選擇最優(yōu)工具。使用支持 ONNX 表示方式的框架,大幅簡化了切換過程,讓開發(fā)者的工具選擇更靈活。
GitHub 地址:https://github.com/onnx/onnx
微軟基于 CNTK,推出 CNTK 2
2016 年初,微軟開源 CNTK 深度學(xué)習(xí)工具包。作為語音識別領(lǐng)域聲名卓著的開發(fā)工具,CNTK 具有相當(dāng)不錯的可擴展性、速度和精確性。
2017 年 6 月,微軟在 GitHub 上放出了 CNTK 的第一個候選(RC)版本,完成內(nèi)測。在 Blog 中,微軟表示,CNTK 是一個針對深度學(xué)習(xí)的系統(tǒng),可以用來加速諸如語音、圖像識別以及搜索相關(guān)性(search relevance)等領(lǐng)域相關(guān)研究,并可運行于 CPU 或英偉達(dá) GPU。此外,CNTK 既可本地運行,也可在云端基于 Azure GPU 運行。
在 6 月更新的這一版本中,Layers 算法庫得到了大幅升級。大量的通用「layers」已預(yù)定義,使編寫包含標(biāo)準(zhǔn)層級的簡單網(wǎng)絡(luò)變得十分容易。新的 Cognitive Toolkit 評估算法庫在易用性和性能上也得到大幅升級。
此后,在 2.0 的多個 Beta 和 RC 版本中,微軟逐步更新了 CNTK 對 Python、C++、C#、Java 等的 API 支持,對 Keras 的后端支持等新功能。在 2.1 中,cuDNN 版本升級到 6.0,支持 Universal Windows Platform。在 2.2 中,微軟又做了許多模型支持相關(guān)的改進。
在 2017 年底的 2.3 版本中,又有如下幾個改進:提供了對 ONNX 標(biāo)準(zhǔn)的更好支持,分布式訓(xùn)練支持切換到 NCCL2,改進了 C# API 的支持,增加了網(wǎng)絡(luò)優(yōu)化 API,以及更快的稀疏 Adadelta。
GitHub 地址:https://github.com/Microsoft/CNTK
Keras 2 帶來驚喜,與 TensorFlow 聯(lián)系更加緊密
Keras 是一個崇尚極簡、高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,于 2015 年 3 月發(fā)布。
2017 年 3 月,keras 迎來全新版本——Keras 2。Keras 開發(fā)人員此前在博客中表示,他們更愿意人們將 Keras 視為一種通用的 API 規(guī)范,而不僅僅是一個代碼庫。當(dāng)時,開發(fā)人員將此前的 Keras 實現(xiàn)歸結(jié)為兩個大類:
TensorFlow 的內(nèi)部實現(xiàn),即 TensorFlow 1.0 版本中發(fā)布的 tf.keras 模塊——完全基于 TensorFlow 編寫,并且與所有 TensorFlow 功能深度兼容;
通用實現(xiàn),兼容多種運行后端,包括 Theano 和 TensorFlow 等(將來可能會支持更多其他的后端)。
3 月的版本中,最重要的一項內(nèi)容就是增強了 Keras 與 TensorFlow 的邏輯一致性。另一項重要更新就是 API 的變化。他們重新設(shè)計了絕大部分 API,為將來的擴展和更新預(yù)留了充足的修改空間,并且新設(shè)計的 API 完全兼容于谷歌 TensorFlow 規(guī)范。
而在 2017 年 8 月,Keras 又做了如下幾點更新:修復(fù)漏洞,性能提升,文件改善,為在 TensorFlow 的數(shù)據(jù)張量(比如 Datasets, TFRecords)上訓(xùn)練模型提供了更好的支持,提升 TensorBoard 用戶體驗,提升測試覆蓋范圍。此外,還迎來兩個重大變化:一是讓約束管理(constraint management)基于變量屬性;二是把層和模型中已經(jīng)不再使用的約束屬性移除(不會影響任何用戶)。
GitHub 地址:https://github.com/keras-team/keras
微軟攜手亞馬遜推出 Gluon 深度學(xué)習(xí)庫,全面支持符號式和命令式編程
2017 年 10 月,微軟攜手亞馬遜推出全新 Gluon 深度學(xué)習(xí)庫。它是一個支持符號式和命令式編程的 API,在創(chuàng)造深度學(xué)習(xí)模型的過程中能極大的簡化進程,而不會使訓(xùn)練速度減慢。據(jù)悉,Gluon 能讓開發(fā)者更簡單的學(xué)習(xí)、規(guī)定和調(diào)試深度神經(jīng)網(wǎng)絡(luò),也可以讓接下來的迭代和保持更加簡單,也支持開發(fā)作者快速構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。目前 Gluon 已全面支持亞馬遜 MXNet,接下來也將支持 CNTK,主要的亮點如下:
對于高級用戶,Gluon 支持很多復(fù)雜技術(shù),如動態(tài)圖和靈活結(jié)構(gòu)。
Gluon 包含完全的符號化的自動微分代碼,這些代碼已經(jīng)被程序執(zhí)行了,也包括控制流。Gluon 通過 hybridization 實現(xiàn)這一點:靜態(tài)計算圖先被計算出來,然后在隨后的迭代中緩存和重用。計算圖也可以被導(dǎo)出,例如給移動設(shè)備提供服務(wù)。
自帶一個豐富的內(nèi)嵌層庫,通過重用庫中預(yù)建的構(gòu)件,可以大大簡化規(guī)定復(fù)雜模型架構(gòu)的任務(wù)。
Gluon 支持循環(huán)和不規(guī)則張量(ragged tensors)(能批處理變長度序列),對于 RNN 和 LSTM 模型具有空前的效率。
提供對稀疏和量化數(shù)據(jù)及操作的全面支持,可以用于計算和通信。稀疏性在 NLP 領(lǐng)域的深度神經(jīng)網(wǎng)絡(luò)中非常常見,而量化對于運行時性能評估至關(guān)重要。
雖然在單個 GPU 上進行調(diào)度很容易,但在多個 GPU 上操作要復(fù)雜得多。通過 MXNet 或 CNTK 后端,Gluon 在符號式和命令式模式下都提供自動分配。
GitHub 地址:https://github.com/gluon-api/gluon-api/
背靠亞馬遜,MXNet 繼續(xù)改進
MXNet 由華盛頓大學(xué)和卡內(nèi)基梅隆大學(xué)的研究人員聯(lián)合發(fā)起,2016 年底,它被 Amazon AWS 選為官方深度學(xué)習(xí)平臺。
它的作者李沐曾表示,
MXNet 最早就是幾個人抱著純粹對技術(shù)和開發(fā)的熱情做起來的興趣項目,既沒有指望靠它畢業(yè),也沒想著用它賺錢。
能夠一步一步慢慢的擴大,我覺得最重要的是每個小伙伴對這個事情的投入,和抱著降低深度學(xué)習(xí)門檻的使命。也是讓大家只需要關(guān)心「數(shù)據(jù)量和運算量」,而不是如何有效實現(xiàn)利用硬件;只需要「數(shù)學(xué)公式寫好,根本就不想知道你支持哪些 layer,分別是干什么的」,不用管自動求導(dǎo)如何訓(xùn)練;只需要「把手上的數(shù)據(jù)交出去給云即可,然后花錢租算力」,而不是云上如何管理如何優(yōu)化。
在 2017 年,開發(fā)人員一直在不斷改進和優(yōu)化該框架,目前 MXNet 已經(jīng)迎來 1.0.0 版。
MXNet 于2017年8月加入了動態(tài)圖接口 Gluon,于 2017 年 11 月加入 ONNX 開放體系。
MXNet 主要有如下 3 方面的優(yōu)勢:
效率:節(jié)省計算資源,資源利用效率高;
速度:可以隨著機器和 GPU 的擴展呈線性增長,而且在單臺機器上也有很高的效率;
簡單易用:同時支持命令式編程(imperative programming)和聲明式編程(declarative programming)
GitHub 地址:https://github.com/apache/incubator-mxnet
Intel 開源 Coach,用于訓(xùn)練和評估增強學(xué)習(xí) Agent
2017 年 10 月,英特爾開源增強學(xué)習(xí)框架 Coach。該框架利用多核 CPU 處理能力,用于訓(xùn)練和評估增強學(xué)習(xí) Agent。
Coach 包含許多 Agent 類型的實現(xiàn),包括從單線程實現(xiàn)到多線程實現(xiàn)的無縫轉(zhuǎn)換。Agent 以模塊化方式實現(xiàn),以允許重用不同的構(gòu)建塊來構(gòu)建新的和更復(fù)雜的代理。此外,Coach 可以在單個任務(wù)的基礎(chǔ)上編寫新的 Agent,并切換到同步或異步的多任務(wù)實現(xiàn),并進行最少的更改。
它的主要特點如下:
包含一些領(lǐng)先的增強學(xué)習(xí)算法的多線程實現(xiàn),適用于各種游戲和機器人環(huán)境。它能夠在臺式計算機上高效地訓(xùn)練強化學(xué)習(xí) Agent,而無需任何額外的硬件。
可與如 OpenAI Gym、Roboschool 和 ViZDoom 等頂級環(huán)境進行集成,同時還提供了可視化培訓(xùn)過程和了解 Agent 的基本機制的各種技術(shù),所有的算法都是使用英特爾優(yōu)化的 TensorFlow 來實現(xiàn)的,也可以通過 Intel 的 neon?框架來實現(xiàn)。
GitHub 地址:https://github.com/NervanaSystems/coach
針對移動終端,F(xiàn)acebook Caffe2 VS 谷歌 TensorFlow Lite
2017 年 4 月,F(xiàn)acebook 開源深度學(xué)習(xí)框架 Caffe2。根據(jù)官網(wǎng)介紹,它最大的特點就是輕量、模塊化和擴展性好。Caffe2 可以方便地為手機等移動終端設(shè)備帶來 AI 加持,讓 AI 從云端走向終端。
據(jù) Caffe2 官方博客表示:
長期以來,提起 AI 模型的訓(xùn)練和部署,人們通常都會聯(lián)想到大數(shù)據(jù)中心或超級計算機。之所以會出現(xiàn)這種現(xiàn)象,是因為小型計算設(shè)備在大規(guī)模圖像、視頻、文本和語音處理上具有明顯的短板,無論在速度還是可靠性上都遠(yuǎn)遠(yuǎn)不及大型數(shù)據(jù)中心。
因此在移動設(shè)備上部署 AI 模型,使其能夠快速準(zhǔn)確地處理相關(guān)分析任務(wù),一直是一項有待解決的難題。要解決這個難題,讓 AI 終端化,除了有賴于移動硬件平臺的發(fā)展之外,在軟件框架層面也需要一個靈活輕便的框架支持。
而 Caffe2 正是這樣一個框架。它是在此前流行的開源框架 Caffe 基礎(chǔ)上的重構(gòu)和升級,一方面集成了諸多新出現(xiàn)的算法和模型,另一方面在保證運算性能和可擴展性的基礎(chǔ)上重點加強了框架在輕量級硬件平臺的部署能力。
GitHub 地址:https://github.com/caffe2/caffe2
2017 年 11 月,谷歌發(fā)布 TensorFlow Lite 預(yù)覽版,與 Caffe2 類似,這款框架針對移動和嵌入式設(shè)備等。TensorFlow Lite 是一種全新的設(shè)計,具備如下三點特性:
輕量級(Lightweight):支持機器學(xué)習(xí)模型的推理在較小二進制數(shù)下進行,能快速初始化/啟動。
跨平臺(Cross-platform):可以在許多不同的平臺上運行,現(xiàn)在支持 Android 和 iOS。
快速(Fast):針對移動設(shè)備進行了優(yōu)化,包括大大減少了模型加載時間、支持硬件加速。
TensorFlow Lite 支持 Android 神經(jīng)網(wǎng)絡(luò) API(Android Neural Networks API),當(dāng)加速器(硬件設(shè)備)不可用時,TensorFlow Lite 會返回到 CPU 來執(zhí)行,它目前支持很多針對移動端訓(xùn)練和優(yōu)化好的模型,如 MobileNet,Inception v3,Smart Reply。
開發(fā)人員也表示,TensorFlow Lite 應(yīng)該被看作是 TensorFlow Mobile 的升級,它的功能有很多,目前仍處于緊鑼密鼓的開發(fā)階段。
地址:http://tensorflow.org/mobile/tflite
(完)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。