본문 바로가기

데이터사이언스/deep learning

NAS(network architecture search) 개념과 주요 논문 소개

1. NAS란?

딥러닝은 layer나 parameter의 개수를 비롯한 모델 구조에 따라 모델의 성능이 달라진다. task와 data 마다 최적의 구조가 다르기 때문에 주어진 상황에서 어떤 모델을 사용할지 결정하는 것은 어려운 문제다. 이런 문제를 해결하기 위해 주어진 상황에서 최적 모델 구조를 찾는 방법이 Network Architecture Search이다.

NAS 구성요소

 NAS는 위 그림처럼 3가지 요소로 구성되어 있다.

 

1) Search Space

 알고리즘이 탐색을 수행하는 space이다. layer 수, 각 layer가 수행하는 operation(convolution, fully-connected 등),  각 opration의 hyperparameter(filter 수, kernel size), operation의 연결 구조 등을 파라미터로 가질 수 있다.

 

2) Search Strategy

 주어진 Search Space를 탐색하는 방법. 넓은 범위 탐색과 빠른 수렴 간의 trade-off 관계를 고려해야 한다.

 

3) Performance Estimation Strategy

 Search Strategy를 통해 찾은 network 구조의 성능을 평가하는 알고리즘이다. 하나의 구조를 가진 network가 수렴할 때까지 학습시킨다면 지나치게 많은 시간이 소요되기 때문에 빠르게 성능을 추측할 수 있는 estimation을 진행한다. Search와 Estimation을 번갈아 진행하며 최적의 network 구조를 찾는다.

 

2. DARTS(Differentiable Architecture Search)
DART는 Search Space를 미분가능한 continous space로 만들어 gradient desent를 통해 효율적인 network 구조를 탐색할 수 있도록 했다.

overview of DARTS

 위 그림은 DARTS의 전반적인 과정을 나타낸다. 처음에는 operation이 정해지지 않은 상태로 탐색을 시작한다. (b): Search Space를 연속적인 공간으로 만들기 위해 각 edge에 operation의 probability를 저장한다. 예를 들어 convolution 연산에 0.3, pooling에 0.7의 probability를 줄 수 있다. (c): 각 edge의 probability, operation의 weight(convolution의 filter weight e등)를 최적화하는 bi-level optimization을 실행한다. (d): edge 마다 probalility가 가장 높은 operation을 선택해 신경망을 완성한다.

optimization problem

 위 식은 최적 구조의 신경망을 찾기 위해 풀어야하는 최적화 문제다. $\alpha$는 각 operation의 operation를 저장하고 있는 전체적인 아키텍처 구조, $w$는 operation의 weight 값이다. $w^{*}(\alpha)$는 해당 아키텍처에서 최선의 weight를 나타낸다. 여기서 위 식은 validation loss가 최소인 아키텍처를 찾아야 한다는 것을 나타내고 있다. 아래 식은 위 식에 따라 최적화를 진행할 때 각 아키텍처마다 train loss가 최소인 weight를 사용해야한다는 것을 나타낸다. 이렇게 아키텍처, weight를 모두 최적화하기 위해서는 오랜 시간이 필요하다. 따라서 이런 시간을 줄이기 위해 이 논문에서는 아키텍처마다 최선의 weight를 찾지 않는다. 대신 아키텍처 당 한 번의 gradient descent만을 진행하여 $w^{*}$의 근사치를 추정한다.

 

3. NAS with RL 

 이 논문에서는 신경망을 문자열로 바라보고 RNN을 이용해 network search를 진행한다. 

Architecture of RNN Controller

먼저 RNN controller가 위 그림과 같이 순차적으로 각 layer의 특성을 결정하는 parameter를 결정한다. layer의 수가 특정 값을 초과하면 아키텍처의 생성이 멈춘다. 생성된 아키텍처로 수렴할 때까지 학습을 진행한다. 모델이 수렴하면 accuracy 값이 저장되고, 이 값을 reward로 사용하여 controller의 학습이 진행된다. 생성된 모델이 수렴할 때까지 학습하기 위해서는 시간이 많이 필요하기 때문에 여러 서버에서 분산 학습을 진행했다.

 

 

4. efficient NAS via Parameter Sharing

 위 방식은 각 아키텍처를 학습시키는데 많은 시간이 필요하다. ENAS는 유사한 구조의 아키텍처에서 파라미터의 weight를 공유함으로써 학습 시간을 단축시킨 방법이다. 예를 들어 아키텍처에서 layer 3 -> 4의 연산은 convolution이 효율적이라고 학습하면 이 정보를 다음에도 사용할 수 있도록 저장해 두는 것이다. 또한 위 논문처럼 바닥부터 새로운 network를 만드는 것이 아니라, ResNet 등 이미 검증된 아키텍처의 변환에 초점을 맞춘다. 이런 방법들을 통해서 NAS 속도를 1000배 이상 높일 수 있었다.

'데이터사이언스 > deep learning' 카테고리의 다른 글

Vid2Seq 논문 정리 (1)  (0) 2024.02.23