오버피팅(Overfitting)과 일반화 성능 정리
이 문서는 머신러닝 강의를 실습하면서 정리한 오버피팅(Overfitting) 개념과,
이를 이해하고 극복하기 위한 바이어스-베리언스 트레이드오프,
그리고 실제 모델 학습 시 나타나는 현상에 대한 내용
1. 오버피팅이란?
- 현재 학습한 데이터에서는 매우 높은 정확도를 보이지만,
새로운 데이터에서는 예측 성능이 급격히 떨어지는 현상을 말한다.
- 모델이 학습 데이터의 노이즈나 특이값까지 과하게 학습해버리는 것이 원인
→ 즉, 모델이 너무 복잡해서 지나치게 훈련 데이터에 최적화되어 있는 상태
2. 언더피팅 vs 오버피팅
- 언더피팅(Underfitting): 너무 단순한 모델 → 학습 자체를 충분히 못함
- 오버피팅(Overfitting): 너무 복잡한 모델 → 훈련 데이터에는 잘 맞지만 새로운 데이터에는 성능 저하
3. 바이어스와 베리언스 개념
바이어스 (Bias)
- 예측값과 실제값 사이의 차이
- 너무 단순한 모델은 바이어스가 큼 (언더피팅의 원인)
베리언스 (Variance)
- 훈련 데이터 변화에 따른 예측값의 변화 정도
- 너무 복잡한 모델은 베리언스가 큼 (오버피팅의 원인)
→ 모델의 목적은 낮은 바이어스와 낮은 베리언스를 동시에 달성하는 것
4. 시각화 예시로 이해하는 바이어스-베리언스
- 바이어스가 높으면 전체적으로 예측이 실제값과 멂
- 베리언스가 높으면 예측값의 분산이 큼
모델 학습에서는 이 둘 간의 균형을 조절해야 한다.
5. 오버피팅의 발생 원인 및 해결 전략
주요 원인
- 지나치게 복잡한 모델 구조
- 학습 데이터 부족
- 에폭 수 과다 (너무 많이 학습)
- 입력 특성이 너무 많음
해결 방법
- Regularization (정규화): 계수값을 줄여 모델을 단순화
- Dropout (딥러닝): 일부 뉴런을 무작위로 끔 → 과적합 방지
- Early Stopping: 검증 정확도가 떨어지기 시작하면 학습 종료
- Cross Validation: 검증 성능 기준으로 모델 선정
- Feature Selection: 중요한 특성만 사용
6. 계수값 줄이기 → 모델 단순화
- 계수(세타, θ)를 줄이면 복잡한 경계가 부드러워짐
- 이는 베리언스를 줄이고, 과적합을 완화하는 효과를 준다.
from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0)
7. 과적합 학습곡선의 전형적 패턴
- 훈련 정확도는 계속 증가하지만,
- 검증 정확도는 일정 시점 이후 오히려 하락하는 현상이 나타남
→ 이 지점을 기준으로 Early Stopping을 적용할 수 있음
8. Dropout의 효과 (딥러닝)
- 학습 시 일부 뉴런을 랜덤하게 끔
- 다양한 서브 모델들이 학습되는 효과 발생
- 개별 뉴런이 전체 모델에 과하게 의존하지 않도록 조절
결과적으로 일반화 성능 향상 및 오버피팅 완화에 효과적임
9. 정리
| 항목 | 설명 |
|---|
| 오버피팅 | 학습 데이터엔 잘 맞지만 새 데이터엔 성능 저하 |
| 언더피팅 | 모델이 너무 단순해서 학습이 충분히 안 됨 |
| 바이어스 | 예측이 실제와 얼마나 먼지 |
| 베리언스 | 예측값이 얼마나 요동치는지 |
| 해결 전략 | 정규화, Dropout, Early Stopping, Cross Validation 등 |
10. 느낀 점
오버피팅은 단순히 "많이 학습하면 좋다"는 생각이 틀릴 수 있다는 점을 알려준다.
특히 바이어스와 베리언스의 개념을 통해
모델이 얼마나 복잡해야 적절한지를 데이터 기반으로 판단하는 감각이 중요하다고 느꼈다.
앞으로 모델 학습 시 반드시 학습곡선과 검증 정확도를 함께 살펴야겠다는 생각이 들었다.