Underfitting
과소적합은 모델이 지나치게 단순하거나 충분히 학습되지 않아 데이터의 패턴을 포착하지 못하는 현상으로, 학습 데이터와 새로운 데이터 모두에서 오류가 발생합니다. 징후와 해결 방법을 다룹니다.
언더피팅은 머신러닝(ML) 모델이 학습 데이터의 패턴을 포착하지 못해, 학습에 사용한 예제뿐 아니라 새로운 예제에서도 큰 오차를 내는 현상입니다. 기본 선형 회귀처럼 곡선을 따르는 점들을 직선으로 맞추는 것이 대표적인 예입니다. 기울기와 절편을 어떻게 선택해도 곡선의 굴곡을 따라갈 수 없습니다. 언더피팅 모델은 편향이 높습니다. 즉, 입력과 출력 간 실제 관계를 표현하기에는 가정이 지나치게 제한적이며, 학습 세트와 테스트 데이터 모두에서 정확도가 낮습니다.
언더피팅의 징후#
가장 명확한 신호는 높은 상태로 유지되는 학습 손실입니다. 손실 함수가 허용 가능한 수준보다 훨씬 높은 값에서 정체되고 검증 데이터의 손실이 그 값에 가깝다면 모델이 충분히 학습되지 않은 것입니다. 두 손실 간 격차가 작다는 것은 암기가 문제가 아님을 보여 줍니다. 학습 세트 크기에 따른 오류를 표시하는 학습 곡선에서도 두 곡선이 높은 오류에서 모두 평탄해지는 두 번째 신호를 확인할 수 있습니다. 같은 종류의 데이터를 더 추가해도 거의 개선되지 않습니다. 객체 감지에서 모델이 학습에 사용된 바로 그 이미지에서 낮은 평균 정밀도(mAP)를 기록한다면 과소적합 상태입니다. 이는 Ultralytics 모델 테스트 가이드의 점검 항목 중 하나입니다. 두 손실을 비교하면 과소적합과 과적합을 구분할 수 있습니다:
일반적인 원인#
- 용량 부족: 모델 계열이 패턴을 표현하지 못합니다. 예를 들어 곡선형 데이터에 선형 모델을 사용하거나 복잡한 비전 작업에 매우 작은 네트워크를 사용하는 경우입니다.
- 에포크 부족: 학습을 일찍 중단하거나, 주어진 시간 안에 진전이 없을 정도로 작은 학습률을 사용하면 최적화가 수렴하기 전에 중단됩니다.
- 과도한 정규화: 강한 가중치 감쇠, 높은 드롭아웃 비율, 지나치게 공격적인 증강은 모델을 너무 강하게 제한해 신호에 맞게 학습할 수 없게 합니다.
- 정보가 부족한 특징: 변수가 누락되거나 작은 객체가 사라질 정도로 이미지를 축소하면 모델에 필요한 정보가 제거됩니다.
- 기울기 소실 및 기타 최적화 실패: 모델 용량이 충분하더라도 심층 네트워크의 초기 계층이 학습을 멈춥니다.
코드에서의 언더피팅#
다음 예제에서는 scikit-learn을 사용해 사인 곡선의 노이즈가 포함된 샘플에 직선과 3차 다항식을 맞춘 다음, 학습 및 테스트 지점의 평균 제곱 오차(MSE)를 출력합니다.
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
# Noisy samples of a curved function
rng = np.random.default_rng(0)
x = rng.uniform(-3, 3, size=(200, 1))
y = np.sin(x).ravel() + rng.normal(0, 0.1, size=200)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)
# A straight line underfits; a cubic polynomial has enough capacity for the curve
for degree in (1, 3):
model = make_pipeline(PolynomialFeatures(degree), LinearRegression()).fit(x_train, y_train)
train_mse = mean_squared_error(y_train, model.predict(x_train))
test_mse = mean_squared_error(y_test, model.predict(x_test))
print(f"degree {degree}: train MSE {train_mse:.3f}, test MSE {test_mse:.3f}")직선 모델의 학습 MSE는 0.193, 테스트 MSE는 0.188로 높고 거의 같습니다. 이는 언더피팅의 전형적인 징후입니다. 3차 다항식 모델은 두 값을 각각 0.013과 0.017로 낮춥니다. 이는 데이터에 추가된 노이즈가 정하는 하한값인 0.010에 가깝습니다.
언더피팅 해결#
원인에 맞춰 해결합니다. 모델 크기나 표현력을 높이고, 적절한 학습률로 학습 시간을 늘리며, 정규화나 데이터 증강을 약화하고, 이미지 해상도와 같은 입력을 개선합니다. YOLO26은 하나의 아키텍처에서 깊이와 너비를 조정하는 n, s, m, l, x 크기로 제공됩니다. 실행의 results.csv에서 학습 및 검증 손실이 모두 높은 경우 yolo26n.pt에서 더 큰 크기로 바꾸는 것이 일반적인 첫 단계입니다. 작은 객체는 컴퓨터 비전에서 흔한 사례입니다. 입력 크기가 작은 드론 영상에서 감지기는 더 큰 입력 크기라면 보존할 수 있는 작은 객체를 놓칩니다.
과소적합과 과적합의 비교#
언더피팅과 오버피팅은 편향-분산 트레이드오프의 두 가지 실패 유형입니다. 언더피팅 모델은 편향이 높아 학습 데이터와 새 데이터에서 비슷한 오류를 내지만, 오버피팅 모델은 분산이 높아 노이즈까지 포함해 학습 데이터에 지나치게 맞추며 일반화 성능이 떨어집니다. 전통적인 시각화에서는 테스트 오류 곡선이 U자형이며 왼쪽에 언더피팅, 오른쪽에 오버피팅이 나타납니다. 대규모 신경망에서는 이중 하강 현상 때문에 양상이 복잡해집니다. 모델이 학습 데이터를 완벽하게 맞출 만큼 커지면 테스트 오류가 다시 낮아질 수 있습니다. 이 패턴은 모델 크기와 학습 에포크 전반에서 관찰됐습니다.










