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을 꺼야 함 |