新聞中心

EEPW首頁 > 智能計算 > 設計應用 > 深度學習開源框架,AI從業(yè)者的選擇之路

深度學習開源框架,AI從業(yè)者的選擇之路

作者: 時間:2017-10-22 來源:網(wǎng)絡 收藏

  本文內(nèi)容來自微軟美國總部機器學習科學家彭河森博士的分享,并由彭河森博士親自整理成文。

本文引用地址:http://m.butianyuan.cn/article/201710/367700.htm

  正如程序語言一樣,深度學習同樣各有優(yōu)劣和適用的場景,那么 從業(yè)者該如何有針對性地選擇這些平臺來玩轉(zhuǎn)深度學習?

  本期特邀了先后在谷歌、亞馬遜、微軟供職的機器學習科學家彭河森博士為大家講述《MXNet火了,從業(yè)者該如何選擇深度學習》。彭河森博士親眼見證并深入?yún)⑴c了這三家巨頭布局深度學習的過程。

  嘉賓介紹

  彭河森,埃默里大學統(tǒng)計學博士?,F(xiàn)擔任微軟美國總部的機器學習科學家、微軟必應廣告部應用資深研究員,當前主要研究方向是自然語言處理和機器學習在廣告和推薦系統(tǒng)中的應用。此外,彭河森博士曾是亞馬遜最年輕的機器學習研究員,之前還供職于谷歌計量經(jīng)濟學部和中科院。

  

  深度學習是一個非常熱門的領(lǐng)域,現(xiàn)在市面上也有很多非常優(yōu)秀的平臺,相信大家在入行之初都在想,這么多平臺應該怎么選擇?

  我先提兩點,可能是一般測評沒有考慮到的東西:

  一個是圖像計算和符號求導,這是深度學習一個非常有意思且非常重要的副產(chǎn)物。

  另一個是深度學習框架的可觸碰深度,這點直接關(guān)系到深度學習系統(tǒng)的發(fā)展未來和用戶的自由度。

  這兩點對于初學者和從業(yè)人員都非常重要,我在后面詳細講述。

  首先要恭喜 MXNet 近日獲得了亞馬遜的背書,MXNet 平臺本身非常優(yōu)秀,具有很多優(yōu)良的性質(zhì):例如多節(jié)點模型訓練,目前是我知道最全面的多語言支持。此外,也有評測說 MXNet 性能方面可以高出同行平臺很多,我們將會在后面的討論中提到?,F(xiàn)在進入正題,我們該如何選擇深度學習開源平臺,參考標準應該是什么樣的?

  一、深度學習開源平臺的 5 大參考標準

  今天主要探討的平臺(或者軟件)包括:Caffe, Torch, MXNet, CNTK, Theano, TensorFlow, Keras。

  如何選擇一個深度學習平臺?我總結(jié)出了下面的這些考量標準。因人而異,因項目而異。可能你是做圖像處理,也可能是自然語言處理,或是數(shù)量金融,根據(jù)你不同的需求,對平臺做出的選擇可能會不同。

  標準1:與現(xiàn)有編程平臺、技能整合的難易程度

  無論是學術(shù)研究還是工程開發(fā),在上馬深度學習課題之前一般都已積累不少開發(fā)經(jīng)驗和資源??赡苣阕钕矚g的編程語言已經(jīng)確立,或者你的數(shù)據(jù)已經(jīng)以一定的形式儲存完畢,或者對模型的要求(如延遲等)也不一樣。標準1 考量的是深度學習平臺與現(xiàn)有資源整合的難易程度。這里我們將回答下面的問題:

  是否需要專門為此學習一種新語言?

  是否能與當前已有的編程語言結(jié)合?

  標準 2: 和相關(guān)機器學習、數(shù)據(jù)處理生態(tài)整合的緊密程度

  我們做深度學習研究最后總離不開各種數(shù)據(jù)處理、可視化、統(tǒng)計推斷等軟件包。這里我們要回答問題:

  建模之前,是否具有方便的數(shù)據(jù)預處理工具?當然大多平臺都自身帶了圖像、文本等預處理工具。

  建模之后,是否具有方便的工具進行結(jié)果分析,例如可視化、統(tǒng)計推斷、數(shù)據(jù)分析?

  標準 3:通過此平臺做深度學習之外,還能做什么?

  上面我們提到的不少平臺是專門為深度學習研究和應用進行開發(fā)的,不少平臺對分布式計算、GPU 等構(gòu)架都有強大的優(yōu)化,能否用這些平臺/軟件做其他事情?

  比如有些深度學習軟件是可以用來求解二次型優(yōu)化;有些深度學習平臺很容易被擴展,被運用在強化學習的應用中。哪些平臺具備這樣的特點?

  這個問題可以涉及到現(xiàn)今深度學習平臺的一個方面,就是圖像計算和自動化求導。

  標準 4:對數(shù)據(jù)量、硬件的要求和支持

  當然,深度學習在不同應用場景的數(shù)據(jù)量是不一樣的,這也就導致我們可能需要考慮分布式計算、多 GPU 計算的問題。例如,對計算機圖像處理研究的人員往往需要將圖像文件和計算任務分部到多臺計算機節(jié)點上進行執(zhí)行。

  當下每個深度學習平臺都在快速發(fā)展,每個平臺對分布式計算等場景的支持也在不斷演進。今天提到的部分內(nèi)容可能在幾個月后就不再適用。

  標準 5:深度學習平臺的成熟程度

  成熟程度的考量是一個比較主觀的考量因素,我個人考量的因素包括:社區(qū)的活躍程度;是否容易和開發(fā)人員進行交流;當前應用的勢頭。

  講了 5 個參考標準后,接下來我們用上面的這些標準對各個深度學習平臺進行評價:

  二、深度學習平臺評價

  評判1:與現(xiàn)有編程平臺、技能整合的難易程度

  標準1 考量的是深度學習平臺與現(xiàn)有資源整合的難易程度。這里我們將回答下面的問題:是否需要專門為此學習一種新語言?是否能與當前已有的編程語言結(jié)合?

  這一個問題的干貨在下面這個表格。這里我們按照每個深度學習平臺的底層語言和用戶語言進行總結(jié),可以得到下表。

  

  其中 Keras 通過 Theano, TensorFlow 作為底層進行建模。

  我們可以看到這樣的趨勢:

  深度學習底層語言多是 C++ / C 這樣可以達到高運行效率的語言。

  操作語言往往會切近實際,我們大致可以斷定 Python 是未來深度學習的操作平臺語言,微軟在 CNTK 2.0 加入了對 Python 的支持。

  當然,還有不少平臺可以通過腳本的方式配置網(wǎng)絡并且訓練模型。

  從格局上來說,Python 作為深度學習建模的基本語言是可以確定的。如果你最喜歡編程語言是 Python,恭喜您,大多數(shù)平臺都可以和你的技術(shù)無縫銜接。如果是 Java 也不用擔心,不少平臺也具有 Java 支持,Deeplearning4J 還是一個原生的 Java 深度學習平臺。

  標準 2: 和相關(guān)機器學習、數(shù)據(jù)處理生態(tài)整合的緊密程度

  這里我們要提一下現(xiàn)在主要的數(shù)據(jù)處理工具,比較全面的數(shù)據(jù)分析工具包括 R 及其相關(guān)生態(tài),Python 及其相關(guān)生態(tài),小眾一點的還包括 Julia 及其相關(guān)生態(tài)。

  完成深度學習建模等任務之后,和生態(tài)的整合也尤為重要。

  我們可以發(fā)現(xiàn),上面和 Python, R, 整合較為緊密,這里 Keras 生態(tài)(TensorFlow, Theano), CNTK, MXNet, Caffe 等占有大量優(yōu)勢。

  同時 Caffe 具有大量圖像處理包,對數(shù)據(jù)觀察也具有非常大的優(yōu)勢。

  標準 3:通過此平臺做深度學習之外,還能做什么?

  下圖是本次公開課的核心:

  

  其實深度學習平臺在創(chuàng)造和設計時的側(cè)重點有所不同,我們按照功能可以將深度學習平臺分為上面六個方面:

  CPU+GPU控制,通信:這一個最低的層次是深度學習計算的基本層面。

  內(nèi)存、變量管理層:這一層包含對于具體單個中間變量的定義,如定義向量、矩陣,進行內(nèi)存空間分配。

  基本運算層:這一層主要包含加減乘除、正弦、余弦函數(shù),最大最小值等基本算數(shù)運算操作。

  基本簡單函數(shù):

  ○ 包含各種激發(fā)函數(shù)(acTIvaTIon funcTIon),例如 sigmoid, ReLU 等。

  ○ 同時也包含求導模塊

  神經(jīng)網(wǎng)絡基本模塊,包括 Dense Layer, ConvoluTIon Layer (卷積層), LSTM 等常用模塊。

  最后一層是對所有神經(jīng)網(wǎng)絡模塊的整合以及優(yōu)化求解。

  眾多機器學習平臺在功能側(cè)重上是不一樣的,我將他們分成了四大類:

  1. 第一類是以 Caffe, Torch, MXNet, CNTK 為主的深度學習功能性平臺。這類平臺提供了非常完備的基本模塊,可以讓開發(fā)人員快速創(chuàng)建深度神經(jīng)網(wǎng)絡模型并且開始訓練,可以解決現(xiàn)今深度學習中的大多數(shù)問題。但是這些模塊很少將底層運算功能直接暴露給用戶。

  2. 第二類是以 Keras 為主的深度學習抽象化平臺。Keras 本身并不具有底層運算協(xié)調(diào)的能力,Keras 依托于 TensorFlow 或者 Theano 進行底層運算,而 Keras 自身提供神經(jīng)網(wǎng)絡模塊抽象化和訓練中的流程優(yōu)化??梢宰層脩粝硎芸焖俳5耐瑫r,具有很方便的二次開發(fā)能力,加入自身喜歡的模塊。

  3. 第三類是 TensorFlow。TensorFlow 吸取了已有平臺的長處,既能讓用戶觸碰底層數(shù)據(jù),又具有現(xiàn)成的神經(jīng)網(wǎng)絡模塊,可以讓用戶非常快速的實現(xiàn)建模。TensorFlow 是非常優(yōu)秀的跨界平臺。

  4. 第四類是 Theano, Theano 是深度學習界最早的平臺軟件,專注底層基本的運算。

  所以對平臺選擇可以對照上圖按照自己的需求選用:

  如果任務目標非常確定,只需要短平快出結(jié)果,那么第 1 類平臺會適合你。

  如果您需要進行一些底層開發(fā),又不想失去現(xiàn)有模塊的方便,那么第 2、3 類平臺會適合你。

  如果你有統(tǒng)計、計算數(shù)學等背景,想利用已有工具進行一些計算性開發(fā),那么第 3, 4 類會適合你。

  這里我介紹下深度學習的一些副產(chǎn)品,其中一個比較重要的功能就是符號求導。

  圖計算和符號求導:深度學習對開源社區(qū)的巨大貢獻

  大家可能會有疑問:我能訓練出來深度學習模型就蠻好的了,為什么需要接觸底層呢?

  這里我先介紹下深度學習的一些副產(chǎn)品,其中一個比較重要的功能就是符號求導。符號求導英文是 Symbolic Differentiation,現(xiàn)在有很多有關(guān)的文獻和教程可以使用。

  符號求導是什么意思?

  以前我們做機器學習等研究,如果要求導往往需要手動把目標函數(shù)的導數(shù)求出來。最近一些深度學習工具,如 Theano, 推出了自動化符號求導功能,這大大減少了開發(fā)人員的工作量。

  當然,商業(yè)軟件如 MatLab, Mathematica 在多年前就已具有符號計算的功能,但鑒于其商業(yè)軟件的限制,符號計算并沒有在機器學習應用中被大量采用。

  深度學習由于其網(wǎng)絡的復雜性,必須采用符號求導的方法才能解決目標函數(shù)過于復雜的問題。另外一些非深度學習問題,例如:二次型優(yōu)化等問題,也都可以用這些深度學習工具來求解了。

  更為優(yōu)秀的是,Theano 符號求導結(jié)果可以直接通過 C程序編譯,成為底層語言,高效運行。

  這里我們給一個 Theano 的例子:

  》》》 import numpy

  》》》 import theano

  》》》 import theano.tensor as T

  》》》 from theano import pp

  》》》 x = T.dscalar(‘x’)

  》》》 y = x ** 2

  》》》 gy = T.grad(y, x)

  》》》 f = theano.function([x], gy)

  》》》 f(4)

  8

  上面我們通過符號求導的方法,很容易的求出 y 關(guān)于 x 的導數(shù)在 4 這個點的數(shù)值。

  標準 4:對數(shù)據(jù)量、硬件的要求和支持

  對于多 GPU 支持和多服務器支持,我們上面提到的所有平臺都聲稱自己能夠完成任務。同時也有大量文獻說某個平臺的效果更為優(yōu)秀。我們這里把具體平臺的選擇留給在座各位,提供下面這些信息:

  首先想想你想要干什么。現(xiàn)在深度學習應用中,需要運用到多服務器訓練模型的場景往往只有圖像處理一個,如果是自然語言處理,其工作往往可以在一臺配置優(yōu)秀的服務器上面完成。如果數(shù)據(jù)量大,往往可以通過 hadoop 等工具進行數(shù)據(jù)預處理,將其縮小到單機可以處理的范圍內(nèi)。

  本人是比較傳統(tǒng)的人,從小就開始自己折騰各種科學計算軟件的編譯。現(xiàn)在主流的文獻看到的結(jié)果是,單機使用 GPU 能比 CPU 效率提高數(shù)十倍左右。

  但是其實有些問題,在 Linux 環(huán)境下,編譯 Numpy 的時候?qū)⒕€性函數(shù)包換為 Intel MLK 往往也可以得到類似的提高。

  當然現(xiàn)在很多評測,往往在不同硬件環(huán)境、網(wǎng)絡配置情況下,都會得到不一樣的結(jié)果。

  就算在亞馬遜云平臺上面進行測試,也可能因為網(wǎng)絡環(huán)境、配置等原因,造成完全不同的結(jié)果。所以對于各種測評,基于我的經(jīng)驗,給的建議是:take it with a grain of salt,自己要留個心眼。前面我們提到的主要工具平臺,現(xiàn)在都對多 GPU、多節(jié)點模型訓練有不同程度的支持,而且現(xiàn)在也都在快速的發(fā)展中,我們建議聽眾自己按照需求進行鑒別。

  標準 5:深度學習平臺的成熟程度

  對于成熟程度的評判往往會比較主觀,結(jié)論大多具有爭議。我在這里也只列出數(shù)據(jù),具體如何選擇,大家自己判斷。

  這里我們通過 Github 上面幾個比較受歡迎的數(shù)量來判斷平臺的活躍程度。這些數(shù)據(jù)獲取于今天下午(2016-11-25)。我們用黑體標出了每個因子排名前三的平臺:

  第一個因子是貢獻者數(shù)量,貢獻者這里定義非常寬泛,在 Github issues 里面提過問題的都被算作是 Contributor,但是還是能作為一個平臺受歡迎程度的度量。我們可以看到 Keras, Theano, TensorFlow 三個以 Python 為原生平臺的深度學習平臺是貢獻者最多的平臺。

  第二個因子是 Pull Request 的數(shù)量,Pull Request 衡量的是一個平臺的開發(fā)活躍程度。我們可以看到 Caffe 的 Pull Request 最高,這可能得益于它在圖像領(lǐng)域得天獨厚的優(yōu)勢,另外 Keras 和 Theano 也再次登榜。

  

  另外,這些平臺在應用場景上有側(cè)重:

  自然語言處理,當然要首推 CNTK,微軟MSR(A) 多年對自然語言處理的貢獻非常巨大,CNTK 的不少開發(fā)者也是分布式計算牛人,其中所運用的方法非常獨到。

  當然,對于非常廣義的應用、學習,Keras/TensorFlow/Theano 生態(tài)可能是您最好的選擇。

  對于計算機圖像處理,Caffe 可能是你的不二選擇。

  關(guān)于深度學習平臺的未來:

  微軟在對 CNTK 很有決心,Python API 加的好,大家可以多多關(guān)注。

  有觀點認為深度學習模型是戰(zhàn)略資產(chǎn),應該用國產(chǎn)軟件,防止壟斷。我認為這樣的問題不用擔心,首先 TensorFlow 等軟件是開源的,可以通過代碼審查的方法進行質(zhì)量把關(guān)。另外訓練的模型可以保存成為 HDF5 格式,跨平臺分享,所以成為谷歌壟斷的概率非常小。

  很有可能在未來的某一天,大家訓練出來一些非常厲害的卷積層(convolution layer),基本上能非常優(yōu)秀地解決所有計算機圖像相關(guān)問題,這個時候我們只需要調(diào)用這些卷積層即可,不需要大規(guī)模卷積層訓練。另外這些卷積層可能會硬件化,成為我們手機芯片的一個小模塊,這樣我們的照片拍好的時候,就已經(jīng)完成了卷積操作。



關(guān)鍵詞: AI 開源框架

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉