(9강) Ensemble

💡
Ensemble의 개념과, Cross Validation, Test Time Augmentation에 대해 알아본다.

Ensemble

Ensemble이란, 단일 Model보다 나은 성능을 내기 위해서 서로 다른 Model을 사용하는 것을 의미한다. Deep Learning Model은 Dataset에 쉽게 과적합되는 특징이 있는데, Ensemble을 활용하면 이런 문제를 어느정도 극복할 수 있다고 알려져 있다.

Model Averaging 방법은, Voting 방식이라고 부를 수 있다. 각 Model의 추론의 결과를 평균내어, 최종 결과를 얻는 방식이다. Prediction을 활용하는 경우에는 Hard Voting, Probability를 활용하는 경우에는 Soft Voting으로 구분할 수 있다.

Cross Validation을 통해 모든 Data를 학습에도 활용하고 검증에도 활용할 수 있다. Data를 매번 다르게 구분하고, 학습한 Model의 결과를 Ensemble함으로서, 위와 같은 효과를 얻을 수 있는 것이다. 특히, 이 때 Class의 분포를 활용하는 Stratified K-Fold를 활용하는 경우가 많다.

TTA (Test Time Augmentation)은 Test Data에 대해 Augmentation을 수행하고, Model의 다양한 추론 결과를 Ensemble하는 방법이다.

Ensemble은 성능의 측면에서 확실히 효과가 있으나, 학습과 추론 시간이 Linear하게 증가하는 문제가 있다. Competition에 경우에는 성능에 목적이 있기 때문에 자주 사용하지만, 실제 현업에서는 Model의 Delay에 민감한 경우가 많기 때문에 Ensemble을 자주 활용하지는 않는다.

Hyper-parameter Optimization

Hyper-parameter는 Model이라는 System의 Mechanism에 영향을 주는 매우 중요한 Parameter이다. 이에 대한 탐색은 매번 학습이 수반되기 때문에, 많은 시간을 필요로 한다. Optuna와 같은 Library는 이런 과정을 수행하는데 도움이 될 수 있다.


(10강) Experiment Toolkits & Tips

💡
학습 과정에 대한 Logging과 Project 구성에 대해 알아본다.

Training Visualization

학습과정을 기록하고 트래킹하는 것은 실험에 대한 관리나, Model의 성능 개선에 중요한 부분을 차지한다. 이를 위한 다양한 Tool이 존재한다.

Tensorboard는 Web Page를 통해 다양한 Log를 확인할 수 있다. pip를 통해 설치하고, 주어진 IP와 Port에 이를 기록하는 형태로 사용할 수 있다.

Wandb는 딥러닝 로그의 깃허브와 비슷한 느낌이다. 계정을 통해 Login하고, Wandb에 대한 기본 정보를 Initialization해야한다. 이후 필요한 Log를 설정하면, 계정의 Page에서 해당 Log를 확인할 수 있다.

Machine Learning Project

ML Project는 대표적으로 Jupyter Notebook 환경과 Python IDLE 환경으로 구분할 수 있다.

Jupyter Notebook은 Interactive한 환경으로, EDA 시 매우 편리하다. Data를 Load해 놓은 상태에서 여러번 재사용할 수도 있으며, Graph와 같은 표현을 Cell에서 확인할 수 있기 때문이다. 단, Notebook 환경이 Web Browser에서 이루어지는 만큼 해당 창이 꺼지는 등의 불안정성은 단점으로 작용한다.

Python IDLE 환경은 Code 재사용성에 있어서 매우 큰 장점을 갖는다. 또한, 강력한 IDE를 통해 Debugging도 편리하게 수행할 수 있으며, Code를 이해하기에도 큰 도움을 받을 수 있다. Argparser와 같은 Module을 활용해 실험 핸들링도 편리하고 자유롭게 수행할 수 있다는 장점도 존재한다.


Reference

Optuna Github

Hyperparameter Opt 포스팅

AutoML 포스팅

Wandb

Papers With Code


Project

오늘의 목표 및 진척상황

  • Cosine LR Scheduler 실험
  • Optimizer 실험
  • Loss Function 실험
  • 재학습 및 Colab 연동 Code 구성

직면했던 문제와 학습한 내용

  1. Cosine Annealing LR Scheduler

    오늘의 모든 실험은 Cosine LR Scheduler 적용에서 시작됐다. 최근의 SOTA Model에서 사용된다고 해서, 큰 기대를 했었는데 실제로 적용하니 성능이 급격하게 떨어졌다. 수렴하는 Epoch에서 LR을 최소화 해보기도 하고, 주기를 짧게도 해보고, 길게도 해보고 했지만, 결국 LR Scheduler가 없느니만 못했다. 혹시 Optimizer를 SGD로 해야하는가 하는 생각에 다른 Optimizer를 실험했다. 현재는 Step LR Scheduler의 성능을 확인하고 있다.

  1. Optimizer

    위 이유로 시작해서, 당연하게 사용하던 Adam 외의 Optimizer를 사용해보기 시작했다. SGD, Momentum, SGDP, AdamP 등을 사용해봤고, 미세하게 AdamP가 성능이 더 좋아서 이를 채택했다.

  1. Loss Function

    Loss Function을 빨리 정해둬야 뒤에 다른 옵션을 선택하기 좋을 것 같다는 생각이 들었다. Arc Face Loss에 대해서 공부해보려고 했는데, 도저히 이해가 안돼서 포기했다. Focal Loss는 그나마 이해하기 수월해서, 적용해봤고 gamma를 1부터 5까지 적용해봤다. 이외에도, 우리 Data의 분포를 통해 Weight를 구성하는 방법도 실험 중에 있다.

추가로 진행 할 사항

  • F1 Loss 확인
  • Low Precision Training 적용 확인
  • Label Smoothing 확인
  • Mix-up 확인
  • Data Noise 처리 및 증강 방법 강구

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P1] Sunday 5 April  (0) 2021.04.11
[P1] Saturday 4 April  (0) 2021.04.11
[P1] Day 44  (0) 2021.04.11
[P1] Day 43  (0) 2021.04.11
[P1] Day 42  (0) 2021.03.31

+ Recent posts