시험공부빅데이터분석
← 보드nn.Module로 모델 만들기 · 5/8

nn.Parameter — 학습할 값은 "등록"해야 해요

모델이 학습한다는 것은 W와 B 같은 숫자를 조금씩 고친다는 뜻이에요. 그러려면 모델이 "내가 고쳐야 할 숫자는 이것들이야"라고 알고 있어야 해요. 이 목록에 올리는 일을 등록이라고 해요.

한 줄 정의

nn.Parameter로 감싼 Tensor를 모델의 속성(self.이름)에 붙이면 학습할 파라미터로 자동 등록돼요. 등록된 것은 requires_grad=True가 기본이고 model.parameters()에 나와요.

비유

출석부와 같아요. 출석부(parameters())에 이름이 올라야 선생님(옵티마이저)이 불러 주고 점검해요. 일반 Tensor는 출석부에 이름이 없어서, 아무리 열심히 계산에 참여해도 업데이트 명단에서 빠져요.

class RegistrationModel(nn.Module): def __init__(self): super().__init__() self.tensor_w = torch.tensor(2.0, requires_grad=True) self.parameter_w = nn.Parameter(torch.tensor(2.0)) def forward(self, x): return self.tensor_w * x + self.parameter_w * x model = RegistrationModel() print("등록된 이름:", [name for name, _ in model.named_parameters()])
등록된 이름: ['parameter_w']
코드 줄무슨 뜻
torch.tensor(2.0, requires_grad=True)일반 Tensor예요. 기울기는 계산되지만 모델 파라미터로는 등록되지 않아요.
nn.Parameter(torch.tensor(2.0))"학습할 값"이라고 표시한 Tensor예요. self에 붙이면 자동 등록돼요.
model.named_parameters()(이름, 값) 쌍을 차례로 보여줘요. parameters()는 값만 보여줘요.

결과에 parameter_w만 나와요. 교수님은 "사람들이 흔히 빠지는 함정"이라고 했어요. 나중에 model.parameters()로 한꺼번에 업데이트할 때 tensor_w는 빠져서 학습이 안 되기 때문이에요.

nn.Linear 안에 있는 weight와 bias는 이미 nn.Parameter로 되어 있어요. 그래서 nn.Linear를 쓰면 등록 걱정을 안 해도 돼요. 층이 많아지면 어느 층의 어떤 값인지 이름과 함께 봐야 하니까 named_parameters()를 더 많이 써요. 보통은 값보다 크기(shape)를 찍어서 확인해요.

이렇게 고르세요 (풀이 요령)

"기울기(grad)가 계산되는 것"과 "model.parameters()에 포함되는 것"은 다른 이야기예요. requires_grad=True인 일반 Tensor는 기울기는 계산되지만 파라미터에 포함되지 않아요. nn.Parameter를 모델 속성에 할당해야 등록돼요.

잠깐 확인 — self.fc = nn.Linear(3, 2)를 쓴 모델에서 named_parameters()에 나오는 이름 2개는?

fc.weight와 fc.bias예요. 속성 이름(fc) 뒤에 층 안의 이름이 점으로 이어져요.

다음 카드 → 층 쌓기 — ReLU, nn.Sequential, 다층 모델

자료: 3·6주차 · Week03_Class_for_PyTorch(업데이트), Week04_Autograd_Loss_Optimizer · 6주차 녹취(빅데이터06), 7주차 녹취(빅데이터07)