Drop-out (드롭아웃)은 딥러닝 모델의 Overfitting을 방지하기 위한 정규화 기법 중 하나입니다.
개요
훈련 과정에서는 랜덤하게 뉴런을 선택에서 학습에 제외함으로써 특정 뉴런이 학습 데이터에 Overfitting 되는 것을 방지합니다. 테스트과정에서는 모든 뉴런을 사용하지만, 드롭아웃 과정에서 학습에 제외되었던 비율을 고려하기 위해 각 모델이 만든 예측 값에 weight를 곱해줍니다.
Dropout 작동 방식
왼쪽의 (a)는 드롭아웃을 적용하지 않은 2개의 hidden layer가 있는 Neural Network이고, 오른쪽의 (b)는 드롭아웃을 적용한 Neural Network입니다.
학습 과정
드롭아웃이라는 단어에서 알 수 있듯이, 학습 과정에서 뉴런들과 그 연결선들을 랜덤하게 선택해서 "제외"한다는 것입니다. 드롭아웃이 적용되지 않았다면, 뉴런들이 co-adapt하면서 특정 뉴런들의 결과 값에 의존적이게 될 수 있습니다. 따라서 훈련데이터와 강한 상관 관계가 있는 뉴런들의 영향이 커져서 Overfitting을 발생시킬 확률을 높입니다.
하지만 랜덤하게 유닛들을 제거하는 과정에서 다양한 유닛들의 조합으로 학습을 진행하면서, 새로운 데이터와 노이즈에도 강한, robust한 모델을 만들어 낼 수 있습니다.
테스트 과정
테스트 과정에서는 드롭아웃을 적용하지는 않습니다. 단, 학습과정에서 적용된 드롭아웃의 결과를 적용하기 위해서 예측 결과값들에 weight를 곱한 뒤에 합치게 됩니다.
Dropout Rate
Dropout Rate는 학습 과정에서 얼마나 많은 비율의 뉴런들이 제외될지를 정하는 하이퍼파라미터입니다. 보통의 경우 0.2와 0.5 사이의 값을 선택하게 됩니다. 네트워크의 크기가 크거나 하나의 layer 안에 뉴런의 개수가 많을 수록 높은 Dropout Rate를 사용합니다.
만약 Dropout Rate가 0.3이라면, 학습 과정에서 30%의 뉴런들은 제외되어 각 학습에 진행됩니다. 그리고 제외된만큼의 비율을 보상하기 위해 테스트 과정에서 (1 - 0.3)인 0.7을 weight로 사용해 각 조합의 예측 결과 값에 0.7을 곱하게 됩니다.
Dropout의 효과
✅ 드롭아웃을 적용함으로써 뉴런들의 특정 Feature에 대해 의존적이게 되는 Overfitting을 방지할 수 있습니다.
✅ 여러 개의 작은 Neural Network를 합친 Ensemble Model처럼 작동하게 됩니다. Robustness를 강화하고 Generalization(일반화) 능력이 더 높아집니다.
✅ 다른 정규화 기법들에 비해 구현이 쉽고, 연산이 적습니다.
❌ 드롭아웃을 적용하지 않은 기본 모델이 비해서는 여러 조합의 경우들을 모두 연산해야 되기 때문에 연산량이 많아집니다.
❌ CNN과 같은 특정 모델에는 드롭아웃이 적용되면 영향이 미미하거나 성능을 저하시키는 결과가 발생할 수 있습니다. 데이터가 부족한 환경에는 Underfitting을 해결하는 것이 더 중요한데 오히려 드롭아웃으로 인해 필요한 학습을 못하게 될 수도 있습니다.
드롭아웃 설명 논문 링크:
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
'AI > DL' 카테고리의 다른 글
[DL] Label Smoothing (라벨 스무딩) 기법 (0) | 2024.07.28 |
---|