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

epoch 평균 loss — 마지막 배치가 작을 때 ★★

한 epoch이 끝나면 "이번 epoch의 평균 loss"를 보고 싶어요. 그런데 단순히 배치 loss들을 평균 내면 안 돼요. 배치 크기가 다르면(예 20, 20, 20, 20, 10) sample이 적은 마지막 배치가 같은 비중으로 계산돼서 값이 틀어져요. 그래서 교수님은 "각 배치 loss에 그 배치의 sample 수를 곱해서 모두 더한 뒤, 전체 sample 수로 나눈다"고 했어요.

비유 — 반별 평균 점수

1반 학생이 40명, 2반이 10명이에요. 두 반의 평균이 각각 80점, 60점일 때 전교 평균은 (80+60)/2 = 70점이 아니라 (80×40 + 60×10)/50 = 76점이에요. 인원이 많은 반이 더 크게 반영돼야 하기 때문이에요. 배치 loss도 똑같아요.

배치 3개의 크기가 4, 4, 2이고 각각의 평균 loss가 3, 6, 9라고 해 봐요.

방법계산결과
단순 평균 (틀림)(3 + 6 + 9) ÷ 36.0
sample 수로 가중 (맞음)(3×4 + 6×4 + 9×2) ÷ 10 = (12 + 24 + 18) ÷ 105.4

코드의 해당 줄은 이래요.

batch_samples = batch_x.size(0) # 이 배치의 sample 수 total_loss += loss.item() * batch_samples # loss × sample 수를 계속 더함 total_samples += batch_samples # 사용한 sample 수를 계속 더함 ... epoch_loss = total_loss / total_samples # epoch 끝에서 한 번 나눔
코드 줄무슨 뜻
batch_x.size(0)batch_x의 첫 번째 차원 크기예요. 이 배치에 sample이 몇 개인지 알려 줘요. (4, 2)이면 4.
loss.item()그 배치의 평균 loss(숫자 하나)예요.
loss.item() * batch_samples평균에 개수를 다시 곱해서 그 배치의 loss 총합으로 되돌려요.
total_loss / total_samples모든 loss 총합을 전체 sample 수로 나눠서 올바른 epoch 평균을 구해요.

이것은 학습(backward, step)에는 영향이 없고 기록용이에요. 숫자만 필요하니까 .item()으로 순수 숫자를 꺼내서 쌓아요. 교수님은 "어려운 수학은 아니고 산수"라고 했어요. 시험에는 개념으로 나올 수 있으니 왜 이렇게 하는지만 알아 두세요.

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

"마지막 배치가 작을 때 epoch 평균 loss를 구하는 올바른 방법"은 각 배치 loss에 sample 수를 곱해 합산하고 전체 sample 수로 나눈다예요. "배치 loss를 단순 평균한다"는 오답이에요.

잠깐 확인 — 크기 4, 4, 2인 배치의 loss가 3, 6, 9일 때 epoch 평균 loss는?

(3×4 + 6×4 + 9×2) ÷ 10 = 5.4예요.

다음 카드 → 샘플 시험 5번 손으로 풀기 ★★★

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