딥러닝 모델 학습을 진행하다 보면 가장 자주 마주하게 되는 문제가 바로 과적합(Overfitting), 경사 소실(Gradient Vanishing)과 같은 문제이다. 이번엔 과적합(Overfitting)과 이와 반대의 개념인 과소적합(Underfitting)에 대해 발생 이유와 해결 방안에 대해 정리하고자 한다.
과적합(Overfitting)
과적합(Overfitting)은 모델이 학습 데이터에 너무 잘 맞추려고 하여, 데이터의 노이즈나 불필요한 패턴까지 학습하게 되는 상황이다. 이로 인해 모델이 학습 데이터에는 높은 성능을 보이지만, 새로운 데이터(테스트 데이터)에는 일반화되지 않아 성능이 떨어진다.
발생 원인을 정리해보면 다음과 같다.
- 모델 복잡도 과다: 모델의 파라미터 수가 너무 많아 학습 데이터의 모든 특징을 과하게 학습할 때 발생한다.
- 데이터 부족: 학습 데이터가 적거나 특정 패턴이 지나치게 반복되는 경우, 모델이 데이터의 특수한 패턴에만 최적화된다.
- 노이즈 학습: 데이터에 포함된 노이즈나 불필요한 특징까지 학습하는 경우 발생한다.
이를 해결하기 위해 아래와 같은 방법들을 사용할 수 있다.
1. 데이터와 모델의 구조 조정을 통한 과적합 억제 기법
- 데이터 증강: 데이터 수를 늘리거나 증강하여 모델을 더 일반화 시킴
- Regularization(정규화) 기법 사용: L1, L2 정규화를 통해 불필요한 파라미터 학습을 억제
- Label Smoothing: 클래스 라벨을 부드럽게 하여 모델이 데이터의 노이즈나 특정 클래스에 과적합되는 것을 방지
- 앙상블 기법: 여러 모델을 결합하여 예측함으로써 개별 모델의 과적합 위험 방지
2. 학습 통제를 이용한 직접적인 과적합 억제 기법(Regularization in Neural Networks)
- Early Stopping: 학습 과정에서 모델이 검증 성능을 기준으로 최적의 지점에 도달하면 멈추므로, 과적합이 시작되기 전에 학습을 중지. 가장 추천되는 방법 중 하나
- 드롭아웃(Dropout): 학습 중 일부 뉴런을 무작위로 비활성화하여 학습 데이터에 과도한 의존 방지
- Weight Decay: 학습 중 내내 가중치를 제어하여 모델이 지나치게 복잡해지는 것을 억제
3. 학습 성능 및 안정성 향상을 통한 과적합 억제 기법
- 활성화 함수 변경: ReLU나 Leaky ReLU와 같은 기울기 소실을 방지하는 활성화 함수 적용
- 옵티마이저 변경: GD, SGD 등의 옵티마이저 대신 Adam과 같은 적응형 학습률을 사용하는 옵티마이저 적용
- 손실 함수 변경: 교차 엔트로피(Cross-Entropy)와 같은 특정 클래스에 과도하게 집중하는 대신 전체 클래스에 대해 균형 잡힌 학습을 도와주는 손실 함수를 적용
과소적합(Underfitting)
과소적합(Underfitting)은 모델이 학습 데이터의 패턴을 충분히 학습하지 못한 상태를 말한다. 이 경우 모델이 학습 데이터에도 일반화되지 않으며, 테스트 데이터에 대한 예측 성능도 낮다. 이는 주로 모델의 복잡도가 너무 낮거나 학습이 충분히 이루어지지 않았을 때 발생한다.
발생 원인을 정리해보면 다음과 같다.
- 모델 복잡도 부족: 모델이 단순하여 데이터의 복잡한 패턴을 표현할 수 없다.
- 학습 시간 부족: 학습이 충분히 진행되지 않아서 데이터의 특징을 충분히 학습하지 못할 때 발생한다.
- 잘못된 특징 선택: 중요한 특징을 누락하거나 적절한 전처리가 이루어지지 않은 경우, 모델이 데이터를 충분히 이해하지 못한다.
과소적합의 해결방안은 아래와 같다.
- 모델 복잡도 증가: 더 깊은 네트워크나 복잡한 모델을 사용하여 데이터의 패턴을 더 잘 학습할 수 있도록 설계
- 학습 시간 연장: 에포크 수를 늘리거나 학습률 조정 등을 통해 충분한 학습 epoch 진행
피처 엔지니어링: 모델에 유용한 정보를 제공할 수 있도록 특징을 추가하거나 변형하여 모델이 더 많은 정보 학습하도록 설계 - 하이퍼파라미터 조정: 학습률이나 배치 크기, 활성화 함수 등 하이퍼파라미터를 조정
관련 포스팅
2024.10.26 - [Data Science/ML & DL] - 손실 함수(Loss Function)와 모델 유형 및 분야 별 적용 방법
2024.10.28 - [Data Science/ML & DL] - 옵티마이저(Optimizer)와 학습률(Learning Rate)
참고 자료
https://yngie-c.github.io/machine%20learning/2020/04/30/training_test_reg/