Module 안 두 종류 tensor
- Parameter (
nn.Parameter) — learnable.model.parameters()에 등장. optimizer 가 update. - Buffer (
self.register_buffer(name, tensor)로 등록) — non-learnable 이지만 stateful. 예: BatchNorm 의 running mean/var, position encoding, attention mask, teacher model 의 EMA weight.
둘 다 state_dict() 에 저장되고 둘 다 .to(device) 따라 이동. 차이는 optimizer 가 손대는지만.
state_dict — universal serialization 형식
model.state_dict() 가 parameter / buffer 이름을 그 tensor 에 매핑하는 OrderedDict 반환. load_state_dict(d) 가 복원. 이게 model 저장의 추천 형식 — framework-version-tolerant: model 클래스가 진화해도 이름과 shape 가 일치하는 한 (또는 mismatch 허용 위해 strict=False) 새 architecture 에 weight 로드 가능.
Freezing
parameter freeze (optimizer 가 update 안 하게) 위해선 p.requires_grad = False. transfer learning 시작 — pretrained backbone freeze, 새 head 만 train. optimizer 는 여전히 parameter 봐 (model.parameters() 에 있음) 만 gradient 없으니 update 할 게 없음.