Evolution of Image Classifiers,進化算法在神經網絡結構搜索的首次嘗試 | ICML 2017
- 2020 年 4 月 14 日
- 筆記
論文提出使用進化算法來進行神經網絡結構搜索,整體搜索邏輯十分簡單,結合權重繼承,搜索速度很快,從實驗結果來看,搜索的網絡準確率挺不錯的。由於論文是個比較早期的想法,所以可以有很大的改進空間,後面的很大算法也是基於這種想法進行更好的補充
來源:曉飛的算法工程筆記 公眾號
論文: Large-Scale Evolution of Image Classifiers
Introduction
論文對當前的進化算法進行少量地改造,結合前所未有的算力進行神經網絡結構搜索,在CIFAR-10上達到了很不錯的準確率。論文十分注重搜索算法的簡單性,從性能很差的無卷積模型開始,進化算法需要在一個幾乎不受約束的搜索空間中進化成複雜的卷積網絡
Methods
Evolutionary Algorithm
基於錦標賽選擇(tournament selection)進行進化算法,定義如下概念:
- 種群(population),模型集合
- 個體(individual),訓練完的單個模型
- 適應值(fitness),模型在測試集上的準確率
- 工作者(worker),每次從種群中選取兩個個體進行適應值計算
- 消滅(killed),將worker挑選的個體中,適應值低的去掉
- 繁殖(reproduction),將worker挑選的個體中,適應值高的作為父代(parent),拷貝並進行變異(mutation)得到子代(child),將子代放回種群中(alive)
為了加速計算,使用massively-parallel, lock-free的並行計算,許多worker在不同電腦上進行獨立的異步操作,僅使用共享文件系統來保證種群內容一致,每個個體為一個文件夾。種群數量為1000,worker一般為種群數量的$\frac{1}{4}$
Encoding and Mutations
網絡結構表示為圖(DNA),節點表示3維tensor或激活方法,tensor的3維分別表示圖片的空間坐標以及channel數,激活方法作用與節點上,可以為BN+RELU或無激活,邊表示identity connections或卷積(包含可變異參數)。當節點連接多條邊時,將其中一條非identity connection的邊作為主邊,對其它邊進行像素的最近鄰差值以及維度的裁剪和填充,最後進行element-wise sum。在每次繁衍過程中,隨機選取以下一種變異方式:
- 調整學習率
- 不變
- 重置權重,子代重新訓練
- 隨機位置插入卷積層
- 刪除卷積層
- 修改stride,2的倍數
- 修改channel數,修改範圍為原值的一半至兩倍
- 卷積核大小,奇數
- 添加skip connection
- 刪除skip connection
Initial Conditions
種群的初始化為僅包含global average pool的簡單個體,學習率為0.1
Training and Validation
在CIFAR-10上進行4萬5張圖的訓練和5千張圖的測試,共訓練25600輪,batch size為50
Computation cost
每個進行訓練的模型,記錄其單batch訓練的計算量$F_t$FLOPs和驗證的計算量$F_v$FLOPs,乘以batch數得到最終的計算量為$F_tN_t+F_vN_v$,
Weight Inheritance
由於模型完整的訓練需要更多的迭代次數,這十分耗費時間,為了解決這一問題,允許子代默認繼承父代的權重,如果層有相同的shape,則繼承,但如果是重置權重突變,則全部不繼承
Reporting Methodology
為了防止過擬合,訓練集和測試集不能有交集,準確率表現最好的模型稱為「the best model」
Experiments and Results
從實驗來看,論文提出的搜索方法比目前的同體積的網絡性能要高,但比SOTA略差一點,整體搜索時間很快。對於兩個超參數,種群大小和迭代次數,則是越大越好,太小容易陷入局部最優
CONCLUSION
論文提出使用進化算法來進行神經網絡結構搜索,整體搜索邏輯十分簡單,結合權重繼承,搜索速度很快,從實驗結果來看,搜索的網絡準確率挺不錯的。由於論文是個比較早期的想法,所以可以有很大的改進空間,後面的很大算法也是基於這種想法進行更好的補充,所以這篇論文也是值得一讀的
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】