모델이 학습 데이터에 Overfitting되어 Test Error가 커지는 경우 Regularization 기법을 사용한다. Regularization에는 Gradient clipping, Weight decay등 다양한 기법이 있지만 이번에는 Dropout과 DropPath를 살펴보자.
참고 자료
https://towardsdatascience.com/implementing-stochastic-depth-drop-path-in-pytorch-291498c4a974
관련 논문: Dropout: A simple way to prevent neural networks from overfitting.
Dropout은 임의의 퍼셉트론 값을 0으로 맞춰 regularization한다. 이때 0이 되는 퍼셉트론은 확률 p에 따라 독립적으로 결정된다. p는 주어지는 하이퍼파라미터 값으로, 0에서 1까지의 실수이며 클수록 퍼셉트론이 Dropout될 가능성이 높아진다.
이렇게 하면 전체 파라미터의 평균이 점점 낮아지기 때문에 모델이 깊어지고 Dropout레이어가 많아질수록 학습이 느려진다. 때문에 0이 되지 않은 나머지 퍼셉트론은 1-p로 나눠 평균 퍼셉트론 값을 유지한다.
PyTorch에서 torch.nn.Dropout를 통해 사용할 수 있다.
관련 논문: Deep networks with stochastic depth.
DropPath는 ResNet에서 도입된 Skip Connection과 Dropout을 합친 개념이다. 입력으로 x가 주어지고 어떤 네트워크 f가 있을 때 출력은 f(x)가 된다. Skip Connection은 여기서 출력을 x + f(x)로 처리하는 것으로, Gradient Vanishing 문제를 해결할 수 있는 방법으로 제안되었다.
DropPath는 Dropout과 마찬가지로 확률 p에 따라 Skip Connection 블록의 출력이 x + f(x)가 될지 x가 될지가 정해진다. p가 클수록 f(x)가 Drop될 가능성이 높아진다.
timm 라이브러리의 drop_path를 통해 사용할 수 있다.