原文鏈接:https://arxiv.org/pdf/1902.09635.pdf
數據集與代碼鏈接:https://github.com/google-research/nasbench
1.本文做了什麼?
本文設計了第一個供NAS使用的數據集,以希望降低這個行業的算力門檻,並提供一個可以統一量化成果效果的平臺。在搜索空間中通過圖同構來識別423k個獨特的cell(cell定義見NASNet),並提供500萬個在CIFAR10上培訓和評估的模型,使得其他研究人員可以通過查錶快速獲得模型的相應訓練結果。
2.數據集簡介
這個數據集延續了NASNet的思想,以cell作爲最小單元,每3個cell後接一個downsample,在第三個後接平均池化與全連接層。第一層的3x3conv產生128通道的輸出。這樣就將變體限制在了cell層面。
每一個cell中包含個節點及條邊,除了兩個被標記爲輸入輸出的節點,其他節點包含以下3個操作中的一個:
- 3x3卷積+BN+ReLU
- 1x1卷積+BN+ReLU
- 3x3最大池化
這樣設計操作是爲了能夠產生於ResNet和Inception相同的cell。
網絡表示方面,使用一個7x7上三角矩陣和5種標籤(包含固定的In和Out,因此實際可調整的是三種)表示,因此有種組合,去掉其中不能連通,邊數量過多,和重複的就是423M種。
雖然圖轉cell很直觀,但還有一個問題是當兩個輸出進入同一個節點時是相加(通道數不變)還是並聯(通道數翻倍)。本文默認的是進入output節點的並聯,進入其他節點的相加。這裏1x1的一個作用就是調整通道數。
一些訓練細節:
- 爲了保證這些網絡的公平性,使用了經過精心挑選的統一超參數。
- 訓練部署方面,使用CIFAR10訓練,學習率用餘弦衰減逐漸降至0等,詳細請看原文。
- 每個模型分別訓練3次,每個訓練會產生{4,12,36,108}個epoch的訓練結果,因此總共有個模型。
訓練結果可通過(模型,epoch,第x次訓練)進行查找,結果包含:
- 訓練準確率(training accuracy)
- 驗證準確率(validation accuracy)
- 測試準確率(testing accuracy)
- 訓練時間
- 可訓練參數數量
其中只有訓練和驗證準確性應當被用於訓練過程,測試準確率是算法結束時供統計使用的。訓練時間可以用來優化固定時間內的準確率及用來評估多物體優化算法耗時。
隨後給出了訓練集的用法:
- 每個訓練集的查詢方法是查詢(模型,epoch)
- 算法應當從查詢到的3個模型中隨機選擇一個以模擬SGD過程
- 模型效果由驗證準確率(validation accuracy)給出
- 在總用時達到一個限制後,停止搜索
- 停止搜索後,最優模型的效果由測試準確率(testing accuracy)給出
- 最終的分數由搜索出的模型與整個數據集最優模型的測試準確率差值給出。
3.數據集的一些成果
1.數據集統計數據(下圖爲經驗累積分佈)
- 大部分模型實現了90%以上測試準確率
- 最優模型實現94.32%,ResNet和Inception相似的模型分別實現了93.12%和92.95%,與ResNet-56本身的測試結果93.03%相似
- 108epoch的驗證集和測試集準確率相關性達到0.999,說明好的優化器不會過擬合驗證集
- 訓練epoch越多,準確率的隨機性越低。
下圖是訓練的統計數據。左圖可以看出訓練時間、訓練參數與準確率基本呈正相關,但卻不是惟一的因素,因爲最優cell並不是計算最多的。右圖就是說訓練時間短的一定不好,但時間長的不一定好。
2.架構設計
下圖是將模型中的一個模塊轉換爲另一個模塊的精度變化情況。可以看出,把3x3卷積換成1x1卷積和3x3最大池化,性能下降的同時計算量也下降。而最大池化雖然參數少,但是計算量反而增加了。不過,最優架構裏三個模塊都有,說明這種變化並不絕對。
下圖研究了深度與寬度的影響。深度和寬度都是適中最好。
下面左圖研究的是相同網絡結構表現的相似性。可以看到,結構越相似,其表現也越相似。
而右圖研究的是到局部最優峯值的距離,約35.4%的模型到局部最優距離在6步以內。
寫到這裏有點不想寫了。感覺後面的搜索方法實際上和普通的搜索方法非常相似。