iMTE

Neural architecture search with reinforcement learning 본문

Deep learning study/Network Architecture Search

Neural architecture search with reinforcement learning

Wonju Seo 2019. 7. 25. 14:27

Neural architecture search with reinforcement learning

https://arxiv.org/pdf/1611.01578.pdf


Abstract

Neural network는 이미지, speech, natural language understanding의 많은 어려운 학습 task에 강력하고 flexible한 모델인데, 디자인하는 것이 힘들다. (Machine learning에 비해서 훨씬 많은 hyper-parameter를 tuning해야한다. 이 tuning이 성능에 크게 영향을 준다.) 이 논문에서는 validation set에서 정확성을 최대화하는 reinforcement learning 기반의 모델 hyper-parameter search RNN을 제안한다. (무슨 의미인가하면, network의 design을 정해주고 이 정해진 design으로 성능을 평가하고, 얻은 accuracy 혹은 메타 정보를 통해서 모델을 강화학습으로 학습시켜, 더 나은 design을 제안해주는 것이 이 논문에서 제안하는 모델의 목적이다.)


Introduction

많은 분야에서 deep neural network가 성공한건 맞는데, deep neural network의 구조를 design하는 것은 많은 시간과 전문가 지식을 요구한다. 따라서, 이 논문에서는 이 문제를 해결하기 위해서, 좋은 구조를 찾아주는 gradient-based method인 Neural Architecture Search (NAS)를 제안한다. 밑의 그림이 overview를 보여준다.

Variable-length string을 위해서 recurrent network를 사용하였다. (RNN은 가변적인 길이를 갖는 input을 받을 수 있다.) Network의 design을 결정하는 controller와 결정된 design을 갖고 validation set에 모델을 검증하는 child network로 나누어진다. Validation set에서의 정확성을 reward로 사용하여 policy gradient를 계산하고, controller를 update 한다. 결과적으로, 다음 iteration에서는 controller가 더 높은 정확성을 갖는 구조를 높은 확률로 추천해주게 된다. 

"In other words, the controller will learn to improve its search over time. Our experiments show that Neural Architecture Search can design good models from scratch, an achievement considered not possible with other methods"


Related Work

Hyper-parameter optimization이 machine learning분야에서 중요한 연구 분야이며 실전에서 많이 사용된다. 비록, 이런 optimization의 성공에도 불구하고, fixed-length space에서 search를 한다는 점이 한계이다. 즉, network의 구조와 연결을 구체화하는 variable-length configuration을 생성하는 것이 어렵다는 것이다. 실제로, 이런 방법은 좋은 initial model로서 잘 동작하게 한다. Bayesian optimization 방법은 non fixed length 구조를 찾는 데 도움이 되지만, 이 논문에서 제안된 방법에 비해서 덜 general하고 flexible하다.

반대로, Modern neuro-evolution algorithm은 more flexible하지만, large scale에서 덜 실용적이다. search-based methods이기 때문에, 느리고, 잘 동작하기 위해서는 많은 heuristics 방법을 사용해야한다.
Neural Architecture Search에서 controller는 auto-regressive한데 이는, 이전의 예측을 조건을 주어서 hyper-parameter를 예측한다는 것이다. 이 아이디어는 end-to-end sequence-to-sequence learning에서의 decoder에서 빌려온 것이다. Sequence-to-sequence learning과 달리, 미분이 불가능한 metric을 최적화 할 수 있다는 점이 다르다.

이 연구의 다른 연관된 학습 방법의 아이디어은 learning to learn 혹은 meta-learning이다. 한 task에서 얻은 information을 사용하는 general framework로 future task를 개선하는 것이다. 다른 network의 gradient descent updates를 학습하는 neural network를 사용한다는 것과 다른 network의 update policies를 찾는 reinforcement learning을 사용한다는 아이디어가 밀접하게 연결되어있다.


Methods

1. General model descriptions with a controller recurrent neural network

Neural Architecture Search (NAS)에서 controller는 neural network의 구조적인 hyper-parameter를 생성해낸다. 이 모델의 유연성을 위해서 controller는 recurrent neural network로 구성된다. 한번 이 모델을 사용해서 only convolutional layers를 갖는 feedforward neural network를 예측해보자. 다음과 같은 그림을 통해서 hyper-parameter가 생성된다.

실험에서, layer의 수가 어느 특정 값을 넘어가면 구조를 design 하는 과정을 멈추었다. Controller RNN이 구조에 대한 생성 작업이 완료되면, 이 구조를 갖는 neural network가 형성되고 학습된다. 형성된 network는 validation set에서 성능 평가가 이뤄지며, controller RNN의 parameter는 이 성능을 최대화하는 방향으로 최적화가 된다.

2. Training with Reinforce

Controller가 예측한 tokens의 list는 다음과 같이 표현될 수 있다.

앞에서 설명한 것 처럼 controller가 만들어낸 list로 부터 구성되고 학습된 neural network (e.g., child network)의 validation set에 대한 accuracy는 reward가 되어서 reinforcement learning을 구현할 수 있다. 최적의 구조를 찾기 위해서, controller는 reward를 최대화 하는 방향으로 최적화가 된다.

R은 미분이 불가능함으로, 반복적으로 theta_c를 update하기 위해서 policy gradient method를 사용해야한다.

위의 식의 empirical approximation은 다음과 같이 표현된다.

m은 one batch에서 controller가 sample하는 different architectures의 개수를 의미하고, T는 neural network architecture를 design해야하는 hyper-parameter의 개수이다. k 번째의 neural network architecture의 성능은 R_k로 표현된다. 위 식은 high variance를 갖게 됨으로 variance를 줄이기 위해서 baseline function을 사용하였다.

Baseline function b가 current action에 의존하지 않는한, 이는 unbiased gradient estimate 이다. Baseline b는 과거의 architecture 정확성의 exponential moving average이다.

(Accelerating training with parallelism and asynchronous updates skip)

3. Increase architecture complexity with skip connections and other layer types

위의 search space에서는 skip connection이 고려되지 않았다. 이 skip connection은 GoogleNet과 Residual Net과 같은 현재 network 구조에서 주로 사용되고 있다. 이 부분을 controller에 추가하자는 것이다. Controller가 이런 connections을 예측하는 것을 가능하기 위해서, set-selection type attention을 사용했다. Layer N에서 anchor point를 추가했는데, 이는 connection이 필요한 이전 layer를 지시하는 N-1개의 content-based sigmoids를 갖고 있다. 각 sigmoid는 controller의 현재 hidden state의 함수였고, 과거 N-1 anchor points의 과거 hidden state는 다음과 같이 표현된다. (너무 어렵게 표현된 것 같지만, 이전 layer들과 현재 layer를 이어주냐 마냐를 sigmoid로 판단하겠다는 것이고 이를 이전의 hidden state를 사용해서 결정하겠다는 것이다.)

추가적으로 skip connection을 좀 더 잘 이어주기 위해서, input layer와 다른 layer가 연결되지 않도록 하였으며, 마지막 layer가 다른 layer의 출력과 연결되지 않게하고, classifier에 final hidden state를 전달하기 전에 그들을 연결하였다. 마지막으로, 만약 input layer가 다른 size로 연결된다면, zero-padding을 사용해서 concatenated되는 layer의 사이즈를 같게 하였다.

4. Generate recurrent cell architectures

앞에서 CNN을 NAS를 사용해서 구성했다면, recurrent cell 또한 NAS를 사용해서 구성할 수 있다. 가장 간단한 구성은 다음과 같이 basic recurrent cell 구성이고, 더 복잡한 구성은 LSTM recurrent cell 구성이다.

RNN과 LSTM cell의 계산은 x_t와 h_t-1을 받고 h_t를 final output으로 출력하는 tree의 형태로 일반화를 할 수 있다. Controller RNN은 tree의 각 node에 label을 다는데, addition, elementwise multiplication과 같은 combination 방법, tanh, sigmoid와 같은 activation function을 두개의 입력을 합치고, 하나의 출력을 만들도록 한다. 그 다음, 두 개의 출력은 다음 tree node의 입력이 된다. Controller RNN이 이런 방법과 함수를 선택하기 위해서, tree의 각 node에 index를 달아, controller RNN이 각 node를 방문하여 필요한 hyper-parameter를 label하도록 하였다.

LSTM cell로 부터 영감을 받아서, 이 논문의 저자는 memory state를 나타내는 c_t-1, c_t를 추가하였다. 이 값을 추가하기 위해서, controller RNN은 이 두개의 값을 연결하는 tree node를 예측하도록 하였고, 이 예측은 controller RNN의 마지막 두 block에서 진행되도록 하였다. 밑의 그림이 RNN cell을 만드는 NAS를 나타내고 있다.

Controller RNN은 3개의 blocks을 예측해야하며, 각 block은 각 tree index에 대한 combination method와 activation function을 구체화한다. Tree 내부의 temporary variables에 c_t와 c_t-1을 연결하는 방법을 구체화하는 마지막 2개 block이 필요하다.

예를 들어, controller 가 add와 tanh를 tree index 0에 대해 예측할 경우, 다음과 같은 연산이 진행된다.

만약 controller가 tree index 1에 대해 ElemMult와 ReLU를 예측한 경우, 다음과 같은 연산이 진행된다.

만약 controller가 Cell Index의 두번째 element에 대해서 0을 예측하고, add와 relu를 cell inject의 elements에 대해 예측한 경우, 다음과 같은 연산이 진행된다.

이는 이 node에서 learnable parameter가 없음을 의미한다.

만약 controller가 ElemMult와 sigmoid를 tree index 2에 대해 예측한 경우, 다음과 같이 표현된다.

Tree에서 maximum index는 2임으로, h_t는 a_2로 set이 된다.

마지막으로, 만약 controller이 Cell Index의 첫번째 element에 1을 예측한 경우 다음과 같은 연산이 진행된다.

이 논문에서는 8개의 base를 갖는 cell을 사용하였다.


Experiments and results

Image classification task로 CIFAR-10을 사용, language modeling task로 Penn Treebank를 사용했다. (이중 CIFAR-10에 대한 결과만 작성하고자 한다.) CIFAR-10에 대해서, 저자의 목적은 적절한 convolutional network의 구조를 찾아내는 것이다. 그리고 reward를 생성하기 위해서, 따로 validation dataset을 준비하였다. Reported된 성능은 validation set에서 좋은 결과를 나타낸 network만을 test set에 적용한 결과이다.

표에서 볼 수 있듯이 NAS로 찾은 convolutional neural network가 매우 낮은 error rate (3.65 %)를 갖음을 확인할 수 있다. 찾아진 network의 example은 다음과 같은데, 매우 간단하면서도 skip connection이 다양하게 구성되어 있음을 확인할 수 있다.


Conclusion

결과적으로 본 논문에서는 neural network architecture를 최적화하는 NAS를 제안하였다. controller로서 recurrent network를 사용함으로서 variable-length architecture space에서도 구조를 찾을 수 있도록 유연하게 하였으며, 자동적으로 좋은 neural network의 구조를 찾아줄 수 있다는 가능성을 보였다.


(복잡하게 보일 수 있지만, 직관적으로 neural network의 구조를 추천해주는 controller를 Reinforcement learning으로 학습시켰으며, 결과는 만족스럽다는 것이다. 이것만 보면 최고의 방법이나, 논문을 잘 읽어보면 얼마나 많은 GPU와 시간이 소모되었는지를 볼 수 있을 것이다.)



Comments