專訪 | 小白也能搭建深度模型,百度EasyDL的背後你知多少算法
部署深度學習服務很是困難,所以簡單易用的圖形化系統就顯得極爲重要。本文介紹了百度的圖形化深度學習系統 EasyDL,用戶能夠不須要機器學習背景知識而搭建優秀的深度學習服務。本文重點討論了 EasyDL 系統的技術模塊與優點,它大量採用了遷移學習與自動模型搜索,並針對不一樣的定製化任務學習不一樣的深度模型。
安全
隨着機器學習,尤爲是深度學習在複雜數據上的表現愈來愈優秀,不少開發者但願能將其應用到本身的服務或產品中。然而即便是使用預訓練模型或開源框架,對於不少不太瞭解機器學習算法工程的開發者而言仍是有很是大的挑戰。此外,若機器學習不是產品的核心技術,額外維護機器學習算法團隊的成本又很是高。所以,不少時候咱們須要一種能快速使用高性能深度學習的方法。網絡
從總體而言,構建咱們本身的機器學習應用首先須要收集數據,並執行復雜而繁瑣的數據預處理,隨後如何選擇模型與各類層出不窮的修正結構也很是困難。在訓練中,須要經驗的調參過程與各類技巧也會對模型性能形成影響,更不用說須要根據數據狀況選擇與修正最優化方法了。所以即便不考慮工程化問題,將機器學習模型部署到客戶端也有很是大的成本。架構
其實目前在 GitHub 上有不少優秀的機器學習開源項目,例如各類預訓練深度卷積網絡、高度封裝的算法以及大量開放數據集,不過要想復現以及根據實際狀況調整這些項目,開發者仍是須要一些 ML 領域知識。此外,不少項目的文檔說明與技術支持都有待提升,它們須要開發者一點點調試與試錯才能正確搭建。更重要的是,將訓練後的模型部署到移動端等平臺會遇到很是多的困難,這主要仍是當前流行的深度學習框架並不能完美支持模型部署。框架
因此對於不太瞭解 ML 的開發者而言,最好將上述這些過程都自動化。例如咱們只須要收集少許和任務相關的數據,並直接在平臺上完成標註,而後讓系統幫咱們選擇合適模型與超參數進行訓練,最後已訓練模型還能夠直接部署到雲 API 或打包成安裝包。其實如今也已經有一些平臺能完成這一些過程,例如谷歌的 AutoML 和百度的 EasyDL 等。機器學習
EasyDL 主頁:http://ai.baidu.com/easydl/分佈式
以下所示爲 EasyDL 訓練模型的基本流程,整個過程都是圖形化操做,且若是是上傳已經處理好的數據,那麼強大的遷移學習系統會在幾分鐘內完成模型的訓練。百度 AI 開放平臺文檔中心對 EasyDL 的建模過程有詳細的描述,由於這一圖形化的系統很是簡明,因此文檔也通俗易懂。
性能
如上所示,EasyDL 將整個服務精煉爲四個步驟,而且能夠在不須要機器學習背景知識的狀況下開發模型。建立模型只須要選擇咱們任務所屬的類別,例如圖像分類或目標檢測等。訓練模型只是選擇咱們建立的任務與數據,再點擊訓練就好了,系統會自動搜索各類模型架構和超參數。最後上線模型一樣也只須要肯定究竟是獲取雲端 API 仍是離線 SDK,整個過程不會涉及到複雜的算法與工程方面問題。學習
EasyDL 在 2017 年 11 月初上線了定製化圖像識別服務,並在業內展開公開測試。在 2018 年 4 月、5 月和 7 月陸續發佈了定製化物體檢測服務、定製化模型設備端計算和定製化聲音識別等多個定製化能力方向,並造成了從訓練數據到最終定製化服務的一站式端雲一體平臺。目前 EasyDL 的各項定製能力在業內普遍應用,累計過萬用戶,在包括零售、安防、互聯網內容審覈、工業質檢等等數十個行業都有應用落地,並提高了這些行業的智能化水平和生產效率。測試
主要技術手段
EasyDL 的主要優點在應用案例的累積、簡明的產品設計與操做流程、支持移動端計算與部署等,而支持這些優點的是 EasyDL 背後各類主要技術手段。例如 AI Workflow 統一大數據工程系統與分佈式訓練系統,爲 EasyDL 提供穩定的系統和流程支持;採用 PaddlePaddle 做爲基本框架,爲模型的搭建提供基礎;採用 Auto Model Search 自動搜索模型超參數,支持得到更好的訓練效果;採用遷移學習訓練較小的用戶數據集,從而大大增強訓練效率與效果等。
AI Workflow 與 PaddlePaddle
AI Workflow 是百度對機器學習從訓練到上線構建的工做流引擎,它是一個將大數據成熟的工程系統與人工智能分佈式模型訓練相結合的引擎。它覆蓋了從訓練數據的存儲,ETL(抽取、交互轉換和加載)、模型訓練任務的發起、訓練集羣資源調度、訓練狀態監控同步、模型自動部署、服務發佈上線等所有環節,並實現了全自動流程。
整體而言,AI Workflow 的主要流程能夠分爲四個階段。首先第一階段是對數據進行預處理,例如對圖像實現歸一化、大小裁剪與數據加強等。隨後第二階段是模型的訓練,或者說是學習過程,這一階段會基於百度研發的深度學習框架 PaddlePaddle 進行分佈式訓練。訓練完模型後,第三階段就須要驗證模型的效果,也就是說用戶能夠上傳小規模的測試數據,並對模型的召回率與精度等指標進行驗證。最後第四階段爲服務的上線或模型的部署,在這個過程當中咱們能夠將已訓練模型加載到雲端並對外提供服務,也能夠打包爲一組移動端開發套件,爲進一步集成到其它任務中提供接口。
整個 AI Workflow 在系統層面和服務層面一樣也會有一些優化,例如 PaddlePaddle 團隊會對模型的訓練階段作不少優化,包括 GPU 的內核融合和利用 RDMA 優化分佈式訓練等。而 EasyDL 團隊這邊也會在服務層面作一些優化,例如在推理階段中,他們須要優化任務調度,並加速模型推理速度。
在 AI Workflow 中,整個訓練和推理階段都是使用 PaddlePaddle 框架,它包含了許多高性能的模型算法實現, 爲最終出色的效果提供了強有力的支撐。雖然 EasyDL 的用戶不須要了解與使用 PaddlePaddle,但其多年的 AI 技術積累以及大量的業務使用驗證,使得框架對於各類任務都很是安全穩定。
此外針對於移動端部署,Paddle-Mobile 設計之初就對嵌入式的性能、體積、能耗、硬件平臺覆蓋等方面作了考慮。而 EasyDL 的端計算版本也是使用該框架設計更緊湊與高效的模型,並將其發佈到移動端。
自動模型搜索與遷移學習
目前 EasyDL 採用了 Auto Model Search 的算法,即系統會同時發起多個模型結構和超參數不一樣的訓練,並採用對應算法進行最終模型的篩選,從而確保更優的模型效果。Auto Model Search 與後文介紹的 AutoDL 在功能上是相近的,但百度的 AutoDL 是一種神經架構搜索方法,它關注於利用強化學習從頭構建神經網絡。
Auto Model Search 是指對於同一方向的定製能力,也就是說它會採用多個經典模型以及不一樣的超參數配置,並分別進行訓練。而後再按一些策略挑選出比較好的結果,並完成模型的上線。其中系統可調的超參數包含神經網絡類型的選擇,例如對於圖像分類能夠選擇 Inception、ResNet 或者其餘。而對於每個模型,可選的超參數包含批量大小、迭代數量和卷積核大小等。在肯定模型架構,並配置完超參數後,每個單獨的模型都會並行的訓練,並按必定策略選擇效果最好的模型。
其實 Auto Model Search 是針對特定用戶數據的,在用戶上傳與他們任務相關的數據後,EasyDL 會抽取多個已訓練深度網絡,並採用遷移學習和不一樣的超參配置精調這些深度網絡。以下所示在用戶肯定好小型數據集後,EasyDL 可能會選擇 Inception v3/v4 和 ResNet 等,在固定這幾個網絡前面層級的權重後,系統會根據用戶數據以及不一樣的批量大小和學習率訓練網絡。
EasyDL 大量採用了遷移學習技術,各類基礎模型會在百度大規模數據集上進行預訓練,並將從中學習到的知識(Knowledge)運用到用戶提交的小規模訓練數據集上,從而實現出色的模型效果和快速的模型訓練。遷移學習的主幹是很是大的網絡,而通常咱們每一類只須要使用 20 到 100 多張圖像就能完成對後面層級的訓練,且 EasyDL 也會採用 Early Stopping 等正則化手段下降模型過擬合的風險。
圖像的遷移學習可能比較好處理,但 EasyDL 的聲音分類並不須要太關注序列上的長期依賴關係,所以它也能使用遷移學習。聲音分類的遷移主要會採用 MFCC 或加上快速傅立葉變換將音頻的時域數據轉換爲頻域的圖,而後再利用與計算機視覺相相似的遷移方法傳遞與音頻相關的知識。而之後在處理語音識別等存在長期依賴性的數據時,主體模型可能會繼續用到其它遷移知識的技術。
此外對於圖像方面的遷移學習,若是用戶須要區分很是精細的圖片或執行細粒度識別任務,那麼通常遷移學習主要會獲取圖像的全局信息,它很難抽取精細特徵。EasyDL 其實也能處理這些細粒度識別任務,但遷移效果很大程度上會受到用戶數據的影響。所以訓練集圖片須要和實際場景要識別的圖片環境一致,且對於細粒度識別這種具備不少類似圖像的任務,用戶須要增長更多的訓練圖像。
最後,爲了提高模型遷移效果,EasyDL 會作一些特別的數據加強操做,即增長一些圖像以增強模型的遷移效果。例如假定用戶但願系統能識別兩個類別,併爲這兩個類別提供了特定的數據,那麼系統會自動增長其它一些數據,並做爲第三個類別。在訓練中,系統不只須要識別用戶的數據,同時還須要識別自動添加的數據爲第三類別。
神經架構搜索
EasyDL 即將引入百度領先的 AutoDL 技術,這是一種 AutoML 的技術,它實現了深度學習網絡結構的自動搜索和設計。百度的 AutoDL 是工業界中的一個項目,所以它主要由三部分組成,首先第一部分是從頭開始搜索神經網絡架構,即神經架構搜索。第二部分是神經網絡的自動適配,也就是說根據不一樣的任務目標與須要進行適配,好比說目標是部署模型到移動端,那麼系統就須要考慮正確率、參數量和計算量等條件來適配網絡。第三部分是設計網絡的遷移能力,AutoDL 但願搜索出具備強大遷移能力的通常性神經網絡架構。實際上架構搜索與遷移能力是存在相對關係的,系統花大量計算資源但願搜索到針對特定數據有強大能力的架構,而可遷移性又但願系統找到的架構能推廣到其它更多的數據。
在架構搜索策略上,目前比較流行的有進化策略、強化學習和基於梯度的連續空間搜索方法。而百度的 AutoDL 主要是基於強化學習,其核心思路是但願能搜索到儘量廣的空間。爲了將神經架構搜索構造爲強化學習問題,神經架構的生成能夠視爲智能體對動做的選擇,動做空間也就至關於搜索空間。智能體得到的獎勵會根據已訓練架構在驗證數據上的性能評估而定義。
不一樣的 RL 方法在表示智能體的策略和如何優化它們存在差別:Zoph 等研究者使用循環神經網絡(RNN)策略對一個字符串進行序列採樣,該字符串反過來對神經架構進行編碼。Baker 等人利用 Q-learning 訓練策略,該策略依次選擇層的類型和對應的超參數。這些研究,包括谷歌大腦早期提出來的 NASNet,它們都引入了很是強的先驗知識。
例如 NASNet 規定了網絡實際上有多少單元,這些單元的搭建方式也是手動設計的,系統只須要自動設計單元的具體結構。而設計具體的單元結構也會存在一些先驗知識,例如限制單元必須是兩個操做輸出一個結果等。AutoDL 主要的方向是但願搜索任何有向無環圖結構,這樣模型的表達能力和搜索空間就遠遠大於以前的方法。此外因爲下降了搜索的先驗知識,所以計算力會變得很是大,這也就對強化學習的採樣效率有很是高的要求。
三階段的層級架構表徵,組成有向無環圖。
除了神經架構搜索,模型的適配也是很是重要的方向。AutoDL 會將不少目標添加到強化學習的反饋值,例如咱們考慮一些多任務學習,模型會有一套衡量參數量、計算量與正確率的方法,並最終反饋到強化學習,從而修正搜索方向。
AutoDL 採用的是一種 Hierarchical RL,它一樣也是基於 on policy。由於 AutoDL 的搜索空間很是大,系統須要一些結構性的探索,所以搜索空間的探索纔回更有效率一些。NASNet 以前第一個版本是基於策略梯度(PG),第二版本是基於近端策略優化(PPO),雖然它們的抽樣效率比較低,但它們確實展現了強化學習在這一方面的能力。因此整體而言,AutoDL 主要仍是沿着 NASNet 所開闢的方法,並利用其它技術與技巧提升採樣效率。
模型部署與設備端計算
目前 EasyDL 有兩種發佈服務的方式,即生成在線 API 和離線 SDK。從應用場景來講,在線 API 能讓開發者更方便地與業務系統整合,由於在線 API 畢竟是 HTTP 層面的接口。而離線 SDK 有更低的調用延遲,對互聯網的依賴性也沒有那麼強,它能夠利用本地計算資源實現更安全與穩定的計算。而從技術實現來看,在線 API 是雲計算的形式,離線 SDK 是端計算的形式,它們主要的差異在因而不是須要對性能與能耗作權衡。
目前能夠實如今 Android、iOS 等系統的 GPU、NPU 等芯片上對定製模型預測階段計算的加速。
在線 API 的能耗主要出如今服務端,系統不須要作太多的量化或者模型剪枝等優化,模型也不須要作特定的壓縮。此外,在線 API 對於芯片端的優化也只須要考慮各類雲端 GPU 來作一系列的推理加速。可是移動端的話選擇很是豐富,例如能夠是針對高通系列的芯片、也能夠針對神經網絡 NPU 或者針對可插拔的 Intel Movidius 加速卡進行優化。所以離線 SDK 的技術實現相對而言要難一些。
通常對於機器學習開發者而言,在雲端訓練一個模型,並部署爲一個服務已經比較成熟。但將模型遷移到設備端仍然會面臨不少困難,開發者須要考慮硬件兼容、能耗與性能等很是具體的問題。EasyDL 在發佈離線 SDK 的過程當中就已經自動作了不少工程優化,包括對輕量模型的選擇和對計算階段的量化等。其中選擇輕量架構能夠大幅度下降模型大小,量化能夠大量下降包體大小,它們都能加速應用在內存中的加載。
總的而言對於設備端計算加速,首先 EasyDL 會選擇 MobileNet 和 ShuffleNet 等輕量級的模型,例如在目標檢測中,系統可能會使用 MobileNet 代替 SSD 中的主幹網絡,於是得到更高能效比。第二點是系統會經過模型剪枝將不過重要的網絡參數去掉,例如去掉 CNN 中權重小於某個閾值的鏈接或直接去掉不過重要的卷積核。第三點會採用量化操做加速推理階段的計算,其主要思想是下降卷積運算中數值的精度,從而下降總體的計算量與參數存儲空間。
設備端加速第四點會採用不少指令集,包括 ARM 和 Neon 等,其中 Neon 是一種單指令多數據的指令集,系統能夠經過一條指令加速多條數據,這些都是硬件層面的加速。最後設備端還能從計算單元的角度進行加速,例如 GPU 和 NPU 等。
歡迎使用百度EasyDL: ai.baidu.com/easydl 原文摘自原文摘自機器之心。