좋은 모델을 만들기 위해 학습을 많이 시키다 보면 오히려 역효과가 날 수 있습니다.
이번 포스트에서는 과적합(Overfitting) 이란 무엇인지, 어떻게 해결하는지 알아보겠습니다.
Overfitting이란?
모델이 학습 데이터에만 너무 과하게 맞춰져서, 새로운 데이터(테스트 데이터)에 대한 예측 성능이 오히려 떨어지는 현상입니다.
그래프로 보면:
error
↑
│ train error
│ \
│ \ test error
│ \ /
│ \ / ← 이 지점부터 overfitting
│ \/
└──────────────────→ 학습량
- 학습 데이터에 대한 에러는 계속 줄어들지만
- 테스트 데이터에 대한 에러는 어느 순간부터 오히려 늘어납니다
마치 시험 문제를 통째로 외워서 그 문제는 다 맞히지만, 조금만 다른 문제가 나오면 못 푸는 것과 같습니다.
학습 상태 3단계
상태 설명
| High Bias (Underfit) | 학습이 덜 된 상태, 학습 데이터조차 잘 맞추지 못함 |
| Just Right | 적절하게 학습된 상태, 새로운 데이터도 잘 예측 |
| High Variance (Overfit) | 학습이 너무 되어서 변화량이 많아진 상태 |
Underfit (High Bias) Just Right Overfit (High Variance)
* * * * *
* * → * * * → * * *
* * * * * * *
* *
데이터를 못따라감 딱 맞게 표현 너무 복잡하게 표현
Overfitting 해결 방법
1. 더 많은 학습 데이터 확보
데이터량을 늘려 모델이 데이터의 일반적인 패턴을 찾도록 합니다.
특정 데이터에만 맞춰지는 현상을 줄일 수 있습니다.
2. 피처(Feature) 수 줄이기
불필요한 속성을 제거하거나, PCA(주성분 분석) 같은 차원 축소 기법을 사용합니다.
데이터의 의미를 명확히 하고 불필요한 노이즈를 제거합니다.
Before : x1, x2, x3, x4, x5, x6 (불필요한 피처 포함)
After : x1, x3, x5 (의미있는 피처만)
3. 피처(Feature) 추가하기
2번과 반대되는 방법으로, Underfit(학습이 덜 됐을 때) 사용합니다.
모델이 데이터를 충분히 표현하지 못할 때 해당 의미를 가지는 피처를 더 추가해서 해결합니다.
Underfit 상태 → 피처 추가 → 더 잘 학습됨
Overfit 상태 → 피처 제거 → 일반화 성능 향상
4. 정규화(Regularization) 사용
람다(λ) 값을 줘서 W가 너무 튀지 않게 억제하는 방법입니다.
W가 너무 커지면 모델이 특정 데이터에 과하게 맞춰지기 때문에, 람다로 W의 크기를 제한합니다.
cost = 기존 cost + λ * ∑W²
↑
이 부분이 W가 너무 커지지 않도록 패널티를 줌
람다 값에 따른 효과:
λ 값 효과
| λ 작게 | W 제한이 약함 → Underfit 해결 |
| λ 크게 | W 제한이 강함 → Overfit 해결 |
λ -- → fixes High Bias (Underfit)
λ ++ → fixes High Variance (Overfit)
요약 : 상황별 해결책
상태 문제 해결 방법
| Underfit | 학습이 너무 안 됨 | 피처 추가, λ 줄이기 |
| Overfit | 학습이 너무 됨 | 데이터 추가, 피처 제거, λ 늘리기 |
정리
개념 설명
| Overfitting | 학습 데이터에 과하게 맞춰져 새 데이터 예측 성능이 떨어지는 현상 |
| Underfitting | 학습이 덜 되어 학습 데이터조차 잘 맞추지 못하는 상태 |
| Regularization | λ 값으로 W의 크기를 제한해 과적합을 방지하는 기법 |
| λ (람다) | 정규화 강도를 조절하는 하이퍼파라미터 |
'AI > ML' 카테고리의 다른 글
| Backpropagation : 역전파 알고리즘 (0) | 2026.03.21 |
|---|---|
| XOR 문제와 Neural Network : 딥러닝의 시작 (0) | 2026.03.19 |
| 머신러닝 학습 팁 : Learning Rate, 데이터 전처리 (0) | 2026.03.12 |
| Softmax Classifier : 실제 데이터로 동물 분류하기 (TensorFlow) (0) | 2026.03.11 |
| Softmax Classifier 코드로 구현해보기 (TensorFlow) (0) | 2026.03.11 |