모든 op 가 node 를 만들어
requires_grad=True 인 tensor 에 op 를 적용하면 PyTorch 가 두 가지를 아는 graph node 를 만들어: 어떤 op 가 이 tensor 를 만들었는지 (grad_fn) 와 어느 input 이 op 에 들어갔는지 (backward 가 그것들로 걸어 돌아갈 수 있게).
직접 inspect 가능:
- Leaf tensor — 직접 만든 (예:
nn.Parameter,torch.tensor(..., requires_grad=True)).grad_fn은None,is_leaf는 True. gradient 가 land 하는 곳. - Intermediate tensor — op 의 output.
grad_fn이 backward 함수 (AddBackward0,MulBackward0등) 가리키고, leaf 아님. default 로 자기 .grad 안 저장 — leaf 만 저장.
graph 를 backward 로 걷기
loss.backward() 호출하면 autograd 가 loss 에서부터 연결된 모든 node 를 grad_fn link 로 추적. 각 node 가 local Jacobian (정확히는 vector-Jacobian product) 계산법 알고, chain rule 이 그것들을 모든 leaf 의 final gradient 로 조합.
한 가지 미묘함: default 로 graph 가 backward 직후 해제 메모리 절약 위해. 같은 graph 에 backward 다시 호출 필요하면 retain_graph=True 넘겨. 보통 안 필요.