← 보드Autograd — 자동으로 기울기 구하기 · 2/8
requires_grad, backward(), .grad — 가장 기본 예제 ★★★
PyTorch에게 "이 값의 기울기가 필요해"라고 알려 주는 표시가 requires_grad=True예요. 이 표시가 붙은 Tensor에서 시작한 계산은 PyTorch가 전부 기록해 두었다가, 나중에 기울기를 한꺼번에 계산해요.
requires_grad=True: "이 값부터 계산 과정을 기록해 줘."L.backward(): 마지막 결과 L에서 거꾸로 거슬러 가며 기울기를 계산해서 저장해요.w.grad: 저장된 기울기를 꺼내 보는 곳이에요. backward 전에는None(아직 없음)이에요.
w = torch.tensor(3.0, requires_grad=True)
L = w ** 2
print("w:", w)
print("L:", L)
print("backward 전 w.grad:", w.grad)
L.backward()
print("backward 후 w.grad:", w.grad)
w: tensor(3., requires_grad=True)
L: tensor(9., grad_fn=<PowBackward0>)
backward 전 w.grad: None
backward 후 w.grad: tensor(6.)
| 코드 줄 | 무슨 뜻 |
|---|---|
w = torch.tensor(3.0, requires_grad=True) | 값이 3.0인 w를 만들고 기울기를 추적하라고 표시해요. |
L = w ** 2 | L = w² = 9. 이 계산도 기록돼요. 출력의 grad_fn이 "기록 중"이라는 표시예요. |
print(w.grad) (첫 번째) | 아직 backward 전이라 None이에요. |
L.backward() | L을 w로 미분해요. L = w²이므로 2w = 2×3 = 6을 계산해서 w.grad에 저장해요. |
print(w.grad) (두 번째) | tensor(6.)이에요. |
꼭 알아둘 점이 두 가지 있어요. 첫째, backward()는 w.backward()가 아니라 마지막 값 L에 걸어요. 둘째, backward()는 기울기를 계산해서 저장만 해요. w의 값(3.0)은 그대로이고, 값을 바꾸는 일은 나중에 업데이트(옵티마이저)가 해요.
외우기 팁
미분을 몰라도 시험은 풀 수 있어요. 교수님도 chain rule로 구하든 한 번에 미분하든 값만 맞으면 된다는 취지로 말했어요. 필요한 규칙은 딱 3개예요. ① wⁿ의 기울기는 n × wⁿ⁻¹ (w²는 2w, w³는 3w², w⁴는 4w³) ② 상수 곱하기는 그대로 따라 나와요(3w는 3) ③ 상수만 더한 것은 사라져요(w+1은 1).
이렇게 고르세요 (풀이 요령)
"backward()를 호출하면 무엇이 일어나는가"는 기울기를 계산해 .grad에 저장한다가 정답이에요. "파라미터 값까지 갱신한다"는 보기는 오답이에요. 갱신은 optimizer.step()이 해요.
잠깐 확인 — w=3, loss=(w−1)²에서 backward 후 w.grad는? 그리고 w의 값은 바뀔까요?
w.grad는 2×(3−1) = 4예요. w는 3 그대로예요. backward는 기울기만 계산하고 w 값은 바꾸지 않아요.
다음 카드 → 계산 그래프와 chain rule — 뒤에서 앞으로 곱하기 ★★
자료: 6주차 · Week04_Autograd_Loss_Optimizer · 6주차 녹취(빅데이터06), 7주차 녹취(빅데이터07)