순전파는 실제로 무슨 일을 할까
순전파는 입력 데이터 x를 모든 층에 차례로 통과시켜 출력 y를 만드는 과정이야. 출력은 로짓이나 확률, 임베딩처럼 헤드가 반환하는 어떤 값이든 될 수 있어. 이 과정에서 PyTorch는 모든 연산을 연산 그래프에 기록해 두고, 나중에 역전파가 기울기를 계산할 수 있게 해. 직접 작성한 forward() 메서드가 정확히 해야 할 일은 이것뿐이야.
forward()는 model(x)를 실행하면 자동으로 호출돼. 절대 model.forward(x)를 직접 호출하지 마. 정규화 모드, 기울기 추적, DDP 동기화 같은 훅을 건너뛰게 돼.
팁:
forward()를 작성할 때는 모든 중간 텐서의 형태를 해당 줄 옆에 적어 둬. 나중의 나와 이 모델을 디버깅할 다음 사람이 고마워할 거야.학습 모드와 평가 모드
일부 층은 학습할 때와 평가할 때 다르게 동작해. 드롭아웃은 학습 중에는 활성화되고 평가 중에는 입력을 그대로 통과시켜. 배치 정규화는 학습 중에는 배치 통계를, 평가 중에는 누적 통계를 사용해. model.train()과 model.eval()로 두 모드를 전환할 수 있어. 검증할 때 eval()을 잊으면 지표에 잡음이 생기는 유명한 버그가 발생해. 학습 루프를 살펴볼 때 다시 다룰 거야.
기울기가 필요 없으면 기록도 멈춰
추론하거나 전이 학습에서 백본을 동결했다면 순전파 호출을 torch.no_grad()로 감싸 줘. 현재 가장 빠른 경로인 torch.inference_mode()를 사용해도 돼. 그러면 PyTorch가 연산 그래프를 만들지 않아서 그래프에 묶일 메모리도 아낄 수 있어.
원칙: 순전파에서 기억할 건 3가지야.
.forward()를 직접 부르지 말고 모델을 호출해. 추론할 때는 eval()로 전환하고, 기울기가 필요 없을 때는 inference_mode()를 사용해.