ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hyper-Parameter Tuning 및 AutoML 논문 리뷰
    최신 기술동향/인공지능 (AI) 2021. 2. 6. 08:27
    반응형

     AI에 대한 어느 정도의 지식이 있다면, 충분히 많은 AI 논문 알고리즘에 대한 논문과 관련된 코드들을 찾아 볼 수 있다. 기존 Machine Learning 알고리즘, Neural Network 기반의 알고리즘 등 다양한 알고리즘을 자신의 Application에 맞게 활용할 수 있는 Tool들이 있다. 하지만 새로운 Application이나 논문 주제를 위해 시뮬레이터를 설계하려고 하면, 기존의 알고리즘을 그대로 가져다 사용하는 것이 아니라 자신에게 맞는 ML 모델을 적용해야한다. 참고 자료에서 Node 갯수는 몇 개가 좋으며, Dropout은 얼마나 하는 것이 좋을지에 대한 Hyper-parameter에 대한 고민, CNN을 쓰는 것이 맞는지, 얼마나 깊게 쌓아야할지 등 Architecutre에 대한 고민이 있을 수 있다. 물론, 시간과 자원이 엄청많다면, 모든 조합을 전부 돌려보고 성능이 좋은 모델을 선택하면 되지만, 세상에 할 일은 많고, GPU 가격은 비싸기만 하다. 따라서, 효율적으로 ML을 학습시키기 위한 ML이 등장하게 되었고 이를 AutoML이라 한다. 이번 글에서 다룰 논문은 SOTA (State of The Art) AutoML에 대한 Survey다. 이 논문에서는 주로 Deep-Learning에 초점을 맞춰서 저술하였다.

     


    제목: AutoML: A Survey of the State-of-the-Art  [1]

     

    저널명 : arXiv:1908.00709 [cs.LG]

     

    출판년도 : July, 2020 (Revised)

     

    저자 : Xin He, Kaiyong Zhao, Xiaowen Chu


     

     Introduction에 소개되어 있는 AutoML이 필요한 이유는 위에서 대략 설명했다. 모든 Architecture와 Hyper-Parameter 조합을 확인해보면 좋겠지만 천문학적인 수의 조합이 가능하기 때문에, 이를 효율적인 방법으로 찾아보자는 Motivation이다. 이 논문에서는 ML을 적용하는 Pipeline인 Pre-Proecessing / Model-Generation / Model Evaluation 순서로 설명한다. 그 중에 Model-Genration에 초점을 맞추면, Search-Space / Optimization Method로 나눠질 수 있다. Search-Space는 기존 ML을 사용할지, NN 모델을 사용할지고, Optimization Method는 Hyper-Parameter를 최적화할지, Architecture를 최적화할지로 나뉜다. 뒤에서 조금 자세히 다룰 Network Architecture Search (NAS)는 NN 모델의 Architecutre를 최적화 하는 방법이다.

     Section 3까지는 Data-Preprocessing에 대한 내용들이 들어있다. 간단히 요약하자면, 깔끔하게 정제된 Data가 많을수록 좋다는 뜻이다. 하지만 현실 데이터는 대부분 깔끔하지 않고, 수도 적다. 데이터 '수'를 늘리기 위한 Data Augmentation과 데이터 중에서 성능에 영향이 있을 Feature를 고르는 Feature Selection, Feature를 조합하여 더 적은 Feature로 압축하는 Feature Extraction 등에 대한 소개가 되어 있다. 이 부분에 대해서는 Feature Engineering이라는 별도의 주제로 매우 활발하게 연구가 진행되고 있다. 기존 ML 모델에서는 이런 Feature Engineering을 하기 위해서 해당 Domain의 지식부터 많은 확률적인 내용들을 다뤄야 한다. 하지만 NN에서는 Input데이터가 Model로 들어가서 Feature가 알아서 뽑혀나오는 신기한 방식이기 때문에 ML보다는 Feature Engineering에 대한 얘기가 적은 것 같다. 예를 들면, 이미지를 보고, CNN의 Filter들이 Feature Map을 뽑아주는 느낌이다. 하지만, NN에도 Feature에 대해 잘 정리가 된 데이터가 들어가면, 더 좋은 성능을 낸다는 논문을 본 기억이 있다. 이에 대해서는 StackOverflow에서도 많은 토론이 있던 것 같지만, 이 리뷰의 취지와는 살짝 방향이 다르기 때문에 넘어가도록 한다. 단, Data Augmentation은 정말 필요한 기술이라고 생각되기 때문에 새로운 Data를 생성하기 위해 시뮬레이터를 잘 만들거나, GAN 등의 Generative Model나 Rotation, Flip 등의 방법으로 데이터를 생성하는 방법은 모델과 상관없이 공부할 필요가 있어 보인다. 요즘 정말 좋은 데이터 구하는게 AI의 전부라는 생각을 많이 하게 되었기 때문인 것 같다.

    Figure 1. An overview of NAS Pipeline [1]

     

     Section 4부터 본격적으로 NAS에 대해 설명한다. Figure 1에는 논문[1]에 소개된 NAS의 Overview에 대한 그림이 나와있다. Search Space 과정에서는 어떻게 Layer의 후보군을 찾을지 Search Space를 정의한다. AutoML을 적용하기 전에도 이미 Depth-wise Convolution, Diliated Convolution 등 좋은 성능을 보이는 모델들에 들어가는 모듈들이 있다. 기존의 모델을 쌓아놓고, Residual Block 처럼 Layer간의 연결을 통해 성능 향상을 노려보는 Entire-Structured 방법이 있지만 Transferability가 부족하다. Cell-Based 방식은 몇 가지 Cell-Module을 구성하여 반복해서 붙이는 방식으로 이루어진다. Normal 블록 (repeated N times), Reduction 블록, Normal 블록 (repeated N times), Reduction 블록같은 방식으로 구성하고, 블록 내부를 최적화 하는 방식이다. Resnet-50, Resnet-101 등도 이와 비슷한 방식이다. 이런 Cell-Based NAS 방식은 다른 Dataset에도 사용할 수 있는 Transferabiltiy가 Entire-structure 방식보다 높다. 하지만, 해당 블록을 몇개 쌓을지에 대한 것이 또 다른 Hyper-Parameter가 될 수 있다. Reduction Cell을 반복할 수록 Spatial한 정보들이 줄어들고, Network 전반적인 다양성이 조금 떨어지게 된다. 따라서, Cell을 Hierarchical하게 쌓아서 조합하자는 방식이 도입되게 된다. 이런 다양한 방식들에 대한 논문들이 소개되어 있으니, 해당 Survey를 보면서 어떤 논문들이 있는지 확인해보는 것도 좋을 것 같다. 마지막 방법으로 Morphism-based를 소개하면서 저자는 뜬금 아이작 뉴턴의 '거인의 어깨에 올라서서 넓은 세상을 바라보라'는 명언을 언급한다. 앞서 소개한 모델들도 기존에 있는 operation들을 사용하긴 하지만, 여기에 소개된 Inserting the identity morphism (IdMorph) 방식은 기존 모델 Layer 사이에 끼워넣기도 하고 (Depth), 옆으로 (Width) 붙이기도 한다. 정말 다양한 방식으로 모델들을 구성할 수 있다는 것을 알 수 있다.

    Figure 2. An overview of NAS using reinforcement learning [1]

     이렇게 Search Space로 후보군을 찾았으면, 어떤 후보가 본인의 Application에 맞는지를 확인해봐야 한다. 이를 위해 Architecture Optimization (AO)이 필요한데, 이 또한 몹시 다양한 방식이 있다. 유전 알고리즘 (Evolutionary)으로 확인하는 방식이 처음으로 소개되어 있다. 후보 2개를 고르고 (Selection), 각자가 파생 알고리즘을 만들어 합치고 (Crossover), 이렇게 만들어진 알고리즘을 살짝 변형하고 (Mutation), 성능 비교를 통해 성능이 좋은 알고리즘만 남겨서 (Update) 다시 후보군을 고르는 방식이 유전 알고리즘이다. 이 밖에도, 후보군을 고르는 방법을 Action, 성능 향상을 Reward로 Setting한 강화학습 방법도 최근에 많은 논문들이 나왔다. 상당히 좋은 성능을 보이지만, 상당히 많은 GPU로, 상당히 많은 시일을 소모함을 소개하고 있다.

     그 중에 AutoML에서 주요 논문 중 하나인 DARTS (Differentiable Architecture Search)가 등장한다. DARTS에서 가장 주목해야 할 점은 'Operation 선택에 Continuous한 개념을 도입'했다는 점이다. 기존의 방식들은 무슨 Layer, Layer 몇 개 같은 Discrete한 방식으로 Operation을 골랐다면, DARTS에서는 해당 operation을 고를 확률을 Continuous하게 최적화하는 방식을 도입했다. 이렇게 operation에 대한 확률이 나왔으면, 마지막으로는 최대의 확률을 갖는 operation으로 Layer를 구성하여 최종 Output으로 제시하게 된다.

    Figure 3. : An overview of DARTS [2]

     상당히 신선한 방식이고, 중요한 논문이지만, 성격이 많이 다른 Operator들을 같이 최적화한다는 점이 Challenge로 꼽혔고 이를 해결하기 위한 많은 후속 논문들이 줄을 이었다. 이 밖에도, 성능 지표에 대한 Surrogate Function을 만들고 이를 최적화 하는 Surrogate Model-Based Optimization, Random Search 방식들이 있고, 이를 함께 사용하는 Hybrid 방식들도 있다. 이런 방식들로 최적의 Network Architecutre 구조를 찾아간다.

     이 논문에서는 Hyper-Parameter optimization (HPO) 방식에 대해서도 소개한다. HPO는 DL을 넘어서 기존 ML에서도 몹시 중요한 내용이다. 기존 ML 모델에서는 LightGBM같은 Gradient Boosting Model에서 Tree의 Depth를 몇으로 할지, Leaf는 몇이 적당한지, Deep Learning에서는 Dropout은 몇으로 하고, 노드는 몇개를 사용하는 것이 좋을지 전부 테스트하기란 불가능에 가깝다. 따라서, HPO에서는 크게 3가지 방법을 따르게 된다. 가장 심플한 방법은 주어진 간격의 parameter 조합을 검사해보는 Grid Search가 있다. Grid Search는 몹시 직관적이고 조합을 많이 테스트해볼 수 있지만, 가능한 조합이 몹시 많아지기 때문에 비효율적이다. Random Search는 이름처럼 후보군을 Random하게 찾아보는 방식으로 Grid 방식보다는 더 효율적이고 현실적이지만, 이 또한 최적을 보장하지는 않는다. 이에 비해, 상당히 많은 논문들에서 많이 사용하는 Bayesian Optimization (BO) 방식은 Global Optimization을 효율적으로 찾아나간다. Bayesian이 붙은 대부분의 알고리즘은 '몇 번 샘플링 된 값으로 해당 분포를 유추해나가는 과정'이다. BO는 몇 번의 Hyper-Parameter로 Objective Function 값을 구하여 HP와 Objective Function간의 관계를 유추해나간다. 이런 가상의 관계를 추정하는 방식을 Surrogate Model이라 한다. 이런 Surrogate-Model based Optimization (SMBO)인 BO를 통해 Objective Function을 최적화하는 다음 Hyper-Parameter를 유추하여 Objective Function을 Evaluation하여 Surrogate Function을 업데이트하는 방식을 반복한다.

     

    Conclusion

     이렇게 Network Archtiecture를 찾고, 이를 구성하는 Hyper-Parameter를 최적화해나가는데, 최적화된 모델이라는 것이 상당히 애매해진다. 엄청 깊고 노드수가 엄청 많아서 99%의 정확도를 보이는 모델이지만, 이로 인해 Inference Time이 길고, Memory도 많이 잡아먹는 모델과 적당히 가벼운 모델이지만 90%의 정확도를 보이는 모델 어떤 것이 더 적합할지 결정해야 한다. 이 부분이 5G, 6G에 AI를 적용할 때도, 상당히 중요한 포인트다. 통신은 엄청 짧은 스케쥴링 주기를 갖고 있으며, 단말은 일반 컴퓨터에 비해 상당히 작은 메모리 용량을 가지고 있다. Train 시간이 중요할 수도 있지만, Inference Time이 절대적으로 중요한 Application도 있다. 이런 경우, 해당 내용들을 반영하여 Objective Function을 설계하는 등의 다양한 논문들이 제시되고 있다.

     AutoML이 Concept적으로는 이해가 가지만, 실제로 이를 돌리기 위해서는 매우 많은 조합을 직접 테스트해봐야 하기 때문에 상당한 Resource를 필요로 한다. 또한, 이를 직접 구현하기에는 상당한 노력이 필요해보인다. 하지만, 세상에 능력자는 많고, 구글은 모든 것을 알고 있기 때문에 어지간한 Tool들은 소개가 있다. 대표적으로 Keras Tuner [3] 는 Hyper-Parameter Optimization을 해주는 Tool로, Tensorflow와 함께 사용하기도 편하기 때문에, 요즘 열심히 사용해보고 있는 중이다. NAS는 Auto-Keras, Auto-Sklearn 등을 열심히 찾아서 사용해보고 있는 중인데, 논문에 따른 Code를 Github에 올려 놓는 PaperswithCode [4]와 OpenSource로 올라와있는 [5]를 테스트해보고 있는 중이다. (만약 이 글을 읽는 분 중에 좋은 오픈 소스를 알고 계신 분이 있으면 공유해주시면 감사하겠습니다. ㅠㅠ)

     최근, 개인적으로 AutoML에 흥미가 생겨서 요즘 공부를 열심히 하고 있고, 이를 연구나 개인 프로젝트에 적용하려는 고민을 해보고 있는 중이다. 하지만, AutoML가 아직까지 모든 문제를 풀어주는 치트키는 아닌 만큼, 여러 알고리즘을 함께 공부하며, 깊이를 쌓을 필요가 있어보인다.

     

    Reference

    [1] Xin He, Kaiyong Zhao, Xiaowen Chu, "AutoML: A Survey of the State-of-the-Art", arXiv:1908.00709, July, 2020.

    [2] Hanxiao Liu, Karen Simonyan, and Yiming Yang "Darts: Differentiable architecture search" arXiv:1806.09055, June, 2018.

    [3] blog.tensorflow.org/2020/01/hyperparameter-tuning-with-keras-tuner.html

     

    Hyperparameter tuning with Keras Tuner

    The TensorFlow blog contains regular news from the TensorFlow team and the community, with articles on Python, TensorFlow.js, TF Lite, TFX, and more.

    blog.tensorflow.org

    [4] paperswithcode.com/task/architecture-search

     

    Papers with Code - Neural Architecture Search

     

    paperswithcode.com

    [5] nni.readthedocs.io/en/latest/Overview.html

     

    Overview — An open source AutoML toolkit for neural architecture search, model compression and hyper-parameter tuning (NNI v2.

    NNI provides a key capacity to run multiple instances in parallel to find the best combinations of parameters. This feature can be used in various domains, like finding the best hyperparameters for a deep learning model or finding the best configuration fo

    nni.readthedocs.io

     

    반응형

    댓글

Designed by Tistory.