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)
'Computer Science > AL, ML' 카테고리의 다른 글
Weight Initialization - Gradient Problem 방지 (0) | 2022.04.20 |
---|---|
Early Stopping - Overfitting 방지 (0) | 2022.04.20 |
Regularization - Overfitting 해소 (0) | 2022.04.20 |
[네트워크 성능] HyperParameter (0) | 2022.04.20 |
[네트워크 성능] Bias, Variance (0) | 2022.04.20 |
댓글