시험공부빅데이터분석
← 보드학습 루프와 검증 · 1/7

학습의 큰 그림과 한 배치 5줄 ★★★

교수님이 "딥러닝 모델 Training 과정" 자료에서 정리한 학습의 큰 흐름은 이래요.

  1. 데이터 준비 — 입력 x와 정답 T
  2. Forward — 모델에 x를 넣어 예측 ŷ를 얻어요.
  3. Loss — ŷ와 정답을 비교해 틀린 정도를 숫자 하나로 만들어요.
  4. Gradient — 각 weight를 어느 쪽으로 바꾸면 loss가 줄어드는지(기울기)를 구해요.
  5. Update — 기울기의 반대 방향으로 weight를 조금 고쳐요.
  6. 다른 배치로 2~5를 계속 반복해요.
비유 — 양궁 연습

화살을 쏘고(forward), 과녁에서 얼마나 빗나갔는지 보고(loss), 어느 쪽으로 조준을 고쳐야 할지 판단하고(gradient), 실제로 조준을 고쳐요(update). 그리고 이전 판단은 잊고 다시 쏴요(zero_grad). 이 한 사이클을 수없이 반복하는 것이 학습이에요.

이 흐름을 코드로 쓰면 딱 5줄이에요. 5개를 순서대로 외워 두세요.

optimizer.zero_grad() # 1. 기울기 지우기 prediction = model(batch_x) # 2. forward로 예측 loss = criterion(prediction, batch_y) # 3. loss 계산 loss.backward() # 4. 기울기 계산 optimizer.step() # 5. 파라미터 갱신
순서코드하는 일값이 바뀌는 곳
1optimizer.zero_grad()지난 step의 기울기를 비워요.grad만 비워지고 weight는 그대로
2prediction = model(batch_x)모델이 예측값을 계산하고 계산 그래프를 만들어요weight, grad 모두 그대로
3loss = criterion(prediction, batch_y)예측과 정답을 비교해 숫자 하나(loss)를 만들어요weight, grad 모두 그대로
4loss.backward()각 파라미터의 기울기를 계산해서 .grad에 저장해요.grad가 채워져요 (weight는 그대로)
5optimizer.step()저장된 기울기로 파라미터를 갱신해요weight가 바뀌어요

왜 zero_grad가 맨 앞일까요? 6장에서 배운 것처럼 기울기는 쌓이기 때문에, 지난 step의 값을 지우고 시작해야 이번 step의 기울기만 정확히 담겨요. 교수님은 zero_grad를 backward 전에만 하면 된다고 했어요. backward 뒤에 하면 방금 구한 기울기가 사라지기 때문이에요. 관례는 맨 앞에 두는 거예요.

왜 forward와 loss를 매번 다시 할까요? 6장에서 본 것처럼 계산 그래프는 backward를 하면 풀려요. 매 반복마다 model(x)와 criterion(...)을 새로 실행하니까 새 그래프가 만들어져서 문제가 없어요. 또 업데이트된 weight로 새로 계산해야 다음 예측이 나아져요.

한 번의 학습 step 다섯 단계
교수님 슬라이드 — 한 번의 학습 Step, 다섯 단계와 "왜 zero_grad가 맨 앞?"

5줄 중 하나를 빼먹으면 이런 일이 생겨요. 교수님 자료의 오류 점검표예요.

빼먹은 것결과
zero_grad()기울기가 계속 쌓여서 실제보다 커져요. 업데이트가 이상해져요.
forward / lossbackward할 loss가 없어요(또는 지난 loss를 다시 써서 오류).
backward().grad가 비어 있어서 step()이 갱신할 것이 없어요. weight 불변.
step()기울기는 구했지만 weight가 안 바뀌어요. 학습이 안 돼요.
외우기 팁

"지우고 → 예측하고 → 채점하고 → 기울기 구하고 → 고친다". 영어로는 zero_grad → forward → loss → backward → step이에요. 교수님 슬라이드가 "핵심 한 줄"이라고 부른 순서예요.

이렇게 고르세요 (풀이 요령)

5줄이 나오면 각 줄에 한 단어를 붙여 보세요. 지우기(zero_grad), 예측(model), 점수(criterion), 기울기 계산(backward), 갱신(step). 보기가 "이 함수가 하는 일"을 다르게 말하면 오답이에요. 특히 backward = 계산, step = 갱신을 바꿔 놓은 보기가 자주 나와요.

잠깐 확인 — 학습 5단계에서 weight 값이 실제로 바뀌는 줄은 몇 번째일까요?

5번째 optimizer.step()이에요. backward까지는 기울기(.grad)만 만들어져요.

다음 카드 → epoch 반복 — 같은 데이터를 여러 바퀴 ★★

자료: 6·7주차 · Week04_Autograd_Loss_Optimizer, Week05_Dataset_DataLoader_Train_Validation(part1), 딥러닝 모델 Training 과정.pdf · 7주차 녹취(빅데이터07)