DropPath 와 Stochastic Depth

2026. 7. 10. 16:03·Programming/ML
728x90
728x90

DropPath와 Stochastic Depth는
학습 중 residual branch 또는 계산 경로 전체를 확률적으로 제거하여
특정 경로에 대한 의존성을 줄이는 regularization 기법임.

현재 timm, Hugging Face Transformers 및 여러 vision model 구현에서는

  • DropPath를 per-sample Stochastic Depth와 거의 같은 의미로 사용함.
  • timm의 DropPath 구현도 코드 주석에서 이를 명시적으로 per-sample stochastic depth라고 설명

2024.10.27 - [Programming/ML] - [ML] Regularization

 

[ML] Regularization

Regularization 이란?기계 학습과 딥러닝에서 Regularization은 모델이 overfitting(과적합)되지 않도록 도와주는 기법을 의미함.Overfitting(과적합)은 모델이 훈련 데이터에 너무 잘 맞아 새로운 데이터에 대

dsaint31.tistory.com


1. 개념과 역사

1.1 Stochastic Depth

Stochastic Depth는

  • Gao Huang, Yu Sun, Zhuang Liu, Daniel Sedra, Kilian Weinberger가
  • 2016년 발표한 Deep Networks with Stochastic Depth에서 제안된 기술임.

https://arxiv.org/abs/1603.09382

 

Deep Networks with Stochastic Depth

Very deep convolutional networks with hundreds of layers have led to significant reductions in error on competitive benchmarks. Although the unmatched expressiveness of the many layers can be highly desirable at test time, training very deep networks comes

arxiv.org

 

원 논문의 핵심 아이디어는 다음과 같음.

  • 매우 깊은 ResNet을 구성함.
  • 학습 중에는 일부 residual block을 무작위로 제거하고 제거된 residual block은 skip connection을 통해 우회함.
  • 평가 시에는 전체 residual block을 사용함.

이를 통해

  • 학습 중에는 원래 network보다 얕은 subnetwork를 무작위로 사용하고,
  • 평가 시에는 원래의 깊은 network 전체를 사용하게 함.

주의할 점은 원 논문의 경우 residual block의 활성화 여부를 mini-batch 단위로 결정했음.

  • 따라서 하나의 mini-batch에 포함된 모든 sample은 동일한 residual block 구성을 사용함.

또한 residual block을 실행하기 전에 활성화 여부를 결정하도록 구현함

  • 제거된 residual block의 forward와 backward 계산을 실제로 생략할 수 있도록 설계됨.
  • 이를 통한 훈련 중 계산량 이득이 있었고 훈련 속도가 빨라지는 장점도 누림.

stochastic 의 뜻에 대한 자세한 자료: 2024.02.23 - [.../Math] - [Math] Random이란?

 

[Math] Random이란?

Random: Random은주로 non-determinstic 인 "정해진 패턴 또는 순서없이" 결과가 발생하는 것을 개별 사건이나 값등을 의미하는 경우가 많다. Deterministc인 경우,function (or differential equation) 등을 이용한 모

dsaint31.tistory.com

residual block에 대한 참고자료: https://dsaint31.me/mkdocs_site/ML/ch14_cnn/resnet/#residual-block

 

BME

computer vision image classification residual learning resnet shortcut connection skip connection ResNet: Deep Residual Learning for Image Recognition (2015) ref.: original paper, Deep Residual Learning for Image Recognition ILSVRC 2015 우승 모델이며

dsaint31.me

 


1.2 Drop-path

drop-path라는 용어는

  • 2016년 Gustav Larsson, Michael Maire, Gregory Shakhnarovich의
  • FractalNet: Ultra-Deep Neural Networks without Residuals에서 제시됨.

FractalNet은 입력에서 출력까지 여러 개의 병렬적인 계산 경로를 가지는 network 였음.

  • Dropout이 개별 activation을 제거하여 neuron 사이의 co-adaptation을 줄이는 것처럼,
  • drop-path는 계산 경로 전체를 제거하여 path 사이의 co-adaptation을 줄이는 방법 으로 제안.

즉, FractalNet에서의 drop-path는 다음과 같은 방법임.

  • 개별 activation이 아니라 subpath 전체를 제거함.
  • 하나의 path가 제거되어도 다른 계산 경로가 남도록 함.
  • 여러 path가 서로 지나치게 의존하는 현상을 억제함.

사실 논문의 FractalNet은 residual connection이 없는 구조였음.

 

즉, drop-path가 반드시 ResNet의 identity skip connection을 요구하는 것은 아님.

핵심 조건은 다음과 같음.

Drop-path를 사용하려면
하나의 path가 제거되더라도
입력에서 출력까지 다른 유효한 계산 경로가 남아 있어야 함.


1.3 현대적인 용어 사용

역사적으로 두 용어의 출발점은 다음과 같이 구분됨.

  • Stochastic Depth : ResNet의 residual block을 무작위로 우회하는 방법
  • Drop-path : FractalNet의 계산 subpath를 무작위로 제거하는 방법

그러나 오늘날에는 두 용어가 거의 같은 의미로 사용되고 있음:

  • timm의 DropPath는 코드에서 per-sample Stochastic Depth로 설명되어 있음.
  • Hugging Face Transformers의 여러 vision model도 유사한 방식으로 구현함.

현재 실무에서는 다음과 같이 구분하여 이해할 수 있음.

  • Stochastic Depth : regularization 기법의 일반적인 이름
  • DropPath : 해당 기법을 구현한 module 또는 layer의 이름

2. DropPath의 효과

2.1 Regularization 효과

DropPath는 학습 중 residual branch 일부(학습패스)를 무작위로 제거함.

  • 따라서 뒤쪽 block이 특정 앞쪽 block의 출력에 지나치게 의존하는 현상을 줄일 수 있음.
  • 매 iteration마다 다른 residual path 조합이 사용되므로,
  • 하나의 고정된 깊은 network만 학습하는 것이 아니라
  • 여러 깊이와 여러 path 조합을 공유 parameter로 학습하는 효과가 발생함.

넓은 의미에서
여러 subnetworks를 함께 학습하는
implicit ensemble과 유사하게 해석할 수 있음.

주요 목적은 다음과 같음.

  • 특정 residual branch에 대한 과도한 의존성 억제
  • path 또는 block 사이의 co-adaptation 감소
  • overfitting 완화
  • generalization 성능 개선

2.2 실제 계산량과 학습 시간

원래 Stochastic Depth 논문 방식

  • residual block의 활성 여부를 먼저 결정함.
  • 이 확률에 따라 제거된 residual block은 forward와 backward 계산 자체를 수행하지 않았음.

따라서 원 논문의 방식은 다음과 같은 효과를 가질 수 있었음.

  • 학습 중 기대 network depth 감소
  • forward 계산량 감소
  • backward 계산량 감소
  • 학습 시간 감소

그러나 현대적인 timm 또는 Hugging Face 구현은 일반적으로 다음 순서로 동작함.

residual = block(x)
residual = drop_path(residual)
output = x + residual

 

이 경우 block(x)를 이미 계산한 뒤에 DropPath mask를 적용함.

  • residual branch가 최종적으로 0이 되더라도 이미 residual block의 연산은 이미 수행된 상태임.

결과적으로 현대적인 DropPath layer는 regularization 효과는 제공하지만, 실제 FLOPs나 학습 시간을 거의 줄이지 못함.

참고로 per-sample 방식을 사용할 경우,

  • 같은 mini-batch 안에서도 유지되는 sample과 제거되는 sample이 섞여 있으므로,
  • 일반적인 dense GPU 연산에서 일부 sample의 branch 계산만 효율적으로 생략하기 어려움.

정리하면 다음과 같음.

구현방식 Residual branch 계산 실제 계산량 감소
원 논문의 conditional block 실행 mask를 먼저 결정하고 필요한 block만 계산 가능
일반적인 현대 DropPath layer branch를 계산한 뒤 mask 적용 거의 없음

3. DropPath의 동작 원리

3.1 Residual block의 기본 구조

일반적인 residual block은 다음과 같이 표현:

$$ \textbf{y} = \textbf{x} + F(\textbf{x}) $$

  • $\textbf{x}$ : identity path를 통해 전달되는 입력
  • $F(\textbf{x})$ : convolution, attention 또는 MLP 등의 변환을 수행하는 residual branch
  • $\textbf{y}$ : identity path와 residual branch를 더한 출력

Identity path는 입력 tensor를 그대로 전달하며
Residual branch는 입력 tensor에 특정 변환을 수행함.

 

DropPath는 일반적으로 다음 코드처럼
identity path가 아니라 residual branch의 출력에 적용됨.

residual = block(x)
residual = drop_path(residual)
output = x + residual

 

수학적으로는 다음 구조에 해당함.

$$ \textbf{y} = \textbf{x} + \operatorname{DropPath} \left( F(\textbf{x}) \right) $$

  • DropPath에 의해 residual branch가 제거되더라도
  • identity path를 통해 입력 $\textbf{x}$는 계속 전달됨.

3.2 원래 Stochastic Depth의 동작

$\ell$번째 residual block의 survival probability를 $q_\ell$이라고 하면,
Residual branch의 활성 여부를 결정하는 Bernoulli 변수 $b_\ell$은 다음과 같음.

$$ b_\ell \sim \operatorname{Bernoulli}(q_\ell) $$

 

여기서 $b_\ell$은 다음 두 값 중 하나를 가짐:

$$
b_\ell = \begin{cases} 1, & \text{residual branch를 사용하는 경우} \\ 0, & \text{residual branch를 제거하는 경우} \end{cases}
$$

 

2023.08.17 - [.../Math] - [Math] Bernoulli Distribution (베르누이 분포)

 

[Math] Bernoulli Distribution (베르누이 분포)

Bernoulli distribution (베르누이 분포)은 Probability Distribution에서 가장 단순한 분포 중 하나 임. 주로 binary classification task에서 많이 사용됨.1. Bernoulli Trial결과가 2가지 중 하나로만 나오는 trial(시행, 시

dsaint31.tistory.com

 

원래 Stochastic Depth 논문의 학습 과정은 다음과 같이 표현할 수 있음.

$$ \textbf{y}_\ell = \textbf{x}_\ell + b_\ell F_\ell(\textbf{x}_\ell) $$

  • $b_\ell=1$ : residual branch를 사용함.
  • $b_\ell=0$ : residual branch를 제거함.
  • $q_\ell$ : residual branch가 유지될 확률임.

참고로, 원 논문에서는 학습 시 유지된 residual branch를 $q_\ell$로 나누지 않았음.

대신 평가 시에는 모든 residual branch를 활성화하고, 각 residual branch의 출력에 survival probability를 곱함.

$$
\textbf{y}_\ell^{\mathrm{eval}} = \textbf{x}_\ell^{\mathrm{eval}} + q_\ell F_\ell \left( \textbf{x}_\ell^{\mathrm{eval}} \right)
$$

 

이는 학습 중 residual branch 출력의 기댓값이 다음과 같기 때문임.

$$
\mathbb{E} \left[ b_\ell F_\ell(\textbf{x}) \right] = q_\ell F_\ell(\textbf{x})
$$

 

즉, 원래 Stochastic Depth는 평가 시 scaling을 적용하는 방식을 사용함.


3.3 현대적인 inverted DropPath

현재 Torchvision, timm, Hugging Face Transformers 등의 구현에서는
일반적으로 inverted Dropout과 같은 방식을 사용함.

 

학습 시 유지된 residual branch를 survival probability $q_\ell$로 나눔.

$$\textbf{y}_\ell = \textbf{x}_\ell + \frac{b_\ell}{q_\ell} F_\ell(\textbf{x}_\ell)$$

 

Residual branch 출력의 기댓값은 다음과 같음.

$$ \mathbb{E} \left[ \frac{b_\ell}{q_\ell} F_\ell(\textbf{x}) \right] = F_\ell(\textbf{x}) $$

 

따라서 평가 시에는 별도의 scaling이 필요하지 않음.

$$\textbf{y}_\ell^{\mathrm{eval}} = \textbf{x}_\ell^{\mathrm{eval}} + F_\ell \left( \textbf{x}_\ell^{\mathrm{eval}} \right) $$

 

Drop probability를 $p_\ell$이라고 하면 survival probability는 다음과 같음.

$$ q_\ell = 1-p_\ell $$

 

정리하면 다음과 같음.

방식 학습 시 유지된 residual branch 평가 시 residual branch
원래 Stochastic Depth $F(\textbf{x})$ $qF(\textbf{x})$
현대적인 inverted DropPath $\dfrac{1}{q}F(\textbf{x})$ $F(\textbf{x})$

 

현재 Torchvision과 timm의 기본 구현은 inverted DropPath 방식에 해당함.


3.4 Mini-batch 단위와 sample 단위

3.4.1 Mini-batch 단위 Stochastic Depth

원래 Stochastic Depth 논문에서는 residual block의 활성화 여부를 mini-batch 단위로 결정함.

 

입력이 다음과 같은 CNN feature map이라고 가정한다면

$$ \textbf{x} \in \mathbb{R}^{B\times C\times H\times W} $$

  • $B$ : batch size
  • $C$ : channel 수
  • $H$ : feature map의 높이
  • $W$ : feature map의 너비

Mini-batch 전체에 동일한 결정을 적용하는 mask는 다음과 같은 shape을 가짐:

$$ \textbf{m} \in \mathbb{R}^{1\times1\times1\times1} $$

 

실질적으로는 하나의 Bernoulli scalar 값임.

따라서 해당 residual branch는 다음 두 상태 중 하나가 됨.

  • mini-batch의 모든 sample에서 활성화됨.
  • mini-batch의 모든 sample에서 제거됨.

3.4.2 Per-sample Stochastic Depth

현재 timm과 Hugging Face Transformers의 일반적인 DropPath 구현은 sample마다 독립적인 Bernoulli 값을 생성함.

 

CNN feature map의 입력이 다음과 같다고 가정하면

$$ \textbf{x} \in \mathbb{R}^{B\times C\times H\times W} $$

 

DropPath mask의 shape은 다음과 같음:

$$ \textbf{m} \in \mathbb{R}^{B\times1\times1\times1} $$

 

Mini-batch의 $i$번째 sample에 적용되는 mask 값을 $m_i$라고 하면 다음과 같이 동작함.

$$ \widetilde{\textbf{x}}_i = \frac{m_i}{q} \textbf{x}_i $$

 

$m_i$는 하나의 scalar 값이지만 broadcasting을 통해 $i$번째 sample의 모든 channel과 모든 spatial position에 적용됨.

 

따라서 한 sample 안에서 일부 pixel이나 일부 channel만 제거되는 것이 아님.

  • $m_i=0$ : 해당 sample의 residual branch 출력 전체가 0이 됨.
  • $m_i=1$ : 해당 sample의 residual branch 출력 전체가 (1/q)배로 유지됨.

2022.09.27 - [Programming/DIP] - [NumPy] Broadcasting

 

[NumPy] Broadcasting

0. Broadcasting이란?tensor와 scalar를 연산시킬 때 scalar를 상대 tensor와 같은 shape이면서 해당 scalar의 값을 가진 tensor로 변경시키고나서 이 scalar로부터 만들어진 tensor와 상대 tensor를 동작시키는 방식

dsaint31.tistory.com


3.5 CNN과 Transformer의 mask shape

3.5.1 CNN feature map

CNN feature map이 다음 shape을 가진다고 가정하면

$$ \textbf{x} \in \mathbb{R}^{B\times C\times H\times W} $$

 

일반적인 per-sample DropPath mask는 다음 shape을 가짐.

$$\textbf{m} \in \mathbb{R}^{B\times1\times1\times1}$$

 

따라서 하나의 sample에서는 다음 요소에 동일한 mask 값이 적용됨.

  • 모든 channel
  • 모든 높이 위치
  • 모든 너비 위치

즉, sample 단위로 residual branch 출력 전체가 유지되거나 제거됨.

3.5.2 Transformer hidden state

Transformer의 hidden state는 일반적으로 다음 shape을 가짐.

$$ \textbf{x} \in \mathbb{R}^{B\times N\times C} $$

  • $B$ : batch size
  • $N$ :  token 수
  • $C$ : embedding dimension

DropPath mask의 shape은 다음과 같음:

$$\textbf{m} \in \mathbb{R}^{B\times1\times1}$$

 

따라서 하나의 sample에서는 모든 token과 모든 embedding dimension에 동일한 mask 값이 적용됨.

$$ \widetilde{\textbf{x}}_i = \frac{m_i}{q} \textbf{x}_i $$

 

즉, Transformer의 DropPath는 다음과 같은 동작이 아님.

  • 특정 token만 제거하는 방법이 아님.
  • 특정 embedding element만 제거하는 방법이 아님.
  • attention probability 일부만 제거하는 방법이 아님.

한 sample의 residual branch 출력 전체를 유지하거나 제거하는 방법임.


3.6 제거되는 residual branch의 범위

DropPath를 단순히 "block 전체를 제거한다"고 이해하는 경우가 많지만,
실제로는 DropPath가 삽입된 residual branch의 출력이 제거되는 것임.

 

다음과 같은 residual block에서는 전체 변환 branch가 제거됨.

x = x + drop_path(block(x))

 

그러나 Transformer block은 다음과 같이 attention과 MLP에 각각 residual addition을 가짐.

x = x + drop_path(attention(norm1(x)))
x = x + drop_path(mlp(norm2(x)))

 

이 경우 DropPath는 다음 두 residual branch에 각각 적용될 수 있음.

  • attention residual branch
  • MLP residual branch

따라서 Transformer에서 DropPath가 항상 block 전체를 한 번에 제거하는 것은 아님.

 

보다 정확한 설명은 다음과 같음.

DropPath는
DropPath module이 삽입된
residual branch의 출력을 제거함.

 

실제 제거 범위는 model의 block 구현에 따라 달라질 수 있음.


3.7 Skip connection과 대체 경로

DropPath를 적용하려면
하나의 path가 제거되더라도
입력에서 출력까지 다른 유효한 계산 경로가 남아 있어야 함.

  • 현대적인 residual network에서는 identity 또는 projection skip connection이 대체 경로를 제공함.
  • 실제로 FractalNet처럼 여러 병렬 path를 가진 구조에서 identity skip connection이 없어도 drop-path를 적용할 수 있었음.

따라서 skip connection 자체가 필수 조건은 아니며, 제거된 path를 대신할 다른 계산 경로가 존재하는지가 핵심임.


4. 깊이에 따른 DropPath probability

4.1 Survival probability와 drop probability

  • Residual branch가 유지될 확률을 survival probability라고 함.
  • Residual branch가 제거될 확률을 drop probability라고 함.

이 둘의 관게는 다음과 같음:

$$ q_\ell = 1-p_\ell$$

 

따라서 survival probability가 감소하면 drop probability는 증가함.


4.2 Linear decay of survival probability with depth

현대적인 vision model에서는 모든 block에 동일한 DropPath probability를 적용하지 않는 경우가 많음.

 

일반적으로 다음과 같은 방식을 사용함.

  • 입력에 가까운 block : 낮은 drop probability
  • 출력에 가까운 block : 높은 drop probability

원래 Stochastic Depth 논문에서는 survival probability가 network depth에 따라 선형적으로 감소하도록 설정함.

 

$\ell$번째 residual block의 survival probability는 다음과 같이 나타낼 수 있음.

$$ q_\ell = 1 - \frac{\ell}{L} \left( 1-q_L \right) $$

  • $L$ : 전체 residual block 수
  • $q_L$ : 마지막 residual block의 survival probability
  • $\ell$ : residual block의 깊이

Drop probability는 다음과 같음.

$$ p_\ell = 1-q_\ell $$

 

따라서 survival probability는 깊이에 따라 선형적으로 감소하고, drop probability는 깊이에 따라 선형적으로 증가함.

이 때문에 다음 두 표현이 모두 사용될 수 있음.

  • linear decay of survival probability
  • linear increase of drop probability

4.3 앞쪽 block의 probability가 낮은 이유

일반적인 linear schedule에서는 입력에 가까운 block을 더 높은 확률로 유지함.

  • 앞쪽 block에서 생성된 representation은 뒤쪽의 여러 block이 공통적으로 사용함.
  • 따라서 앞쪽 block이 자주 제거되면 이후 block에 전달되는 기본 representation이 지나치게 불안정해질 수 있음.

앞쪽 block은 일반적으로 다음과 같은 비교적 기초적인 특징을 형성함.

  • edge
  • texture
  • local pattern
  • 기본적인 spatial structure

뒤쪽 block은 일반적으로 다음과 같은 보다 추상적인 특징을 형성함.

  • object part
  • semantic pattern
  • class-specific representation
  • task-specific feature

이는 일반적인 deep vision model에서 적용되는 것으로 모든 model과 dataset에서 반드시 동일하게 성립하는 규칙은 아님.


4.4 Block별 probability 계산 예

현대적인 구현에서는 전체 block 수가 $L$일 때 입력에 가까운 첫 block의 drop probability를 $0$, 마지막 block의 drop probability를 $p_{\max}$로 설정하는 경우가 많음.

 

Block index를 $i=0,\ldots,L-1$이라고 하면 다음과 같이 계산할 수 있음.

$$ p_i = \frac{i}{L-1} p_{\max} $$

 

예를 들어 block이 4개이고 최대 DropPath probability가 다음과 같다고 가정함.

$$ L=4, \qquad p_{\max}=0.2 $$

 

각 block의 drop probability는 다음과 같음.

$$ \left[ p_0, p_1, p_2, p_3 \right] = \left[ 0, 0.0667, 0.1333, 0.2 \right]$$

 

이에 대응하는 survival probability는 다음과 같음.

$$\left[ q_0, q_1, q_2, q_3 \right] = \left[ 1, 0.9333, 0.8667, 0.8 \right] $$

즉, 앞쪽 block일수록 높은 확률로 유지되고, 뒤쪽 block일수록 높은 확률로 제거됨.


5. Framework별 구현

5.1 Torchvision의 StochasticDepth

Torchvision은 torchvision.ops.StochasticDepth를 제공함.

 

다음 두 mode를 지원:

  • mode="row" : batch의 sample별로 독립적인 mask를 적용함.
  • mode="batch" : 입력 tensor 전체에 하나의 mask를 적용함.

5.1.1 mode="row"

mode="row"는 per-sample Stochastic Depth에 해당함.

from torch import nn
from torchvision.ops import StochasticDepth


class ResidualBlock(nn.Module):
    def __init__(self, dim, drop_path_prob=0.1):
        super().__init__()

        self.block = nn.Sequential(
            nn.Linear(dim, dim),
            nn.GELU(),
            nn.Linear(dim, dim),
        )

        self.drop_path = StochasticDepth(
            p=drop_path_prob,
            mode="row",
        )

    def forward(self, x):
        residual = self.block(x)
        residual = self.drop_path(residual)

        return x + residual

수학적으로는 다음 구조에 해당함.

$$ \textbf{y} = \textbf{x} + \operatorname{DropPath} \left( F(\textbf{x}) \right)$$

 

입력이 다음과 같은 Transformer hidden state라면

$$ \textbf{x} \in \mathbb{R}^{B\times N\times C} $$

 

mask는 다음과 같은 broadcast 가능한 shape을 가짐.

$$ \textbf{m} \in \mathbb{R}^{B\times1\times1} $$

따라서 batch의 sample마다 residual branch를 독립적으로 유지하거나 제거함.

5.1.2 mode="batch"

원래 Stochastic Depth 논문과 유사하게 mini-batch 전체에 같은 결정을 적용하려면 다음과 같이 설정함.

self.drop_path = StochasticDepth(
    p=drop_path_prob,
    mode="batch",
)

입력이 다음과 같다면

$$\textbf{x} \in \mathbb{R}^{B\times N\times C}$$

 

mask의 shape은 다음과 같음.

$$ \textbf{m} \in \mathbb{R}^{1\times1\times1}$$

 

실질적으로 하나의 Bernoulli 값이 batch 전체에 적용됨.

$$
m \sim \operatorname{Bernoulli}(q) \\
\widetilde{\textbf{x}} = \frac{m}{q} \textbf{x}
$$

따라서 batch의 모든 sample이 함께 유지되거나 함께 제거됨.


5.2 timm의 DropPath

timm.layers.DropPath는 기본적으로 per-sample Bernoulli mask를 생성함.

from torch import nn
from timm.layers import DropPath


class ResidualBlock(nn.Module):
    def __init__(self, dim, drop_path_prob=0.1):
        super().__init__()

        self.block = nn.Sequential(
            nn.Linear(dim, dim),
            nn.GELU(),
            nn.Linear(dim, dim),
        )

        self.drop_path = DropPath(
            drop_prob=drop_path_prob,
        )

    def forward(self, x):
        return x + self.drop_path(self.block(x))

 

timm의 mask shape 생성 방식은 다음과 같음.

shape = (x.shape[0],) + (1,) * (x.ndim - 1)

첫 번째 dimension인 x.shape[0]은 batch size에 해당함.

나머지 dimension은 모두 (1)로 설정하여 하나의 sample 전체에 같은 mask 값이 broadcast되도록 함.

5.2.1 CNN feature map

입력이 다음과 같은 CNN feature map이라면

$$ \textbf{x} \in \mathbb{R}^{B\times C\times H\times W} $$

mask의 shape은 다음과 같음.

$$ \textbf{m} \in \mathbb{R}^{B\times1\times1\times1} $$

5.2.2 Transformer hidden state

입력이 다음과 같은 Transformer hidden state라면

$$ \textbf{x} \in \mathbb{R}^{B\times N\times C} $$

mask의 shape은 다음과 같음.

$$ \textbf{m} \in \mathbb{R}^{B\times1\times1} $$

5.2.3 scale_by_keep

timm.layers.DropPath는 기본적으로 scale_by_keep=True를 사용함.

 

따라서 유지된 residual branch는 keep probability인 $q$로 나누어짐.

$$ \widetilde{\textbf{x}}_i = \frac{m_i}{q} \textbf{x}_i $$

 

이는 inverted Dropout과
같은 방식임.

 

다음 조건에서는 입력 tensor를 그대로 반환함.

  • evaluation mode인 경우
  • drop_prob=0인 경우

5.3 timm model의 drop_path_rate

timm model은 생성 시 drop_path_rate를 인자로 받는 경우가 많음.

import timm

model = timm.create_model(
    "swin_base_patch4_window7_224",
    pretrained=True,
    num_classes=4,
    drop_rate=0.1,
    drop_path_rate=0.05,
)

일반적으로 다음과 같이 해석함.

  • drop_rate - 일반 Dropout의 probability
  • drop_path_rate - 마지막 block에 적용되는 최대 DropPath probability

drop_path_rate=0.05는 모든 block에 (0.05)가 동일하게 적용된다는 의미가 아님.

일반적으로 전체 block에 다음과 같이 선형적으로 배정됨.

$$ 0 \longrightarrow 0.05 $$

  • 입력에 가까운 block에는 $0$에 가까운 drop probability가 적용되고,
  • 출력에 가까운 마지막 block에는 최대값인 $0.05$에 가까운 drop probability가 적용됨.

다만 모든 timm model이 동일한 인자와 동일한 배정 방식을 사용하는 것은 아님.

Model에 따라 다음 항목이 달라질 수 있음.

  • drop_rate의 적용 위치
  • classifier Dropout 지원 여부
  • attention Dropout 인자 이름
  • projection Dropout 인자 이름
  • drop_path_rate 지원 여부
  • block별 DropPath schedule
  • stage별 또는 block별 probability 배정 방식

따라서 정확한 동작은 사용하는 model의 constructor와 source에서 확인해야 함.


5.4 Hugging Face Transformers의 DropPath

Hugging Face Transformers의 여러 vision model은 model별 DropPath class를 내부적으로 구현함.

대표적인 구현은 다음과 같은 형태임.

def forward(self, hidden_states):
    if self.drop_prob == 0.0 or not self.training:
        return hidden_states

    keep_prob = 1.0 - self.drop_prob

    shape = (
        hidden_states.shape[0],
    ) + (1,) * (hidden_states.ndim - 1)

    random_tensor = torch.rand(
        shape,
        dtype=hidden_states.dtype,
        device=hidden_states.device,
    )

    random_tensor = torch.floor(
        random_tensor + keep_prob
    )

    return hidden_states.div(keep_prob) * random_tensor

이 구현은 다음과 같은 특징을 가짐.

  • 첫 번째 dimension을 batch dimension으로 사용함.
  • sample별 Bernoulli mask를 생성함.
  • 유지된 residual branch를 keep probability로 나눔.
  • evaluation mode에서는 입력을 그대로 반환함.
  • drop_prob=0이면 입력을 그대로 반환함.

Swin, SwinV2, BEiT, ConvNeXt 등의 여러 vision model에서 drop_path_rate가 configuration field로 사용됨.

 

단, 실제 지원 여부와 적용 위치는 model class마다 다를 수 있으므로 source를 확인해야 함.


참고: Dropout과 DropPath 비교

다음 표에서 DropPath는 현대적인 vision model에서 일반적으로 사용하는 per-sample Stochastic Depth를 의미함.

 

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

 

구분 Dropout DropPath
역사적 출발 Hinton et al., 2012 및 Srivastava et al., 2014 Stochastic Depth 및 FractalNet의 drop-path, 2016
제거 대상 개별 activation residual branch 또는 계산 path
일반적인 mask 단위 activation element별 sample별 residual branch 전체
CNN 입력 $\textbf{x}\in\mathbb{R}^{B\times C\times H\times W}$ $\textbf{x}\in\mathbb{R}^{B\times C\times H\times W}$
일반적인 CNN mask $\textbf{m}\in\mathbb{R}^{B\times C\times H\times W}$ $\textbf{m}\in\mathbb{R}^{B\times1\times1\times1}$
Transformer 입력 $\textbf{x}\in\mathbb{R}^{B\times N\times C}$ $\textbf{x}\in\mathbb{R}^{B\times N\times C}$
일반적인 Transformer mask $\textbf{m}\in\mathbb{R}^{B\times N\times C}$ $\textbf{m}\in\mathbb{R}^{B\times1\times1}$
제거 범위 activation 일부 한 sample의 residual branch 출력 전체
대체 경로 필요성 필요하지 않음 제거 후에도 다른 유효한 path가 필요함
학습 시 동작 일부 activation을 0으로 설정 residual branch 또는 path를 0으로 설정
평가 시 동작 일반적으로 identity 현대적인 구현에서는 identity
주요 목적 feature co-adaptation 억제 path 또는 branch 의존성 억제
대표 적용 위치 embedding, MLP, attention probability, classifier ResNet, EfficientNet, ViT, Swin, ConvNeXt의 residual branch
일반 구현의 계산량 절감 없음 branch 계산 후 적용하면 거의 없음

 

Dropout과 DropPath의
가장 중요한 차이는
제거하는 단위임.

 

Dropout은 일반적으로 tensor의 개별 activation을 독립적으로 제거함.

$$\widetilde{x}_{i,j} = \frac{m_{i,j}}{q} x_{i,j} $$

 

반면 DropPath는 한 sample의 residual branch 출력 전체에 하나의 mask 값을 적용함.

$$ \widetilde{\textbf{x}}_i = \frac{m_i}{q} \textbf{x}_i $$

 

따라서 다음과 같이 구분할 수 있음.

  • Dropout : 하나의 feature tensor 내부를 부분적으로 제거함.
  • DropPath : 하나의 residual branch 또는 계산 path 전체를 제거함.
728x90

'Programming > ML' 카테고리의 다른 글

Optimism-corrected Accuracy  (0) 2026.05.26
Balanced Accuracy (균형 정확도)  (0) 2026.05.26
[ML] BFGS, L-BFGS, L-BFGS-B : Quasi-Newton method  (0) 2026.04.27
Linear Regression (Summary)  (0) 2026.04.25
Bootstrap Sampling 기반 Accuracy 추정 지표  (0) 2026.04.14
'Programming/ML' 카테고리의 다른 글
  • Optimism-corrected Accuracy
  • Balanced Accuracy (균형 정확도)
  • [ML] BFGS, L-BFGS, L-BFGS-B : Quasi-Newton method
  • Linear Regression (Summary)
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (796)
      • Private Life (16)
      • Programming (214)
        • DIP (116)
        • ML (43)
      • Computer (120)
        • CE (54)
        • ETC (31)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (12)
      • ... (369)
        • Signals and Systems (115)
        • Math (177)
        • Linear Algebra (33)
        • Physics (43)
        • 인성세미나 (1)
      • 정리필요. (61)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (7)
        • PET Study 2009 (1)
        • 방사선 장해방호 (5)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    signal_and_system
    numpy
    cv2
    random
    Vector
    인허가제도
    Programming
    linear algebra
    fourier transform
    math
    signals_and_systems
    Probability
    SIGNAL
    Python
    function
    SS
    opencv
    Optimization
    Term
    ML
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
DropPath 와 Stochastic Depth
상단으로

티스토리툴바