본문 바로가기
목차
ML

CNN / Vision Transformer 모델별 Dropout 위치와 Fine-tuning 시 설정

by ds31x 2026. 7. 14.
728x90
반응형

이 문서는

  • 주요 CNN backbone (VGG16, ResNet, DenseNet, EfficientNet, EfficientNetV2),
  • vision transformer (ViT, Swin),
  • 그리고 pure ConvNet인 ConvNeXt의
  • dropout 위치를 비교 하고,
  • linear probing 및 gradual unfreezing 시 dropout / BatchNorm 처리 방법을 정리함.

https://dsaint31.me/mkdocs_site/ML/ch09/dl_dropout/

 

BME

alpha-dropout dropout mc-dropout pytorch regularization Dropout and MC Dropout Dropout은 학습 중 일부 neuron의 출력(=activation) 을 임시로 0으로 만들어 co-adaptation을 줄이고 generalization을 높이는 neural network regularization(

dsaint31.me


1. 모델별 Dropout 위치

1-1. 최종 Linear(num_classes) 직전에 dropout이 있는 모델

  • VGG16
    • 원 논문 (Simonyan & Zisserman, 2014)에서 앞의 두 FC layer를 dropout 0.5으로 regularize함.
    • Head 내부에 dropout이 위치함:
      Linear(25088, 4096) → ReLU → Dropout(0.5) → Linear(4096, 4096) → ReLU → Dropout(0.5) → Linear(4096, num_classes)
    • 마지막 FC layer 직전이 ReLU → Dropout(0.5)이므로 이 그룹에 포함됨 (torchvision 구현 일치).
  • EfficientNet (V1)
    • 원 논문 (Tan & Le, 2019)에서 최종 classifier 직전 dropout과 stochastic depth를 함께 사용함.
    • GAP → Dropout → Linear(num_classes) 구조 (torchvision 구현 일치).
    • Dropout rate는 model scale에 따라 증가: B0의 0.2 ~ B7의 0.5.
  • EfficientNetV2
    • 원 논문 (Tan & Le, 2021)은 progressive learning에서 dropout을 adaptive regularization 의 하나로 사용함.
    • V1과 동일한 GAP → Dropout → Linear(num_classes) 구조.
    • S / M / L에서 각각 0.2 / 0.3 / 0.4.

1-2. 최종 Linear(num_classes) 직전에 dropout이 없는 모델

  • ResNet
    • GAP → Linear 구조로 dropout 전무.
    • 원 논문 (He et al., 2016)은 BN이 regularizer 역할 을 한다는 관점에서 dropout을 사용하지 않음.
  • DenseNet (121 / 161 / 169 / 201)
    • features → ReLU → GAP → Linear 구조로 head dropout 없음.
    • 원 논문 (Huang et al., 2017)의 drop_rate는 dense block 내부 convolution 뒤에
      삽입되는 optional 설정임.
      • Data augmentation 없이 CIFAR 등을 학습할 때 사용된 설정.
      • ImageNet pretrained model은 drop_rate=0이 기본값.

1-3. Vision Transformer 계열 (ViT, Swin)

  • 원 논문 및 저자 reference 구현에서는 최종 Linear(num_classes) 직전에 dropout이 없음.
    • ViT (Dosovitskiy et al., 2021):
      • dropout은 position embedding을 더한 직후 (pos_drop)와 각 block 내부 (attention weight, MLP)에만 존재함.
      • Head는 최종 LayerNorm → CLS token → Linear(num_classes)로 직접 연결되며 직전 dropout 없음.
    • Swin (Liu et al., 2021, Microsoft official):
      • drop_ratepos_drop과 block 내부 (MLP·projection) drop으로만 전달됨.
      • Head는 norm → avgpool → Linear(num_classes)로 직접 연결되며 직전 dropout 없음.
    • 두 모델 모두 주 regularizer는 head dropout이 아니라 stochastic depth (DropPath, drop_path_rate) 이며, 이는 head 직전이 아니라 각 block의 residual branch에 위치함.
  • 원 논문 vs 널리 사용되는 구현 (timm)의 차이:
    • timm의 ViT/Swin은 head 직전에 self.head_drop = nn.Dropout(drop_rate)를 연결함
      • forward_head에서 x = self.head_drop(x)self.head(x) 순서.
    • 즉 원 논문과 달리 head 직전 dropout module 자체는 존재함.
    • 단, drop_rate의 기본값이 0이므로 원 논문 설계를 반영하여 기본 상태에서는 비활성 (identity로 동작).
    • drop_rate를 명시적으로 지정할 때만 활성화됨.
    • 이는 수십 개 모델을 하나의 drop_rate 인자로 통일 제어하기 위한 라이브러리의 configurability 목적이며,
      architecture 본래 요소는 아님.

 


1-4. ConvNeXt

  • ConvNeXt (Liu et al., 2022, "A ConvNet for the 2020s", 저자 reference 구현):
    • 저자가 "pure ConvNet"으로 제시한 모델로,
    • 표준 ResNet을 현대화한 순수 convolution 구조임.
  • 최종 Linear(num_classes) 직전에 dropout이 없음:
    • Head는 GAP → 최종 LayerNorm → Linear(num_classes)로 직접 연결됨.
    • BatchNorm 대신 LayerNorm을 채택함.
    • 원 논문 기본값은 drop_rate=0, drop_path_rate=0.1로, 주 regularizer는 stochastic depth (DropPath)임.
  • 원 논문 vs 널리 사용되는 구현 (timm)의 차이:
    • timm의 ConvNeXt head는 Linear 직전에 dropout module을 연결하나,
    • 기본 drop_rate=0이라 원 논문과 동일하게 비활성임
    • 즉, ViT / Swin과 같은 패턴.

1-5. 정리

Model 최종 Linear(num_classes)
직전 dropout
비고
VGG16 O (0.5 × 2) Head 내부 FC 사이에 위치
ResNet X BN 의존 설계
DenseNet X Block 내부 drop_rate도 기본 0
EfficientNet O (0.2~0.5) Stochastic depth 별도 존재
EfficientNetV2 O (0.2~0.4) Stochastic depth 별도 존재
ViT X (원 논문) timm은 head_drop 연결하나
기본 drop_rate=0
Swin X (원 논문) timm은 head_drop 연결하나
기본 drop_rate=0
ConvNeXt X (원 논문) pure ConvNet,
timm은 head drop 연결하나
기본 drop_rate=0
  • Dropout 유무는 대체로
    • BN 의존 설계 (ResNet, DenseNet) vs. head-level regularization 설계 (VGG, EfficientNet 계열)의
    • 차이를 반영함.
  • 단, EfficientNet 계열은 BN을 쓰면서도 head dropout과 stochastic depth (drop connect, 기본 0.2)를
    추가로 사용하는 예외적 조합임.
    • Fine-tuning 시 head dropout과 stochastic depth(V2)는 구분하여 조정 해야 함.
  • Vision transformer (ViT, Swin)와 pure ConvNet인 ConvNeXt는 원 논문 기준 head 직전 dropout이 없고,
    LayerNorm + stochastic depth 조합에 의존
    함.
    • 널리 쓰이는 timm 구현은 head 직전 dropout module을 두되 기본 drop_rate=0으로 원 논문과 일치시킴.

https://dsaint31.me/mkdocs_site/ML/ch09/batch_normalization/

 

BME

batch normalization bn deep learning gradient exploding gradient vanishing internal covariate shift layer normalization regularization Batch Normalization Batch Normalization은 Ioffe et al.이 2015년 제안한 기법으로 Gradient Vanishing과 Exploding

dsaint31.me


2. Linear Probing과 Dropout

2-1. 정의

  • Linear probing: pretrained backbone의 모든 parameter를 freeze하고,
    최종 linear classifier (Linear(num_classes))만 새로 초기화하여 학습하는 방식임.
  • Backbone을 고정된 feature extractor로 취급함.
  • 용도:
    • Representation 품질 평가의 표준 protocol (SimCLR, MAE 등의 evaluation).
    • Small dataset fine-tuning의 첫 단계.

2-2. Dropout 처리

  • 엄밀한 protocol에서는 backbone 전체를 eval() mode로 둠.
    • Dropout: identity로 동작 (비활성화) → head 직전 drop_rate는 사실상 0.
    • BN: running statistics 사용 (갱신 없음).
    • Feature 추출이 deterministic해짐.
  • 주의: requires_grad=False만 설정하고 model.train() 상태로 학습하면 안 됨.
    • Dropout은 parameter가 없으므로 여전히 stochastic하게 동작함.
    • BN running statistics가 target data로 갱신됨 → "frozen backbone" 전제가 깨짐.
  • Feature-level regularization을 위해 dropout을 의도적으로 활성 상태로 유지하는 변형도 가능하나,
    이는 별도로 명시해야 하는 설계 선택임.

3. Gradual Unfreezing 시 Dropout 설정

CNN에서의 기본적인 finetuning기법이나,
Transformer 계열에서도 소량의 데이터셋에서는 사용되기도 함.

3-1. 일반 원칙

  • 기준: "unfrozen module은 train(), frozen module은 eval()"
    • Frozen 구간: dropout 자동 비활성화 + BN statistics 고정.
    • 학습 중인 구간: dropout만 stochastic하게 동작.
  • Dropout rate를 stage마다 바꾸기보다,
    • train/eval mode를 module 단위로 관리하여
    • "학습 중인 구간에서만 regularization이 동작"하도록 만드는 것이 표준임.
  • Rate 조정은 dataset 규모에 맞춘 전역적 설계 선택으로 접근함.

3-2. 모델별 설정

  • VGG16
    • Linear probing 단계 (최종 Linear만 학습): 직전 Dropout(0.5)를 eval로 둠.
    • Classifier FC layer들을 unfreeze하는 단계부터 해당 dropout 활성화.
    • Small dataset에서 0.5는 과도할 수 있음 → 0.2~0.3으로 낮추는 것이 실용적.
    • BN이 없으므로 statistics 관리 부담 없음.
  • ResNet / DenseNet
    • Dropout이 없으므로 설정할 것이 없음.
    • 핵심 관리 대상은 BN:
      • Block을 unfreeze해도 small dataset에서는 BN을 fully frozen 상태로 두는 것이 표준적.
        • eval()로 running statistics 고정 + affine parameter ($\gamma$, $\beta$)도 freeze.
        • Object detection의 FrozenBatchNorm2d가 대표적 사례.
      • 변형으로, running statistics만 고정하고 affine parameter는 학습하도록 두는 방식도 있음.
        단, data가 충분치 않으면 오히려 불안정할 수 있어 우선 순위는 fully frozen임.
    • Regularization이 부족하면 GAP → Dropout(0.2~0.3) → Linear를 수동 추가하는 변형이 흔함.
  • EfficientNet / EfficientNetV2
    • 두 종류의 regularization을 구분해야 함:
      • Head dropout: linear probing 단계부터 학습 대상인 head에 속하므로 활성화.
        Frozen feature 위에서는 기본값 (0.2~0.4) 유지 또는 소폭 하향.
      • Stochastic depth: frozen block에서는 eval로 비활성화되고,
        해당 block을 unfreeze하는 stage에서 자동 재활성화됨.
    • 후반 stage에 깊은 block까지 열 경우:
      • Small dataset에서는 stochastic depth rate (기본 0.2)를 0.1 이하로 낮추는 것이 안정적.
      • BN은 unfrozen block 내에서도 eval 유지를 우선 고려.
  • Vision Transformer (ViT, Swin) 및 ConvNeXt
    • Head 직전 dropout은 원 논문 기준 없음 → linear probing 단계에서 별도 설정 불필요.
      (timm 사용 시 head drop은 기본 drop_rate=0이라 이미 비활성.)
    • 관리 대상은 두 가지:
      • Block 내부 dropout (drop_rate; ViT·Swin의 pos_drop, attention·MLP drop):
        모델별 기본값 — ViT 0 (원 논문은 학습 시 0.1까지 사용하기도 함), Swin 0, ConvNeXt 0.
        기본값 0에서는 Dropout(0)이 train/eval 모두 identity이므로, frozen/unfreeze 여부와 무관하게
        동작에 영향이 없음 (train/eval 토글이 무의미). drop_rate를 명시적으로 0보다 크게 설정한 경우에만
        frozen block은 eval로 비활성, unfreeze 시 활성이라는 구분이 의미를 가짐.
      • Stochastic depth (drop_path_rate): EfficientNet과 동일하게 residual branch에 위치하며,
        frozen block에서 eval로 비활성, unfreeze 시 재활성화됨.
        모델별 기본값 (ImageNet-1K 기준) — Swin-T/S/B 0.2/0.3/0.5, ConvNeXt-T/S/B/L 0.1/0.4/0.5/0.5,
        ViT는 원 논문에서 stochastic depth 미사용 (DeiT·timm에서 도입, 설정별 상이).
    • BN이 아니라 LayerNorm을 쓰므로 running-statistics mismatch 문제가 없음.
      • unfreeze 시 CNN처럼 normalization을 eval로 고정할 필요가 없고,
      • regularization 조정의 초점은 drop_ratedrop_path_rate로 이동함.
    • Small dataset에서는 pretrained 기본 drop_path_rate가 다소 높을 수 있어 하향이 안정적.

4. 결론

  • Head 직전 dropout: VGG16, EfficientNet, EfficientNetV2에 존재 / ResNet, DenseNet에 부재.
  • Vision transformer (ViT, Swin)와 pure ConvNet인 ConvNeXt는 원 논문 기준 head 직전 dropout이 없으며,
    timm 등 구현은 module을 두되 기본 drop_rate=0으로 원 논문과 일치시킴.
  • Linear probing의 엄밀한 구현은 backbone eval() 고정이며, 이때 dropout은 비활성화됨.
  • Gradual unfreezing에서는 module 단위 train/eval 관리가 핵심이며,
    dropout rate와 stochastic depth rate는 dataset 규모에 맞춰 전역적으로 조정함.
728x90

'ML' 카테고리의 다른 글

Model EMA  (0) 2026.07.19
Patch Embedding - Vision Transformers  (0) 2026.07.19
DL Vision Model들에서 Stem이란?  (0) 2026.07.13
Patch Merging of SWIN  (0) 2026.07.11
optuna : Automatic Hyperparameter Optimization Framework  (0) 2026.06.27