【GiantPandaCV導語】Google Brain提出的NAS領域的Benchmark,是當時第一個公開的網絡架構數據集,用於研究神經網絡架構搜索。本文首發GiantPandaCV,請不要隨意轉載。
0. 摘要
神經網絡搜索近年來取得進步巨大,但是由於其需要巨大的計算資源,導致很難去復現實驗。本文目標是通過引入NAS-Bench-101的方法來緩解以上問題。在NAS-Bench-101中,設計了一個緊湊且豐富的搜索空間。通過圖同構的方式來區別423k個網絡架構。
在CIFAR10數據集上多次訓練以上所有網絡,並得到驗證集上的結果。這使得研究人員可以通過查詢預先計算的數據集,以毫秒為單位評估各種模型的質量。通過分析數據集作為一個整體,並通過對一系列架構優化算法進行基准測試來證明它的實用性。
1. 介紹
簡單來說,NAS-Bench-101就是谷歌設計了一個搜索空間,在搜索空間中窮盡枚舉了大約5百萬個子網絡。在CIFAR10數據集上進行訓練,在驗證集上測試。將子網的結構以及對應的驗證集精度記錄下來,形成一個表,研究人員使用的時候只需要通過查表就可以得到對應的驗證集精度,這樣就不需要重新訓練和測試,降低了對計算資源的依賴。
為了摸清這篇工作內容,我們需要搞清楚幾個關鍵點:
- 搜索空間,如何設計搜索空間的?
- 訓練策略,采用了什么訓練策略?
- 使用方法,研究人員如何使用NAS-bench-101?
- 潛在方向,使用nas-bench-101有哪些潛在的研究方向?
2. 搜索空間
NasBench101中設計的搜索空間是基於cell的搜索空間,如圖所示,網絡的初始層(conv stem)是由3x3卷積和128的輸出通道組成的主干,每個單元堆疊三次,然后進行下采樣,使用最大池化將通道數和空間分辨率減半,最后使用一個global average pooling和一個softmax層得到分類的概率。
每個cell內部有V個節點,每個節點包括L個標簽,分別代表相應的操作。其中in和out代表輸入的tensor和輸出的tensor。該有向無環圖的搜索空間與V和L呈指數關系增長,為了控制搜索空間的大小,提出了以下幾個約束:
- L=3,包括3x3卷積、1x1卷積、3x3 maxpool
- \(V\le 7\)
- 邊的最大個數設置為9
單元編碼方法:Nas-Bench-101中使用了一個通用的編碼方式,有7個頂點的有向無環圖,使用7x7的上三角二進制矩陣和一個包含5個標簽的列表(分別代表5個中間節點的op)
區分同構的cell 在以上搜索空間中,存在不同的鄰接矩陣或者不同標簽,但計算等價的模型,這就稱為同構的cell
從上圖得知,兩個cell雖然編碼不相同,但實際的計算過程是相同的。所以采用迭代圖哈希算法來快速確定兩個cell是否是同構的。
經過去掉不符合要求和同構的網絡以后,剩下了大概423k個子網絡。
此外,還有一個小問題:通道個數的匹配和特征融合方法的選擇。Nas-Bench-101進行了認為固定設置,如下圖所示:
上圖中&代表concate操作,+代表addition操作,proj代表1x1卷積。所以具體策略是:將所有指向輸出節點的張量concate到一起,將指向其他頂點(非輸出節點)的張量add到一起。來自輸入頂點的輸出張量使用1x1卷積映射,以匹配通道個數的一致性。
3. 訓練策略
由於訓練策略的不同對最終的實驗結果造成的影響非常大,所以要對訓練策略、實現細節、超參數選取進行確認。
參數選擇:對所有的Nas-bench-101模型選取一組固定的參數,而並不是對每個模型自己設置各自的超參數。而固定的超參數的選擇是通過網格搜索50個隨機抽樣得到的子網絡平均精度得到的。
實現細節: 使用和resnet一致的數據增強技術,learning rate使用cosine decay, 使用RMSporp作為優化器。
4. 使用方法
4.1 評價指標
nas-bench-101中使用到了以下幾種指標:
- 訓練精度
- 驗證精度
- 測試精度
- 訓練時間
- 訓練模型參數
4.2 安裝環境
從github上clone該項目
git clone https://github.com/google-research/nasbench
進入該項目文件夾
cd nasbench
安裝(若當前環境中無tensorflow cpu版本,該步會安裝Tensorflow)
pip install -e .
下載數據集:
- 4個epochs訓練的結果 (1.95 GB)https://storage.googleapis.com/nasbench/nasbench_full.tfrecord
- 108個epochs訓練結果子集(499MB)https://storage.googleapis.com/nasbench/nasbench_only108.tfrecord
4.3 使用教程
官方提供的demo如下所示:
from absl import app
from nasbench import api
# Load the data from file (this will take some time)
nasbench = api.NASBench('/home/pdluser/download/nasbench_only108.tfrecord')
INPUT = 'input'
OUTPUT = 'output'
CONV1X1 = 'conv1x1-bn-relu'
CONV3X3 = 'conv3x3-bn-relu'
MAXPOOL3X3 = 'maxpool3x3'
# Create an Inception-like module (5x5 convolution replaced with two 3x3
# convolutions).
model_spec = api.ModelSpec(
# Adjacency matrix of the module
matrix=[[0, 1, 1, 1, 0, 1, 0], # input layer
[0, 0, 0, 0, 0, 0, 1], # 1x1 conv
[0, 0, 0, 0, 0, 0, 1], # 3x3 conv
[0, 0, 0, 0, 1, 0, 0], # 5x5 conv (replaced by two 3x3's)
[0, 0, 0, 0, 0, 0, 1], # 5x5 conv (replaced by two 3x3's)
[0, 0, 0, 0, 0, 0, 1], # 3x3 max-pool
[0, 0, 0, 0, 0, 0, 0]], # output layer
# Operations at the vertices of the module, matches order of matrix
ops=[INPUT, CONV1X1, CONV3X3, CONV3X3, CONV3X3, MAXPOOL3X3, OUTPUT])
# Query this model from dataset, returns a dictionary containing the metrics
# associated with this model.
data = nasbench.query(model_spec) # 根據配置查詢結果
result = nasbench.get_budget_counters() # 返回訓練時間,epochs
print("data:", data)
print("result:", result)
fixed_metrics, computed_metrics = nasbench.get_metrics_from_spec(model_spec)
# 每個epoch結果
for epochs in nasbench.valid_epochs:
for repeat_index in range(len(computed_metrics[epochs])):
data_point = computed_metrics[epochs][repeat_index] # 重復次數 每個epoch重復的結果
輸出結果:
如果設置邊數太多會報錯:
5. 實驗內容
這篇論文中對nas-bench-101數據集的幾個指標進行了統計,並深入探索了NAS的特性。
5.1 統計量
- 經驗累積分布empirical cumulative distribution ECDF
可以從准確率累積經驗分布看出,accuracy在0.8-1.0之間分布居多,並且訓練集結果逼近1;還可以從該圖中觀察到一個現象,即驗證集和測試集的相關性比較高r=0.999, 這表明模型的訓練並沒有過擬合。
noise代表的是經過多次訓練之間的准確率差異 ,可以發現108個epoch訓練的noise最小。
- 訓練時間、可訓練參數與訓練精度之間的關系
左圖展示了橫軸訓練參數、縱軸訓練時間和訓練精度之間的關系,可以發現以下幾個規律:
- 模型容量比較小,參數量小,訓練時間過長反而在驗證集准確率不好。
- 模型容量比較大,參數量大,訓練時間大體上是越長效果越好。
- 在訓練時間相同的情況下,模型參數量越大,驗證機准確率越高。
右圖展示了訓練時間和訓練精度的帕累托曲線,實驗發現resnet、inception這類人工設計的模型非常靠近帕累托前沿。這表明網絡拓撲和具體操作的選擇非常重要。
5.2 架構設計
為了探尋選取不同操作的影響,進行了替換實驗,將原先的op替換為新op以后查看其對准確率的影響。
從上圖中可以得到以下發現:
-
將卷積替換為池化帶來的負面影響比較大。
-
將池化替換為卷積帶來的正面影響比較大。
-
將3x3卷積替換為1x1卷積或池化可以有效降低訓練時間。
5.3 局部性
NAS中的局部性是:相似的網絡架構的准確率也是相似的。很多NAS算法都在利用NAS的局部性原理來進行搜索。局部性衡量的指標是RWA(random-walk autocorrelation) 即隨機游走自相關。RWA定義為當我們在空間中進行長距離隨機變化時所訪問的點的精度的自相關
RWA在比較近的距離上有較高的相關性,反映了局部性。從下圖中發現,當距離超過6以后,就無法判斷是否是相關性還是噪聲,所以搜索的過程最好約束在6以內。
6. 總結
nas-bench-101是一個表格型的數據集,在設計的搜索空間中找到網絡的架構,並通過實際運行得到每個epoch的驗證集結果。使用過程比較方便,根據規定配置從nas-bench-101中找到對應的網絡架構以及相應的准確率、參數量等信息。