對Exploring RandomlyWired Neural Networks for Image Recognition的另類解讀:披着隨機搜索外衣的操作至上方法

原文鏈接:https://arxiv.org/abs/1904.01569

項目地址:https://github.com/seungwonpark/RandWireNN

中文翻譯:https://blog.csdn.net/weixin_37993251/article/details/89161502

參考的博客:xiaoiker的博客georgeandgeorge的博客

1.本文在探究什麼問題?

NAS的出現使得人們真正意義上開始了對網絡架構這一重要參數的機器學習過程。然而,目前的方法通常是選定一個網絡生成器,隨後用這個網絡生成器學習如何搜索網絡。

然而,就像ResNet和DenseNet中的佈線模式一樣,NAS網絡生成器是手工設計的,允許的佈線模式的空間被限制在所有可能的圖的一個小子集中。也即,雖然搜索的層級提高了,但是我們還是沒能跳出“制定一個網絡->執行任務”的框架。而我們所期望的AutoDL,應當是機器能夠擺脫人類的思想束縛,實現更優秀的性能。

所以,本文的核心思想,就是探究“有沒有更優秀的網絡生成器”。

2.本文做了什麼?

我覺得,用經典的NASNet作對比,能夠很好的說明本文的工作。

NASNet使用一個RNN網絡生成隱含層(綠色和灰色節點)間的連接方式、操作(黃色)、操作結果的連接方式(綠色)。而生成的網絡的訓練結果會作爲反饋修正RNN的參數。

而本文的網絡,固定了每個節點的操作(黃色與綠色),只探索如何如何連接各個隱含層。

既然是探索固定數目的節點間的連接,那不就變成一個隨機圖問題了嘛!所以,本文使用了三種隨機圖方法:ER(p), BA(M), WS(K,P),每種方法都只包含一個或者兩個參數,然後用枚舉法,用不同的參數各生成5個結果(這些結果沒有經過篩選,因此是完全隨機的!),最後的結果如下圖。

雖然圖上柱子看着差挺多,但是發現:這種瞎連的方法生成的結果,方差都挺低(同一個生成器出來的結果精度幾乎相同),而且精度還都挺高!(最好的幾個結果優於SOTA的NAS方法生成的網絡)而最重要的是,這些結果都來自於隨機生成的網絡!

其實上圖中的結果差距這麼小,我們完全可以概括一下他們:用數量固定的操作節點,連數量幾乎固定的線,最終生成的結果幾乎相同!再概括一下就是,在節點間隨便畫N根線,最後訓出來的效果都差不多。(雖然原文的三種隨機圖方法還是有一定紀律性的)

那說明網絡結構對你的精度貢獻不大啊!到底啥大呢,想過去肯定是節點的操作啊!原文中有這樣一張圖:

這裏淺綠色點是文中使用的操作的結果,方塊菱形三角則是換了節點操作以後的結果。雖然原文一直在說“後面三種都差不多”,但重點明顯應該是:你這第一個和剩餘的差的(相比於不同網絡結構的差)也太大了吧!

所以,本文的實驗結果,與NASNet相比,有下面兩個優勢:

1.網絡生成器完全不需要用子網絡的結果訓練,因爲差距不大,完全可以枚舉完成嘛!(訓練耗時down)

2.子網絡生成過程中的限制少,想怎麼連就怎麼連(多樣性up,但並沒用上,因爲無論怎麼連都差不多)

 

3.一個小小的啓發

3.1節對我的思想有一個啓示,首先記錄在這裏:

網絡可以看成是輸入參數到輸出參數的映射,\beta=g(\alpha),其中函數g由網絡的架構和其中的參數確定。

但同時,g也可以看作是一種概率分佈。也即,\alpha的作用是從這個概率分佈中獲得一個確定的結果。

而我們訓練網絡的過程,實則是使這個分佈,更加接近我們的預期。這個分佈與我們的預期越接近,網絡的性能便越高。

 從概率論的角度理解網絡,有一種豁然開朗的感覺。

不過整個3.1節給人的感覺就是,說明了現在的網絡生成器受到了諸多限制。

4.如何生成一個神經網絡

這一部分我直接引用了georgeandgeorge的博客中的內容,他寫的足夠詳細。而我補充的部分會通過斜體標註。

這個神經網絡是用圖生成的。什麼圖呢,有向無環圖(DAG)。爲什麼是有向的?方向指示了數據的流向。爲什麼是無環的?因爲神經網絡中的環會導致求導過程中的無窮包含問題。我覺得神經網絡理想情況下是有環的,環起到一個循環數據的作用,它的存在使得數據複用率更高,從而使得神經網絡更爲精簡。其實我們反覆迭代去計算、去修正神經網絡的參數,就好像把數據和網絡放在一個大環裏反覆執行計算,所以傳統神經網絡裏面反倒沒有了環。

怎麼生成一個DAG?先造一個圖,再用啓發式方法確定邊的指向。

圖由節點V和邊E構成,圖的複雜度取決於V和E的數目。作者選了3種造圖的算法:

(1)ER算法:初始狀態是N個節點0條邊,對於每一對節點,以p的概率在其間連邊,該模型可記做ER(p)。當時,該圖有較大概率成爲一個連通分量。僅包含一個超參數p。

(2)BA算法:初始狀態是M個節點。依次添加新節點,每加一個節點,就加上M條邊。新加的節點以一定概率連接到已有的節點v上,這個概率與v的度數相關。節點個數增加到N爲止。該模型可記做BA(M)。僅包含一個超參數M。

(3)WS算法:初始狀態下,N個節點排成環狀,每個節點與前後K/2個相鄰節點相連(K是偶數)。以順時針的順序,對每個節點v,考察與它相連的第i個節點,以p的概率“重新連接”它。所謂“重新連接”,就是隨機選取一個v以外的,當前沒有與本節點相連的節點進行連接。重複該操作K/2次,得到新圖。該模型可記做WS(K,P)。包含兩個超參數(K,P)。

如何將生成的無向圖轉化成DAG?

給這些節點編號,讓所有邊中編號小的節點指向編號大的節點。在ER圖中,節點編號的順序是隨機的;在BA算法中,初始的M個節點編號是1-M隨機的,之後的節點編號是依插入順序的;在WS圖中,節點序號是順時針序。

如何將DAG映射成網絡呢?

網絡是由傳送數據的數據流線路,以及處理數據流的運算模塊構成的。前者與邊構成映射,後者與節點構成映射,該思路是符合人們的直觀認識的。

具體來說,邊操作包含:將數據流從一個節點傳遞到另一個節點。節點操作由3個部分組成:

(1)aggregation(聚集):將輸入數據流加權求和,權值是可學習的,且是正值。

(2)transformation(轉換):將聚集的數據做卷積、激活等操作,本文中採用的是ReLU-Conv-BN操作。卷積部分是默認用類似Inception網絡裏的3x3 separable conv做的(yige 3x3深度可分離卷積結構後跟一個1x1卷積,可參考博客:https://blog.csdn.net/u012426298/article/details/80998547)

(3)distribution(分配):將加工過的數據輸出到其他節點。

之所以這樣設計節點和邊的操作是因爲這樣的話有如下好處:

(1)保持了進出的通道數一致,這防止了某些出入度節點因爲計算量較大而在網絡中有更大影響力。

(2)保證了FLOPs和參數數目不變。

(3)聚集操作和分配操作幾乎沒有參數,這樣使得FLOPs、參數數目和節點數目差不多呈線性正相關,方便度量網絡的能力。

定義了這種映射關係之後,就要解決如何輸入、輸出的問題。解決方法也很圖論,就是類似於流網絡技術,額外添加一個輸入節點、一個輸出節點。

繼續類比神經網絡的結構,我們發現一個神經網絡往往由多個部分組成,每個部分有着不同的結構,承擔着不同的任務。我們將上述生成的一個“圖”網絡視作一個stage,而整個神經網絡則由多個stage拼接而成。下面比較一下ResNet和與之類似的5-stage RandWire architecture的網絡結構。

可以看到兩者的大體結構是形成了對應關係的,而且在性能上隨機連接網絡在分類任務上的性能要好於ResNet。

在這個網絡中,手工設計的參數包括:網絡的stage數量,節點數量,節點間連接數量(用來能和之前的算法進行比較);隨機圖算法ER(p), BA(M), WS(K,P)中的p,M,K,P這些參數(人工試錯法,通過行/網格搜索實現)。這四個參數人工試錯的結果如下圖。

這裏需要強調的是,在選定這些參數後,原文並沒有再從這些參數生成的網絡中進行選擇,而是直接隨機選擇了這些確定參數的隨機圖算法生成的5個網絡架構。而他們的實驗表明,這些架構的結果都差不多!也即上圖中的黑色線表示的方差都很小。

我們知道,調試神經網絡的超參數是煉丹的關鍵。關於optimization,是否可以逐步做到AUTO_ML是我們關心的事情。對比經典NN和本文提出的這些隨機生成的網絡,實驗結果表明這些隨機網絡不需要怎麼調參(其他生成器還需要反覆訓一系列網絡來更新生成器參數,而這裏在確定p,M,K,P這些參數後就直接隨機選擇了),就能獲得比較好的結果,更符合AUTO_ML的趨勢。

4.實驗結果

首先是從網絡中隨機移除一個點或隨機移除一個邊對網絡精度的影響。這裏個人覺得意義不大,有興趣可以看下原文和翻譯。

接下來是替換網絡中的transform轉換操作。這裏其實很耐人尋味:雖然原文一直在對比這三個新操作,但是很明顯:這三個新操作的性能都遠不及原來的3x3分離卷積。也即,本文的這個方法能夠取得如此成績,與選擇了恰當的節點操作密不可分。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章