2021.08.27 - [Week 4] Day 5. 대회 1주차 마무리
공부한 내용
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주차에 나왔다면 더 좋지 않았을까 하는 아쉬움이 크다.
주말에 대회 코드 많이 보면서 공부하고 실험 방법을 많이 생각해봐야겠다.