提煉再提煉濃縮再濃縮:Neural Architecture Search 介紹

Source: Deep Learning on Medium

提煉再提煉濃縮再濃縮:Neural Architecture Search 介紹

Introduction

在現今電腦視覺的領域當中,CNN已經可以達到非常高甚至超越人類的精確度,但隨之而來的代價就是追求更深更大的網路所造成的高複雜度(例如:大量的記憶體需求,大量的運算),因此對於在有限資源的硬體設備(例如:手機,嵌入式系統)中應用產生了巨大的挑戰,因為我們總不可能在每一台手機每一台監視器,都放一張1080Ti或是2080Ti,所以現今的網路需求除了對於精確度的要求,也慢慢開始注重效能的優化。

然而,設計出一個能夠兼顧準確度以及效能的網路是很困難的。

要設計一個好的網路,首先會遇到兩個問題,分別是Intractable Search Space和Non transferable optimality。

Intractable Search Space

Search Space的意思是在我們搜索出一個網路的時候,我們的搜索的空間,也就是所有可能的選擇所組合成的空間。

以大家熟悉的VGG16為例,其中並沒有任何較為複雜的設計(例如:residual connection),單純為13層的conv layers,假設在每一層kernel size的選擇皆是{1, 3, 5},單是這樣可能構成的選擇便有3¹³次方種選擇。且訓練一個CNN往往會花費許多時間,更不用說要從這麼多的選擇中要挑出一個最好的架構了,畢竟我們不可能實際的訓練這3¹³種網路吧!

Non transferable optimality

而對於不同的裝置,由於其不同的硬體架構,因此對於同樣的一個運算,也會有不同的速度,所以一個在A裝置表現的好的網路架構,並不一定同樣可以在B裝置表現的好,也就是CNN的 non transferable optimality。

因此便有人開始進行Neural Architecture Search的研究,目的是希望可以開法出一個方法,並且可以自動的探尋Search Space以獲得最好的網路。

What is Neural Network Search(NAS)?

簡單來說,就是可以自動的在Search Space中,根據我們的需求找到最好網路架構的方式,而我們的搜索目標有可能會是根據準確度,或是根據Inference time等等使用者可以自己定義的Objective。

而Neural Architecture Search可以分成三個大部份,也就是Search Space, Search Strategy和Performance Estimation Strategy。

Search Space

搜索的空間,也就是所有可能的選擇構成的空間,例如:kernel size要用3, 5 或是7? 要用多少層layer?

Search Strategy

利用什麼方式從Search Space中挑選出我們要的網路架構,例如:Reinforcement Learning。

Performance Estimation Strategy

當我們根據Search Strategy並從Search Space中挑選出了一個網路架構,我們要如何評估這個網路是好的網路還是不好的網路,可以根據準確率,或是根據記憶體,Inference Time。

Reinforcement Learning NAS

Reinforcement Learning NAS主要可以分成兩個大部份,也就是Controller(agent)和Trainer(environment)。

Controller就像是agent,會從Search Space中取樣出一個CNN架構,而Trainer就像是environment,會將Controller 取樣出的CNN架構實際的訓練,而訓練之後的準確率就會當作reward,並且更新Controller,使得Controller可以慢慢學習出何種的CNN架構可以讓 reward最高。

但由於每次Sample出的網路架構我們都需要實際的訓練,因此在搜索的過程我們會需要花費非常大量的時間,為了減少訓練的時間,往往會利用較小的Dataset(e.g. CIFAR10)或是訓練比較少的epoch數。

雖然這個方法在過去,已經被證明可以達到很好的結果,但是這個方法所需要的時間太過龐大了,要使Controller可以生成出很優秀的架構,往往需要實際訓練上百個上千個網路,儘管訓練少量的epoch,所需要的時間還是很驚人。

Progressive NAS

Progressive NAS最主要的概念便是一層一層漸進式的方式決定在每一層要用什麼樣的選擇。

而由於要決定每一層要用什麼樣的架構,我們首先需要知道所有選擇的好壞,而實際的將所有種可能的架構training,並根據結果來決定好壞會花費許多時間,因此會額外的訓練一個Controller,而Controller的目的就是預測當前這樣的組合的準確率會是多少

因此Progressive NAS主要可以分成幾個大步驟:

  1. 從l-layers的N個可能的網路架構中,透過Controller預測結果,並挑選出最好的K個網路架構。
  2. 將K個網路架構實際的訓練並得到他們間的好壞,並利用這K個結果更新Controller,使其可以預測的更加準確,將最好的網路架構接上下一層的所有可能選擇,建構出l+1 layers的N個架構,並回到步驟1。

Weight Sharing NAS

為了解決過去weight不能共用,每個model都需要重新training一次所花費的大量時間,便有人提出了Weight Sharing NAS,也就是將Search Space中所有的可能組合成一個網路,又稱Supernet,並同時訓練於Supernet中的所有weight,如此我們便可以透過額外的Evoluation Algorithm或是訓練額外的參數(Architecture Paramter)來選取最好的網路架構。

Evoluation Algorithm

利用Evolution Algorithm來挑選最好的網路架構的方式,通常會將整個Search Process分成兩個大部份,Training Staget和Evoluation Stage:

  1. Training Stage:由於要公平的決定哪個網路架構的好壞,因此我們預設所有在Supernet的weight都已經充分的訓練,在這個階段我們必須要先Training Supernet。
  2. Evoluation Stage:利用已經training好的Supernet決定其中何種架構是最符合需求的,而取得最好架構的根據可以是model的validation dataset accuracy,取得最好架構的方法則有許多的方法,例如,基因演算法,隨機產生些許網路架構,並根據validation accuracy來決定網路的好壞,再利用好的網路之間的crossover或是mutation,來產生新的網路架構,直到產生最好的網路為止。

Architecture Parameter

利用額外的Parameter來學習能夠讓表現最好的網路架構分佈,因此除了需要訓練原本Supernet的weight,還需要訓練額外的Architecture Parameter,因此雖然也是分成兩大部份,但是這兩大部份是不斷互相重複的:

  1. Training Weight Stage:訓練Supernet中的weight,在這個階段並不會更新Architecture Parameter。
  2. Training Architecture Parameter Stage:訓練Architecture Parameter,在這個階段並不會更新Supernet中的weight。

Reference

B. Zoph and Q. V. Le. Neural architecture search with reinforcement learning. In ICLR, 2017

M. Tan, B. Chen, R. Pang, V. Vasudevan, and Q. V. Le. Mnasnet: Platform-aware neural architecture search for mobile. CVPR, 2019

B. Wu, X. Dai, P. Zhang, Y. Wang, F. Sun, Y. Wu, Y. Tian, P. Vajda, Y. Jia, and K. Keutzer. Fbnet: Hardware-aware efficient convnet design via differentiable neural architecture search. CVPR, 2019

Liu, C., Zoph, B., Shlens, J., Hua, W., Li, L.J., Fei-Fei, L., Yuille, A., Huang, J. Murphy, K.: Progressive neural architecture search. ECCV 2018

Jin-Dong Dong, An-Chieh Cheng, Da-Cheng Juan, Wei Wei, and Min Sun. Dpp-net: Device-aware progressive search for pareto-optimal neural architectures. In ECCV, 2018.

H. Liu, K. Simonyan, and Y. Yang. DARTS: Differentiablearchitecture search. ICLR, 2019

G. Bender, P.-J. Kindermans, B. Zoph, V. Vasudevan, and Q. Le. Understanding and simplifying one-shot architecture search. In International Conference on Machine Learning. ICML 2018

Z. Guo, X. Zhang, H. Mu, W. Heng, Z. Liu, Y. Wei, and J. Sun. Single path one-shot neural architecture search with uniform sampling. arXiv preprint arXiv:1904.00420, 2019.

Thomas Elsken, Jan Hendrik Metzen, and Frank Hutter. Neural architecture search: A survey. arXiv preprint arXiv:1808.05377, 2018b.