1. 程式人生 > >解讀百度AutoDL:打破SOTA紀錄的神經架構搜索是如何煉成的

解讀百度AutoDL:打破SOTA紀錄的神經架構搜索是如何煉成的

個人 隨機梯度 分類器 目前 錯誤 完美 系列 構圖 百度

近日,百度大數據實驗室在 arXiv 上發布了兩篇論文,一篇給出了任何深度學習網絡在小學習率情況下的收斂性證明,包括用 AutoDL 搜出來的網絡,另一篇則提供了一個正則化的方法,讓 AutoDL 搜索到的網絡的訓練結果超過了之前所有公開報道的結果。基於 PaddlePaddle 框架實現的代碼已經開源:

Github地址:

https://github.com/PaddlePaddle/models/blob/develop/fluid/AutoDL/LRC/README_cn.md

機器之心就 AutoDL 各方向的設計思路和論文內容采訪了百度大數據實驗室主任浣軍教授,以下為采訪實錄。

機器之心:百度開發 AutoDL 的初衷是什麽?想要實現什麽目標?

AutoDL 的理念,用一句話來概括,就是「開放普惠 AI」,讓廣大中小企業、初創企業和個人能夠更方便地應用大數據和深度學習。

現在,這些能力主要掌握在大公司研發中心或者高校中間,並未向中小企業和初創企業輻射,原因在於大數據分析和深度學習對硬件、軟件以及工程技術人員的能力要求都比較高。

AutoDL 所做的事情,就是用深度學習來設計深度學習,從而實現讓大家都能夠快速用到這項能力。我們的願景是把如今的「深度學習模型藝術品」變成「深度學習模型工業產品」,讓深度學習的模型能夠像工廠的產品一樣被大規模地生產出來。

機器之心:這一目標具體由哪些需求組成?如何滿足這些需求?

我們從三個維度思考這件事。硬件、應用場景和模態的多樣化決讓 AI 算法的維度空間極為龐大。想要盡可能探索這一空間,就必然要從手工設計模型,轉向自動化生產模型,快速高效地產生能夠適配不同硬件、支持不同場景、適應不同模態的深度學習模型。

為了實現這些需求,我們將 AutoDL 分成三個部分,分別是 AutoDL Design,AutoDL Transfer 和 AutoDL Edge。

AutoDL Design 根據用戶提供的數據集從頭設計全新深度學習模型。

AutoDL Transfer 支持小數據建模,利用百度擁有的大量數據預訓練好的模型遷移到用戶具體的應用場景上。

AutoDL Edge 將深度學習模型部署到擁有不同算力、內存資源的硬件上,滿足不同的能源消耗、響應時間需求。是 AI 和 IoT 的結合,是深度學習和邊緣計算的完美結合。

AutoDL Design:更大的模型結構搜索空間帶來更佳的效果

機器之心:從用戶給出標註數據集到拿到自動設計好的模型結構,是一個什麽樣的過程?

現在 AutoDL Design 有多條技術路線,但總的來說仍然是一個端到端的訓練過程。百度在模型結構優化方面選擇了兩條主要技術路線。

第一條技術路線利用深度增強學習完成設計。系統由兩部分組成,第一部分是網絡結構的編碼器,第二部分是網絡結構的評測器。

編碼器通常以 RNN 的方式把網絡結構進行編碼,然後評測器把編碼的結果拿去進行訓練和評測,拿到包括準確率、模型大小在內的一些指標,反饋給編碼器,編碼器進行修改,再次編碼,如此叠代。經過若幹次叠代以後,最終得到一個設計好的模型。

為了性能考慮,叠代中用到的訓練數據通常是幾萬張規模的數據集(比如 CIFAR-10),模型設計結束後,會用大規模數據(比如 ImageNet)重新訓練一次,進一步優化參數。

技術分享圖片

圖:AutoDL 增強學習流程

第二條技術路線是將結構圖構建為可微的結構。即,連接節點的邊不再是非 0 即 1 的狀態,而是變成一個可求微分的概率。

除此之外,我們還進行了超參數優化,正則化訓練等其他一系列優化,最終,我們在 CIFAR-10 上取得了正確率 98% 以上,這個結果優於所有有公開報道的設計網絡效果,包括人類專家設計的和機器自動設計的。

機器之心:能否更詳細地解釋基於深度增強學習的技術路徑裏編碼器與評測器的工作?叠代過程中計算資源消耗情況?

編碼器的可以從一個隨機的模型開始,也可以從一種已知的模型出發。從性能角度考慮,通常我們會選擇從一個較優的模型結構出發。

模型優化分為三個層級,分別是單元格優化,單元格連接方式優化以及超參數優化。單元格(cell)是模型的基本結構,每個單元格由幾個到十幾個節點(node)組成。每個節點都是一種常見的操作,例如一次卷積運算就是一個節點,常見的節點中的操作有十個左右。

技術分享圖片

圖:AutoDL Design 設計的單元格,左邊為普通單元格(Normal Cell),右邊為縮減單元格(Reduction Cell)

獎勵函數是一個正確率的函數。這裏的正確率並不是說每進行一次叠代就要在全部訓練數據上訓練到完全收斂。而是采用了「提前終止」(early stopping)的方法,用訓練到一定程度的結果來預測最終結果。

在 CIFAR-10 級別的數據集上(數萬張圖片),每次叠代平均需要不到 1 GPU hour,從開始搜索到找到理想的模型結構,平均需要進行 50~200 次叠代。

機器之心:AutoDL Design 設計出的模型結構與人工設計的模型結構有什麽區別?

如果把圖像識別的常見模型用有向無環圖表示出來,我們會發現:VGG 模型的結構是線性的;ResNet 在線性結構的基礎上添加了「跳層連接」;Inception 模型的結構更偏向樹狀。而 AutoDL Design 的不受任何現成網絡結構的約束,能夠在所有可能的有向無環圖空間內進行探索。

技術分享圖片

圖:AutoDL Design 設計的模型結構

另外,AutoDL Design 的一個特點是可以實現多目標優化:如果目標除了效果好之外,還對模型大小、運行時間有要求,系統也可以根據要求完成設計。

AutoDL Transfer:「小數據」也可以建「大模型」

機器之心:能否介紹一下 AutoDL Transfer 的優化方式?

AutoDL Transfer 是在 ResNet、DenseNet、VGG、Inception 等經典網絡的基礎上,進行了一些基於人工經驗的組件改良,以及采用了超參優化技術進行搜索。例如,我們增加了雙線性(bilinear)組件,把經過層層卷積的向量再進行兩兩組合,讓特征更為豐富。

AutoDL Transfer 現在提供兩種服務,分別是靜態模型(Static Model)和動態模型(Dynamic Model)。

靜態模型是在大量已有數據集上進行測試後,選出能夠在大部分數據集上取得優異性能的模型結構,然後利用用戶數據精調模型參數。

動態模型則會根據用戶數據在不同組件以及超參的組合中重新進行一次搜索。和靜態模型相比,動態模型能夠針對用戶數據進行更加精細的優化,但也需要用戶提供更多數據。

技術分享圖片

圖:AutoDL Transfer 示意圖

機器之心:什麽樣的用戶場景適合選擇 AutoDL Transfer?AutoDL Transfer 對用戶數據規模有什麽要求?

首先,數據量比較小的情景下,很難從頭訓練大模型,此時 AutoDL Transfer 仍然能保證一個很好的模型效果。

同時,即使用戶數據量比較大,遷移學習仍然能把初始階段從大規模數據集中習得的物體特征的知識以參數的形式帶入到接下來有針對性的優化過程中,效果往往比從頭訓練要好。

AutoDL Transfer 還使用了一些百度自己研發的技術,包括自動數據增強、遷移過程中正則化項的優化等。這些技術都有助於在小數據條件下提升模型泛化能力,因此 AutoDL Transfer 對用戶數據規模幾乎沒有限制,分類任務中,每個類別的數據可以只有 100 張甚至幾十張。用戶可以在上傳數據後幾分鐘就拿到訓練好的模型結果。關於 AutoDL Transfer 的最新進展,可以見我們在 ICLR 2019 上發表的文章。

技術分享圖片

圖:AutoDL Transfer 靜態模型與動態模型在不同任務中的效果示意圖

AutoDL Edge:事半功倍的終端計算

機器之心:AutoDL Edge 采用了哪些優化方法?

AutoDL Edge 主要旨在對模型進行壓縮,使得同等邊緣算力支持更多 AI 能力,從而拓寬應用場景。

因為市面上有非常多不同的硬件配置,因此我們的團隊先研究了一些設備無關的通用的模型壓縮算法,這類算法能夠同時減小網絡規模、提升推理速度且不改變模型的性能。

濾波器剪枝(Filter Pruning)就是其中一種典型的技術。我們會估算每一個卷積核的重要程度,在每一個卷積層中,去掉那些不那麽重要的卷積核。此外,我們也會對計算資源消耗最大的全連接層做矩陣低秩分解,加速矩陣乘法。

技術分享圖片

圖:濾波器剪枝示意圖

觀察到深度卷積網絡的參數主要集中在卷積核上,我們最新采用的模型壓縮算法通過參數共享來壓縮卷積核的參數空間。我們提出了一種新的卷積核的表示方式,使得卷積核可以在訓練過程中自動進行參數共享。我們提出的參數共享模型可以從頭開始訓練,而不是需要先訓練出一個大模型然後使用參數共享或者其他的壓縮方法。配合參數量化(quantization)方法,我們的方法在 CIFAR-10 上在準確率僅降低 0.27% 的條件下將 ResNet-18 壓縮了 50 多倍。在目標檢測任務上,我們的方法將 Single Shot MultiBox Detector(SSD)網絡進行了有效壓縮,在參數數量(0.45M)明顯小於 Tiny SSD(1.13M)下,在 VOC 2007 的測試集上的平均準確率(mAP)反而有大幅提升。

此外,還有一些針對性特定芯片的優化,設備提出了算力、能耗、響應時間等約束。而算法設法在這些約束之下降低運算量,壓縮模型大小。一旦將模型壓縮到緩存可以容納的大小,就可以極大加速 I/O。

值得一提的是,模型壓縮的過程也是自動化的。

同時,我們也在探索用 AutoDL Design 的思路,不需要針對一個大模型進行壓縮,而是從頭尋找一個小模型。

機器之心:關於此次公開的兩篇新論文,神經網絡的收斂性證明有什麽意義?

深度神經網絡廣泛使用隨機梯度下降,其優化的特性,例如是否會離開局部最優,收斂到全局最優一直是大家關心的問題,最近這方面也有一些有意思的進展。我們的探索主要集中在構造一族損失函數。通過這樣的構造,我們可以在即使學習率非常低的情況下,對於每一個局部最優,證明 SGD 都一定的概率逃逸出局部最優。逃逸概率不但與極值點的值有關而且我們也證明了與極值點附近的幾何性質有關。如果我們跑 SGD 足夠長時間,SGD 會以馬氏鏈的方式遍歷局部最優,可以大概率收斂到全局最優。基於這幾點,我們期望未來對極值點附近的幾何性質的研究會對深度學習有強有力的促進作用。

機器之心:第二篇論文提出,利用局部拉德馬赫復雜度做正則化,從而提高網絡泛化特性,能否詳細介紹一下其做法?

深度學習的核心問題之一在於如何保證在有限樣本上學到的分類器或者預測函數能在將來未觀察到的數據,例如測試數據上,仍然有預測錯誤率的保證。因為在數據點上的 0-1 的離散錯誤很難精確優化,在通常的實踐中,預測函數都是通過在訓練數據上最小化一個損失函數得到,這個經驗函數一般是預測錯誤率的一個上界。在統計中分類器在訓練集和測試集之間的差,可以用預測函數族的一個被稱之拉德馬赫復雜度的標準來衡量。預測函數族越小,拉氏復雜度也越小,經驗損失和泛化損失的差距也越小。拉氏復雜度在經典支持向量機有這廣泛的應用。

目前深度神經網絡成為廣泛應用的預測函數。因為神經網絡的多層結構,其所屬的函數族可以逼近任意的連續函數,這使得許多經典的用函數族的拉德馬赫復雜度作為正則化項的統計學習方法無法進行。但統計學習領域中的局部拉德馬赫復雜度,即只考慮全函數族的一個子族上的拉德馬赫復雜度,卻可以避開全局拉德馬赫復雜度的問題。

我們提出的局部拉德馬赫復雜度方法借鑒了已有的局部拉德馬赫復雜度方法,僅考慮在經驗損失函數的極小值點附近的一個球內的拉德馬赫復雜度。采用最近的拉德馬赫復雜度的估計方法,我們對折頁損失函數 (Hinge Loss) 和交叉熵(cross entropy)推得了這個固定值的表達式,並且將其稱之為局部拉德馬赫正則化項,並加在經驗損失函數上。我們對提出的局部拉德馬赫正則化方法在標準的網絡結構(即 ResNet-18)和 CIFAR-10 上進行了實驗,發現其可以有效降低損失函數在測試數據上的值並且提高預測準確率,體現了增強的泛化性能。我們進一步將該方法應用到被搜索出來的網絡結構上,發現局部拉德馬赫正則化方法和其他的提高泛化性能的方法,包括混合(mix-up)和模型集成(model ensemble),可以兼容。將我們的正則化方法作用在混合和模型集成之後,我們得到了 CIFAR-10 上目前最好的準確率。在我們的文章中也提供了基於PaddlePaddle框架實現的開源代碼。

進化中的 AutoDL:劍指「一步到位」的深度學習模型

機器之心:從 AutoDL 1.0 到 AutoDL 2.0,系統發生了哪些變化?

主要有三方面變化。

第一,在自動設計效果上,現在的 AutoDL 設計出的神經網絡已經全面超過人類專家設計的網絡效果。圖像識別公開數據集 CIFAR-10 上,達到了超過 98% 的正確率。這個效果優於所有有公開報道的人類專家設計的網絡的效果。

第二,在模態方面,除了視覺之外,我們也增加了對語音任務的支持,包括語音模型壓縮、語音模型自動建模等。

第三,在模型適配上,我們增加了一些具體的應用案例,包括對一些可以用於新零售的視覺硬件的支持。

機器之心:AutoDL 團隊現在在進行哪些新方向的探索?

我們特別關心 AutoDL 三個方向的結合,換言之,能不能同時完成模型的設計、遷移和適配。

這也是我們在強化學習技術路徑之外,也同時關註可微分結構路徑的原因:可微分結構既可以用於自動模型搜索,也可以用於遷移學習。模型的安全性也是我們重點關註的方向。我們希望設計的網絡能夠抗攻擊並且具有一定的可解釋性。

解讀百度AutoDL:打破SOTA紀錄的神經架構搜索是如何煉成的