7-6. Dropout

Dropout 개념 설명

image 14.png

  • 드롭아웃 기법이란 특정 노드를 특정 확률로 없애는 것이다.
  • 왼쪽 그림과 같이 X가 쳐진 노드들은 선들이 연결이 안되면서 모델이 경량화 됐다.
  • 이렇게 경량화된 모델을 single network 라고 부른다.
  • 경량화가 되면서 과적합 방지가 된다.

image.png

  • 드롭아웃에 대한 확률은 각 노드별로 따로 지정해주는 것이 아니라 층 별로 드롭아웃을 적용할지 안할지를 정한 후 확률을 정한다. 이 확률은 해당 층에 있는 모든 노드에 적용이 된다.
  • 그리고 위에 설명되어있듯이 데이터마다 확률에 따라 살릴 노드가 다시 골라진다. 즉, 데이터마다 single network가 생긴다는 뜻이다.
  • 드롭아웃의 장점은 몇몇 노드를 없애며 훈련을 하다보니까 각각의 노드의 역할 분담이 잘 된다.
  • 훈련 이후 테스트를 할 때에는 모든 노드를 살리는 대신 가중치에 아까 정했던 드롭아웃 확률 값이 곱해진다.

Dropout의 역할 분담

image.png

  • 해당 예시는 AutoEncoder라고 불리는 모델이다.
    • 해당 모델은 입력 사진 데이터를 한번 압축시키고 다시 복원시켜 출력시키는 작업을 한다.
  • PyTorch 같은 경우 nn.Dropout(p = DROP_P)라고 정의를 해주었는데 Dropout 논문에서는 p값이 노드를 살릴 확률로 정의 했지만 파이토치에서는 노드를 죽일 확률을 p라고 정의하였다.
  • 그리고 드롭아웃 같은 경우 활성화 함수 이후에 적용을 시켜야한다.
    • 파이토치에서는 노드 드롭아웃을 아예 노드 출력 값을 0으로 변환시켜 구현을 하기 때문에 활성화 함수 층 이후에 드롭아웃을 적용시켜야 한다.

image.png

  • 드롭아웃을 적용시킨 결과물을 보면 사실 적용시키지 않은 결과물이 육안으로 봐도 훨씬 퀄리티가 좋게 나온 것을 알 수가 있다.

image.png

  • 하지만 위의 Weight Map을 보면 매우 다르다는 것을 느낄 수 있다.
    • Weight Map이란 Autoencoder 예시에서는 784개의 입력 노드를 256개의 은닉 층 노드에 연결 시킨다. 이때 각각의 은닉 층 노드에는 784개의 입력 노드에 각기 다른 784개의 가중치가 곱해진 값이 들어갈 것이다. 즉, 위 그림에서는 784개의 가중치 값을 각각 256개의 노드마다 시각화 해놓은 것이다.
  • 드롭 아웃이 적용된 Weight Map을 보면 각 노드가 어떠한 특징을 중요시 여기는 것을 볼 수 있지만 드롭아웃이 적용이 되지 않은 모델은 특정 특징을 잡아내는 것을 볼 수가 없다.
  • 즉, 드롭아웃을 적용 할 시 노드가 역할 분담을 잘한다는 것을 알 수가 있다.

Dropconnect

image.png

  • Dropconnect는 Dropout과 달리 노드 자체를 없애는 게 아니라 노드와 노드 사이의 connection을 없애는 것이다.
  • 오른쪽 노드에서 왼쪽 노드와 연결되는 connection을 왼팔 오른팔이라고 비유해보자.
  • 양 팔이 다 없어지면 그건 Dropout과 동일한 상황이다.
  • 양손잡이 훈련하듯이 언제는 왼손만 사용하고 언제는 오른손만 사용하며 훈련을 하는 것이다.
  • Dropout과 동일하게 확률로 인해 drop이 되고 테스트때는 모든 커넥션을 살려둔다.

Updated: