← 문제 목록/DropPath (Stochastic Depth) [medium]
문제 해설

DropPath (Stochastic Depth) [medium]

정규화 · medium

preview

DropPath [medium]

v1 Column dropoutfeature 단위 drop. DropPath (Stochastic Depth, Huang et al. 2016) 은 ResNet 의 전체 residual 블록 을 샘플별로 skip:

y(n)=x(n)+mask(n)residual(x(n))/(1p)y^{(n)} = x^{(n)} + \text{mask}^{(n)} \cdot \text{residual}(x^{(n)}) / (1-p)

mask(n){0,1}\text{mask}^{(n)} \in \{0, 1\}, Bernoulli(1-p) — 배치 샘플마다 독립.

구조

ResNet 의 한 블록 y=x+f(x)y = x + f(x) 에서:

  • 확률 pp로 layer 전체 skip: y=xy = x
  • 확률 1p1-p 로 keep: y=x+f(x)/(1p)y = x + f(x) / (1-p) (스케일업으로 기대값 보존)

즉 residual 부분만 on/off.

과제에서의 단순화

이 문제는 residual 텐서 xx (이미 계산된 결과) 를 입력받아 drop_path 만 적용:

if not training or p == 0:
    return x
mask (N, 1, 1, ...) shape 에 broadcast ← 샘플별 독립
return x * mask / (1 - p)

(NN 블록 전체가 아니라 residual 출력에 적용한다고 가정 — PyTorch timm.models.layers.DropPath 와 동일.)

왜 "Stochastic Depth"?

  • 훈련 중 네트워크 깊이가 평균적으로 줄어듦 (각 블록이 skip 되는 빈도만큼).
  • Regularization 효과 + 학습 속도 향상.
  • 1000-layer ResNet 학습 가능케 한 기법.

과제

함수 drop_path(x, p, seed, training) 를 완성하세요.

  • x: 임의 shape (N, ...). 첫 축이 batch.
  • 반환: 같은 shape.
  • 각 샘플마다 독립 Bernoulli mask, survived 는 / (1-p).

테스트 케이스

#이름검증
1training=False → 원본
2p=0 → 원본
3p=1 → 모두 0
4샘플별 독립 (n 마다 mask 다름)
5같은 샘플의 모든 원소는 동일 maskx[n, :] 전부 0 또는 전부 scaled
6기대값 보존 (큰 샘플)
7shape 유지 (다차원)
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.