自動網路搜尋(NAS)的理解

2021-10-19 17:32:00 字數 3794 閱讀 3425

現代的深度神經網路有時會包含多種型別的層,而且這些層不止乙個。skip connections和子模組方法也被用來促進模型的收斂,它們對可能形成的模型體系結構的空間沒有限制。目前大多數的深度神經網路結構都是根據人類經驗建立起來的,這種方式需要乙個漫長而繁瑣的試錯過程。nas試圖在不需要人工干預的情況下能夠針對特定深度學習問題檢測出有效架構。

網路架構和超引數優化的問題,有以下的特點:

評價函式未知,是乙個黑箱優化問題,因為評價往往是在 unseen dataset 上進行評價;

非線性;

非凸;混合優化,既有離散空間,又有連續空間;

一次優化結果的評價非常耗時,大型的深度學習模型引數數以億計,執行一次結果需要幾周時間;

在某些應用場景中,存在多個目標。比如:移動端的模型結構優化,既希望得到盡量高的準確率,又希望有非常好的模型計算效率。

搜尋空間定義了優化問題的變數,網路結構和超引數的變數定義有所不同,不同的變數規模對於演算法的難度來說也不盡相同。

早期很多任務作都是用以遺傳演算法為代表的進化演算法對神經網路的超引數和權重進行優化,因為當時的神經網路只有幾層,每層十幾個神經元,也不存在複雜的網路架構,引數很有限,可直接進行優化。而深度學習模型一方面有著複雜的網路結構,另一方面權重引數通常都以百萬到億來計,進化演算法根本無法優化。

但換個思路,假如我們找到了一組網路架構引數和對應的超引數,深度學習模型的效能其實是由這組引數來控制和決定的,所以只需要對複雜模型的架構引數和對應的超引數進行優化即可

目前常見的一種網路架構是鏈狀結構,如下圖:

這種結構相當於乙個 n 層的序列,每一層有幾種可選的運算元,比如卷積、池化等,每種運算元包括一些超引數,比如卷積尺寸、卷積步長等。

最近的一些工作受啟發於一些人工設計的網路架構,研究帶有多分支的網路,如下圖:

很多的深層 rnn 會有類似的結構,很多的網路結構雖然很深,但會有許多重複 cell,將 cell 抽象出來之後,複雜的結構也會變得簡單。這種抽象一方面可以減少優化變數數目,另一方面相同的 cell 在不同任務之間進行遷移,如下圖。

網路架構搜尋問題由於其高維度、連續和離散混合等諸多難點,在搜尋空間維度這塊如果可以做些降維,將會大大提公升效果,zoph 在 2018 年的工作用了 cell 這種方式相比於 2017 年的工作有 7 倍的加速。

**搜尋策略定義了使用怎樣的演算法可以快速、準確找到最優的網路結構引數配置。**常見的搜尋方法包括:隨機搜尋、貝葉斯優化、進化演算法、強化學習、基於梯度的演算法。其中,2017 年谷歌大腦的那篇強化學習搜尋方法將這一研究帶成了研究熱點,後來 uber、sentient、openai、deepmind 等公司和研究機構用進化演算法對這一問題進行了研究,這個 task 算是進化演算法一大熱點應用。

注:國內有很多家公司在做 automl,其中用到的一種主流搜尋演算法是進化演算法。

強化學習

強化學習是一種非常有意思的正規化,幾乎只要可以提煉出強化學習四要素,原問題就可以用強化學習來求解。

在 nas 任務中,將架構的生成看成是乙個 agent 在選擇 action,reward 是通過乙個測試集上的效果**函式來獲得(這個函式類似於工程優化問題中的 surrogate model,即**模型)。這類工作整體的框架都是基於此,不同的點在於策略表示和優化演算法。

乙個工作是,用 rnn 來表示策略函式,初始化時先用策略梯度演算法賦初值,然後用 ppo 來進行優化。另乙個工作是,用簡單的 q-learning 演算法來訓練策略函式,序列地進行動作選擇,即選擇 layer 的型別和相關的超引數。

因為在 nas 任務中,agent 與環境沒有互動,可以降階為無狀態的多臂***(mab)問題。這裡的幾個工作都是近兩三年的新工作,後面會對這些 ***** 進行專門解讀。

進化演算法

進化演算法是一大類演算法,大概的框架也基本類似,先隨機生成乙個種群(n 組解),開始迴圈以下幾個步驟:選擇、交叉、變異,直到滿足最終條件。最近幾年流行一種基於概率模型的進化演算法 eda (estimation distribution of algorithm),基本的思路類似遺傳演算法,不同的是沒有交叉、變異的環節,而是通過 learning 得到乙個概率模型,由概率模型來 sample 下一步的種群。

用進化演算法對神經網路超引數進行優化是一種很古老、很經典的解決方案,90 年代的學者用進化演算法同時優化網路結構引數和各層之間的權重,因為當時的網路規模非常小,所以還能解決,但後續深度學習模型網路規模都非常大,無法直接優化。

**進化演算法是一種無梯度的優化演算法(derivative free optimization algorithm),優點是可能會得到全域性最優解,缺點是效率相對較低,**近兩年幾家高科技企業做 nas 時都在用進化演算法優化網路結構,同時用基於梯度的方法(bp)來優化權值。在 nas 任務中,進化演算法的交叉運算元和任務結合比較緊,被定義為一些類似新增、刪除層的操作,而非簡單的更改某一位編碼。

用進化演算法解決 nas 問題,不同的工作可能聚焦在不同的過程中,比如如何 sample 種群,如何 update 種群,如何生成子代種群等。這些工作將會被在後面的文章中進行解讀。

貝葉斯優化

貝葉斯優化(bayesian optimization)是超引數優化問題的常用手段,尤其是針對一些低維的問題,基於高斯過程(gaussian processes)和核方法(kernel trick)。對於高維優化問題,一些工作融合了樹模型或者隨機森林來解決,取得了不錯的效果。

除了常見的三大類方法,一些工作也在研究分層優化的思路,比如將進化演算法和基於模型的序列優化方法融合起來,取各種方法的優勢。real 在 2018 年的乙個工作對比了強化學習、進化演算法和隨機搜尋三類方法,前兩種的效果會更好一些。

評價預估

評價預估類似於工程優化中的**模型(surrogate model),因為深度學習模型的效果非常依賴於訓練資料的規模,大規模資料上的模型訓練會非常耗時,對優化結果的評價將會非常耗時,所以需要一些手段去做近似的評估。

一種思路是用一些低保真的訓練集來訓練模型,低保真在實際應用可以有多種表達,比如訓練更少的次數,用原始訓練資料的一部分,低解析度的,每一層用更少的濾波器等。用這種低保真的訓練集來測試優化演算法會大大降低計算時間,但也存在一定的 bias,不過選擇最優的架構並不需要絕對數值,只需要有相對值就可以進行排序選優了。

另一種主流思路是借鑑於工程優化中的**模型,在很多任務程優化問題中,每一次優化得到的結果需要經過實驗或者高保真**(有限元分析)進行評價,實驗和**的時間非常久,不可能無限制地進行評價嘗試,學者們提出了一種叫做**模型的回歸模型,用觀測到的點進行插值**,這類方法中最重要的是在大搜尋空間中如何選擇盡量少的點**出最優結果的位置。

第三種主流思路是引數級別的遷移,用之前已經訓練好的模型權重引數對 target 問題進行賦值,從乙個高起點的初值開始尋優將會大大地提高效率。在這類問題中,積累了大量的歷史尋優資料,對新問題的尋優將會起到很大的幫助,用遷移學習進行求解,是乙個很不錯的思路。

另一種比較有意思的思路叫做單次(one-shot)架構搜尋,這種方法將所有架構視作乙個 one-shot 模型(超圖)的子圖,子圖之間通過超圖的邊來共享權重。

本篇筆記主要**是 thomas elsken的bolg,來自德國弗萊堡大學的博士生。

自動搜尋方式的流程

自動搜尋方式的流程 首先呼叫驅動api設定demod和 tuner頻點 符號率等引數,鎖定頻點 若失敗,則返回 之後,根據資料更新的方式決定是否要清除programlist和transponderlist,然後搜尋解析pat表,pat表解析完之後會對逐個program解析pmt表和sdt表,所有的p...

關於無線搜尋的理解

本來是為了應聘神馬搜尋產品實習寫的,誰知道一面就莫名其妙掛了,完全沒用到 哎 關於無線搜尋的理解 無限搜尋 基於手機等移動裝置上的搜尋服務。因為網速 螢幕 裝置響應速度等限制,最初無線搜尋的市場並不理想。而現階段因為這些硬體技術問題都得到解決。而現在我們幾乎是手機不離身的,那麼又有幾個電腦是不離身的...

網路分層的理解

osi網路7層的介紹我這邊直接引用一片部落格 新增鏈結描述 我這邊暫時將其分為5層 檢視當前機器上在傳輸控制層建立的連線 netstat tunlp only servers netstat napt servers and established 鏈路層 arp a dns我們可以看到gatewa...