시험공부빅데이터분석
← 보드Autograd — 자동으로 기울기 구하기 · 7/8

손으로 기울기 값 구하기와 자주 나는 문제 ★★

교수님이 시험을 "코드를 주고 결과를 쓰는" 객관식으로 낸다고 했어요. 이 장에서 나올 수 있는 유형은 기울기 값 계산과 누적 결과예요. 순서만 익히면 쉬워요.

  1. 앞으로 계산해서 예측값과 loss의 숫자를 구해요.
  2. loss를 w로 미분하는 식을 세워요. (예측값 − 정답)²이면 2 × (예측값 − 정답) × x예요.
  3. 숫자를 넣어요.
  4. backward()가 여러 번이면 더하고, 중간에 zero가 있으면 0부터 다시 시작해요.

연습 문제 두 개를 풀어 볼게요. 직접 실행해서 확인한 값이에요.

w = torch.tensor(1.0, requires_grad=True) loss = (w * 2 - 7) ** 2 loss.backward() print(loss.item(), w.grad.item())
w = torch.tensor(2.0, requires_grad=True) for i in range(3): L = w ** 2 L.backward() print(w.grad.item())

마지막으로 교수님 자료의 오류 점검표를 요약해요. 증상이 나오면 원인을 고르는 문제가 가능해요.

증상원인
.grad가 Nonebackward 전이에요 / 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)