AutoML
什麼是AutoML?
目前一個優秀的機器學習和深度學習模型,離不開這幾個方面:
一、優秀的數據預處理;
二、合適的模型結構和功能;
三、優秀的訓練策略和超參數;
四、合適的後處理操作;
五、嚴格的結果分析
這幾方面都對最終的結果有着舉足輕重的影響,這也是目前的數據工程師和學者們的主要工作。但由於這每一方面都十分繁瑣,尤其是在構建模型和訓練模型上。而大部分情況下,這些工作有無須過深專業知識就能使用起來。所以AutoML主要的作用就是來幫助實現高效的模型構建和超參數調整。例如深度學習網絡的架構搜索、超參數的重要性分析等等。當然AutoML並不簡單的進行暴力或者隨機的搜索,其仍然需要機器學習方面的知識,例如貝葉斯優化、強化學習、元學習以及遷移學習等等。目前也有些不錯的AutoML工具包,例如Alex Honchar的Hyperopt、微軟的NNI、Autokeras等。
自動化超參數搜索的方法有哪些?
目前自動化搜索主要包含網格搜索,隨機搜索,基於模型的超參優化
網格搜索:
通常當超參數量較少的時候,可以使用網格搜索法。即列出每個超參數的大致候選集合。利用這些集合 進行逐項組合優化。在條件允許的情況下,重複進行網格搜索會當優秀,當然每次重複需要根據上一步得到的最優參數組合,進行進一步的細粒度的調整。網格搜索最大的問題就在於計算時間會隨着超參數的數量指數級的增長。
隨機搜索:
隨機搜索,是一種用來替代網格搜索的搜索方式。隨機搜索有別於網格搜索的一點在於,我們不需要設定一個離散的超參數集合,而是對每個超參數定義一個分佈函數來生成隨機超參數。隨機搜索相比於網格搜索在一些不敏感超參上擁有明顯優勢。例如網格搜索對於批樣本數量(batch size),在[16,32,64]這些範圍內進行逐項調試,這樣的調試顯然收益更低下。當然隨機搜索也可以進行細粒度範圍內的重複的搜索優化。
基於模型的超參優化:
有別於上述兩種的搜索策略,基於模型的超參調優問題轉化爲了優化問題。直覺上會考慮是否進行一個可導建模,然後利用梯度下降進行優化。但不幸的是我們的超參數通常情況下是離散的,而且其計算代價依舊很高。
基於模型的搜索算法,最常見的就是貝葉斯超參優化。有別於的網格搜索和隨機搜索獨立於前幾次搜索結果的搜索,貝葉斯則是利用歷史的搜索結果進行優化搜索。其主要有四部分組成,1.目標函數,大部分情況下就是模型驗證集上的損失。2、搜索空間,即各類待搜索的超參數。3、優化策略,建立的概率模型和選擇超參數的方式。4、歷史的搜索結果。首先對搜索空間進行一個先驗性的假設猜想,即假設一種選擇超參的方式,然後不斷的優化更新概率模型,最終的目標是找到驗證集上誤差最小的一組超參數。
AutoML for Image Classification
- We already have many good solutions for image classificaiton. Inception, Resnet…Why use AutoML?
- 如果可以通過自動搜索,找到比人類設計的最好算法還好的算法,那麼說明這一領域的研究價值。
- 圖像分類任務已經被很好學習了,AutoML以此爲起點更加合適。
NAS(Neural Architecture Search)One example of AutoML
NAS簡介
Neural Architecture Search基本遵循這樣一個循環:首先,基於一些策略規則創造簡單的網絡,然後對它訓練並在一些驗證集上進行測試,最後根據網絡性能的反饋來優化這些策略規則,基於這些優化後的策略來對網絡不斷進行迭代更新。
使用強化學習
之前的NAS工作可以大致分爲兩方面,首先是強化學習,在神經結構搜索中需要選擇很多的元素,如輸入層和層參數(比如選擇核爲3還是5的卷積操作)的設置,設計整個神經網絡的過程可以看作一系列的動作,動作的獎賞就是在驗證集上的分類準確率。通過不斷對動作更新,使智能體學習到越來越好的網絡結構,這樣強化學習和NAS就聯繫起來了。
使用遺傳算法
另一方面NAS是一些進化算法,這一大類方法的主要思路是,用一串數定義一個神經網絡結構。如圖是ICCV2017謝凌曦博士的工作,他用一串二進制碼定義一種規則來表達特定的神經網絡連接方式,最開始的碼是隨機的,從這些點出發可以做一些突變,甚至在兩個數串(擁有較高驗證準確率)之間做突變,經過一段時間就可以提供更好的神經網絡結構。
NAS的缺點
算力要求太高!
用了500塊P100GPU訓練了4天,而且這是在非常小的CIFAR-10數據集上做的
PNAS(Progressive Neural Architecture Search)
論文認爲網絡由許多個Cell構成。首先搜索可重複的cells(可以看作是Residual block),一旦找到一個cell,就可以自由地選擇其疊加方式,形成一個完整的網絡.
一個網絡通常由這三個要素來確定:cell的結構,cell重複的次數N,每一個cell中的卷積核個數F,爲了控制網絡的複雜度,N和F通常經手工設計。可以理解爲,N控制網絡的深度,F控制網絡的寬度。
在我們的搜索空間中,一個cell由5個block組成,每個block是一個(,,,,)的元組。以下將具體介紹.
對於灰色的部分,它是輸入,可能是三種來源:
- 前一個cell的輸出
- 前一個的前一個的cell輸出
- 當前cell的當前block的所有之前的輸出
對於黃色的方框,即
這其實是對剛纔選取的隱含層的一元運算符,它包含了33的卷積,55的卷積,77的卷積,identity,33的均值池化,33的最大值池化,33的加寬池化以及17後接71的卷積。讓數據在搜索空間中學習找到最適合的操作
對於綠色的方框
綠色框代表C這個運算,它把由,產生的,通過一定的方式組合到一起,產生一個新的隱含空間。這個C操作是按位加和的操作
Naive Algorithm
- 直接進行搜索對於一個包含五個block的cell其可能的搜索空間爲
之前介紹的無論是強化學習還是基於進化算法,都是直接搜索,這樣在搜索時是非常迷茫的。
- 首先訓練所有的1-block cells,只有256個這樣的cell。雖然可以通過枚舉的方式,但性能會很低,因爲只有1個block的cell不如包含5個block的cell有效。但是,這部分性能信息可以爲是否繼續採用這個cell的信號提供輔助,基於1-block cell的表現,我們可以嘗試發現最有希望的2-block cell,並對其進行訓練,如此迭代,即可構建整個網絡。
- 上面的想法可以簡單概括爲一個簡單的算法,訓練和評估當前有b個blocks的cells,然後根據其中最好的K個cells來枚舉b+1個blocks,然後去訓練和評估。
- 但是實際上,這個算法是有問題的,對於一個合理的,需要訓練的子網絡就高達個。這個運算量已經超過了以往的方法。因此,我們提出了一個準確率預測器,它可以不用訓練和測試,而是隻通過觀察數串,就能評估一個模型是否是有潛力的。
Progressive Neural Architecture Search
- 使用一個LSTM網絡來做準確率預測器,之所以使用它,是因爲在不同的block中可以使用同一個預測器。
- 首先訓練並評估當前b個blocks的K個cells,然後通過這些數據的表現來更新準確率預測器,可以使準確率預測器更精確,藉助預測器識別K個最有可能的b+1個block。這樣學出來的結果可能不是最正確的,但卻是一個合理的trade-off結果。
- ,最開始b=1,Q1時有256個網絡,對它全部訓練測試,然後用這K個數據點訓練準確率預測器。枚舉Q1的所有後代M1,並把這個準確率預測器運用在M1的每個元素上,選出其中最好的K個,即得到了b=2時的集合Q2。然後將b=2的網絡進行訓練測試,經過上述相同的過程,可以得到Q3。Q3中最好的模型即爲PNAS返回的結果。
算法
實驗
- 如圖是最後學習到的網絡結構,可以看出,最開始學習到的是separable和max convolution的組合,後面漸漸學習到更多的組合。
- ImageNet上的結果