← 보드손실 함수와 옵티마이저 · 6/7
손으로 연습하기 — 점수 계산과 한 번의 업데이트
시험은 "결과 예측" 유형이 나오니 두 가지를 손으로 계산해 보세요. 풀이도 같이 적었어요.
연습 1 — 예측 [1., 2., 3.], 정답 [2., 2., 5.]일 때 nn.MSELoss()의 값은?
- 오차 = [−1, 0, −2]
- 제곱 = [1, 0, 4]
- 평균 = 5 ÷ 3 = 약 1.67 (실행 결과
tensor(1.6667))
연습 2 — weight가 0.5이고 기울기가 4일 때, 학습률 0.1로 optimizer.step()을 한 번 하면 weight는?
- 0.5 − 0.1 × 4 = 0.1
- 기울기가 양수니까 weight가 줄어요.
연습 3 — 아래 코드에서 step() 직전 weight.grad와 직후 weight는? (weight=1, 입력 2, 정답 4, lr=0.1)
- 직전
weight.grad= −8 - 직후 weight = 1.8
자주 헷갈리는 세트를 마지막으로 정리해요.
| 이름 | 역할 | 한 줄 코드 |
|---|---|---|
| 손실 함수 (criterion) | 틀린 정도를 점수로 | loss = criterion(prediction, target) |
| backward | 기울기 계산 | loss.backward() |
| 옵티마이저 (optimizer) | 기울기로 파라미터 갱신 | optimizer.step() |
| 학습률 (lr) | 한 걸음의 크기 | optim.SGD(..., lr=0.1) |
이렇게 고르세요 (풀이 요령)
숫자 결과 문제는 "예측값 → loss → 기울기 → 새 weight" 순서로 한 줄씩 계산하세요. 중간 숫자(예 예측 2, loss 4, 기울기 −8)를 종이에 적어 가면 실수가 줄어요.
잠깐 확인 — 옵티마이저는 모델을 만들기 전에 만들 수 있을까요?
없어요. 옵티마이저는 model.parameters()를 받아야 하는데 모델을 만들기 전에는 파라미터가 존재하지 않아요. 모델 → criterion → optimizer 순서예요.