드롭아웃이 하는 일
학습할 때는 활성화값 중 p 비율을 무작위로 0으로 만들고, 기댓값을 유지하도록 나머지 활성화값의 크기를 1/(1-p) 배로 조정해. 평가할 때는 드롭아웃 없이 그대로 통과시켜. 이렇게 하면 모델이 특정 뉴런 하나에 의존할 수 없어서 정보를 여러 뉴런에 분산해야 해. 그래서 드롭아웃은 강력한 암묵적 규제로 작동해.
흔히 쓰는 비율은 Transformer에서 p=0.1, CNN의 완전연결층에서 p=0.2-0.5, 합성곱층에서 p=0.0이야. 합성곱층에도 정말 드롭아웃이 필요하다면 SpatialDropout2d를 써.
nn.Sequential(nn.Linear(...), nn.ReLU(), nn.Dropout(0.2), nn.Linear(...))처럼 구성해. 순서를 반대로 두면 비선형 변환 전에 활성화값을 0으로 만드는 고전적인 실수가 돼.도움이 될 때와 해가 될 때
드롭아웃은 dense MLP가 주류이던 시절과 초기 Transformer에서 큰 효과를 냈어. 하지만 BatchNorm과 현대적인 데이터 증강을 함께 쓰면 효과가 크지 않을 수 있어. 일부 비전 파이프라인에서는 드롭아웃이 BatchNorm과 나쁘게 상호작용해 성능을 떨어뜨리기도 해. Transformer에서는 기본값으로 쓰고, CNN에서는 조정해 봐. 이미 다른 규제를 쓰는 표 형식 모델에서는 꺼 두는 편이 좋아.
알아둘 변형
SpatialDropout2d는 CNN에서 특징 맵 전체를 제거해. 인접 채널의 상관관계가 높을 때 유용해. DropPath / 확률적 깊이는 잔차 블록 전체를 무작위로 제거하며, ConvNeXt와 ViT처럼 매우 깊은 신경망에 사용해. Word/토큰 드롭아웃은 NLP에서 토큰 전체를 제거하며, 때로는 데이터 증강의 대안으로 써.