[논문 리뷰] NAS(Neural Architecture Search)

2022.02.19 20:01 3,099 Views

안녕하세요!

본 포스팅은 데이콘 서포터즈 "데이크루" 1기 활동의 일환입니다.  


이번주 논문은 NAS로 택했습니다. 공부하는 학생인 만큼 틀린 점이 있을 수 있으니 있다면 지적이나 피드백 부탁드립니다.

아주 기초적인 CNN은 정리를 한 것 같아서 어디로 방향을 잡아야할 지 고민하다 내용이 궁금해서 찾아볼 겸 정리했습니다.

논문 이름은 ‘Neural Architecture Search with Reinforcement Learning’으로 2017년 ICLR에 발표되었습니다. 한 문장으로 요약하면 ‘강화학습을 이용해 최적의 모델 아키텍처를 찾자’인 것 같습니다. 뉴럴 네트워크가 강력하고 좋은 모델이지만 구조를 디자인하기엔 여전히 어렵다고 하며 모델을 만들어내는 RNN을 사용한다고 합니다. 그리고 이 RNN으로 만들어진 네트워크가 validation set에 예상되는 정확도를 최대화하는 방향으로 강화학습을 진행한다고 합니다. 즉, 강화학습을 이용해 좋은 네트워크 구조를 찾는 방법을 제안한 것이고 이를 NAS라고 부릅니다.

 

Introduction

간단히 표현한 NAS의 구조입니다. 해당 논문은 뉴럴 네트워크의 구조를 가변 길이의 문자열로 표현할 수 있다는 관점을 기반으로 합니다. NAS의 controller는 가변 길이의 문자열을 생성하기 위해 RNN 구조를 이용합니다. 방법을 간단하게 소개하긴 하지만 뒤에 더 자세히 나올 것 같아 생략하겠습니다.

 

Methods

이 논문은 모델 복잡성을 증가시키기 위해 skip connection을 사용하고 훈련속도를 높이기 위해 parameter server approach를 사용하는 것과 같은 핵심 방법의 몇 가지 개선사항을 제시한다고 합니다.

3.1 Generate Model with a Controller Recurrent Neural Network

NAS는 controller를 사용해 신경망의 아키텍처 하이퍼 파라미터를 생성합니다. 유연성을 추가하기 위해 RNN을 이용해 구현되었다고 합니다.  각각의 출력 값은 softmax를 통해 값을 정하고 이 값은 다음 step의 input으로 들어가게 됩니다. 실험은 layer의 수가 특정 값을 초과하면 architecture 생성을 멈추게 했습니다. 이 특정 값은 훈련이 진행됨에 따라 점차 늘려갑니다. RNN controller가 architecture 생성을 마치면 이것으로 신경망을 구축하고 훈련합니다. 수렴 시 검증 세트에 대한 네트워크 정확도가 기록됩니다. Controller RNN의 파라미터는 검증 정확도를 최대화하기 위해 최적화됩니다.  

 

3.2 Training with Reinforce

자식 네트워크의 하이퍼 파라미터를 하나하나 예측하는 것 자체를 action이라고 볼 수 있습니다. 그러면 action들이 연속하여 나오게 된 것이 child network의 architecture이며, child가 최종적으로 내게 된 accuracy R이 데이터셋으로부터 나오게 됩니다. 이 R 값을 일종의 reward로 생각해서 RNN controller에 강화학습을 진행하게 됩니다. 최적의 architecture를 찾기 위해 controller에게 기대되는 reward를 최대화하게끔 합니다.

이렇게 표현되는 R은 미분이 불가능해 지속적으로 가중치를 업데이트할 수 있는 policy gradient 가 필요하다고 합니다. 해당 부분에서 수식이 엄청 나오는데 근사를 해서 식을 변형하고 그렇게 나온 식 역시 분산이 높아 이를 줄이고자 최종 식은 아래와 같이 나온다고 합니다.

변수 설명

m : 컨트롤러가 한 배치에서 샘플링하는 서로 다른 아키텍처 수

T : 컨트롤러가 신경망 아키텍처를 설계하기 위해 예측해야 하는 하이퍼 파라미터 수

Rk : k번째 신경망 아키텍처가 훈련하고 나온 검증 정확도

또한 병렬화와 비동기식 업데이트로 훈련을 빠르게 진행했다고 합니다. NAS에서 하나의 자식 네트워크를 만들고 정확도 측정을 위해 이를 학습시키는 것이 오래 걸리니 controller의 학습을 빠르게 하기 위해 병렬로 학습을 진행하는 것입니다. Controller의 파라미터를 저장하는 서버 S개 존재하고 이들은 K개의 controller에게 파라미터를 전달합니다. 이를 통해 m개의 구조를 생성하고 이를 병렬 학습해 최종 gradient를 구합니다. 그 뒤 값을 업데이트하고 이를 반복하는 것입니다.

 

3.3 Increase architecture complexity with skip connections and other layer types

Controller의 탐색 공간은 skip connection 등의 최신 architecture에서 사용되는 방법들을 탐색하지는 않습니다. 검색 공간을 확장해 이런 방법도 제안할 수 있도록 하게 하는 파트? 방법이라고 합니다.

컨트롤러가 skip connection과 같은 연결을 예측할 수 있도록 하려고 set-selection type attention을 사용한다고 합니다. Layer N에서 연결해야 하는 이전 layer를 나타내기 위해 N-1개의 content-based sigmoid가 있는 anchor point를 추가합니다. 그리고 이전 layer에서 연결할지 말지를 계산해야 하는데 계산식은 아래와 같다고 합니다.

여기서 v, w는 학습해야 하는 벡터입니다. 이를 통해 j layer가 i layer에 연결될 것인지를 결정한다고 합니다. 이런 방식을 추가해도 강화학습 부분은 특별한 수정 없이 그대로 사용할 수 있다고 합니다. 하지만, 이런 연결 방법을 추가하면 문제가 생길 수 있다고 합니다. 예시로 한 레이어가 다른 레이어와 호환되지 않거나 한 레이어에 입력 또는 출력이 없을 수 있는 “compilation failures”를 유발할 수 있다고 합니다. 이런 문제를 피하기 위해 3가지를 제시합니다.

첫째, 레이어가 입력 레이어에 연결되어 있지 않으면 이미지가 입력 레이어로 사용된다.

둘째, 최종 계층에 연결되지 않은 모든 계층 출력을 가져와 연결하고 final hiddenstate를 분류기로 보낸다.

셋째, 연결할 입력 레이어의 크기가 다른 경우 연결된 레이어의 크기가 같도록 작은 레이어를 0으로 채운다.

 

Lr을 예측하지 않고 네트워크 구조 역시 conv layer로만 구성되어 있을 수 있는데 이것이 제한적이라 추가하는 것이 가능하다고 합니다. 예측 중 하나에 Lr을 추가하는 것도 가능하고 더 많은 유형의 레이어(pooling, batchnorm 등등)를 추가하려면 controller에 layer 유형을 예측하는 단계를 추가하고 이와 관련된 다른 하이퍼 파라미터도 추가하면 된다고 합니다.

 

3.4 Generate Recurrent Cell Architectures

위에서 나온 방식을 수정해 RNN cell을 만들 수 있다고 합니다.

RNN Cell 생성 과정 예시이며 레이어 별 하이퍼 파라미터를 출력하는 것이 아니라 필요 연산을 트리 구조로 나타내어 하이퍼 파라미터를 알려준다고 합니다. 각 트리의 노드마다 계산 방법과 활성화 함수를 NAS 모델이 출력하게 된다고 합니다.

 

Experiments & Results

CIFAR-10 이미지 분류, Penn Treebank 언어 모델링에 대해 각각 좋은 성능을 보이는 CNN, RNN을 찾기를 원한다고 합니다.

이후 데이터 적용 방법, 학습 세부 사항들 나와있지만 생략하고 결과만 첨부하겠습니다.

Controller가 12800개의 아키텍처에 대해 학습을 하고 가장 좋은 정확도가 나왔다고 합니다. 그 뒤로 다양한 하이퍼 파라미터에 대해 grid search를 진행하고 이를 통해 찾아낸 최고 모델을 학습한 결과가 위 사진과 같다고 합니다.  다른 기존 모델과의 성능 비교도 첨부되어 있는데, 에러를 살펴보시면 가장 좋은 성능을 내던 DenseNet과 어느 정도 비슷한 성능을 내는 것을 볼 수 있습니다. 이를 통해 ‘NAS가 dataset에 대해서 잘 작동할 수 있는 모델을 구축할 수 있다.’라고 알 수 있습니다. NAS가 찾은 CNN 아키텍처도 논문에 첨부되어 있으니 궁금하신 분들은 가셔서 확인해보세요! Skip connection이 불규칙적으로 많이 들어가 있었습니다. 이외에도 Language modeling 에서 유명한 벤치마크인 PTB 데이터에 대해서 RNN을 만들고 그것에 대한 결과도 보고 되어있으니 궁금하신 분들은 논문 내용 확인해주세요!

 

Conclusion

해당 논문은 순환 신경망을 사용해 신경망 아키텍처를 구성하는 아이디어인 Neural Architecture Search를 소개합니다. RNN을 컨트롤러로 사용해 가변 길이 architecture 공간을 검색할 수 있도록 했고 벤치마크에서 좋은 신경망 아키텍처를 자동으로 찾기 위한 새로운 연구 방향을 제시합니다.

이러한 방법으로 찾은 RNN 셀을 NASCell 이라는 이름으로 TensorFlow에 추가해 다른 사람들이 쉽게 사용할 수 있도록 했다고 합니다.

 

 

참고

[1] https://arxiv.org/pdf/1611.01578v2.pdf