Early Stopping
조기 종료는 검증 성능이 정체되면 학습을 끝내므로, 불필요한 연산과 과적합을 줄이면서 모델의 최적 체크포인트를 보존합니다.
조기 종료는 모니터링 중인 성능 지표의 개선이 멈추면 반복적인 머신 러닝 학습을 끝내는 기법입니다. 검증 성능에 따라 학습 지속 시간을 결정하므로 불필요한 연산을 줄이고 과적합을 제한할 수 있습니다. 직관적으로 말하면, 추가 학습으로도 모델의 미학습 예제 처리 능력이 더 이상 향상되지 않을 때 학습을 중단합니다. 머신 러닝 외의 맥락에서 “조기 종료”는 단순히 계획된 완료 시점 전에 활동을 끝내는 것을 의미합니다.
조기 종료 작동 방식#
학습 중에는 옵티마이저가 학습 데이터를 사용해 모델을 업데이트합니다. 일정한 간격으로 별도의 검증 데이터에서 모델을 평가합니다. 검증 성능이 저하되는 동안에도 학습 손실은 계속 감소할 수 있습니다. 이는 모델이 학습 예제에만 해당하는 세부 사항에 점점 더 맞춰지는 과적합의 징후입니다. 조기 종료는 미학습 데이터의 성능을 기준으로 중단 시점을 선택해 이 과정을 제한합니다.
일반적인 구현에서는 최상의 검증 점수를 추적하고, 해당 점수에 대응하는 모델 가중치를 저장하며, 충분한 개선 없이 연속으로 수행된 검증 횟수를 셉니다. 개선이 발생하면 카운터가 초기화되고, 설정된 patience에 도달하면 학습을 종료합니다. 최적 체크포인트를 복원하면 관측된 검증 결과 중 가장 좋은 결과를 보존할 수 있으며, 이는 마지막 학습 단계보다 앞선 시점에 나타날 수도 있습니다.
Nelson Morgan과 Hervé Bourlard는 일반화와 매개변수 추정에 관한 1989년 연구에서 피드포워드 신경망을 위한 검증 기반 종료 방식을 소개했습니다. 이들의 실험에는 음성 분류가 포함되었으며, 독립적인 데이터를 모니터링해 학습 기간을 선택하는 방법을 보였습니다.
지표, patience 및 최적 가중치#
종료 규칙은 여러 설정에 따라 달라집니다.
- 모니터링 지표: 검증 손실은 예측 오차를 측정하므로 최소화하고, 검증 정확도는 올바른 예측을 측정하므로 최대화합니다.
- Patience 및 학습 기간: Patience는 학습이 허용하는 개선 실패 검증 횟수를 지정합니다. 에폭은 학습 데이터셋 전체를 한 번 통과하는 단위입니다.
- 개선 임계값: Keras에서는 이를
min_delta이라고 하며, 진행으로 간주되는 최소 절대 변화량을 뜻합니다.restore_best_weights=True설정은 모니터링한 값이 가장 좋았을 때의 가중치를 복원합니다. - 검증 확인 빈도: PyTorch Lightning에서는 검증 확인 횟수로 patience를 계산합니다. 10에폭마다 확인하고 patience를 3으로 설정하면, 최상의 확인 이후 30에폭 동안 개선에 실패하는 검증을 세 번 허용합니다.
Patience와 개선 임계값은 하이퍼파라미터로, 가중치 업데이트 과정 외부에서 선택하는 설정입니다. Patience가 짧으면 정체된 학습을 더 빨리 종료하고, 길면 일시적인 정체가 더 오래 지속되도록 허용합니다. 워밍업 기간은 초기 학습이 안정될 때까지 모니터링을 지연합니다. 이러한 설정은 최적화 업데이트의 크기를 제어하는 학습률과 상호작용합니다.
적용 사례 및 실행 가능한 예제#
조기 종료는 신경망과 그래디언트 부스팅 트리 모두에 적용할 수 있습니다. scikit-learn을 사용한 그래디언트 부스팅에서는 각 단계마다 트리를 추가하며, 검증 기반 종료로 단계 수를 제어합니다. California Housing 예제에서는 데이터를 분리하기 위해 validation_fraction을 사용하고, 검증 성능 개선이 정체되면 학습을 중단하기 위해 n_iter_no_change를 사용합니다.
다음 예제에서는 scikit-learn에 포함된 diabetes 데이터셋을 사용하고, 실제로 학습된 부스팅 단계 수를 출력합니다.
from sklearn.datasets import load_diabetes
from sklearn.ensemble import GradientBoostingRegressor
X, y = load_diabetes(return_X_y=True)
# Reserve an internal validation split and monitor progress.
model = GradientBoostingRegressor(
n_estimators=1000,
validation_fraction=0.2,
n_iter_no_change=10,
random_state=42,
)
model.fit(X, y)
print(f"Boosting stages fitted: {model.n_estimators_}/1000")학습된 단계 수를 보면 종료 기준에 따라 1,000단계 상한보다 앞선 어느 시점에 트리 생성이 끝났는지 알 수 있습니다.
Ultralytics YOLO는 모델 학습 중에 조기 종료를 적용합니다. 여기에는 patience 인수를 사용하는 YOLO26도 포함되며, 이 인수는 검증 fitness가 개선되지 않은 에폭 수를 계산합니다. 탐지에서는 fitness에 mAP50–95를 사용하며, 트레이너는 최적 체크포인트를 best.pt로 저장합니다.
조기 종료 및 관련 개념#
조기 종료는 학습 기간을 제어하는 정규화의 한 형태입니다. 가중치 감쇠는 큰 가중치에 페널티를 부여하고, 드롭아웃은 학습 중 일부 유닛을 무작위로 비활성화합니다. 이러한 메커니즘은 함께 사용할 수 있습니다. 너무 일찍 학습을 중단하면 과소적합이 발생해 유용한 패턴을 충분히 학습하지 못합니다.
체크포인트 저장은 모델 상태를 저장하고, 조기 종료는 최적화를 끝낼 시점을 결정합니다. 교차 검증은 미학습 데이터 분할을 순환해 모델 선택을 평가하고, 별도의 테스트 데이터는 최종 평가에 사용합니다. 종료 시점은 검증 결과를 바탕으로 모델을 선택하므로, 선택된 체크포인트의 검증 점수는 모델 선택의 일부입니다.
Keras에서는 restore_best_weights의 기본값이 False이므로, 조기 종료만 활성화하면 모델은 마지막 단계의 가중치를 유지합니다.










