Skip to content
SON BLOG
Go back

Dropout이란? PyTorch 신경망에 Dropout 적용하기

Edit page

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

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

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

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

1. Dropout이란?

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

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

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

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

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

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

3. 어떻게 작동할까?

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

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

4. 학습 시 vs 예측 시

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

import torch.nn as nn

# 간단한 신경망에 Dropout 적용
model = nn.Sequential(
    nn.Linear(128, 64),    # 입력층 -> 은닉층
    nn.ReLU(),             # 활성화 함수
    nn.Dropout(p=0.5),     # 50% 확률로 뉴런 비활성화
    nn.Linear(64, 10)      # 은닉층 -> 출력층
)

# 학습 모드 설정 (Dropout 활성화)
model.train()

# 평가 모드 설정 (Dropout 비활성화)  
model.eval()

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

요약

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

Edit page
Share this post:

Previous Post
macOS에서 USB 포맷 실패 시 해결 방법
Next Post
OpenSearch Approximate k-NN — 근사 벡터 검색 알고리즘과 설정 가이드