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