default 로 leaf 만 .grad 받음
Autograd 가 두 종류 tensor 를 강하게 구분:
- Leaf tensor — 너 (또는
nn.Parameter) 가 만든 것. graph 의 input, op 의 output 아님..grad가 그것에 대한 loss 의 gradient. - Intermediate tensor — op 의 output. PyTorch default 행동은 거기 gradient 안 저장 — intermediate 어디나 저장하면 메모리 폭발.
디버깅 중에 intermediate (예: layer 3 의 output) 의 gradient 보고 싶으면 두 옵션:
x.retain_grad()— backward 전에 intermediate 에 호출하면 PyTorch 가 그 gradient 도 저장.x.register_hook(callback)— gradient 가 흐를 때 호출되는 함수 등록. 저장 안 함; log 또는 modify 가능.
정상 training loop 에선 둘 다 안 건드려. '어, 왜 이 layer 가 학습 안 되지' 모먼트에 진단 위해 잡는 거.