코드로 한 번 보기 — 학습 5줄 ★★★
위 개념을 PyTorch 코드로 쓰면 이렇게 5줄이에요. 아직 외우지 않아도 돼요. "각 줄이 어느 단계인지"만 연결해 보세요. 데이터는 y = 2x + 1을 따르는 점 5개이고, 모델이 기울기 2와 절편 1을 찾아내는 학습이에요.
위 출력은 수업 노트북의 실행 결과예요. 시작 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번이 이 순서를 그대로 보여 주고 각 줄의 역할을 물어요.
이 코드의 각 줄 설명 중 맞는 것을 고르는 문제예요. 선택지는 아래처럼 판단하면 돼요.
| 선택지 내용 | 판정 |
|---|---|
| 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 녹취 일부