본문 바로가기
C.W.K.
Stream
Lesson 06 of 08 · published

학습 중 확인할 지표

~18 min · metrics, logging, monitoring

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

반드시 기록할 지표

최소한 단계별 학습 손실, 에폭별 검증 손실, 에폭별 검증 정확도(또는 과제에 맞는 지표), 단계별 학습률은 기록해야 해. 이 4개만 있어도 거의 모든 문제를 디버깅할 수 있어.

여기에 단계별 기울기 노름(기울기 폭주 감지), 클래스별 정확도(불균형 감지), 초당 예시 처리량(데이터 로딩 성능 저하 감지)도 추가하는 걸 추천해.

팁: 지표는 그래프로 그려. 기록 파일의 숫자는 사후 분석에 쓰이고, 그래프는 문제를 진단하는 데 쓰여. 일회성 작업이라면 Jupyter 셀에서 matplotlib을 써도 괜찮지만, 제대로 진행하는 작업이라면 W&B나 TensorBoard를 사용해.

에폭 평균과 이동 평균

학습 손실은 평활한 이동 평균으로 그리는 게 좋아. 한 단계의 손실값은 잡음이 너무 많거든. 0.99 * old + 0.01 * new는 무난한 기본값이야. 검증 손실은 에폭마다 한 번 측정하고 원시 값을 그대로 그려.

정확도만 믿지 마

정확도는 데이터 불균형, 보정 문제, 극단적인 사례에서 발생하는 실패를 숨겨. 분류에서는 클래스별 정밀도와 재현율을, 회귀에서는 MAE, RMSE, 분위수 오차를, 생성에서는 BLEU, ROUGE, 정확 일치를 항상 확인해. 검증 세트의 혼동 행렬도 에폭마다 확인해야 해.

원칙: 숫자 하나만 보면 나머지 모든 숫자 때문에 놀라게 돼. 모델이 정확도만 보면 괜찮아 보이는데 소수 클래스에서 무너졌다는 사실을 처음 발견하는 순간, 팀과 쌓은 신뢰를 일주일치 잃을 수 있어.

Code

평활화한 학습 손실의 단계별 기록·python
smooth_loss = None
for step, (xb, yb) in enumerate(train_loader):
    opt.zero_grad()
    loss = loss_fn(model(xb.to(device)), yb.to(device))
    loss.backward(); opt.step()

    val = loss.item()
    smooth_loss = val if smooth_loss is None else 0.99 * smooth_loss + 0.01 * val
    if step % 50 == 0:
        print(f"step {step:6d}  loss {val:.4f}  smooth {smooth_loss:.4f}  lr {opt.param_groups[0]['lr']:.2e}")
클래스별 정확도·python
import torch

@torch.inference_mode()
def per_class_accuracy(model, loader, num_classes, device):
    model.eval()
    correct = torch.zeros(num_classes); total = torch.zeros(num_classes)
    for xb, yb in loader:
        xb, yb = xb.to(device), yb.to(device)
        preds = model(xb).argmax(dim=-1)
        for c in range(num_classes):
            mask = (yb == c)
            correct[c] += ((preds == yb) & mask).sum().cpu()
            total[c]   += mask.sum().cpu()
    return (correct / total.clamp(min=1)).tolist()

External links

Exercise

학습 루프에 클래스별 정확도 기록을 추가해. 불균형한 데이터셋에서 실행하거나, 한 클래스를 의도적으로 다운샘플링해서 실행해. 희귀 클래스의 정확도가 전체 평균과 얼마나 벌어지는지 확인해. 집계 지표가 왜 거짓말할 수 있는지 이해하면 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.