본문 바로가기
Computer Science/AL, ML

[Regularization] Dropout

by Gofo 2022. 4. 20.

Dropout

큰 네트워크에서 랜덤하게 unit들을 제거함으로써 복잡한 네트워크를 단순화한다.

매 training 마다 랜덤하게 제거하기 때문에 일부 unit에 역할이 뭉치지 않는다.

 

이를 통해 overfitting을 줄일 수 있다.

 

원리

각 노드가 언제든 제거될 수 있기 때문에 각 노드들이 중요한 역할을 하지 않게 된다.

즉, 역할이 한 곳에 집중되지 않고 나눠서 수행되는 것이다.

 

output layer 쪽을 제거하면 output이 정상적으로 나오지 않을 수 있기 때문에 끝단으로 갈수록 제거하지 않는다.

 


Pseudo Code using Inverted Dropout

Inverted dropout을 이용하여 dropout regularization을 구현할 수 있다.

단, test 시에는 전부 다 사용하기 위해서 dropout을 수행하지 않는다.

 

$l=3$에 대해 구현한 pseudocode는 아래와 같다.

# Inverted dropout
keep_prob = 0.8
d3 = np.random.rand(13.shape[0], a3.shape[1]) < keep_prob # 랜덤하게 남길 matrix 생성
a3 = np.multiply(a3, d3) # 1인 위치의 unit 값들만 남김
a3 /= keep_prob # 제거된 비율만큼 scaling, Test 시에는 수행 X

 

<pre>a3 /= keep_prob</pre>

Training 시에는 앞의 unit에서 줄어든 비율만큼 a의 값도 줄여준다.(scaling)

댓글