Deep Learning/improving DNN

7. Understanding Dropout

SC_LEE 2022. 12. 26. 23:22
반응형

Understanding Dropout

목표

Drop-out이란? 무작위로 신경망의 유닛을 삭제시키는 기법

  • 왜 정규화로 잘 작동하는지 알아보기

Why does drop-out work?

Intuition 1

  • drop-out은 신경망의 유닛을 무작위로 삭제하는 것, 모든 반복마다 더 작은 신경망에서 작업하게된다.

    더 작은 신경망을 사용하는 것이 정규화의 효과를 주는 것처럼 보인다.

Intuition 2 : single unit 관점

  • unit이 해야하는 일 : 입력을 받아 의미있는 출력을 생성하는 것

  • Drop-out을 통해 입력은 무작위로 삭제될 수 있는데 어떤 경우는 이 두 Unit이 삭제되고 어떤 경우에는 다른 Unit이 삭제된다.

  • 보라색 unit : 어떤 feature에도 의존할 수 없다.
    그 feature이 무작위로 바뀌거나 feature의 고유한 입력이 무작위로 바뀔 수 있기때문에
    특정 입력에 모든 것을 걸 수 없는, 특정 입력에 유난히 큰 가중치를 부여하기가 꺼려지는 상황

  • 따라서 이 네 개의 입력 각각에 가중치를 분산시키는 편이 낫고 가중치를 분산시킴으로써 가중치의 노름의 제곱값이 줄어들게 된다.

  • L2 정규화에서 봤던 것처럼 드롭아웃을 구현하는 효과는 가중치를 줄이는 것이고
    L2 정규화처럼 overfitting을 막는데 도움이 된다.


  • drop-out은 예전에 L2 정규화의 adaptive form으로 보여지기도 했다.
    그러나 L2 정규화에서 다른 가중치는 다르게 취급한다. 그 가중치에 곱해지는 활성화의 크기에 따라 다르다.

정리

  • drop-out은 L2 정규화와 비슷한 효과를 보여줄 수 있다.

  • L2 정규화가 다른 가중치에 적용된다는 것과 서로 다른 크기의 입력에 더 잘 적응한다는것만 다른 부분이다.



Intuition 3

  • keep_prob : 각 층에 해당 unit을 유지할 확률
  • 층마다 keep_prob을 바꾸는 것도 가능

  • overfitting의 우려가 많은 층 (parameter가 많은 층)
  • overfitting을 줄이기위해 $W^{[2]}$는 상대적으로 낮은 keep_prob를 설정한다 → 0.5
  • overfitting의 우려가 적은 층
  • 더 높은 keep_prob을 설정해도 된다 → 0.7
  • overfitting의 우려가 없는 층 (입력층, 출력층)
  • keep_prob = 1로 설정해도 된다
  • 모든 unit을 유지하고 해당 층에서는 드롭아웃을 사용하지 않는다는 의미
  • 입력층은 feature의 절반 이상을 삭제하고싶지 않기때문에 drop-out을 자주 사용하지 않는것이 좋다.
  • 입력층에 대해 keep_prob = 1이 가장 흔한값이다. (0.9를 사용하기도 한다.)

keep_prob을 높게 설정하는 것은 L2 정규화에서 더 많은 정규화가 필요한 층에서 parameter λ를 증가시키는것과 비슷하다.


정리

  • 다른 층보다 과대적합의 우려가 더 큰 층에 대해서는 다른 층보다 더 낮은 값의 keep_prob을 설정할 수 있다.
  • 단점 : 교차 검증을 위해 더 많은 hyperparameter가 생긴다.
  • 대안 : 어떤 층에는 드롭아웃을 적용하고 어떤 층에는 적용하지 않아서 매개변수를 드롭아웃을 적용한 층에 대한 keep_prob 하나만 갖는 것

Implemetational tips

Computer Vision

  • 컴퓨터 비전은 아주 많은 픽셀 값을 모두 사용하기 때문에 대부분의 경우 데이터가 부족하다.
    따라서 컴퓨터 비전에서 drop-out이 매우 빈번하게 사용된다.
    최근 비전 분야의 연구원들은 거의 항상 기본값으로 drop-out을 사용한다.

  • 그러나 여기서 기억해야 할 것은 drop-out은 정규화 기법이고 overfitting을 막는데 도움을 준다.
    따라서 네트워크가 과대적합의 문제가 생기기 전까지는 드롭아웃을 사용하지 않을 것이다.

  • 컴퓨터 비전은 충분한 데이터가 없기 때문에 거의 대부분 overfitting이 일어나고 drop-out을 많이 사용하는 이유이다.

Drop-out 단점

  • 비용함수 J가 더 이상 잘 정의되지 않는다.
  • 모든 반복마다 무작위로 한 뭉치의 노드들을 삭제하기 때문에 경사 하강법의 성능을 이중으로 확인한다면
    모든 반복에서 잘 정의된 비용함수 J가 하강하는지 확인하는게 어려워진다.

→ 최적화하는 비용함수는 잘 정의되지 않아 계산하기 어렵다.

따라서 다음의 모양인지 확인해서 디버깅하는게 어려워진다.

  • 보통 keep_prob을 1로 설정해서 드롭아웃 효과를 멈추고 코드를 실행시켜 J가 단조감소하는지 확인한다.
  • 그리고 drop-out 효과를 다시 주고 drop-out이 있을 때 코드를 바꾸지 않도록 한다.
  • 왜냐하면 drop-out이 있을 때 코드와 경사 하강법이 잘 작동하는지 함수만 보고 확인하는 것 외에 다른 방법이 필요하기 때문이다.


참조 1

반응형