Epoch
머신 러닝에서 에포크가 무엇이며 모델 학습에 어떤 영향을 미치는지 알아보세요. 최적화와 과적합 방지를 살펴보고 Ultralytics YOLO26을 손쉽게 학습해 보세요.
에포크는 머신 러닝 알고리즘이 전체 training dataset을 한 번 완전히 순회하는 것을 의미합니다. 이 과정에서 모델은 데이터의 모든 샘플을 정확히 한 번씩 바탕으로 내부 파라미터를 업데이트할 수 있습니다. deep learning의 맥락에서 한 번의 순회만으로는 neural network가 복잡한 패턴을 효과적으로 학습하기 어려운 경우가 많습니다. 따라서 학습은 일반적으로 여러 에포크로 진행되며, 이를 통해 학습 알고리즘이 이해를 반복적으로 개선하고 예측값과 실제 정답 간의 오차를 최소화할 수 있습니다.
최적화에서 에포크의 역할#
학습의 주요 목표는 특정 loss function을 최소화하도록 model weights를 조정하는 것입니다. 확률적 경사 하강법 (SGD)이나 Adam 옵티마이저와 같은 최적화 알고리즘은 각 에포크 동안 계산된 오차를 사용하여 이러한 조정을 수행합니다. 에포크 수가 증가하면 모델은 일반적으로 오차가 높은 상태(무작위 추측)에서 오차가 낮은 상태(학습된 패턴)로 이동합니다.
그러나 올바른 에포크 수를 선택하는 것은 hyperparameter tuning의 중요한 부분입니다.
- 에포크가 너무 적은 경우: 모델이 아직 데이터의 근본적인 추세를 포착하지 못하는 underfitting이 발생할 수 있습니다.
- 에포크가 너무 많은 경우: 모델이 새로운 데이터에 일반화하는 대신 학습 데이터의 노이즈를 암기하는 overfitting이 자주 발생합니다. 이를 방지하기 위해 개발자는 validation data의 성능을 모니터링하고 early stopping과 같은 기법을 사용하여 일반화 성능이 더 이상 향상되지 않을 때 학습을 중단합니다.
에포크와 배치 및 반복#
초보자는 "epoch"를 관련 용어와 혼동하는 경우가 많습니다. training loops를 올바르게 구성하려면 이러한 개념의 계층 구조를 이해하는 것이 중요합니다.
- 에포크: 전체 데이터셋을 한 번 완전히 순회하는 것입니다.
- 배치: 동시에 처리되는 데이터셋의 하위 집합입니다. 데이터셋은 한 번에 GPU memory에 모두 담기에는 너무 큰 경우가 많으므로, batch size에 따라 정의된 더 작은 그룹으로 나눕니다.
- 반복: 모델의 가중치를 한 번 업데이트하는 것입니다. 데이터셋에 이미지가 1,000개 있고 배치 크기가 100이라면, 하나의 에포크를 완료하는 데 10번의 반복이 필요합니다.
실제 적용 사례#
필요한 에포크 수는 작업의 복잡성과 데이터의 크기에 따라 크게 달라집니다.
- 의료 영상 분석: MRI 스캔에서 종양을 검출하는 것과 같은 medical image analysis에서는 정확도가 가장 중요합니다. 이러한 작업을 위해 학습된 모델은 수백 에포크 동안 실행되는 경우가 많습니다. 이처럼 광범위한 학습을 통해 합성곱 신경망 (CNN)이 악성 조직과 건강한 조직을 구분하는 미세한 이상 징후를 식별할 수 있으며, 잠재적으로 생명을 구할 수 있습니다.
- 자율 주행: autonomous vehicles의 경우 객체 검출 모델이 보행자, 표지판 및 다른 차량을 안정적으로 식별해야 합니다. 이러한 강건한 시스템을 학습하려면 일반적으로 COCO나 Objects365와 같은 대규모 데이터셋이 사용됩니다. 데이터셋의 크기는 매우 크지만, 다양한 날씨와 조명 조건에 잘 일반화되는 해에 수렴하려면 모델에 여전히 여러 에포크가 필요합니다.
코드로 학습 사이클 관리하기#
Ultralytics YOLO와 같은 최신 프레임워크를 사용할 때 에포크 수를 정의하는 것은 학습 명령에서 간단한 인자를 지정하는 작업입니다. Ultralytics Platform과 같은 도구를 사용하면 각 에포크에 따른 손실 곡선을 시각화하여 최적의 중단 지점을 식별할 수 있습니다.
다음 예제에서는 YOLO26 모델을 학습할 때 에포크 수를 설정하는 방법을 보여줍니다.
from ultralytics import YOLO
# Load the YOLO26n model (nano version for speed)
model = YOLO("yolo26n.pt")
# Train the model for 50 epochs
# The 'epochs' argument determines how many times the model sees the entire dataset
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)이 코드 조각에서 epochs=50 인자는 학습 엔진에 coco8.yaml 데이터셋을 50번의 서로 다른 사이클로 순회하도록 지시합니다. 각 사이클 동안 모델은 검출 성능을 개선하기 위해 forward propagation과 backpropagation을 수행합니다.









