Skip to content

Dropout

딥러닝에서 Dropout이란? 과적합을 잡는 똑똑한 방법

딥러닝 모델을 만들다 보면 한 번쯤은 이런 고민을 하게 된다. “훈련 데이터에선 성능이 좋은데, 테스트 데이터에선 왜 이러지…?”

바로 과적합(Overfitting) 문제이다.

이걸 잡기 위한 다양한 방법 중 하나가 바로 오늘의 주제, Dropout(드롭아웃)이다.

1. Dropout이란?

Dropout은 모델이 학습하는 동안 일부 뉴런을 무작위로 꺼버리는 방법이다. 말 그대로 “떨어뜨린다(drop out)”는 뜻.

한마디로, 신경망에 일부러 구멍을 낸다고 생각하면 됩니다.
매번 학습할 때마다 신경망의 일부 연결을 랜덤하게 끊어서, 모델이 특정한 뉴런 하나에 너무 의존하지 않게 만드는 거다.

2. 왜 이런 이상한(?) 짓을 할까?

이걸 이해하려면 과적합이라는 문제부터 짚고 가야 한다.

과적합은 모델이 훈련 데이터에 너무 맞춰져서, 새롭고 낯선 데이터에는 잘 대응하지 못하는 상태를 말한다. 너무 외운 거죠. 마치 시험 전에 기출문제만 100번 풀고, 정작 진짜 시험은 못 푸는 학생 처럼.

Dropout은 이런 “암기형 학습”을 방지하기 위해, 학습 도중에 무작위로 정보를 일부러 누락시킵니다.
이렇게 하면 모델은 전체적으로 더 튼튼한 패턴을 배우게 되죠.

3. 어떻게 작동할까?

예를 들어 어떤 은닉층에 뉴런이 6개 있다고 가정해보자.

  • 평소엔: [o o o o o o] (모든 뉴런 사용)

  • Dropout 적용 시 (rate=0.5): [o x o x o o] (3개는 비활성화)

이렇게 뉴런 절반을 랜덤하게 꺼놓고 학습한다. 그럼 매번 다르게 생긴 ‘작은 신경망’을 학습하는 셈. 결국엔 여러 모델을 앙상블한 것처럼 강건한 모델이 만들어집니다.

4. 학습 시 vs 예측 시

  • 학습할 때는 Dropout을 켜서 뉴런을 랜덤하게 끈다.

  • 예측할 때는 Dropout을 끄고 모든 뉴런을 사용한다.
    대신, 학습 시 꺼졌던 비율만큼 가중치를 조정해서 예측이 왜곡되지 않게 한다.

5. 실제 코드로 보면? (PyTorch 예시)

import torch.nn as nn

model = nn.Sequential(
    nn.Linear(128, 64),
    nn.ReLU(),
    nn.Dropout(p=0.5),  # 50% 확률로 뉴런 비활성화
    nn.Linear(64, 10)
)

단 한 줄만으로 Dropout을 적용할 수 있다.

요약

항목 설명
목적 과적합 방지
방식 학습 중 일부 뉴런을 랜덤하게 비활성화
효과 모델의 일반화 성능 향상
주의점 예측 시에는 Dropout을 꺼야 함