← 보드Autograd — 자동으로 기울기 구하기 · 7/8
손으로 기울기 값 구하기와 자주 나는 문제 ★★
교수님이 시험을 "코드를 주고 결과를 쓰는" 객관식으로 낸다고 했어요. 이 장에서 나올 수 있는 유형은 기울기 값 계산과 누적 결과예요. 순서만 익히면 쉬워요.
- 앞으로 계산해서 예측값과 loss의 숫자를 구해요.
- loss를 w로 미분하는 식을 세워요. (예측값 − 정답)²이면 2 × (예측값 − 정답) × x예요.
- 숫자를 넣어요.
backward()가 여러 번이면 더하고, 중간에zero가 있으면 0부터 다시 시작해요.
연습 문제 두 개를 풀어 볼게요. 직접 실행해서 확인한 값이에요.
w = torch.tensor(1.0, requires_grad=True)
loss = (w * 2 - 7) ** 2
loss.backward()
print(loss.item(), w.grad.item())
- 예측값 = 1 × 2 = 2, 정답 7이니 loss = (2 − 7)² = 25
- 기울기 = 2 × (2 − 7) × 2 = −20
- 출력은
25.0 -20.0이에요.
w = torch.tensor(2.0, requires_grad=True)
for i in range(3):
L = w ** 2
L.backward()
print(w.grad.item())
- 매번 기울기 2w = 4가 새로 계산되지만 지우지 않아서 계속 더해져요.
- 출력은
4.0,8.0,12.0이에요.
마지막으로 교수님 자료의 오류 점검표를 요약해요. 증상이 나오면 원인을 고르는 문제가 가능해요.
| 증상 | 원인 |
|---|---|
.grad가 None | backward 전이에요 / requires_grad=False예요 / leaf가 아닌 중간 값이에요 |
| 기울기가 예상보다 커요 | 이전 기울기가 누적됐어요 (zero_grad 위치 확인) |
| 두 번째 backward에서 오류 | 같은 계산 그래프를 다시 썼어요 (forward를 다시 해요) |
| backward에서 "does not require grad" 오류 | detach(), no_grad(), .item() 등으로 계산 그래프가 끊겼어요 |
| 숫자 여러 개짜리 loss에서 오류 | 스칼라가 아니에요 (.sum(), .mean()으로 합쳐요) |
이렇게 고르세요 (풀이 요령)
Autograd 설명 보기에서 맞는 문장은 이 두 개예요. "requires_grad=True인 Tensor의 연산을 계산 그래프로 기록하고, backward()가 chain rule로 leaf Tensor의 기울기를 계산해 .grad에 저장한다." "기울기는 덮어쓰이지 않고 누적되므로 매 학습 단계마다 zero_grad()로 초기화해야 한다." 반대로 "backward()가 파라미터 값까지 바꾼다"거나 "기울기는 매번 자동으로 새로 시작한다"는 보기는 오답이에요.
잠깐 확인 — 학습할 때 기울기를 매번 0으로 만들지 않으면 어떤 일이 생기나요?
이전 단계의 기울기가 계속 더해져서 기울기가 실제보다 커져요. 그러면 파라미터를 엉뚱한 방향과 크기로 업데이트하게 돼요.
다음 카드 → 이 장 3줄 요약
자료: 6주차 · Week04_Autograd_Loss_Optimizer · 6주차 녹취(빅데이터06), 7주차 녹취(빅데이터07)