Epoch
에포크는 모델이 학습 데이터를 한 차례 모두 처리하는 과정입니다. 에포크와 배치 및 반복 횟수의 관계, 적절한 학습 에포크 수를 살펴봅니다.
에포크는 머신러닝 모델이 전체 학습 데이터셋을 한 번 완전히 통과하는 과정입니다. 에포크마다 모든 학습 예제가 모델 가중치 업데이트에 정확히 한 번씩 기여합니다. 딥러닝 모델은 한 번의 통과만으로 충분히 학습되는 경우가 드물기 때문에 여러 에포크에 걸쳐 학습하며, 일반적으로 신경망이 예측을 개선함에 따라 각 에포크에서 학습 데이터의 오류가 감소합니다.
에폭, 배치, 반복의 차이#
학습 실행의 구조를 설명하는 용어 세 가지가 있으며, 각 용어는 앞 용어 안에 포함됩니다.
- 에포크: 학습 데이터셋 전체를 한 번 통과하는 과정입니다.
- 배치: 한 단계에서 함께 처리하는 예제 그룹입니다. 데이터셋 전체가 GPU 메모리에 한 번에 들어가는 경우는 드물기 때문에 각 에포크는 보통 데이터를 섞은 뒤 배치로 나뉩니다.
- 반복: 손실 함수를 배치에 적용해 계산하고 그 기울기를 역전파로 전달한 뒤 가중치를 한 번 업데이트하는 과정입니다. "스텝"은 같은 의미로 쓰입니다.
에포크당 반복 횟수는 데이터셋 크기를 배치 크기로 나눈 뒤 올림한 값입니다. 이미지 1,000개로 구성된 데이터셋에서 배치 크기가 100이면 에포크당 10회 반복하므로, 50 에포크는 가중치 업데이트 500회에 해당합니다. PyTorch에서는 이 구조를 에포크를 반복하는 외부 루프와 DataLoader이 제공하는 배치를 반복하는 내부 루프로 구현합니다.
import torch
from torch.utils.data import DataLoader, TensorDataset
torch.manual_seed(0)
# 1,000 noisy samples of the line y = 3x + 2, served in shuffled batches of 100
x = torch.rand(1000, 1)
y = 3 * x + 2 + 0.1 * torch.randn(1000, 1)
loader = DataLoader(TensorDataset(x, y), batch_size=100, shuffle=True)
model = torch.nn.Linear(1, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.5)
for epoch in range(5): # one epoch = one full pass over all 1,000 samples
for xb, yb in loader: # 1,000 / 100 = 10 iterations per epoch
loss = torch.nn.functional.mse_loss(model(xb), yb)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}: {len(loader)} iterations, last batch loss {loss.item():.4f}")각 에포크는 10회 반복하며, 모델이 실제 직선에 수렴함에 따라 마지막 배치의 손실은 첫 번째 에포크 후 0.1096에서 다섯 번째 에포크 후 0.0088로 감소합니다. 데이터 증강을 적용하면 각 에포크에서 모든 이미지가 새롭게 변환된 형태로 사용되므로, 후속 에포크는 동일한 이미지의 반복이 아니라 다양성을 더합니다.
에포크 수 선택하기#
에포크 수는 하이퍼파라미터 튜닝의 주요 설정 중 하나입니다. 에포크가 너무 적으면 모델이 과소적합되어 학습 데이터와 검증 데이터 모두에서 오류가 높게 나타납니다. 에포크가 너무 많으면 과적합이 발생할 수 있습니다. 이 경우 모델이 학습 예제를 암기하기 시작하면서 학습 손실은 계속 낮아지지만 검증 점수는 정체되거나 하락합니다. 적절한 에포크 수는 데이터셋과 모델의 크기, 학습률 스케줄, 전이 학습을 통해 사전 학습된 가중치로 학습을 시작하는지에 따라 달라집니다. 규모도 영향을 줍니다. 소규모 비전 데이터셋은 수백 에포크 동안 학습하는 경우가 많지만, 대규모 언어 모델은 데이터를 한 번도 다 보지 못하는 경우가 있으며, GPT-3는 필터링된 Common Crawl 데이터에서 0.44 에포크를 완료했습니다.
조기 종료를 사용하면 에포크 수를 자동으로 선택할 수 있습니다. 매 에포크 후 검증 데이터로 모델을 평가하고 최고 성능의 체크포인트를 보관하며, 인내심(patience)이라고 하는 지정된 에포크 수 동안 검증 점수가 개선되지 않으면 학습을 종료합니다.
에포크 기반 학습 스케줄#
종료 시점 외에도 학습률 워밍업 및 감쇠, 증강 강도 등 여러 학습 설정이 에포크 스케줄에 따라 변경됩니다. Ultralytics YOLO 학습에서 epochs와 patience은 모두 기본값이 100이며, 학습률은 첫 3개 에포크에 걸쳐 워밍업됩니다. 모자이크 증강은 마지막 10개 에포크 동안 비활성화되어(close_mosaic=10) 모델이 실제 입력과 비슷한 이미지로 학습을 마칩니다. YOLO26 학습 레시피는 모델 크기에 따라 에포크 수가 얼마나 달라지는지 보여줍니다. Objects365에서 150 에포크 동안 사전 학습한 뒤, COCO 미세 조정은 YOLO26n에서 245 에포크, YOLO26x에서 40 에포크 동안 진행되었습니다.
from ultralytics import YOLO
# 사전 학습된 YOLO26n 모델을 불러옵니다
model = YOLO("yolo26n.pt")
# 50 에포크 동안 학습합니다. COCO8 학습 이미지 전체를 50회 통과합니다.
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)이 실행 중 학습기는 매 에포크 후 YOLO26 모델을 검증하고, 매번 last.pt을 덮어쓰며, 탐지 작업에서 mAP50-95인 검증 적합도가 최고 기록을 경신할 때마다 best.pt를 저장합니다.










