딥러닝에서 오버피팅과 언더피팅의 이해

by 송동훈 Hoon Song

딥러닝을 공부하다 보면 데이터 분할, 바이어스와 분산, 그리고 오버피팅언더피팅이라는 개념을 자주 마주치게 됩니다. 이는 모델의 성능을 결정하는 핵심 요소들로, 이를 제대로 이해하고 다루는 것이 성공적인 딥러닝 모델 개발의 열쇠입니다. 오늘은 이러한 개념들을 자세히 살펴보겠습니다.


데이터 분할의, 중요성

딥러닝에서는, 데이터를 어떻게 나누고 활용하느냐가 모델의 성능에 큰 영향을 미칩니다. 일반적으로 데이터는 다음과 같이 분할합니다:


1. 트레인 셋(Train Set)테스트 셋(Test Set): 가장 기본적인 분할 방식으로, 보통 7:3 비율로 나눕니다. 트레인 셋으로 모델을 학습시키고, 테스트 셋으로 성능을 평가합니다.

2. 트레인, 밸리데이션, 테스트 셋: 실제 현업에서는 모델 선택과 하이퍼파라미터 튜닝을 위해 밸리데이션 셋을 추가로 사용합니다. 일반적인 비율은 60:20:20 정도입니다.

3. K-폴드 교차 검증(K-Fold Cross Validation): 데이터를 K개의 동일한 크기의 부분집합으로 나누고, 각 반복에서 K-1개의 부분집합으로 학습하고 나머지 하나로 검증하는 방식입니다.

Screenshot 2025-04-14 at 4.57.26 PM.png

데이터를 분할할 때 주의해야 할 점반드시 데이터를 섞어줘야 한다는 것입니다. 데이터가 특정 패턴이나 순서로 정렬되어 있다면, 트레인 셋과 테스트 셋의 분포가 달라질 수 있어 모델의 일반화 성능을 제대로 평가할 수 없습니다.


예를 들어, 꽃 이미지 데이터셋에서 처음 3,000장은 장미, 다음 4,000장은 백합, 마지막 3,000장은 코스모스라고 가정해봅시다. 데이터를 섞지 않고 앞의 70%를 트레인 셋으로, 나머지를 테스트 셋으로 사용한다면, 트레인 셋에는 장미와 백합만 포함되고 테스트 셋에는 코스모스만 포함될 수 있습니다. 이렇게 되면 모델은 코스모스를 본 적이 없기 때문에 테스트 셋에서 좋은 성능을 기대할 수 없습니다.


데이터 증강(Data Augmentation)과 분할의 관계

데이터가 부족할 때 자주 사용하는 기법인 데이터 증강은 주의해서 적용해야 합니다. 데이터 증강은 기존 데이터를 변형(이동, 회전, 확대 등)하여 새로운 데이터를 생성하는 방법입니다.


여기서 중요한 점은 데이터 증강은 데이터 분할 전에 해서는 안 된다는 것입니다. 만약 모든 데이터를 증강한 후에 분할하면, 증강된 같은 이미지의 변형이 트레인 셋과 테스트 셋 양쪽에 포함될 수 있습니다. 이는 테스트 셋의 독립성을 해치고, 모델이 실제보다 더 좋은 성능을 보이는 것처럼 착각하게 만듭니다.


올바른 방법은 먼저 데이터를 트레인 셋과 테스트 셋으로 분할한 후, 트레인 셋에만 데이터 증강을 적용하는 것입니다. 이렇게 하면 테스트 셋은 모델이 한 번도 보지 않은 완전히 새로운 데이터로 유지됩니다.


바이어스(Bias)와 분산(Variance)의 이해

모델의 예측 오차는 크게 바이어스와 분산으로 구성됩니다. 이 두 요소는 모델의 성능을 결정하는 중요한 개념입니다.

Screenshot 2025-04-14 at 5.05.04 PM.png

바이어스(Bias)

바이어스는 모델의 예측값 평균과 실제 정답 간의 차이를 말합니다. 높은 바이어스는 모델이 데이터의 패턴을 충분히 학습하지 못했다는 것을 의미합니다. 이런 경우 트레인 셋에서도 성능이 좋지 않습니다.

바이어스가 높은 모델은 너무 단순해서 데이터의 복잡한 패턴을 표현하지 못하는 경우가 많습니다. 이를 언더피팅(Underfitting)이라고 합니다.


분산(Variance)

분산은 같은 입력에 대한 모델 예측값들의 변동성을 말합니다. 높은 분산은 모델이 트레이닝 데이터의 노이즈까지 학습해버려서, 새로운 데이터에 대한 일반화 능력이 떨어진다는 것을 의미합니다.

분산이 높은 모델은 트레인 셋에 너무 맞춰져 있어서(오버피팅), 트레인 셋에서는 성능이 좋지만 테스트 셋에서는 성능이 급격히 떨어집니다.


바이어스-분산 트레이드오프(Bias-Variance Tradeoff)

바이어스와 분산은 일반적으로 서로 상충 관계에 있습니다. 바이어스를 줄이기 위해 더 복잡한 모델을 사용하면 분산이 증가하고, 분산을 줄이기 위해 더 단순한 모델을 사용하면 바이어스가 증가합니다.

최적의 모델은 바이어스와 분산이 적절히 균형을 이루는 지점에 있습니다. 이 지점에서 모델은 트레인 셋에서도 잘 작동하고, 테스트 셋에서도 좋은 성능을 보입니다.


오버피팅(Overfitting)과 언더피팅(Underfitting)

오버피팅과 언더피팅은 딥러닝에서 가장 흔하게 발생하는 문제입니다.

Screenshot 2025-04-14 at 5.20.56 PM.png

언더피팅(Underfitting)

언더피팅은 모델이 데이터의 패턴을 충분히 학습하지 못한 상태를 말합니다. 모델이 너무 단순하거나, 학습이 충분히 이루어지지 않았을 때 발생합니다.


언더피팅된 모델의 특징:

트레인 셋에서도 성능이 좋지 않음

바이어스가 높음

분산이 낮음

예를 들어, 복잡한 비선형 패턴을 가진 데이터를 직선으로 근사하려고 하면 언더피팅이 발생합니다.


오버피팅(Overfitting)

오버피팅은 모델이 트레인 데이터에 너무 맞춰져 있어, 데이터의 노이즈까지 학습한 상태를 말합니다. 모델이 너무 복잡하거나, 트레인 데이터가 부족할 때 주로 발생합니다.


오버피팅된 모델의 특징:

트레인 셋에서는 성능이 매우 좋음

테스트 셋에서는 성능이 떨어짐

바이어스가 낮음

분산이 높음

예를 들어, 10개의 데이터 포인트를 완벽하게 지나는 9차 다항식을 찾는 것은 오버피팅의 전형적인 예입니다. 이 모델은 트레인 데이터에 대해서는 오차가 0이지만, 새로운 데이터에 대해서는 심각한 오류를 만들어냅니다.


적절한 모델 복잡도 찾기

적절한 모델 복잡도는 바이어스와 분산 사이의 균형을 이루는 지점에 있습니다. 일반적으로 모델 복잡도가 증가할수록:

바이어스는 감소합니다

분산은 증가합니다

트레인 셋 오차는 계속 감소합니다

테스트 셋 오차는 처음에는 감소하다가 어느 지점 이후로는 증가합니다


overfit1.png

이상적인 모델 복잡도는 테스트 셋 오차가 최소가 되는 지점입니다. 이 지점에서 모델은 데이터의 패턴을 충분히 학습하면서도 노이즈에는 과도하게 반응하지 않습니다.


실전 적용을 위한 팁


1. 충분한 데이터 확보: 데이터가 많을수록 오버피팅 위험이 줄어듭니다.

2. 데이터 전처리와 분할: 데이터를 섞고 적절히 분할하는 것이 중요합니다.

3. 모델 복잡도 조절: 모델의 복잡도를 점진적으로 증가시키면서 검증 셋 성능을 모니터링합니다.

4. 하이퍼파라미터 튜닝: 학습률, 배치 크기, 에폭 수 등을 적절히 조정합니다.

5. 정규화 기법 사용: L1/L2 정규화, 드롭아웃, 배치 정규화 등을 활용해 오버피팅을 방지합니다.


딥러닝에서 성공적인 모델을 만들기 위해서는 이러한 개념들을 잘 이해하고 적용하는 것이 중요합니다. 바이어스와 분산 사이의 균형을 찾고, 언더피팅과 오버피팅을 피하는 것이 좋은 모델의 핵심입니다. 데이터를 올바르게 분할하고 활용하는 것 역시 모델의 일반화 능력을 향상시키는 데 큰 도움이 됩니다.

keyword
일요일 연재
이전 12화딥러닝 최적화의 핵심, 그라디언트 디센트 알고리즘