Yolo 비전 선전
선전
지금 참여하기
용어집

과적합 (Overfitting)

머신 러닝에서 과적합의 원인과 증상을 살펴보세요. Ultralytics 사용하여 높은 분산을 방지하고 일반화 능력을 향상시키는 방법을 알아보세요.

과적합은 기계 학습에서 모델이 훈련 데이터를 지나치게 잘 학습하여, 근본적인 데이터 분포보다는 잡음과 무작위 변동을 포착할 때 발생합니다. 과적합된 모델은 새로운 미확인 데이터에 적용될 수 있는 일반적인 패턴을 학습하기보다는 훈련 세트의 특정 예시들을 효과적으로 암기합니다. 이로 인해 훈련 데이터에 대해서는 탁월한 성능을 보이지만 실제 시나리오로의 일반화 능력은 떨어집니다. 이는 종종 "높은 분산(high variance)"으로 묘사되며, 훈련에 사용된 특정 데이터셋에 따라 모델의 예측 결과가 크게 달라진다는 의미입니다.

과적합이 발생하는 이유

과적합의 주요 원인은 사용 가능한 데이터 양에 비해 모델의 복잡성이 지나치게 높기 때문이다. 신경망이 너무 크다면—즉, 레이어나 매개변수가 너무 많다면— 훈련 예시를 쉽게 암기할 수 있다. 다른 기여 요인으로는 다음과 같다:

  • 훈련 데이터 부족: 소규모 데이터셋에는 광범위한 모집단에서는 존재하지 않는 허위 상관관계가 포함될 수 있습니다. 제한된 데이터로 훈련된 모델은 이러한 우연한 패턴을 학습하기 쉽습니다.
  • 데이터 노이즈와 이상치: 훈련 데이터에 높은 수준의 노이즈나 대표성이 없는 이상치가 존재할 경우 모델을 오도하여, 실제 신호보다는 이상 현상에 맞춰 내부 매개변수를 조정하도록 할 수 있습니다.
  • 훈련 기간 연장: 너무 많은 에포크 동안 훈련하면 모델이 훈련 세트의 잡음에 맞출 때까지 계속해서 가중치를 미세 조정하게 됩니다. 이는 일반적으로 검증 데이터를 사용하여 모니터링합니다.

과적합 vs. 과소적합

과적합과 과소적합을 구분하는 것이 중요하다. 과적합은 너무 많은 세부 사항(잡음 포함)을 학습하는 반면, 과소적합은 모델이 데이터의 근본 구조를 전혀 포착하지 못할 정도로 단순할 때 발생한다. 과소적합 모델은 훈련 데이터와 새로운 데이터 모두에서 성능이 저하되며, 종종 높은 편향을 초래한다. 이 두 극단 사이의 균형을 '편향-분산 상충 관계'라고 한다.

과적합 방지

엔지니어들은 과적합을 완화하고 모델의 견고성을 향상시키기 위해 여러 기법을 사용합니다:

  • 정규화: L1/L2 정규화나 드롭아웃 레이어 추가와 같은 기법은 훈련 과정에서 페널티나 무작위성을 도입하여 모델이 특정 특징에 지나치게 의존하는 것을 방지합니다.
  • 조기 종료: 검증 세트에 대한 손실 함수를 모니터링함으로써, 훈련 정확도가 계속 상승하더라도 미확인 데이터에 대한 성능 향상이 멈추는 시점에 훈련을 중단할 수 있습니다.
  • 데이터 증강: 데이터 증강을 통해 훈련 세트의 규모와 다양성을 인위적으로 증가시키면 모델이 정확한 이미지를 암기하기가 더 어려워집니다.
  • 교차 검증: k-fold 교차 검증과 같은 기법을 사용하면 모델이 서로 다른 데이터 하위 집합에서 테스트되므로 성능에 대한 보다 신뢰할 수 있는 추정치를 제공합니다.

실제 사례

과적합은 AI를 실제 운영 환경에 배포할 때 심각한 결과를 초래할 수 있습니다:

  • 의료 진단: 의료 분야 인공지능에서 피부암 detect 훈련을 받은 모델은 훈련 이미지의 조명 조건이나 눈금 표시 등에 과적합될 수 있습니다. 다른 조명이나 장비를 사용하는 진료 현장에 배치될 경우, 해당 모델은 관련 없는 배경 신호에 의존했기 때문에 악성 병변을 정확히 식별하지 못할 수 있습니다.
  • 재무 예측: 주가 예측 모델은 특정 비반복적 사건(일회성 경제 위기 등)에 의해 주도된 과거 시장 동향에 과적합될 수 있습니다. 이러한 모델은 근본적인 시장 역학을 학습하기보다 과거의 비정상적 사례를 암기했기 때문에 향후 주가 변동을 정확히 예측하지 못할 가능성이 높습니다.

코드 예시: YOLO26을 이용한 조기 종료

Ultralytics 또는 로컬 훈련 스크립트를 사용하면 조기 종료 인내도를 설정하여 과적합을 방지할 수 있습니다. 이는 검증 적합도가 설정된 에포크 수 동안 개선되지 않을 경우 훈련을 중단합니다.

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)

관련 개념

  • 일반화: 모델이 이전에 보지 못한 새로운 데이터에 적응하고 우수한 성능을 발휘하는 능력으로, 과적합의 반대 개념이다.
  • 교차 검증: 통계적 분석 결과가 독립적인 데이터 세트에 어떻게 일반화될지 평가하는 기법.
  • 정규화: 주어진 훈련 데이터 세트에 함수를 적절히 맞추어 오류를 줄이고 과적합을 방지하기 위해 사용되는 방법.

Ultralytics 커뮤니티 가입

AI의 미래에 동참하세요. 글로벌 혁신가들과 연결하고, 협력하고, 성장하세요.

지금 참여하기