시험공부빅데이터분석
← 보드딥러닝이 뭐예요 + 학습 과정 큰 그림 · 9/11

코드로 한 번 보기 — 학습 5줄 ★★★

위 개념을 PyTorch 코드로 쓰면 이렇게 5줄이에요. 아직 외우지 않아도 돼요. "각 줄이 어느 단계인지"만 연결해 보세요. 데이터는 y = 2x + 1을 따르는 점 5개이고, 모델이 기울기 2와 절편 1을 찾아내는 학습이에요.

import torch from torch import nn import torch.optim as optim x_train = torch.arange(-2.0, 3.0).reshape(-1, 1) y_train = 2 * x_train + 1 model = nn.Linear(1, 1) criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.02) for epoch in range(201): optimizer.zero_grad() prediction = model(x_train) loss = criterion(prediction, y_train) loss.backward() optimizer.step() if epoch % 20 == 0: print(f"epoch={epoch:3d} loss={loss.item():.6f} " f"w={model.weight.item():.4f} b={model.bias.item():.4f}")
epoch= 0 loss=20.231350 w=-0.7189 b=-0.5958 epoch= 20 loss=1.161789 w=1.4870 b=0.2947 epoch= 40 loss=0.127610 w=1.9032 b=0.6882 epoch= 60 loss=0.021393 w=1.9817 b=0.8622 epoch= 80 loss=0.004053 w=1.9966 b=0.9391 epoch=100 loss=0.000787 w=1.9993 b=0.9731 epoch=120 loss=0.000154 w=1.9999 b=0.9881 epoch=140 loss=0.000030 w=2.0000 b=0.9947 epoch=160 loss=0.000006 w=2.0000 b=0.9977 epoch=180 loss=0.000001 w=2.0000 b=0.9995 epoch=200 loss=0.000000 w=2.0000 b=0.9995

위 출력은 수업 노트북의 실행 결과예요. 시작 weight가 랜덤이라 실행할 때마다 처음 숫자는 조금씩 달라요. 하지만 loss가 0에 가까워지고 w는 2, b는 1에 가까워지는 모양은 늘 같아요.

코드 줄어느 단계 / 무슨 뜻
model = nn.Linear(1, 1)모델 만들기. 입력 1개 → 출력 1개, weight 1개와 bias 1개가 랜덤으로 시작
optimizer.zero_grad()이전 바퀴에서 저장해 둔 gradient를 지워요(0으로). 안 지우면 계속 쌓여요
prediction = model(x_train)Forward — 예측값 계산
loss = criterion(prediction, y_train)Loss — 예측과 정답의 차이를 숫자 하나로
loss.backward()Gradient — 각 weight의 기울기를 계산해서 저장 (weight 값은 아직 그대로)
optimizer.step()Update — 저장된 기울기로 weight 값을 실제로 고침
for epoch in range(201):이 5줄을 201번 반복. 데이터 5개를 한 번에 다 넣으니 epoch 하나에 step 하나
if epoch % 20 == 0:epoch를 20으로 나눈 나머지가 0일 때만(0, 20, 40, …) 찍어요

이 순서 zero_grad → forward → loss → backward → step이 학습의 기본 틀이에요. 이 시험 샘플 5번이 이 순서를 그대로 보여 주고 각 줄의 역할을 물어요.

시험 샘플 5번 — 각 함수의 역할

이 코드의 각 줄 설명 중 맞는 것을 고르는 문제예요. 선택지는 아래처럼 판단하면 돼요.

선택지 내용판정
optimizer.step()은 저장된 기울기로 optimizer에 전달된 파라미터를 갱신한다맞음 (정답)
loss.backward()는 기울기를 계산한 뒤 파라미터 값까지 갱신한다틀림. backward는 기울기를 계산해 저장만 해요. 값 갱신은 step
optimizer.zero_grad()는 파라미터 값을 0으로 만든다틀림. 0으로 만드는 것은 저장된 기울기예요. 파라미터 값은 그대로
criterion(...)은 손실을 계산하고 이전 기울기를 초기화한다틀림. 손실 계산만 해요. 기울기 초기화는 zero_grad
optimizer.step()은 기울기를 새로 계산하고 기존 기울기를 지운다틀림. 계산은 backward, 지우기는 zero_grad. step은 갱신만
외우기 팁

"지우고(zero_grad) → 예측하고(model) → 재고(criterion) → 방향 구하고(backward) → 고친다(step)". 각자 한 가지 일만 해요. 기울기를 구하는 건 backward, 값을 바꾸는 건 step, 기울기를 지우는 건 zero_grad예요.

시험엔 이렇게 써요 — 이렇게 고르세요

loss.backward()는 각 파라미터의 기울기를 계산해 저장하고, optimizer.step()은 저장된 기울기로 파라미터 값을 갱신하며, optimizer.zero_grad()는 이전 기울기를 초기화한다. "한 줄이 두 가지 일을 한다"는 선택지는 대개 오답이에요.

잠깐 확인 — 파라미터 값을 실제로 바꾸는 줄은 backward와 step 중 어느 것인가요?

step이에요. backward는 기울기를 계산해서 저장하기만 해요.

다음 카드 → 학습과 추론, 그리고 앞으로 배울 지도

자료: 4주차 · 딥러닝 모델 Training 과정.pdf, Week04 Autograd_Loss_Optimizer.ipynb · 빅데이터04(4주차) 녹취, 빅데이터03·07 녹취 일부