학습 자료 글/딥러닝과 llm

[밑바닥부터 시작하는 딥러닝 1] 10c. 드롭아웃과 검증 데이터는 과대적합을 서로 다른 위치에서 막는다

cedis 2026. 5. 27. 02:48

밑바닥부터 시작하는 딥러닝 1 - 과대적합과 검증 데이터 심화

학습이 잘 된다는 말은 훈련 데이터 점수가 높다는 뜻만은 아니다. 처음 보는 데이터에서도 잘 맞아야 한다. 이때 문제가 되는 것이 과대적합이다.

이번 글은 드롭아웃, 가중치 감소, 검증 데이터를 한 줄 요약으로 끝내지 않고, 각각이 과대적합을 어느 위치에서 막는지 구분한다.

이번 글에서 잡을 것

  • 과대적합은 훈련 데이터에는 잘 맞지만 새로운 데이터에는 약한 상태다.
  • 가중치 감소는 큰 가중치에 페널티를 주어 모델이 과하게 날카로워지는 것을 막는다.
  • 드롭아웃은 훈련 중 일부 뉴런을 꺼서 특정 뉴런 의존을 줄인다.
  • 검증 데이터는 하이퍼파라미터 선택용이고, 시험 데이터는 최종 평가용이다.

과대적합을 숫자로 보면

과대적합은 훈련 정확도만 보면 좋아 보인다. 하지만 시험 정확도와 벌어지면 문제가 보인다.

에포크 훈련 정확도 시험 정확도 판단
1 70% 68% 둘 다 낮지만 정상적으로 시작
5 92% 88% 잘 학습 중
20 99% 82% 훈련 데이터에 치우쳤을 가능성

가중치 감소는 값을 누른다

가중치 감소는 손실 함수에 가중치 크기에 대한 벌점을 더한다. 큰 가중치는 특정 입력에 과하게 반응하는 날카로운 모델을 만들 수 있으므로, 이를 수학적으로 누르는 방식이다.

방식 어디를 조절하나 효과
가중치 감소 가중치 값의 크기 특정 패턴에 과도하게 맞는 것을 완화
드롭아웃 뉴런 사용 여부 특정 뉴런 조합 의존을 완화

드롭아웃은 구조를 흔든다

드롭아웃은 훈련할 때 은닉층 뉴런 일부를 무작위로 끈다. 매번 다른 일부 뉴런이 꺼지므로, 모델은 특정 뉴런 하나에만 의존하기 어렵다.

입력
batch
뉴런 일부 off
train
남은 경로로 학습
robust
추론
all on
단계 동작 목적
훈련 일부 뉴런을 무작위로 끔 특정 경로 의존 줄이기
추론 모든 뉴런을 사용 안정적인 예측 사용
출력 보정 살아남은 비율 고려 훈련/추론 출력 크기 차이 줄이기
import numpy as np

x = np.array([1.0, 2.0, 3.0, 4.0])
dropout_ratio = 0.5

mask = np.array([True, False, True, False])
train_out = x * mask
test_out = x * (1.0 - dropout_ratio)

print(train_out)
print(test_out)

예상 출력

[1. 0. 3. 0.]
[0.5 1.  1.5 2. ]

검증 데이터와 시험 데이터를 섞으면 안 된다

하이퍼파라미터를 고를 때 시험 데이터를 계속 보면, 결국 시험 데이터에 맞는 선택을 하게 된다. 그러면 시험 데이터가 더 이상 처음 보는 데이터 역할을 하지 못한다.

데이터 쓰는 시점 주의점
훈련 데이터 가중치 학습 모델이 직접 배움
검증 데이터 학습률, 가중치 감소 계수 등 선택 여러 번 봐도 됨
시험 데이터 최종 평가 마지막에만 사용해야 함

실무적인 판단

검증 데이터 점수로 설정을 고르고, 시험 데이터 점수는 마지막 보고서에 가까운 값으로 남겨야 한다.

검증 데이터 분리는 코드에서 어떻게 보이나

훈련 데이터 일부를 검증 데이터로 떼어낸다는 말은 실제로는 인덱스를 섞고 앞부분 일부를 따로 보관하는 작업이다.

import numpy as np

x_train = np.arange(10)
validation_rate = 0.2

validation_num = int(x_train.shape[0] * validation_rate)
indices = np.arange(x_train.shape[0])
np.random.shuffle(indices)

x_val = x_train[indices[:validation_num]]
x_train_small = x_train[indices[validation_num:]]

print(x_val.shape)
print(x_train_small.shape)

예상 출력

(2,)
(8,)

스스로 점검

  1. 훈련 정확도와 시험 정확도가 크게 벌어질 때 무엇을 의심해야 하는가?
  2. 가중치 감소와 드롭아웃이 과대적합을 막는 위치가 어떻게 다른가?
  3. 검증 데이터와 시험 데이터를 분리해야 하는 이유를 설명할 수 있는가?

이번 글에서 기억할 것

  • 과대적합은 훈련 데이터에는 잘 맞지만 새로운 데이터에는 약한 상태다.
  • 가중치 감소는 큰 가중치에 페널티를 주어 모델이 과하게 날카로워지는 것을 막는다.
  • 드롭아웃은 훈련 중 일부 뉴런을 꺼서 특정 뉴런 의존을 줄인다.
  • 검증 데이터는 하이퍼파라미터 선택용이고, 시험 데이터는 최종 평가용이다.

다음 글로 이어지는 질문

이제 2장부터 6장까지의 표준 흐름은 잡았다. 다음 시리즈를 만든다면 7장 CNN을 별도 축으로 분리하는 편이 좋다.

한 줄 정리: 과대적합 대응은 한 가지 기법이 아니라, 가중치 크기, 뉴런 의존, 평가 데이터 분리를 함께 관리하는 일이다.