neural architecture search: a survey (神經網路結構搜尋)
這是一篇入門綜述,我們一起看看吧~
(abstract:本文主要是對於搜尋策略的介紹)
搜尋策略(search strategy)
包括:隨機搜尋、貝葉斯優化、進化演算法,強化學習(rl)和基於梯度的方法。從歷史來看,在幾十年前很多研究者已使用進化演算法探索神經網路結構以及他們的引數。yao 有對2023年以前的 此類方法的 review。
1. 貝葉斯優化:
引領了最先進的視覺架構、在無資料增強的條件下,在cifar-10 資料集上有優異的成績,並且使第乙個自動調整的網路勝過了人類專家設計的網路。在zoph 和 le(2017)通過基於強化學習的搜尋策略 在cifar-10上獲得和penn treebank基準相近的表現之後,nas成為機器學習社群的主流研究課題。雖然zoph和le(2017)使用大量的計算資源來實現這一結果(800個gpu持續三到四周),但在他們的工作之後,已經快速並且陸續的發布了各種各樣的方法,期望降低計算成本並實現進一步的效能改進。
2.強化學習:
為了將nas定義為強化學習(rl)問題,可以認為**神經結構的生成 是 agent(智慧型體) 的 action,**動作空間與搜尋空間相同。agent 的reward 來自於訓練後的網路結構對沒見過的資料的效能(第四部分講效能時重點講解)。不同的強化學習方法區別在於他們如何體現 agent 的 policy 以及他們如何優化,zoph 和 le (2017) 使用迴圈神經網路 (rnn)策略按順序取樣乙個字串,該字串反過來對神經體系結構進行編碼。他們最初使用 reinforce 策略梯度訓練此網路演算法,但在後續工作中使用proximal policy optimization(ppo)策略優化代替。baker等人 使用 q-learning來訓練乙個policy,該policy 依次選擇乙個層的型別和相應的超引數。
這些方法的另一理解是將其視為乙個順序決策過程。在這個過程中, policy 對 action 進行取樣,並以此生成網路結構, 環境的 state 包括已取樣的 action 以及在最後的 action 之後獲得的 reward。 然而,由於在此順序過程中沒有發生與環境的互動(沒有觀察到外部狀態,也沒有中間獎勵),我們更直觀地將架構抽樣過程解釋為單個動作的順序生成; 這將rl問題簡化為無狀態的 multi-armed bandit 問題。
cai 提出了一種相似的方法,他將nas化為順序決策過程: 在他們的方法裡, state 是當前沒完全訓練的網路結構, reward 是對網路結構效能的評估, action 是對 function-preserving mutations, 的一種應用,稱其為 網路態(具體要看section 4), 接著是訓練網路一段時間。 為了處理可變長度的網路結構, 他們使用雙向lstm 將網路結構編碼成乙個固定長度的表示。 基於這個編碼表示, actor網路 來決定採取的 action(即加什麼 cell)。上述兩個部分組成了 policy, 該policy 使用 強化學習的 policy gradient 演算法來端到端的訓練。我們注意到 這種方法不會重複取樣同一種state(即網路結構),所以 policy 需要對架構空間具有很強的泛化性。
3.進化演算法
rl的一種替代方法是使用神經進化演算法,**這種方法使用進化演算法來優化神經網路結構。**我們所知道的第一種設計神經網路的方法可以追溯到近三十年:miller等人使用遺傳演算法改進網路架構並使用反向傳播來優化其權重。自那時起,許多神經進化方法使用遺傳演算法來優化神經結構及其權重;
4.然而,當擴充套件到具有數百萬權重的當代神經架構用於監督學習任務時,基於sgd的權重優化方法做的比進化演算法好。因此,最近的神經進化方法再次使用基於梯度的方法來優化權重,並且僅使用進化演算法來優化神經結構本身。進化演算法演化了一組模型,即一組(可能是訓練過的)網路; 在每個進化步驟中,對來自這組模型中的至少乙個模型進行取樣,並作為父類通過對父類突變來生成後代。在nas的上下文中,突變是區域性的操作,例如新增或移除層,改變層的超引數,新增跳過連線,以及改變訓練超引數。在對後代進行訓練之後,評估它們的合適度(例如,在驗證集上的表現)並將它們新增到群體中。
神經進化方法在如何對父類進行取樣,以及更新種群和產生後代方面存在差異。例如,real等人,real等人和liu等人使用tournament選擇來對父類進行取樣,而elsken等人使用inverse density從 a multi-objective pareto front 取樣父類。real等人從群體中移除了最壞的個體,同時real等人發現**移除最老的個體(**這會減少貪婪(個人感覺是能減小搜尋空間的樣子)))是有益的,而liu等人根本不會移除個體。為了產生後代,大多數方法隨機初始化子網路,而elsken等人採用拉馬克式繼承,即知識(以學習過的權重的形式)通過使用網路態射從父網路傳遞給其子網。real等人還讓後代繼承其父母的所有引數,這些引數不受所應用的突變的影響; 雖然這種繼承不是能夠嚴格保證的,但與隨機初始化相比,它也可以加速學習。此外,它們還允許改變學習速率,這可以被視為一種在nas過程中優化學習率的方式。我們參考 stanley et al. (2019)進行最近對神經進化方法的深入回顧。
比較
real等人比較了 rl,進化演算法和隨機搜尋(rs),得出的結論是rl和進化演算法在最終測試精度方面表現同樣出色,進化演算法具有更好的效能和更小的模型。 rl和進化演算法在實驗中都略優於rs:在cifar-10上的 test error 大約是4%,而rl和進化演算法大約是3.5%(在「model augmentation」之後, 深度和濾波器的數量都增加了,增強後的search space 和 沒增強的 search space 相差大約2%)。liu報告出的差異甚至更小,他的實驗是rs在cifar-10上的test error 為3.9%,在imagenet資料集上的top-1 驗證error是21%,而基於進化的演算法分別是3.75% 和 20.3%。
**貝葉斯優化(bo)**是用於超引數優化的最流行的方法之一,但由於經典的bo工具箱是基於高斯過程的 並且關注低維度的連續優化問題,因此它尚未被許多研究組應用於nas。swersky等人和kandasamy等人為了使用經典的基於gp的bo方法,為 架構搜尋空間推導了核函式,但到目前為止還沒有實現新的最好的效能。相比之下,有些工作使用基於樹或者隨機森林的方法來在非常高維的空間中高效的搜尋,並且在很多問題上取得了優異的效果(同時優化網路結構 和 他們的超引數)。雖然沒有完整的比較,但初步的證據表明這些方法也可以超越進化演算法。
5.網路結構搜尋空間也可以使用分層的方法研究,比如:進化演算法的組合、基於順序模型的優化。negrinho和gordon以及wistuba利用其搜尋空間的樹形結構並使用 monte carlo tree search.。 elsken等人提出了一種簡單但效能良好的爬山演算法,該演算法通過貪婪地向更好的架構方向移動而不需要更複雜的探索機制來發現更好的架構。
與上面的不需要梯度的優化方法不同的是,liu 等 提出搜尋空間的連續鬆弛來是基於梯度的優化成為可能,作者在乙個特定的層不固定乙個單一的操作卷積 或者 pooling,而是計算一組操作的凸集。 具體就是:對於乙個輸入x,輸出y 的計算公式為
此處的凸係數αi可以有效的確定網路結構引數。然後, liu等 通過交替的梯度下降,在訓練集上訓練引數,在驗證集合上訓練結構引數。最後,通過在每層取αi的最大值得到離散的網路結構。shin和ahmed也採用基於梯度的神經架構優化,但他們只考慮分別優化層的超引數或連線模式。
MVC基礎入門(二)
mvc在學習 headfirst 的時候,就接觸過了。對於這個龐大的模式。非常的感興趣。mvc就是設計模式的昇華。在沒有接觸過mvc的時候,一直都是在使用的三層架構,使用的ubd三層來做專案。對於這個新接觸的名詞,還是很陌生的。所以需要來逐漸的來學習,如何使用mvc。首先,mvc是在web開發上面提...
Python入門基礎(二)
內容導航 1.列表,元組操作 2 字典操作 3.檔案操作 1.列表,元組操作 列表的建立 names marry jane kangkang lisa print names print names 0 通過下標訪問列表中的元素,下標從0開始計數 print names 1 代表最後乙個元素 for...
PHP基礎入門(二)
一 php中的類和物件 關鍵字 class 類名 類名命名規則和變數名一樣,一般以大寫字母開頭。物件是類的例項,要建立乙個類的例項,必須用 new 關鍵字。類應在被例項化之前定義。物件名 new 類名 可以不加小括號。class peo xiaoming new peo 例項化的物件 三個分別是,p...