BoostCamp

2021.08.27 - [Week 4] Day 5. 대회 1주차 마무리

배기니어 2021. 8. 27. 20:20

공부한 내용

1. Ensemble

 1.1. Ensemble : 앙상블

  • 여러 model의 특성을 조합해서 더 좋은 성능의 model을 만드는 방법

  • 각 model이 특성을 가지고 있을 때 효과가 있다.

  • model 사용 시간이 늘어나기 때문에 비효율적

  • 정확도가 중요한 분야이거나 competition일 경우 많이 사용

  • Deep learning은 일반적으로 overfitting이 발생하는 경향이 있다.

  • Ensemble 알고리즘

   - Random forest : high variance에 적용하는 대표적인 알고리즘

   - Begging : data sample 만들고 나누어서 각각 학습한 것을 취합

   - Stacking 등

  • Model Averaging (Voting)

   - 일반적인 방식

   - 서로 다른 model이 test set에서 같은 error를 발생시키지 않는다면 효과적

   - Hard voting

    · 다수결 방식

    · 소수의 model이 선택한 결과를 반영하지 않음

   - Soft voting

    · 모든 model의 결과에서 확률 고려

    · 소수의 model에 대한 결과도 반영

    · 일반적으로 soft voting의 성능이 더 좋다.

  • Cross Validation

   - train set과 validation set을 분리하며 validation set도 학습에 사용

   - validation set의 위치를 변경하며 학습

   - ensemble 과정에서 많이 사용

   - train set을 나누어 data가 더 적어지므로 bias 발생 가능하지만 cross validation으로 어느정도 해소 가능

  • Stratified K-Fold Cross Validation

   - validation set을 random하게 나누면 class의 분포가 고르지 못하는 문제 발생

   - 각 validation set에서 class 분포가 동일하도록 validation set을 나누는 방법

   - 장점 : validation set에서 나올 수 있는 모든 경우를 고려하여 일반화에 효과적

   - 단점 : k에 따라 model 수 결정되어 validation 비율에 따라 training에 사용되는 resource 결정

   - 일반적으로 train set : validation set == 8 : 2

  • TTA

   - test set에 대해 여러가지 augmentation 적용 후, 각각의 추론 결과를 ensemble하는 방식

   - test set에 noise가 있어도 잘 작동하도록 만든다.

   - test set이 가질 수 있는 variance 고려

  • ensemble은 성능과 효율의 trade-off -> 상황에 맞게 사용 여부 판단.

 

 1.2. Hyperparameter Optimization

  • 많은 시간 소요하지만 효과는 미비

  • Hyperparameter

   - system의 부분을 관장하는 parameter

  • grid search, random search, bayesian optimization, ...

  • Optuna

   - optimization library

   - 시행 횟수만큼 parameter 범위에서 train

 

2. Experiment Toolkits & Tips

 실험에서 발생할 수 있는 로그를 통해 실험 유효성과 model 학습 판단


 2.1. Training Visualization

  • 학습 중 log를 계속 tracking할 수 있다.

  • Tensorboard

   - tensorboard 로그 저장

   - 웹페이지에서 학습 모니터링 가능

   - 이미지 확인에도 용이

   - 로그 저장 경로, ip, port로 연결

  • wandb

   - config : 실험의 metadata

 

 2.2. Machine Learning Project

  • Jupyter Notebook

   - load된 data 재사용 가능 -> 시간적 효율성

   - 결과 간편하게 바로 확인 가능

   - idle 환경에서 재사용 가능

   - 불안정성 : cell 실행 중 notebook 창이 꺼지면 초기화

  • Python IDLE

   - code를 package 형태로 묶어서 구성하여 필요할 때 import해서 사용

   - pytorch는 pythonic하므로 debugging하기 편리

   - config, option 조정하며 실험 handling

  • Tips

   - 분석 code보다 설명을 읽으면 연구 배경, 결과, 이유, 방향성 등 필자의 생각을 알 수 있음

   - code는 디테일한 부분까지 보고 이해하기

   - paper with codes에서 최신 논문과 구현 코드 공부

   - 공부한 내용과 질문 공유해서 새로운 insight 얻고, 내 생각을 검증하여 함께 성장

 

3. 대회 진행

 • 학습이 계속 안되는 상황 발생

 • num_workers를 1로 조정하여 학습 진행 중 중단되는 에러 해결

 • epoch 15회 이상으로 학습 진행하여 train set에 대해 accuracy 99.4%, loss 0.01로 줄였지만 test set에 대해서는 accuracy 8.3%, f1 score는 0.02의 결과

 • 제출 기회가 줄어들었으니 validation set을 나누어 validation set으로 검증해야겠다.

 • train set에는 miss labeling된 데이터가 있는데, test set에는 data 손상이 없는 것이 보장되는지 모르겠다.

 • class 별로 image를 나타내서 손상된 data를 확인해볼 필요가 있을 것 같다.

 

4. 피어세션

 • 팀 회고록 정리

 • dataset 통일
  - 사람 기준으로 train set과 validation set 분리

 • imbalanced sampler

  - 사용하면 학습 더 잘 되는 것 같다.

  - class 별로 균등하게 나눠주는 방식

 • 대회 종료까지 리더보드 기준으로 가장 성능 잘 나오는 model 선택

 • 그대로 제출하는 것과 augmentation 해서 제출하는 것 성능 비교

 • 제출 기준

  - 1인당 1일 1회씩 제출

  - 남는 3번 제출 기회는 더 제출하고 싶은 사람들 중 랜덤

  - 제출 기회 양도 가능

 • epoch

  - 5~10회, 10~20회, 20회 이상도 수행

  - epoch 당 평균 2~3분, 많게는 7분

 • 대회 서버에서 git repository 사용

 • getattr 의미?

 • class vs. instance

https://firework-ham.tistory.com/101

 

5. 오피스 아워

 • base line code 많이 공부하고 익숙해지기

 • Notebook

  - line by line 실행 가능

  - visualization 편리

  - 대용량 i/o 작업은 메모리에 올려두고 계속 사용 가능

 • IDE

  - 다양한 기능

  - CLI 사용에 용이

  - versioning 편리

 • baseline code 설명

 • auto ML

  - HPO (HyperParameter Optimization)

  - NAS (Neural Architecture Search)

   · model의 architecture를 알아서 찾도록 학습

   · epoch를 돌고 나온 accuracy, loss로 backpropagation해서 layer를 연결할지 말지 학습

   · 시간 매우 오래 걸리고 resource가 많이 필요한 방법론

 • MS NNI 실습

 


또 한 주가 지났다.

시간은 빨리 가고 부족한데 할 것은 너무 많아 힘들다.

이번 주는 코드 공부를 좀 더 자세히 할 수 있었고 코드에서 학습이 어떻게 작동하는지 원리를 알 수 있어서 좋았다. 이번 강의가 2주차에 나왔다면 더 좋지 않았을까 하는 아쉬움이 크다.

주말에 대회 코드 많이 보면서 공부하고 실험 방법을 많이 생각해봐야겠다.