본문 바로가기
C.W.K.
Stream
Lesson 04 of 06 · published

과적합: 모델이 우연한 세부사항까지 맞출 때

~8 min · overfitting, generalization, regularization

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

학습 자료에는 완벽한데 새 자료에는 약할 때

학습 손실은 계속 낮아지는데 검증 손실이 다시 오르기 시작한다면 모델이 학습 자료의 우연한 잡음까지 맞추고 있을 수 있어. 이게 과적합이야. 학습셋과 별도 자료 사이의 성능 차이가 중요한 신호지만, 차이 하나만으로 원인을 확정하진 않아. 분포가 달라졌거나 라벨 품질이 다른 경우도 살펴야 해.

용량과 데이터, 학습 절차의 상호작용

표현력이 큰 모델은 유용한 규칙도, 표본에만 있는 세부사항도 함께 맞출 수 있어. 파라미터 수만 많다고 자동으로 과적합하는 건 아니고 데이터 양, 규제, 최적화, 사전학습이 함께 일반화를 결정해.

대응 방법

  • 자료를 더 잘 모으기: 단순히 수만 늘리지 말고 배포 환경을 대표하는 사례와 깨끗한 라벨을 늘려.
  • 규제: weight decay, dropout, 조기종료처럼 표본의 세부사항을 과하게 맞추는 경향을 줄여.
  • 자료 증강: 의미를 보존하는 변형으로 모델이 불변이어야 할 요소를 가르쳐.
  • 모형과 특징 단순화: 자료 규모에 비해 필요 이상으로 자유로운 모형인지 확인해.
  • 평가 설계: 사람·시간·장치 단위의 중복이 분할을 가로지르지 않게 해.
학습 성능만으로 일반화를 판단하지 마. 검증셋은 개발 결정을 돕는 추정치이지 절대적인 진실이 아니야. 반복해서 맞추면 검증셋에도 과적합할 수 있으므로 마지막 시험셋과 실제 배포 자료로 다시 확인해.

Code

다항식 과적합 시연·python
import numpy as np

# Degree 증가하는 다항식 fit — overfitting 봐
np.random.seed(0)
x = np.linspace(0, 1, 10)
y = np.sin(2 * np.pi * x) + np.random.normal(0, 0.1, 10)

x_test = np.linspace(0, 1, 100)
y_test = np.sin(2 * np.pi * x_test)        # 진실

for degree in [1, 3, 9]:
    coeffs = np.polyfit(x, y, degree)
    train_pred = np.polyval(coeffs, x)
    test_pred  = np.polyval(coeffs, x_test)
    train_mse = np.mean((y - train_pred) ** 2)
    test_mse  = np.mean((y_test - test_pred) ** 2)
    print(f"degree {degree}: train MSE = {train_mse:.4f}, test MSE = {test_mse:.4f}")
# Degree 9 는 학습엔 거의 완벽 fit, 테스트에선 폭발 — 클래식 overfit.

External links

Exercise

y = sin(2πx) + ε를 따르는 점 20개를 만들고 1·3·9·15차 다항식을 각각 맞춰. 촘촘한 격자에 곡선을 그리고 별도 시험 자료의 MSE를 계산해 과적합이 나타나는 차수를 찾아.
Hint
차수가 높을수록 표현력은 커지지만 일반화가 반드시 나빠지는 건 아니야. 자료량과 잡음, 규제, 표본 위치에 따라 결과가 달라지므로 학습 오차와 시험 오차를 함께 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.