1. 程式人生 > >【論文筆記系列】AutoML:A Survey of State-of-the-art (上)

【論文筆記系列】AutoML:A Survey of State-of-the-art (上)

之前已經發過一篇文章來介紹我寫的AutoML綜述,最近把文章內容做了更新,所以這篇稍微細緻地介紹一下。由於篇幅有限,下面介紹的方法中涉及到的細節感興趣的可以移步到論文中檢視。
論文地址:https://arxiv.org/abs/1908.00709

1. Introduction

以往的模型都是靠大佬們不斷試錯和調參煉丹煉出來的,而且不同場景或者不同型別的資料集又得設計不同的網路模型,而我等窮&菜雞在設計模型的天賦和計算資源上都比不過大佬們。幸運的是終於有體恤民意的大佬提出了Neural Architecture Search with Reinforcement Learning這篇論文,它旨在讓演算法自己針對不同的資料找到合適的模型,實驗結果表明演算法找到的模型可以和大佬們設計的模型媲美,這篇論文也讓NAS技術成為當今的一個熱點研究問題。而AutoML則是進一步希望機器學習的pipeline(如下圖)完全實現自動化。

可以看到一個完整的pipeline包括了資料準備(data preparation),特徵工程(feature engineering),模型生成(model generation),模型評估(model estimation)。以上pipeline中的每個流程其實都可以寫一篇綜述,但是該論文是希望讓大家能對AutoML整個流程有一個全面的瞭解,所以會對選擇各個流程中會比較經典和具有代表性的演算法進行介紹。

相信你也看到了已經有好幾篇關於AutoML的綜述,本篇綜述與它們的區別在於本篇論文是第一篇從pipeline角度來進行介紹的,這樣能讓大家從一個全域性的角度來了解和認識AutoML,而不會陷入某個技術脫離了軌道。另外我們還特意將資料準備納入了AutoML的pipeline中,目的也是希望我們以後能夠從繁瑣的資料收集、整理過程中擺脫出來。

另外,由於NAS是AutoML中最熱門的一個子話題,所以我們還單獨寫了一節來總結了目前的各種NAS演算法比較,同時也基於CIFAR10和PTB兩個資料集,將NAS生成的模型和人類設計的模型做了比較。

最後我們提出了幾個開放性問題以及未來的可行的研究方向。

2. Data Preparation

資料準備可以細分為兩個步驟:Data Collection和Data Cleaning。

2.1 Data Collection

最簡單的資料收集其實就是用目前開源的資料集,比如說分類中常用的就是CIFAR10,ImageNet這種,當然我們也可以用搜索引擎來找我們需要的資料集:

  • Kaggel
  • Google Dataset Search
  • Elsevier Data Search

2.1.1 Data Synthesis

當然其實很多時候你想要的並不一定搜得到,而你看著你手上那少得可憐的資料集暗自呻吟。此時Data Synthesis神仙下凡來到你身邊,告訴你如下幾種辦法來擴充你現有的資料集:

第一種方法是資料增強(data augmentation),這個在處理影象的時候用的特別多,比如torchvision,Augmentor這些python庫都提供了各種資料增強操作。當然資料增強操作有很多種,通過組合又可以得到更多種,完全靠人工設計資料增強操作會發瘋的,所以谷歌,沒錯有時谷歌率先提出了AutoAugment【1】,他們在CIFAR10, ImageNet等資料集上找到了各種資料增強策略(即一組增強操作的組合),而後又有人提出了FastAugment【2】,來進一步提高搜尋效率。NLP也有資料增強,具體的可以閱讀論文。

第二種方法是使用資料模擬器,這種是用於像自動駕駛這種場景,因為我們不可能真的在真實世界中做測試。比較流行的模擬器有OpenAI Gym,Unreal Engine。我們實驗室的大佬們就用Unreal Engine生成了一個用於視差和表面法向估計的大型合成室內機器人立體資料集(IRS dataset)【3】。

第三種就是使用現在很火的GAN技術來生成資料。

2.1.2 Data Searching

前面提到了幾個搜尋引擎可以搜尋別人開源的資料,但是有時候我們也可以用通過Google或者爬蟲的方式來爬取資料,但是這樣會遇到若干種問題。第一種問題是搜尋結果和搜尋關鍵字不匹配,例如你想搜尋水果-Apple,但是搜出來的結果可能包含偉大的蘋果公司的logo以及他們的產品。還有一個問題就是網路資料的分佈和你想構造的資料集分佈可能差別很大,比如說A疾病的影象隨便一搜到處都是,而B疾病的影象可能寥寥無幾,這樣搜尋出來的資料集會非常的imbalanced。而如何解決這些問題歡迎閱讀論文,這裡不做展開。

2.2 Data Cleaning

這裡主要介紹了需要做資料清洗的情況,另外也介紹了一些自動化清洗的演算法,同樣不作展開,具體詳見論文。

3. Feature Engineering

這一章主要介紹了特徵工程的三個方法:feature selection,feature construction和feature extraction。這裡更多的是基於傳統機器學習方法介紹的,這裡不作展開,具體詳見論文。

4. Model Generation

為方便說明把最開始的pipeline圖再搬過來。

模型生成(model generation)可以分為模型選擇和超引數優化兩部分。如上圖示模型選擇又可以劃分為兩種,一種是對傳統的模型做選擇,比如是選擇SVM啊還是選擇KNN等。我們會更加關注第二種,即NAS技術。可以看到NAS技術橫跨三個流程,文字會從model structure和hyperparameters optimization(HPO)以及model estimation三個方面進行介紹,其中model estimation會單獨做一章進行介紹。

另外這裡的HPO和以往我們說的超引數優化本質上是一樣的,即都是優化問題,但是不同的是這裡還包括了對模型結構進行優化。

4.1 Model Structure

這一節會以一種非常直觀和好理解的方式進行介紹,不同模型結構之間的差異和優劣涉及到的比較多的細節,所以感興趣的還是請移步到論文。

4.1.1 Entire structure

Entire structure簡單理解就是我們假設模型深度是\(L\)層,然後每一層被指定一個操作,上層可以連線到其後所有層,如下圖示:左邊是最簡單設計方法,右邊則加入了skip-connection

4.1.2 Cell-based Structure

這一結構的提出是為了解決Entire structure的缺點:搜尋非常耗時。

示意圖如下,可以看到最終的模型是由兩種cell組成的:normal 和 reduction cell。兩者其實是差不多的,只不過前者的輸入和輸出大小,維度都保持一致,而reduction會把特徵圖大小減半,通道數翻倍。

cell內部結構如上圖右邊所示,很多論文後面都是參考了這種設計方式:

一個cell由\(B\)個block組成,一個block又由2個node組成,可以看到:

  • 每個node會被分配一個operation(如conv 3x3等),這個operation是從預定義的search space中選擇的,常見的主要就是卷積操作和池化操作,或者一個類似於ResBlock的自定義的模組。
  • Node還被分配一個輸入資料,可以看到block是有序號的,也就是說block1可以接收block 0的輸出,但是不能接收block 2.另外block 0只能接收前面兩個cell的輸出作為輸入。

上面介紹的normal-reduction方式有一個問題就是特徵圖的大小和通道數變化是固定的,所以在Auto-Deeplab【4】中將這個也納入了搜尋過程,使得模型更加靈活。

normal-reduction方式的另一個問題是每一層的cell結構是固定的,ProxylessNAS【5】通過使用BinaryConnection方法使得每層的cell結構可以不一樣。

4.1.3 Progressive Structure

前面的Cell-based structure中cell內部的block數量需要預先設定好,而且在找到一個合適的cell結構後,通過堆疊固定數量的cell構造最後的網路模型。所以有一些論文則通過漸進式的方法來構造網路結構。

這篇論文【6】提出了Hierarchical structure,示意圖如下:

可以看到這裡的cell是有不同的level的,level-1就是最基本的操作,例如3x3卷積等,第二層就是用第一層的cell連線而成,更高層的cell類似。

P-DARTS則是從layer level的角度來實現漸進式,如下圖示。可以看到之前的方法DARTS先是在訓練集上搜索一個網路,這個網路由8個cell組成,搜尋完畢後,直接堆疊更多的cell,然後直接訓練這個更大的網路。而P-DARTS則是不斷增加cell的數量。這裡面還涉及到不少細節,更多的可以參閱論文。

4.1.4 Network Morphism based Structure (NM)

牛頓曾經說過:“if I have seen further it is by standing on the shoulders of Giants"。Net2Net【7】則是使用了這個思想,它可以直接基於現有的模型進行修改,使得模型變得更寬更深從而提高模型的效能。示意圖如下,使得模型更深的方法其實就是插入一個等冪操作,也就是藍色的結構,用數學公式表示就等價於\(f(x)=x\),乍看起來加了等於沒加,但是後面引數會不斷更新的呀,而且選擇等冪操作也是為了保證模型至少不會比原來的差。

讓模型變得更寬其實就是在某一層插入新的節點,這個節點其實是前一個節點的複製,所以通道數會被減半,這樣也是為了等冪。

而後微軟團隊正式提出了Network Morphism (NM) 這一概念,相比於Net2Net,它的改進的地方有兩點:1)可以插入non-identity的層,而且可以處理任意的非線性啟用函式;2)Net2Net只能單獨地執行加深或者加寬操作,而NM可以同時對深度,寬度,和卷積核大小做修改。

谷歌團隊後面提出的EfficientNet【8】發現如果能很好地平衡模型深度,寬度以及解析度的話可以有效提高模型效能。

參考文獻

  • 【1】Autoaugment: Learning augmentation strategies from data
  • 【2】Fast autoaugment
  • 【3】Q. Wang, S. Zheng, Q. Yan, F. Deng, K. Zhao, and X. Chu, “Irs: A large synthetic indoor robotics stereo dataset for disparity and surface normal estimation,” arXiv preprint arXiv:1912.09678, 2019.
  • 【4】Auto-deeplab: Hierarchical neural architecture search for semantic image segmentation
  • 【5】Proxylessnas: Direct neural architecture search on target task and hardware
  • 【6】Hierarchical representations for efficient architecture search
  • 【7】Net2net: Accelerating learning via knowledge transfer
  • 【8】Efficientnet: Rethinking model scaling for convolutional neural networks



微信公眾號:AutoML機器學習
MARSGGBO♥原創
如有意合作或學術討論歡迎私戳聯絡~
郵箱:[email protected]


2020-02-10 21:44:34