Adventure Time - Finn 3
본문 바로가기
AI/ML

Dropout : 과적합을 막는 정규화 기법

by hyun9_9 2026. 3. 25.

 

Underfitting vs Overfitting

Neural Network를 학습시킬 때 두 가지 문제가 발생할 수 있습니다.

설명

Underfitting 학습 데이터 샘플들의 정확도가 매우 낮은 상태
Overfitting 학습 데이터 샘플들의 정확도는 높지만 새로운 데이터에는 예측 성능이 떨어지는 상태

네트워크는 Overfitting을 막고 Underfitting을 피하는 적절한 균형을 찾아야 합니다.


Overfitting 해결 방법들

Overfitting을 줄이는 방법은 여러 가지가 있습니다.

  • 학습 데이터셋 늘리기 : 더 많은 데이터로 일반적인 패턴을 학습
  • L2 Regularization : Weight가 너무 커지지 않도록 패널티를 주는 방법
  • Batch Normalization : 각 레이어의 입력값을 정규화해 학습을 안정화
  • Dropout : 뉴런을 랜덤하게 꺼서 특정 패턴에 과하게 의존하지 않도록 하는 방법

Dropout이란?

지금까지는 모든 노드(뉴런)를 사용해서 고양이인지 아닌지 판단했습니다.

Dropout은 각각의 뉴런들 중 몇몇의 뉴런을 꺼두고 학습하는 방법입니다.

일반 학습              Dropout 적용
○─○─○─○                ○─○─ ─○
│ │ │ │                │ │   │
○─○─○─○    →           ○─ ─○─○    ← 랜덤으로 일부 뉴런 OFF
│ │ │ │                  │   │
○─○─○─○                ○─○─ ─○
모든 뉴런 사용        일부 뉴런만 사용

꺼지는 뉴런은 랜덤으로 설정됩니다.


고양이 예시로 이해하기

Dropout 없이 학습할 때:

고양이의 모든 특징(귀, 수염, 발톱, 털, 눈...)을 전부 보면서 고양이를 맞춘다

 

Dropout을 사용해 학습할 때:

특정 몇 가지 특징만 보여주고 맞춰봐!

이렇게 학습하면 새로운 종류의 고양이 사진을 보여줄 때도 몇 가지 특징만 있으면 쉽게 고양이라고 맞출 수 있게 됩니다.
특정 특징에만 과하게 의존하지 않고, 다양한 특징으로 판단하는 능력이 생기기 때문입니다.


학습 vs 테스트에서의 Dropout

Dropout

학습(Training) 랜덤으로 일부 뉴런을 끄고 학습
테스트(Test) 모든 뉴런을 사용해서 예측

학습이 완료된 후 테스트할 때는 모든 뉴런을 사용합니다.
학습할 때 일부 뉴런만으로도 잘 맞추도록 훈련됐기 때문에, 테스트 때 모든 뉴런을 사용하면 더욱 높은 정확도를 낼 수 있습니다.


코드 적용

# rate : 뉴런을 몇 퍼센트 비율로 끌것인지 (0~1 사이 값)
# 일반적으로 0.3 또는 0.5 를 사용
def dropout(rate):
    return tf.keras.layers.Dropout(rate)

모델에 적용할 때는 Dense + ReLU 다음에 한 줄만 추가합니다:

for i in range(2):
    self.model.add(dense(256, weight_init))
    self.model.add(relu())
    self.model.add(dropout(rate=0.5))  # 각 뉴런의 50%만 사용해서 학습

training 파라미터

logits = model(images, training=True)   # 학습 시 : Dropout 적용
logits = model(images, training=False)  # 테스트 시 : Dropout 미적용 (모든 뉴런 사용)

training=True 와 training=False 로 학습과 테스트를 구분합니다.
학습 때는 Dropout을 켜고, 테스트 때는 Dropout을 꺼서 모든 뉴런을 사용합니다.


정리

개념 설명

Dropout 뉴런을 랜덤하게 꺼서 과적합을 방지하는 정규화 기법
rate 뉴런을 끄는 비율 (0.3 또는 0.5 주로 사용)
training=True 학습 시 Dropout 적용
training=False 테스트 시 Dropout 미적용, 모든 뉴런 사용

Dropout은 코드 한 줄만 추가하면 되는 간단한 방법이지만, Overfitting을 효과적으로 줄여주는 강력한 기법입니다. 🚀