즉시 실행되는 Python에서 쓰는 역방향 자동 미분
Autograd는 PyTorch의 자동 미분 엔진이야. 하는 일은 분명해. 손실 같은 스칼라를 계산하면, 그 값을 만든 연산을 거꾸로 따라가며 기울기 추적을 요청한 모든 리프 텐서에 기울기를 누적해.
여기서 핵심은 역방향 자동 미분이야. 순방향 자동 미분은 입력이 적고 출력이 많을 때 유리하지만, 역방향 자동 미분은 입력이 많고 출력이 하나일 때 유리해. 매개변수는 1억 개여도 손실은 스칼라 하나인 딥러닝 문제에 역방향 방식이 잘 맞는 이유지.
'동적 그래프'로 얻는 것
PyTorch는 그래프를 미리 고정하지 않고 순전파할 때마다 새로 만들어. 덕분에 다음이 가능해:
forward()안에서 if/else, while, for 같은 Python 제어 흐름을 쓸 수 있어. 그래프에는 해당 입력이 실제로 거친 경로만 반영돼.- print, breakpoint, pdb로 디버깅할 수 있어. 순전파가 그대로 Python 코드니까.
- 별도로 유지를 요청하지 않으면 역전파 뒤에 그래프를 버려. 그래서 메모리 사용량이 끝없이 늘지 않아.
물론 비용도 있어. 동적 그래프는 미리 최적화할 기회가 적어서 정적 그래프보다 구성 비용이 조금 더 들어. 뒤에서 배울 torch.compile()은 동적 실행의 사용성을 유지하면서 정적 그래프의 속도를 끌어내지만, autograd 자체는 여전히 동적으로 작동해.