Dropout, BatchNorm 적용 순서

redgreen·2022년 3월 16일
1

DeepLearning

목록 보기
1/2
  • 부스트캠프 멘토링시간에 layer의 순서관련 이야기를 나누었다. 좋은 주제였던 것 같아 기록을 남기고자 정리해보았다.


  • BatchNormalization:
    • BatchNorm 논문에서는 conv - bn - act의 순서를 제시했지만, 현재는 bnactivation순서에 크게 의의를 두지 않는 듯하다.

  • dropout:
    • dropout의 경우 임의의 값들을 0으로 바꾸어 학습에 방해하는 역할을 하기 때문에, 위치에 따라 특정 layer의 기능에 영향을 줄 수 있다.
    • conv - drop - bn인 경우, 0으로 바뀐 값들로 인해 bn이 유의미한 통계값을 얻는데 방해가 될 수 있어, bn - drop의 순서로 layer를 쌓는 것이 좋다.
    • drop - act순서의 경우 몇몇 activation function의 경우 input0일 경우 특정 값으로 return되어 학습에 영향을 미칠 수 있다. (ex. sigmoid(0) -> 0.5)
    • pooling - dropout 순서 보다는 dropout - pooling의 순서가 더 좋다고 한다. 이유는 잘 모르겠다. dropout이 뒤로 가면 이미 max/average pool된 값이 지워지기 때문에 조금 더 hard regularization이 되고,
    • dropout이 앞으로 가면 몇몇개의 값이 지워진 상태에서 max/avg pool을 하기 때문에 soft regularization이 되어 규제가 상대적으로 작아 학습이 잘되는 것처럼 보이는 것이 아닌가 싶다.


      정리하자면, DropoutPooling을 제외한 모든 layer의 뒤에 두면 되는 것 같다.

  • 올바른(?) 순서:

    conv - bn - activation - dropout - pooling

참고블로그

profile
인공지능 꿈나무

0개의 댓글