본문 바로가기
TIL/Boostcamp AI tech

[Boostcamp]Week4-Day18. Training & Inference :: seoftware

by seowit 2021. 8. 26.
목차
1. 강의정리
    1-1. P stage - chap7. Training & Inference 1
    1-2. P stage - chap8. Training & Inference 2
2. 피어세션 정리
3. 데일리 회고 

📜 강의 정리 


[P stage] Chapter7. Training & Inference 1

 

🌈 Loss, optimizer, metric에 대해 알아보자

 

1. Loss

  • loss backpropagation : output과 target 간의 loss를 구한 후 역전파
  • loss function 선택 중요
  • nn.Modules Family
  • loss.backward() : 이 함수가 실행되면 모델의 파라미터의 grad 값이 업데이트. loss부터 input까지 체인 연결
  • 조금 특별한 loss
    • Focal loss : Class0Imbalance 문제가 있는 경우, 맞춘 확률이 높은 Class는 조금의 loss를,
      맞춘 확률이 낮은 Class는 Loss를 훨씬 높게 부여
    • Label smoothing loss : Class target label을 Onehot 표현으로 사용하기 보다는 조금 Soft하게 표현해서 일반화 성능을 높이기 위함 

2. Optimizer

  • 어느 방향으로(→dw), 얼마나 움직일지(→learning rate)
  • LR Scheduler : learning rate을 동적으로 조정
    • StepLR : step size만큼 감소
    • CosineAnnealingLR : cosine 함수 형태로 LR을 조정. 변화를 급격하게 줌으로써 local minimum을 빠져나가기 쉬움
    • ReduceLROnPlateau : 학습 과정을 모니터링 하다가 성능 향상이 없으면 LR 감소

3. Metric

  • 학습에 직접적인 영향을 미치지는 않고, 모델을 평가하기 위해 사용
  • 분야별 metric
    • classification : accuracy, f1-score, precison, recall, ROC&AUC
    • regression : MAE, MSE
    • ranking - 추천 시스템 : NRR, NDCG, MAP
  • 선택기준
    • Class 별 분포 고를 때는 "Accuracy"
    • Class 별 밸런스가 좋지 않아서 각 class 별로 성능 확인이 필요할 때는 "F1-Score"

[P stage] Chapter8. Training & Inference 

 

🌈process에 대해 알아보자

 

1. Training Process

  • model.train() : batchnorm, dropout 등의 상태를 train mode로 전환
  • optimizer.zero_grad()
  • loss = criterion(outputs, labels) : loss를 마지막으로 chain 생성
  • loss.backward() : 위에서 생성된 chain을 이용해서 backward 진행. grad 계산
  • optimizer.step() : 위에서 계산한 gradient를 parameter에 업데이트
  • 2. Gradient Accumulation
    • GPU memory가 충분하지 않아서 batch size를 작게 설정해야하는데, 큰 batch가 필요할 때 사용
    • zero_grad()를 batch마다 실행하지 않고 n번에 한 번씩 수행
    • 코드
    • NUM_ACCUM = 2 optimizer.zero_grad() for epoch in range(2): running_loss = 0.0 for i, data in enumerate(train_loader): inputs, labels = data outputs = model(inputs) loss = creterion(outputs, labels) / NUM_ACCUM loss.backward() if i%NUM_ACCUM == 0: optimizer.step() optimizer.zero_grad()

2. Inference Process

  • model.eval() : batchnorm, dropout 등의 상태를 inference mode로 전환
  • with torch.no_grad() : set_grad_enabled(False)
  • checkpoint : toch.save(model.state_dict(), f"{acc}_{epoch}.ckpt")

 

🙋‍♀️피어세션

https://luck-tuberose-cf9.notion.site/2021-08-26-4cfe07cbab664173bddaacb414bedd66

 

피어세션(2021/08/26)

현재 상황

luck-tuberose-cf9.notion.site


💌 데일리 회고

리더보드를 보고 마음이 급해져서 제대로 공부 안하고 이것 저것 시도해보는 것 같다.

이렇게 하는게 오히려 시간 낭비가 될 것 같다. 생각을 하고 계획을 세운 후에, 차근차근 쌓아 올려야겠다.

댓글