pytorch에서 optimizer & metric 기본개념 재활
1. optimizer는 무엇일까
loss는 gradient를 발생시키지만 gradient로부터 parameter를 업데이트시키는 것이 optimizer
업데이트하는 방식에 따라 다른 특징을 보이며 다른 성능을 나타낸다.
어떤 것을 선택하느냐에 따라 수렴속도나 수렴의 안정성에 차이가 있을 수 있어 신중하게 선택할 필요가 있다
2. learning rate
learning rate는 계산된 gradient로부터 parameter를 얼마나 업데이트시킬지 결정하는 요소중에 하나로
학습 중에 고정시켜 사용할 수 있지만 그렇게 한다면,
고차원의 함수를 학습하고자 하는 딥러닝에서는 global minimum을 못찾을 가능성이 높다
반면 학습 중에 learning rate를 변화시킬 수 있으면 유연하게 global minimum을 찾을 수 있을 것
3. learning rate scheduler
learning rate를 학습중에 조건에 따라 변경시키는 함수?
종류가 다양하며 각각이 가지는 특징에 따라 최저점을 빠르게 찾을 수도 있고 그렇지 않을 수도 있고…
사용하는 방법은 보통 optimizer.step() 다음 줄에 scheduler.step()으로 사용
4. stepLR
지정한 step size마다 learning rate를 감소시킴
5. cosineAnnealingLR
cosine함수처럼 eta_min까지 떨어졌다가 초기 learning rate로 올라오면서 급격하게 변화시킴
억지같아서 누가 써? 이러겠지만 learning rate의 변화를 다양하게 주면서 변칙적으로 다양한 학습을 시킬 수 있는 장점이 있다
learning rate가 큰 순간에는 많은 움직임을 보이는데
learning rate가 적은 순간에는 적게 움직일텐데
이러한 변화가 매번 일어나면서 매우 변칙적으로 움직여 local minimum을 빠르게 탈출
경험상 얘가 꽤 괜찮
6. ReduceLROnPlateau
일반적으로 자주 쓴다고?
성능향상이 더 이상 안보이면 기존 learning rate를 버리고 감소시켜 새로운 learning rate로 사용
성능향상을 감시하는 loss나 metric을 input으로 받아야한다는 특징이 있음
optimizer에 momentum을 설정해야 사용할 수 있다는데?
patience라는 parameter가 있는데 성능 향상이 없을 때
patience로 지정한 값의 epoch만큼 참고(여기서는 20인듯? 기본값이 20인가?) learning rate를 감소시킴
7. metric이 가지는 의미란
모델의 학습이 제대로 이루어졌는지 평가하기 위한 객관적인 지표
단순히 loss 감소로만 모델의 성능을 평가할 수는 있지만,
실질적으로 이 모델을 쓸 수 있느냐가 중요하므로 loss 감소로만 평가하면 문제가 있을 수 있음
학습에 직접 사용되는 것이 아니라 중요성을 모르는 경우가 많다
문제의 성격과 상황에 따라 종류가 다양하며 나의 상황에 맞는 적절한 metric을 선택하는 것도 또 하나의 능력이다.
competition은 metric을 지정해주지만 앞으로 현업에서 일할 때는 metric을 아무도 가르쳐주지 않는다
실제 만든 model을 배포할 때 어떠한 metric으로 평가할지 선택할려면 metric의 특징들에 대해 알고 있을 필요가 분명 있다
classification의 경우 보통 accuracy를 사용하는데 class imbalance 문제같은 경우 F1-score를 쓰기도 함
regression은 MAE, MSE를 쓰는데
Ranking이 중요한 추천시스템같은 경우 MRR,NDCG,MAP같은 색다른 평가지표가 있음..(점수 높은 것이 상단에 노출되어야 의미 있어서 순서를 고려한 평가지표)
8. metric을 잘 이해해야하는 이유
내가 만든 모델의 accuracy가 90%이다라고 주장하는 사람이 있는데 그냥 믿으면 될까?
오른쪽을 자세히 보면 0을 1700개 맞추고 1은 100개 맞춤..
이게 진짜 오른쪽이 더 좋다고 말할 수 있을까?
자세히보면 오른쪽은 0이 1800개 있고 1이 200개 있어서 class가 imbalance함
binary classification이라는 것은 0인 class는 0이라 말하고 1인 class는 1이라 말할 수 있어야하는데
accuracy만 높이려고 한다면 오른쪽 같은 경우 그냥 전부 0이라고만 말해도 1800/2000=90%임
그래서 metric을 정확히 이해하여 나의 문제 상황을 정확하게 고려한 metric으로 모델을 평가하는 것이 대단히 중요하다.
'프로그래밍 > Pytorch' 카테고리의 다른 글
pytorch에서 data augmentation은 어떻게 이해해야하는가 (0) | 2023.04.27 |
---|---|
pytorch dataset과 dataloader 기본개념 재활 (0) | 2023.04.27 |
pytorch에서 loss 기본개념 재활 (0) | 2023.04.26 |
pytorch를 이용한 inference process 기본기 완벽하게 이해하기 & pytorch lightning (0) | 2023.04.24 |
pytorch를 이용한 training process 기본기 완벽하게 이해하기 (0) | 2023.04.24 |