《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 專訪 | 小白也能搭建深度模型,百度EasyDL的背后你知多少

專訪 | 小白也能搭建深度模型,百度EasyDL的背后你知多少

2018-09-10

部署深度學(xué)習(xí)服務(wù)非常困難,因此簡單易用的圖形化系統(tǒng)就顯得極為重要。本文介紹了百度的圖形化深度學(xué)習(xí)系統(tǒng) EasyDL,用戶可以不需要機(jī)器學(xué)習(xí)背景知識而搭建優(yōu)秀的深度學(xué)習(xí)服務(wù)。本文重點討論了 EasyDL 系統(tǒng)的技術(shù)模塊與優(yōu)勢,它大量采用了遷移學(xué)習(xí)與自動模型搜索,并針對不同的定制化任務(wù)學(xué)習(xí)不同的深度模型。

微信圖片_20180910214750.jpg



隨著機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí)在復(fù)雜數(shù)據(jù)上的表現(xiàn)越來越優(yōu)秀,很多開發(fā)者希望能將其應(yīng)用到自己的服務(wù)或產(chǎn)品中。然而即使是使用預(yù)訓(xùn)練模型或開源框架,對于很多不太了解機(jī)器學(xué)習(xí)算法工程的開發(fā)者而言還是有非常大的挑戰(zhàn)。此外,若機(jī)器學(xué)習(xí)不是產(chǎn)品的核心技術(shù),額外維護(hù)機(jī)器學(xué)習(xí)算法團(tuán)隊的成本又非常高。因此,很多時候我們需要一種能快速使用高性能深度學(xué)習(xí)的方法。


從整體而言,構(gòu)建我們自己的機(jī)器學(xué)習(xí)應(yīng)用首先需要收集數(shù)據(jù),并執(zhí)行復(fù)雜而繁瑣的數(shù)據(jù)預(yù)處理,隨后如何選擇模型與各種層出不窮的修正結(jié)構(gòu)也非常困難。在訓(xùn)練中,需要經(jīng)驗的調(diào)參過程與各種技巧也會對模型性能造成影響,更不用說需要根據(jù)數(shù)據(jù)情況選擇與修正最優(yōu)化方法了。因此即使不考慮工程化問題,將機(jī)器學(xué)習(xí)模型部署到客戶端也有非常大的成本。


其實目前在 GitHub 上有很多優(yōu)秀的機(jī)器學(xué)習(xí)開源項目,例如各種預(yù)訓(xùn)練深度卷積網(wǎng)絡(luò)、高度封裝的算法以及大量開放數(shù)據(jù)集,不過要想復(fù)現(xiàn)以及根據(jù)實際情況調(diào)整這些項目,開發(fā)者還是需要一些 ML 領(lǐng)域知識。此外,很多項目的文檔說明與技術(shù)支持都有待提高,它們需要開發(fā)者一點點調(diào)試與試錯才能正確搭建。更重要的是,將訓(xùn)練后的模型部署到移動端等平臺會遇到非常多的困難,這主要還是當(dāng)前流行的深度學(xué)習(xí)框架并不能完美支持模型部署。


所以對于不太了解 ML 的開發(fā)者而言,最好將上述這些過程都自動化。例如我們只需要收集少量和任務(wù)相關(guān)的數(shù)據(jù),并直接在平臺上完成標(biāo)注,然后讓系統(tǒng)幫我們選擇合適模型與超參數(shù)進(jìn)行訓(xùn)練,最后已訓(xùn)練模型還可以直接部署到云 API 或打包成安裝包。其實現(xiàn)在也已經(jīng)有一些平臺能完成這一些過程,例如谷歌的 AutoML 和百度的 EasyDL 等。


EasyDL 主頁:http://ai.baidu.com/easydl/


如下所示為 EasyDL 訓(xùn)練模型的基本流程,整個過程都是圖形化操作,且如果是上傳已經(jīng)處理好的數(shù)據(jù),那么強(qiáng)大的遷移學(xué)習(xí)系統(tǒng)會在幾分鐘內(nèi)完成模型的訓(xùn)練。百度 AI 開放平臺文檔中心對 EasyDL 的建模過程有詳細(xì)的描述,因為這一圖形化的系統(tǒng)非常簡明,所以文檔也通俗易懂。

微信圖片_20180910214819.jpg



如上所示,EasyDL 將整個服務(wù)精煉為四個步驟,并且可以在不需要機(jī)器學(xué)習(xí)背景知識的情況下開發(fā)模型。創(chuàng)建模型只需要選擇我們?nèi)蝿?wù)所屬的類別,例如圖像分類或目標(biāo)檢測等。訓(xùn)練模型只是選擇我們創(chuàng)建的任務(wù)與數(shù)據(jù),再點擊訓(xùn)練就行了,系統(tǒng)會自動搜索各種模型架構(gòu)和超參數(shù)。最后上線模型同樣也只需要確定到底是獲取云端 API 還是離線 SDK,整個過程不會涉及到復(fù)雜的算法與工程方面問題。


EasyDL 在 2017 年 11 月初上線了定制化圖像識別服務(wù),并在業(yè)內(nèi)展開公開測試。在 2018 年 4 月、5 月和 7 月陸續(xù)發(fā)布了定制化物體檢測服務(wù)、定制化模型設(shè)備端計算和定制化聲音識別等多個定制化能力方向,并形成了從訓(xùn)練數(shù)據(jù)到最終定制化服務(wù)的一站式端云一體平臺。目前 EasyDL 的各項定制能力在業(yè)內(nèi)廣泛應(yīng)用,累計過萬用戶,在包括零售、安防、互聯(lián)網(wǎng)內(nèi)容審核、工業(yè)質(zhì)檢等等數(shù)十個行業(yè)都有應(yīng)用落地,并提升了這些行業(yè)的智能化水平和生產(chǎn)效率。


主要技術(shù)手段


EasyDL 的主要優(yōu)勢在應(yīng)用案例的累積、簡明的產(chǎn)品設(shè)計與操作流程、支持移動端計算與部署等,而支持這些優(yōu)勢的是 EasyDL 背后各種主要技術(shù)手段。例如 AI Workflow 統(tǒng)一大數(shù)據(jù)工程系統(tǒng)與分布式訓(xùn)練系統(tǒng),為 EasyDL 提供穩(wěn)定的系統(tǒng)和流程支持;采用 PaddlePaddle 作為基本框架,為模型的搭建提供基礎(chǔ);采用 Auto Model Search 自動搜索模型超參數(shù),支持獲得更好的訓(xùn)練效果;采用遷移學(xué)習(xí)訓(xùn)練較小的用戶數(shù)據(jù)集,從而大大加強(qiáng)訓(xùn)練效率與效果等。


AI Workflow 與 PaddlePaddle


AI Workflow 是百度對機(jī)器學(xué)習(xí)從訓(xùn)練到上線構(gòu)建的工作流引擎,它是一個將大數(shù)據(jù)成熟的工程系統(tǒng)與人工智能分布式模型訓(xùn)練相結(jié)合的引擎。它覆蓋了從訓(xùn)練數(shù)據(jù)的存儲,ETL(抽取、交互轉(zhuǎn)換和加載)、模型訓(xùn)練任務(wù)的發(fā)起、訓(xùn)練集群資源調(diào)度、訓(xùn)練狀態(tài)監(jiān)控同步、模型自動部署、服務(wù)發(fā)布上線等全部環(huán)節(jié),并實現(xiàn)了全自動流程。


總體而言,AI Workflow 的主要流程可以分為四個階段。首先第一階段是對數(shù)據(jù)進(jìn)行預(yù)處理,例如對圖像實現(xiàn)歸一化、大小裁剪與數(shù)據(jù)增強(qiáng)等。隨后第二階段是模型的訓(xùn)練,或者說是學(xué)習(xí)過程,這一階段會基于百度研發(fā)的深度學(xué)習(xí)框架 PaddlePaddle 進(jìn)行分布式訓(xùn)練。訓(xùn)練完模型后,第三階段就需要驗證模型的效果,也就是說用戶可以上傳小規(guī)模的測試數(shù)據(jù),并對模型的召回率與精度等指標(biāo)進(jìn)行驗證。最后第四階段為服務(wù)的上線或模型的部署,在這個過程中我們可以將已訓(xùn)練模型加載到云端并對外提供服務(wù),也可以打包為一組移動端開發(fā)套件,為進(jìn)一步集成到其它任務(wù)中提供接口。

 

微信圖片_20180910214848.jpg



整個 AI Workflow 在系統(tǒng)層面和服務(wù)層面同樣也會有一些優(yōu)化,例如 PaddlePaddle 團(tuán)隊會對模型的訓(xùn)練階段做很多優(yōu)化,包括 GPU 的內(nèi)核融合和利用 RDMA 優(yōu)化分布式訓(xùn)練等。而 EasyDL 團(tuán)隊這邊也會在服務(wù)層面做一些優(yōu)化,例如在推理階段中,他們需要優(yōu)化任務(wù)調(diào)度,并加速模型推理速度。


在 AI Workflow 中,整個訓(xùn)練和推理階段都是使用 PaddlePaddle 框架,它包含了許多高性能的模型算法實現(xiàn), 為最終出色的效果提供了強(qiáng)有力的支撐。雖然 EasyDL 的用戶不需要了解與使用 PaddlePaddle,但其多年的 AI 技術(shù)積累以及大量的業(yè)務(wù)使用驗證,使得框架對于各種任務(wù)都非常安全穩(wěn)定。


此外針對于移動端部署,Paddle-Mobile 設(shè)計之初就對嵌入式的性能、體積、能耗、硬件平臺覆蓋等方面做了考慮。而 EasyDL 的端計算版本也是使用該框架設(shè)計更緊湊與高效的模型,并將其發(fā)布到移動端。


自動模型搜索與遷移學(xué)習(xí)


目前 EasyDL 采用了 Auto Model Search 的算法,即系統(tǒng)會同時發(fā)起多個模型結(jié)構(gòu)和超參數(shù)不同的訓(xùn)練,并采用對應(yīng)算法進(jìn)行最終模型的篩選,從而確保更優(yōu)的模型效果。Auto Model Search 與后文介紹的 AutoDL 在功能上是相近的,但百度的 AutoDL 是一種神經(jīng)架構(gòu)搜索方法,它關(guān)注于利用強(qiáng)化學(xué)習(xí)從頭構(gòu)建神經(jīng)網(wǎng)絡(luò)。


Auto Model Search 是指對于同一方向的定制能力,也就是說它會采用多個經(jīng)典模型以及不同的超參數(shù)配置,并分別進(jìn)行訓(xùn)練。然后再按一些策略挑選出比較好的結(jié)果,并完成模型的上線。其中系統(tǒng)可調(diào)的超參數(shù)包含神經(jīng)網(wǎng)絡(luò)類型的選擇,例如對于圖像分類可以選擇 Inception、ResNet 或者其他。而對于每一個模型,可選的超參數(shù)包含批量大小、迭代數(shù)量和卷積核大小等。在確定模型架構(gòu),并配置完超參數(shù)后,每一個單獨的模型都會并行的訓(xùn)練,并按一定策略選擇效果最好的模型。


其實 Auto Model Search 是針對特定用戶數(shù)據(jù)的,在用戶上傳與他們?nèi)蝿?wù)相關(guān)的數(shù)據(jù)后,EasyDL 會抽取多個已訓(xùn)練深度網(wǎng)絡(luò),并采用遷移學(xué)習(xí)和不同的超參配置精調(diào)這些深度網(wǎng)絡(luò)。如下所示在用戶確定好小型數(shù)據(jù)集后,EasyDL 可能會選擇 Inception v3/v4 和 ResNet 等,在固定這幾個網(wǎng)絡(luò)前面層級的權(quán)重后,系統(tǒng)會根據(jù)用戶數(shù)據(jù)以及不同的批量大小和學(xué)習(xí)率訓(xùn)練網(wǎng)絡(luò)。

 

微信圖片_20180910214921.jpg



EasyDL 大量采用了遷移學(xué)習(xí)技術(shù),各種基礎(chǔ)模型會在百度大規(guī)模數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,并將從中學(xué)習(xí)到的知識(Knowledge)運用到用戶提交的小規(guī)模訓(xùn)練數(shù)據(jù)集上,從而實現(xiàn)出色的模型效果和快速的模型訓(xùn)練。遷移學(xué)習(xí)的主干是非常大的網(wǎng)絡(luò),而一般我們每一類只需要使用 20 到 100 多張圖像就能完成對后面層級的訓(xùn)練,且 EasyDL 也會采用 Early Stopping 等正則化手段降低模型過擬合的風(fēng)險。


圖像的遷移學(xué)習(xí)可能比較好處理,但 EasyDL 的聲音分類并不需要太關(guān)注序列上的長期依賴關(guān)系,因此它也能使用遷移學(xué)習(xí)。聲音分類的遷移主要會采用 MFCC 或加上快速傅立葉變換將音頻的時域數(shù)據(jù)轉(zhuǎn)換為頻域的圖,然后再利用與計算機(jī)視覺相類似的遷移方法傳遞與音頻相關(guān)的知識。而以后在處理語音識別等存在長期依賴性的數(shù)據(jù)時,主體模型可能會繼續(xù)用到其它遷移知識的技術(shù)。

微信圖片_20180910214950.jpg



此外對于圖像方面的遷移學(xué)習(xí),如果用戶需要區(qū)分非常精細(xì)的圖片或執(zhí)行細(xì)粒度識別任務(wù),那么一般遷移學(xué)習(xí)主要會獲取圖像的全局信息,它很難抽取精細(xì)特征。EasyDL 其實也能處理這些細(xì)粒度識別任務(wù),但遷移效果很大程度上會受到用戶數(shù)據(jù)的影響。因此訓(xùn)練集圖片需要和實際場景要識別的圖片環(huán)境一致,且對于細(xì)粒度識別這種具有很多相似圖像的任務(wù),用戶需要增加更多的訓(xùn)練圖像。


最后,為了提升模型遷移效果,EasyDL 會做一些特別的數(shù)據(jù)增強(qiáng)操作,即增加一些圖像以加強(qiáng)模型的遷移效果。例如假定用戶希望系統(tǒng)能識別兩個類別,并為這兩個類別提供了特定的數(shù)據(jù),那么系統(tǒng)會自動增加其它一些數(shù)據(jù),并作為第三個類別。在訓(xùn)練中,系統(tǒng)不僅需要識別用戶的數(shù)據(jù),同時還需要識別自動添加的數(shù)據(jù)為第三類別。


神經(jīng)架構(gòu)搜索


EasyDL 即將引入百度領(lǐng)先的 AutoDL 技術(shù),這是一種 AutoML 的技術(shù),它實現(xiàn)了深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)的自動搜索和設(shè)計。百度的 AutoDL 是工業(yè)界中的一個項目,因此它主要由三部分組成,首先第一部分是從頭開始搜索神經(jīng)網(wǎng)絡(luò)架構(gòu),即神經(jīng)架構(gòu)搜索。第二部分是神經(jīng)網(wǎng)絡(luò)的自動適配,也就是說根據(jù)不同的任務(wù)目標(biāo)與需要進(jìn)行適配,比如說目標(biāo)是部署模型到移動端,那么系統(tǒng)就需要考慮正確率、參數(shù)量和計算量等條件來適配網(wǎng)絡(luò)。第三部分是設(shè)計網(wǎng)絡(luò)的遷移能力,AutoDL 希望搜索出具有強(qiáng)大遷移能力的一般性神經(jīng)網(wǎng)絡(luò)架構(gòu)。實際上架構(gòu)搜索與遷移能力是存在相對關(guān)系的,系統(tǒng)花大量計算資源希望搜索到針對特定數(shù)據(jù)有強(qiáng)大能力的架構(gòu),而可遷移性又希望系統(tǒng)找到的架構(gòu)能推廣到其它更多的數(shù)據(jù)。


在架構(gòu)搜索策略上,目前比較流行的有進(jìn)化策略、強(qiáng)化學(xué)習(xí)和基于梯度的連續(xù)空間搜索方法。而百度的 AutoDL 主要是基于強(qiáng)化學(xué)習(xí),其核心思路是希望能搜索到盡可能廣的空間。為了將神經(jīng)架構(gòu)搜索構(gòu)造為強(qiáng)化學(xué)習(xí)問題,神經(jīng)架構(gòu)的生成可以視為智能體對動作的選擇,動作空間也就相當(dāng)于搜索空間。智能體獲得的獎勵會根據(jù)已訓(xùn)練架構(gòu)在驗證數(shù)據(jù)上的性能評估而定義。


不同的 RL 方法在表示智能體的策略和如何優(yōu)化它們存在差異:Zoph 等研究者使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)策略對一個字符串進(jìn)行序列采樣,該字符串反過來對神經(jīng)架構(gòu)進(jìn)行編碼。Baker 等人利用 Q-learning 訓(xùn)練策略,該策略依次選擇層的類型和對應(yīng)的超參數(shù)。這些研究,包括谷歌大腦早期提出來的 NASNet,它們都引入了非常強(qiáng)的先驗知識。


例如 NASNet 規(guī)定了網(wǎng)絡(luò)實際上有多少單元,這些單元的搭建方式也是手動設(shè)計的,系統(tǒng)只需要自動設(shè)計單元的具體結(jié)構(gòu)。而設(shè)計具體的單元結(jié)構(gòu)也會存在一些先驗知識,例如限制單元必須是兩個操作輸出一個結(jié)果等。AutoDL 主要的方向是希望搜索任何有向無環(huán)圖結(jié)構(gòu),這樣模型的表達(dá)能力和搜索空間就遠(yuǎn)遠(yuǎn)大于之前的方法。此外由于降低了搜索的先驗知識,因此計算力會變得非常大,這也就對強(qiáng)化學(xué)習(xí)的采樣效率有非常高的要求。

 

微信圖片_20180910215028.jpg


三階段的層級架構(gòu)表征,組成有向無環(huán)圖。


除了神經(jīng)架構(gòu)搜索,模型的適配也是非常重要的方向。AutoDL 會將很多目標(biāo)添加到強(qiáng)化學(xué)習(xí)的反饋值,例如我們考慮一些多任務(wù)學(xué)習(xí),模型會有一套衡量參數(shù)量、計算量與正確率的方法,并最終反饋到強(qiáng)化學(xué)習(xí),從而修正搜索方向。


AutoDL 采用的是一種 Hierarchical RL,它同樣也是基于 on policy。因為 AutoDL 的搜索空間非常大,系統(tǒng)需要一些結(jié)構(gòu)性的探索,因此搜索空間的探索才回更有效率一些。NASNet 之前第一個版本是基于策略梯度(PG),第二版本是基于近端策略優(yōu)化(PPO),雖然它們的抽樣效率比較低,但它們確實展示了強(qiáng)化學(xué)習(xí)在這一方面的能力。所以總體而言,AutoDL 主要還是沿著 NASNet 所開辟的方法,并利用其它技術(shù)與技巧提高采樣效率。


模型部署與設(shè)備端計算


目前 EasyDL 有兩種發(fā)布服務(wù)的方式,即生成在線 API 和離線 SDK。從應(yīng)用場景來說,在線 API 能讓開發(fā)者更方便地與業(yè)務(wù)系統(tǒng)整合,因為在線 API 畢竟是 HTTP 層面的接口。而離線 SDK 有更低的調(diào)用延遲,對互聯(lián)網(wǎng)的依賴性也沒有那么強(qiáng),它可以利用本地計算資源實現(xiàn)更安全與穩(wěn)定的計算。而從技術(shù)實現(xiàn)來看,在線 API 是云計算的形式,離線 SDK 是端計算的形式,它們主要的差別在于是不是需要對性能與能耗做權(quán)衡。

 

微信圖片_20180910215057.jpg


目前可以實現(xiàn)在 Android、iOS 等系統(tǒng)的 GPU、NPU 等芯片上對定制模型預(yù)測階段計算的加速。


在線 API 的能耗主要出現(xiàn)在服務(wù)端,系統(tǒng)不需要做太多的量化或者模型剪枝等優(yōu)化,模型也不需要做特定的壓縮。此外,在線 API 對于芯片端的優(yōu)化也只需要考慮各種云端 GPU 來做一系列的推理加速。但是移動端的話選擇非常豐富,例如可以是針對高通系列的芯片、也可以針對神經(jīng)網(wǎng)絡(luò) NPU 或者針對可插拔的 Intel Movidius 加速卡進(jìn)行優(yōu)化。因此離線 SDK 的技術(shù)實現(xiàn)相對而言要難一些。


一般對于機(jī)器學(xué)習(xí)開發(fā)者而言,在云端訓(xùn)練一個模型,并部署為一個服務(wù)已經(jīng)比較成熟。但將模型遷移到設(shè)備端仍然會面臨很多困難,開發(fā)者需要考慮硬件兼容、能耗與性能等非常具體的問題。EasyDL 在發(fā)布離線 SDK 的過程中就已經(jīng)自動做了很多工程優(yōu)化,包括對輕量模型的選擇和對計算階段的量化等。其中選擇輕量架構(gòu)可以大幅度降低模型大小,量化可以大量降低包體大小,它們都能加速應(yīng)用在內(nèi)存中的加載。


總的而言對于設(shè)備端計算加速,首先 EasyDL 會選擇 MobileNet 和 ShuffleNet 等輕量級的模型,例如在目標(biāo)檢測中,系統(tǒng)可能會使用 MobileNet 代替 SSD 中的主干網(wǎng)絡(luò),因而獲得更高能效比。第二點是系統(tǒng)會通過模型剪枝將不太重要的網(wǎng)絡(luò)參數(shù)去掉,例如去掉 CNN 中權(quán)重小于某個閾值的連接或直接去掉不太重要的卷積核。第三點會采用量化操作加速推理階段的計算,其主要思想是降低卷積運算中數(shù)值的精度,從而降低整體的計算量與參數(shù)存儲空間。


設(shè)備端加速第四點會采用很多指令集,包括 ARM 和 Neon 等,其中 Neon 是一種單指令多數(shù)據(jù)的指令集,系統(tǒng)可以通過一條指令加速多條數(shù)據(jù),這些都是硬件層面的加速。最后設(shè)備端還能從計算單元的角度進(jìn)行加速,例如 GPU 和 NPU 等。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。