[4주차] 8.26 목

William JO·2021년 8월 27일
1

📕(강의) Training & Inference - Loss, Optimizer, Metric

  • training과 inference process의 과정을 이해하자

Loss

  • Error Backpropagation
  • Loss = Cost = Error function
  • Pytorch에서 loss.backward()를 통해 모델의 파라미터 grad 값이 업데이트

조금 특별한 loss들

  • Focal Loss : Class Imbalance가 있는 경우, 맞춘 확률이 높은 class는 약한 loss를, 맞춘 확률이 낮은 class는 큰 loss를 줌으로서 balance 조정함.

  • Label Smoothing Loss : target의 validty가 항상 100%일 수 없다; class target label을 one hot encoding(e.g. [0,1,0, ...])하기 보단 조금 soft하게 표현, 일반화 성능을 높임(e.g. [0.025, 0.9, 0.025, ...]

Optimizer

  • 어느 방향으로, 얼마나 움직일 지?
  • gradient vector의 방향과 크기를 찾아 update 수행
  • 영리하게 움직일수록 수렴은 빨라짐.
  • Pytorch에서 criterion은 loss 값만 구하는 함수이고, 실제 update은 optimizer가 수행.

LR scheduler

  • 학습 시에 Learning rate을 동적으로 조절할 수는 없을까?
  1. Step LR
    - 특정 step마다 LR 감소

  2. CosineAnnealingLR
    - Cosine 함수 형태처럼 LR을 급격히 변경
    - local minima 탈출에 긍정적
    - 도전적인 학습 방법

  3. ReduceLROnPlateau
    - 모니터링하며 더 이상 성능 향상이 없을 때 LR 감소
    - 보편적으로 많이 씀
    - 안정적인 학습 방법

Metric

  • 모델을 평가
  • 학습에 직접적으로 사용되진 않지만 학습된 모델을 객관적으로 평가할 수 있는 지표가 필요

    Classification : Accuracy, F1-score, precision, recall, ROC&AUC ...
    Regression : MAE, MSE ...
    Ranking : MRR, NDCG, MAP ...

  • 현업에선 metric을 결정해주는 사람이 없다; 데이터 상태에 따라 metric을 직접 설정하는 연습을 해야 한다. 대회의 metric들을 경험하면서 공부하자!

Metric의 허와 실

  • data distribution이 imbalance할 경우
  • 데이터 상태에 따라 적절한 metric 선택 필요

    Accuracy : class 별로 밸런스가 적절히 분포
    F1-score : class 별 밸런스가 좋지 않아 각 class 별 성능을 잘 낼 수 있는지 확인 필요

Training Process

model.train() & model.eval()을 사용하는 이유

  • training & inference 과정에서 다른 구현을 채택하는 모델들이 존재하기 때문 e.g. Dropout, BatchNorm, etc.

optimizer.zero_grad()

  • 하지 않을 시 이전 mini-batch의 gradient가 그대로 남아있게 되고, accumulation(i.e. sum)이 된다.
  • 통상적으로 mini-batch마다의 gradient를 독립적으로 update에 사용하기 때문에 .zero_grad()가 필요

loss.backward()

  • loss의 grad_fn chain

optimizer.step()

  • optimizer가 gradient를 갖고 있는게 아니라, loss의 backprop에 의해 구해진 gradient를 control하여 parameters에 적용

Gradient Accumulation

  • batch-size를 늘리는 효과
  • 위 코드에서 optimizer.step()optimizer.zero_grad()는 2번의 step마다 수행

Inference Process

model.eval()

  • = model.train(False)

with torch.no_grad()

  • parameters update를 방지

validation? evaluation?

  • inference 과정에 validation dataset이 들어가면 그게 검증이다.

checkpoint

  • 직접 짜자.

Appendix : Pytorch Lightning

  • 현업에선 생산성이 중요한 요소로 작용
  • 충분한 이해가 바탕이 되지 않은 상태에서는 오히려 독

🔗Reference

0개의 댓글

관련 채용 정보