pytorch에서 optimizer & metric 기본개념 재활

1. optimizer는 무엇일까

 

loss는 gradient를 발생시키지만 gradient로부터 parameter를 업데이트시키는 것이 optimizer

 

업데이트하는 방식에 따라 다른 특징을 보이며 다른 성능을 나타낸다.

 

어떤 것을 선택하느냐에 따라 수렴속도나 수렴의 안정성에 차이가 있을 수 있어 신중하게 선택할 필요가 있다

 

loss가 gradient인 weight에 대한 변화율을 발생시키고 parameter를 업데이트하는 것은 optimizer

 

2. learning rate

 

learning rate는 계산된 gradient로부터 parameter를 얼마나 업데이트시킬지 결정하는 요소중에 하나로

 

학습 중에 고정시켜 사용할 수 있지만 그렇게 한다면,

 

고차원의 함수를 학습하고자 하는 딥러닝에서는 global minimum을 못찾을 가능성이 높다

 

반면 학습 중에 learning rate를 변화시킬 수 있으면 유연하게 global minimum을 찾을 수 있을 것

 

왼쪽이 learning rate가 고정 #오른쪽이 learning rate를 변화시킴

 

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을 빠르게 탈출

 

경험상 얘가 꽤 괜찮

 

cosineannealingLR의 learning rate 변화

 

 

T_max가 iteration 횟수를 결정하나봄

 

 

6. ReduceLROnPlateau

 

일반적으로 자주 쓴다고?

 

성능향상이 더 이상 안보이면 기존 learning rate를 버리고 감소시켜 새로운 learning rate로 사용

 

성능향상을 감시하는 loss나 metric을 input으로 받아야한다는 특징이 있음

 

optimizer에 momentum을 설정해야 사용할 수 있다는데?

 

optimizer에 momentum 설정되었고 scheduler.step()에 val_loss가 input으로 들어감…

 

 

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%이다라고 주장하는 사람이 있는데 그냥 믿으면 될까?

 

confusion matrix

 

 

오른쪽을 자세히 보면 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으로 모델을 평가하는 것이 대단히 중요하다.

 

TAGS.

Comments