모든 PyTorch 학습 단계는 같은 다섯 줄로 이뤄져
이 리듬은 외워 둬. 앞으로 수없이 반복해서 쓰게 되며 기본 순서는 바뀌지 않아:
optimizer.zero_grad(): 이전 단계에서 누적된 기울기를 비워.output = model(batch): 순전파를 실행하고 autograd 그래프를 만들어.loss = criterion(output, target): 스칼라 손실을 계산해.loss.backward(): 역전파를 실행해 모든 리프 텐서의.grad를 채워.optimizer.step(): 계산한 기울기에 갱신 규칙을 적용해.
이 순서는 꼭 지켜야 해. 순전파 뒤에 손실을 계산하고, 손실 뒤에 역전파하며, 기울기가 생긴 뒤에 매개변수를 갱신해. zero_grad는 이 모든 과정 전이나 바로 앞 반복이 끝난 뒤에 호출해. 순서를 섞으면 오류 없이 조용히 잘못될 수 있어.
다섯 단계를 감싸는 구조
- 에포크를 도는 바깥 반복문이 있어. 한 에포크는 데이터셋 전체를 한 번 처리하는 단위야.
- DataLoader의 배치를 도는 안쪽 반복문이 있어.
- 각 에포크가 시작될 때
model.train()을 호출해. 학습 모드가 기본값이라 반복문 전에 한 번만 호출해도 돼. model.eval()과torch.inference_mode()를 사용해 주기적으로 평가해.
이게 학습 반복문의 전체 뼈대야. 학습률 조정기, 기울기 제한, 혼합 정밀도, 기록, 체크포인팅은 모두 이 다섯 단계 주위에 쌓여.