- Training(학습)단계에 대한 강의 정리입니다.
학습 프로세스
Loss - Optimizer - Metric
Optimizer
Loss는 Loss를 발생시키는 일만 한다. Loss값을 업데이트하는 주체는 Optimizer이다.
LR Scheduler
고정된 크기만큼의 lr로 계속 학습한다면 올바른 학습을 하기 어렵거나 많은 시간이 소요될 수 있다. 이때 lr을 동적으로 조절하도록 돕는 LR 스케줄러를 사용할 수 있다. 3가지 스케줄러를 소개해보려한다.
1. StepLR
가장 다루기 쉬운 스케줄러로, 직접 설정한 특정 step마다 lr이 감소한다.
scheduler = torch.optim.lr_Scheduler.StepLR(optimizer, step_size=2, gamma=0.1)
2. CosineAnnealingLR
코사인 함수 형태처럼 움직여 lr을 급격히 변경하면서 움직인다. 빠른 편이다.
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10, eta_min=0)
3. ReduceLROnPlateau
* 참고
가장 많이 쓰이는 스케줄러로 안정적이다.(큰 변화를 꾀하려면 위의 코사인 스케줄러가 괜찮은 선택일 것이다.)
더 이상 성능 향상이 없을 때 lr을 감소시킨다. 성능 향상의 정도를 체크하는 파라미터를 설정해야한다.
val_loss가 epoch 5동안 1e-3 이하로 감소하면 learning rate를 절반으로 감소시킨다.
import torch.optim as optim
epochs = 300
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.5, patience=5, threshold=1e-3)
for epoch in range(epochs):
train(...)
val_loss = validate(...)
scheduler.step(val_loss) #scheduler.step에 input으로 metric을 넣어주어야 한다.
Metric의 허와 실
데이터 클래스가 매우 불균형한 데이터셋이 있다고 하자. 1000개의 데이터가 있을 때 900개가 1이고, 100개가 0으로 레이블링되어 있다고 하자. 그럼 이 상태에서 모델을 만들 때 모든 데이터를 1로 예측하면 정확도는 90%가 된다. 하지만 0으로 분류되는 데이터는 100개 중 단 하나도 맞추지 못한, 성능이 좋지 않은 모델이다.
클래스 별로 데이터가 골고루 분포되어 있다면 Accuracy를 metric으로 사용하면 된다.
그러나 class imbalance 문제가 있는 데이터셋이라면 F1-Score를 metric으로 권장한다. 각 클래스 별로 성능을 잘 낼 수 있는지 확인이 필요하기 때문이다.
'AI > AITech 3기' 카테고리의 다른 글
[Week8] 2. 자연어 처리 Part 2 (0) | 2022.03.20 |
---|---|
[Week8] 1. 자연어처리 Part 1 (0) | 2022.03.18 |
[이미지 분류] 3강 Dataset (0) | 2022.02.21 |
[2주차 심화과제] Transfer Learning & Hyper Parameter Tuning (0) | 2022.02.19 |
[DL Basic] 5강 Modern CNN - 1x1 convolution의 중요성 (0) | 2022.02.18 |