GDG 광주 2019 - 앙상블 / AutoML (발표자 - 이종훈)

원본 발표 자료

[DLSS]08_AutoML

 


Ensemble / AutoML이란?

Ensemble - 여러 모델을 함께 사용한다.
AutoML - 여러 모델을 만들어서 최적의 모델을 자동으로 찾음.

공통점:

  • 성능이 좋다
  • 현업과 대회에서 많이 사용된다
  • 여러 모델을 만든다.

많은 사람들이 Ensemble이나 AutoML을 안써봤는데… 왜일까?

의심가는 이유:

  • GPU가 엄청 많이 필요할텐데… 그게 없어서…
  • 유명한 논문을 벤치마킹만 해도 잘 된다…? 굳이…? 왜 써야할지 몰라서…?

왜 써야 하는가?

  • 앙상블을 올바르게 쓰면 성능이 더 좋아서!
    • 여기서 얘기하는 성능은 Accuracy뿐만이 아니다.
    • Efficiency, Speed, Cost 등 전부 중요하다. 이걸 포괄적으로 봐서 ‘성능’ (performance)이라고 한다.

하나의 모델이 모든 경우에 대한 Rule을 만들 수 있는가? 이걸 할 수 있는 모든 경우의 데이터가 있는가?

그렇게 하기 어렵기 때문에, 경우의 범위 또는 단위를 정해야하며, 그리고 처음 보는 경우에는 대처해야한다. 단일모델의 경우, 그 모델이 대처하지 못하는 경우를 마주하게 될 경우

  • 오류가 나거나
  • 그냥 아무거나 뱉거나
  • 모르겠다고 얘기하거나
  • (거의 없지만) 알아서 상황에 맞는 정답을 찾는다.

위의 케이스들을 딥러닝의 관점으로 보면 오버피팅(low bias high variance) / 언더피팅(high bias low variance)으로 볼 수 있다.

최적의 해 (low bias / low variance)를 구하기 위해서 (언더피팅도 아니고 오버피팅도 아닌), Ensemble 기법들에 대해 알아본다.

 


Ensemble 기법들 (머신러닝)

Voting

  • 분류에서는 voting, 회귀에서는 averaging이 기본.
  • 여러 모델들이 개, 개, 개, 개, 고양이, 고양이를 내뱉는다면, 개를 아웃풋으로 내는 방식. 물론 이에 대해서 여러가지 방식이 있다 (softmax probability output으로 한다던지…)

Bagging

  • Bagging = Bootstrap aggregating - 학습 데이터를 달리하여 여러 모델을 생성
  • Variance를 낮춤으로써 overfitting을 방지 (일반화)
  • 딥러닝에서 잘 안 씀…

Boosting

  • 머신러닝 쪽에서 상당히 성능이 좋다고 함… 테이블과 같이 정형화된 데이터에서.
  • Bagging을 기본으로 하지만, 순차적으로 학습을 진행. 이 때, 이전 모델의 오답에 가중치를 부여 (boosting).
  • 오답을 잘 걸러냄! 근데… 이미지 등 과 같이 노이즈가 많이 섞인, outlier가 있는 데이터라면…? 그 outlier에 가중치를 많이 주기 때문에 에러가 나타남. 즉, 정확도가 높지만 outlier나 noise에 취약! (고로 딥러닝에 적합하지 않음)
  • Adaboost, XGBoost, LightGBM, CatBoost

Stacking & Blending

  • Meta modelling (Meta Learning)!
  • 각 모델이 도출한 결과들을 또 다른 모델의 입력으로 사용. 보통 3층 4층 정도 쌓음.
  • 성능 향상이 크지만, 너무 무거운 경우가 많아 실제 사용이 어려움.
  • StackNet
  • 리얼타임으로 안 도니까 기업들에서는 보통 안 쓰는 편이고… 쓴다면 좀 어려운 문제를 꼭 풀어야할때?

 

Ensemble 기법들 (딥러닝)

데이터를 다양하게 하는 방법

  • K-fold cross-validation ensemble
  • Bootstrap aggregation ensemble (Bagging)
  • BgN-Score and BsN-Score
    • …이렇게 있다고 하는데 학습에 시간이 많이 걸리고 무거워서 쓰기 어려움.
    • 또, Boosting방법이 overfitting을 부추김.

모델을 다양하게 하는 경우

  • 딥러닝에서는 모델 아키텍처를 어설프게 바꿔서 앙상블을 하는거보다, 차라리 initial weight기법이나 optimisation기법을 다르게 해서 앙상블을 하는게 훨씬 좋음! (힌튼 교수 연구)
  1. “Snapshot Ensemble: Train 1, Get M for Free” 논문!
    • 일부러 로컬 미니마에 빠트린 여러개의 경우 (여러개의 모델 파라미터)를 앙상블한다.
  1. “SGDR: Stochastic Gradient Descent with Warm Restarts” 논문
  1. “Loss Surfaces, Mode Connectivity and Fast Ensembling of DNNs.” 논문

모델 조합을 다양하게 하는 경우

  1. Knowledge Distillation - 힌튼 교수가 만든 기법인데, 모델에서 좋은 정보를 추출해서 다른 모델에 심자는 기법. 현재는 모델 경량화에 사용되고 있지만, 원래는 앙상블을 위해 만든 것이다.
    • 하나의 모델에서 좋은 정보를 추출해서 여러개의 훨씬 작은 모델들에 이식하고, 그 작은 모델들로 앙상블을 한다.
  1. Weight의 평균값을 취함으로써 더 넓은 Optima와 Better Generalization을 얻을 수 있다.

Specializing models

  1. A novel Image Classification Method with CNN-XGBoost Model
    • 한때 유행했던 방법. 성능은 좋았는데, 너무 특정 케이스에만 적용됨.
  1. Confidence multiple choice learning
    • 특정 클래스만 찾는 모델 (e.g. 강아지만 찾는다던가… 고양이만 찾는다던가…)을 여러개를 학습을 시키고, 그 모델들을 앙상블함.
  1. Learning to specialize with knowledge distillation for Visual Question Answering
    • 위의 방법들에 knowledge distillation을 적용함.

 


Ensemble 정리

  • 무조건 좋은 방법은 존재하지 않는다!
  • 내 모델이 무엇을 요구하는지 알아라!
    • 학습은 느려도 되는데 인퍼런스는 빨라야하는가?
    • 인퍼런스는 좀 느려도 되는데 학습이 빨라야하는가?
  • 분석/설명이 어렵다는 얘기도 있는데, 이 또한 분석하기에 딸 ㅏ오히려 훨씬 데이터와 문제에 대해 해석하기 유리한 부분이 많다.
  • Kaggle에서 winning solution의 대부분이 ensemble을 사용했기 때문에 해당 코드들을 보면서 공부하고 연습하자.

 


AutoML

목적: Data Cleaning 부터 prediction까지 모두 자동화 하는 것이 목표.

딥러닝을 하기 위한 최적의 모델은 무엇인가??

2017년 Google에서 아이디어를 키노트 발표했다. 2년 전부터 얘네는 이걸 하고있다는거잖아! ㅠㅠㅋㅋ 구글 클라우드에서 API를 통해서 사용할 수 있다.

AutoML의 성능은 진짜 좋다…?

AutoML을 하려면 어떤 점을 고려해야할까?

  • Search Space
    • 선행지식을 사용하면 search space가 간소화되지만, 인간에 의한 bias가 발생
  • Search Strategy
    • Exploration-exploitation trade-off 이슈
  • Performance Estimation Strategy(Which objective function + How to calculate)
    • Cost를 줄이는 방향으로 발전중

 


AutoML 논문

AutoML의 타입:

  • RL기반
    • NASRL, TNAS, ENAS, MNAS
  • Evolutionary Algorithms (EA):
    • TPOP, AmeobaNet
  • Bayesian Optimization (BO)
    • AutoKeras
  • Sequential Model-Based Optimization (SMBO)
    • PNAS
  • Gradient Descent (GD)
    • DARTS
  • NASRL 2016
    • NAS를 널리 알린 논문
    • 강화학습 기반의 아키텍처 최적화.
    • 근데 너무 오래 걸림! 800개의 GPU를 28일동안 해서 한게 CIFAR-10…
      • 왜일까? 규칙성이 없이 너무 랜덤하게 서치함.
  • NASNet 2017
    • 2016년 연구에서 search space를 줄임으로써 속도 개선.
    • 전체 네트워크를 다 디자인하는게 아니라, 셀 구조를 찾아서 쌓는 방식을 넣으면 어떨까?
  • NASRL에 transfer learning 개념을 도입해서 빠르게 학습할 수 있는 방법을 제안함.
    • NASRL은 28일 걸렸는데, 이건 4일 걸림! 800GPU로 4일 트레이닝도 엄청 긴데 ㅋㅋㅋ 여윽씨 구글스러운 연구
  • AdaNet 2017
    • 깊이도 중요하지만, 두껍게 만드는것도 좋은 방법인 것 같아서, 앙상블 기법을 사용해봄.
    • 아직도 GPU가 많이 필요함.
  • ENAS 2018
    • 아키텍처 서치에 필요한 시간을 획기적으로 줄임!
    • GTX 1080Ti 1대로 16시간만에 아키텍처를 찾을 수 있음. 다만 NAS보다 성능이 약간 떨어짐.
    • 기존 방법의 문제점은, child model이 학습한 weight들을 완전히 버려버리기 때문. 얘네들이 weight를 공유해서 만들어보게하면 어떨까?
    • Directed Acyclic Graph (DAG)구조를 써서 효율적으로 만듬. 이게 현재 구글 클라우드 AutoML에 들어간 거라고 함.
  • DARTS 2018
    • 딥마인드와 CMU에서 개발.
    • 기존의 RNN구조를 사용하지 않음!
    • ENAS구조를 따옴…? 기존의 딥러닝에서 학습하는 방법들을 적용할 수 있기 때문에, 장래가 제일 좋은 방법으로 보임.

 


AutoML의 문제…?

정확도를 높인 모델을 찾는건 이제 잘 한다!

근데… efficiency를 찾는 모델을 찾진 않잖아? 속도가 빠른 모델을 찾을때는?

목적에 따른 차이:

  • Cost는 줄이고 speed를 높히기 위함 (모바일, 임베디드의 경우 quality를 손해봐서라도 이를 원할 때가 있음)
  • Cost와 speed가 어느정도 정해져 있는 상태에서 성능을 올리기 위함 (한정된 자원에서 모델을 키워야 할 때)
  • 빠른 학습을 위함 (같은 리소스에서 더 많은 데이터를 학습하고 평가하기 위한 경우)

그래서 Accuracy와 efficiency를 동시에 찾는 AutoML을 필요로 함!

그래서 나온게:

  • MNAS 2018
    • MobileNet, ShuffleNet을 만든 팀과, ENAS를 만든 팀이 합작
    • Reward에 validation accuracy 뿐만이 아니라 latency (inference speed)도 포함함.
      • 디텍션, segmentation등
  • EfficientNet 2019
    • MNAS의 저자들이 작성
    • Accuracy와 efficiency를 둘 다 잡기 위한 model scaling 방법을 제안.
    • 대부분 Model Scaling을 위해 width, depth, image resolution을 늘려왔는데, 많은 경우 나머지 요소를 고정하고 하나의 요소에 대해 집중적으로 scaling을 함. EfficientNet에서는 이것을 균형있게 조정하려고 함.
      • 성능이 빼앰 완전 좋다
  • MixNet 2019
    • EfficientNet이 Macro-architecture에 대해 다뤘다면, 여기서는 micro-architecture에 대해 다룸.
    • Depthwise convolution과 group kernel의 개념을 적절히 잘 조합.
      • 최근에는 5x5를 3x3 두개로 쪼개기보다… 5x5로 하고 5x1과 1x5로 하는 depthwise separation을 하는게 더 좋다…? 으에엥
    • 적절히 잘 섞으니까 성능이 더 좋아지더라! 7x7이나 9x9까지 키운것도 있음. 또, 모바일에서 아주 좋은 효과를 보임. 2019년 8월기준 현재 SOTA.
  • Randomly Wired Neural networks 2019 (페이스북)
    • NAS같은 network generator를 자동으로 만들자! (네트워크를 만드는 네트워크를 만드는 네트워크)
    • 뇌과학쪽에서 예전에 많이 나왔던 개념…?

 


AutoML 정리

  • AutoML은 생각보다 멀리 있지 않다. 종훈님 말씀으로는 내년부터 실제로 사람들이 쓰지 않을까?
  • AutoML 자체를 연구하지 않더라도 이를 보고 공부하고 영감을 받을 수 있다.