Overfitting
머신 러닝에서 과적합의 원인과 증상을 살펴보세요. Ultralytics YOLO26을 사용하여 높은 분산을 방지하고 일반화 성능을 향상하는 방법을 알아보세요.
과적합은 모델이 학습 데이터를 지나치게 잘 학습하여 데이터의 기본 분포가 아닌 노이즈와 무작위 변동까지 포착할 때 머신 러닝에서 발생합니다. 과적합된 모델은 새롭고 보지 못한 데이터에 적용되는 일반적인 패턴을 학습하는 대신, 학습 세트의 특정 예시를 사실상 암기합니다. 그 결과 학습 데이터에서는 뛰어난 성능을 보이지만 실제 시나리오에서는 일반화 성능이 저하됩니다. 과적합은 흔히 "높은 분산"으로 설명되며, 이는 학습에 사용된 특정 데이터 세트에 따라 모델의 예측이 크게 달라진다는 의미입니다.
과적합이 발생하는 이유#
과적합의 주된 원인은 사용 가능한 데이터의 양에 비해 모델의 복잡도가 지나치게 높은 것입니다. 신경망이 너무 크고, 즉 레이어나 파라미터가 너무 많으면 학습 예시를 쉽게 암기할 수 있습니다. 그 밖의 원인은 다음과 같습니다:
- 불충분한 학습 데이터: 작은 데이터 세트에는 더 넓은 모집단에는 존재하지 않는 허위 상관관계가 포함될 수 있습니다. 제한된 데이터로 학습된 모델은 이러한 우연한 패턴을 학습하기 쉽습니다.
- 데이터 노이즈 및 이상치: 학습 데이터에 높은 수준의 노이즈나 대표성이 없는 이상치가 포함되면 모델이 잘못된 방향으로 학습될 수 있으며, 실제 신호가 아닌 이상 현상에 맞추도록 내부 파라미터를 조정하게 됩니다.
- 장시간 학습: 너무 많은 에폭 동안 학습하면 모델이 가중치를 계속 조정하여 학습 세트의 노이즈에 맞출 수 있습니다. 이는 흔히 검증 데이터를 사용하여 모니터링합니다.
과적합과 과소적합 비교#
과적합과 과소적합을 구분하는 것이 중요합니다. 과적합은 노이즈를 포함한 세부 정보를 지나치게 많이 학습하는 반면, 과소적합은 모델이 너무 단순하여 데이터의 기본 구조를 전혀 포착하지 못할 때 발생합니다. 과소적합된 모델은 학습 데이터와 새 데이터 모두에서 성능이 낮으며, 이로 인해 높은 편향이 나타나는 경우가 많습니다. 이 두 극단 사이의 균형을 맞추는 것을 편향-분산 트레이드오프라고 합니다.
과적합 방지#
엔지니어는 과적합을 완화하고 모델의 견고성을 향상하기 위해 여러 기법을 사용합니다:
- 정규화: L1/L2 정규화나 드롭아웃 레이어 추가와 같은 기법은 학습 중 페널티나 무작위성을 도입하여 모델이 특정 특징에 지나치게 의존하지 않도록 합니다.
- 조기 종료: 검증 세트에서 손실 함수를 모니터링하면 학습 정확도가 계속 상승하더라도 보지 못한 데이터에 대한 성능이 더 이상 향상되지 않을 때 학습을 중단할 수 있습니다.
- 데이터 증강: 데이터 증강을 사용하여 학습 세트의 크기와 다양성을 인위적으로 늘리면 모델이 정확히 동일한 이미지를 암기하기 어려워집니다.
- 교차 검증: k-겹 교차 검증과 같은 기법을 사용하면 모델이 서로 다른 데이터 하위 집합에서 테스트되므로 성능을 더 신뢰성 있게 추정할 수 있습니다.
실제 사례#
과적합은 AI를 프로덕션 환경에 배포할 때 심각한 결과를 초래할 수 있습니다:
- 의료 진단: 헬스케어 분야의 AI에서 피부암을 감지하도록 학습된 모델은 학습 이미지에 포함된 조명 조건이나 자의 눈금 표시에 과적합될 수 있습니다. 조명이나 장비가 다른 병원에 배포하면 모델이 관련 없는 배경 단서에 의존했기 때문에 악성 병변을 올바르게 식별하지 못할 수 있습니다.
- 금융 예측: 주가 예측 모델은 특정한 일회성 사건(예: 한 번 발생한 경제 위기)으로 인해 형성된 과거 시장 추세에 과적합될 수 있습니다. 이러한 모델은 과거의 이상 현상을 암기했을 뿐 시장의 기본 동학을 학습하지 않았기 때문에 미래 주가 움직임을 정확하게 예측하지 못할 가능성이 높습니다.
코드 예시: Ultralytics YOLO26을 사용한 조기 종료#
Ultralytics 플랫폼 또는 로컬 학습 스크립트를 사용하면 조기 종료 patience를 설정하여 과적합을 방지할 수 있습니다. 검증 fitness가 설정된 에폭 수 동안 향상되지 않으면 학습이 중단됩니다.
from ultralytics import YOLO
# Load the YOLO26 model (latest generation)
model = YOLO("yolo26n.pt")
# Train with early stopping enabled (patience=50 epochs)
# If validation metrics don't improve for 50 epochs, training stops.
results = model.train(data="coco8.yaml", epochs=100, patience=50)관련 개념#
- 일반화: 모델이 새롭고 이전에 보지 못한 데이터에 적응하고 높은 성능을 발휘하는 능력으로, 과적합과 반대되는 개념입니다.
- 교차 검증: 통계 분석 결과가 독립적인 데이터 세트에 어떻게 일반화되는지 평가하는 기법입니다.
- 정규화: 주어진 학습 세트에 함수를 적절히 맞춰 오류를 줄이고 과적합을 방지하는 데 사용되는 방법입니다.









