딥러닝 입문자가 무심코 복붙하는 학습 루프의 한 줄 한 줄을 해부한 글입니다. optimizer.zero_grad(), loss.backward(), optimizer.step() 이 세 줄의 순서가 왜 중요한지, 그리고 zero_grad를 빠뜨리면 왜 그래디언트가 누적되어 학습이 망가지는지를 autograd 동작 원리로 설명합니다. 핵심 인사이트는 PyTorch가 텐서 연산 그래프를 동적으로 쌓아두었다가 backward 호출 시 역전파한다는 점, 그리고 forward와 backward, 파라미터 갱신이 명확히 분리된 단계라는 것입니다. 또한 model.train()과 model.eval() 전환, torch.no_grad()로 검증 단계의 메모리와 연산을 아끼는 이유, 그래디언트 누적을 의도적으로 활용해 작은 GPU에서 큰 배치 효과를 내는 기법까지 다룹니다. 마법처럼 외우던 코드를 원리로 이해하게 만들어, 디버깅과 커스터마이징 역량을 한 단계 끌어올려 줍니다.