Dropout regularization은 매 반복마다 특정 확률로 랜덤하게 unit을 제거하는 방식이다
간단한 네트워크를 만들어 정보를 골고루 보내주니까 feature가 분산되어 overfitting이 방지된다
이랬던 기존의 layer를
랜덤하게 50퍼센트만 선택하여 사용하는 방법이다
dropout은 training시에만 적용하고 test시에는 적용하지 않는다
따라서 이 방법을 구현할때 그대로 사용한다면 test를 진행할 때 scaling이 필요하다
이를 방지하기 위한 방법이 inverted dropout이다
inverted dropout은 input과 weight을 곱하기 전에 unit을 얼마나 남길것인지 정한 keep_prob를 곱해준다
1
2
3
4
|
keep_prob = 0.8
d = np.random.rand(a.shape[0], a.shape[1]) < keep_prob
a = np.multiply(a,d)
a /= keep_prob
|
cs |
3번째 line은 0을 element wise하게 곱해서 connection을 끊은 것과 같은 효과를 준다
이제 새롭게 만들어진 a와 w를 가지고 z를 구할 수 있다
a의 크기가 작아진만큼 keep_prob으로 나누어졌으니 scaling을 test 때에 다시 해주지 않아도 된다
dropout을 사용할 때 주의할 점은 끝단에서는 잘 사용하지 않는다는 점이다
ITE4053 : Deep Lerarning ( Hanyang University )
'AI' 카테고리의 다른 글
Regularization 4 - Early Stopping (0) | 2021.04.18 |
---|---|
Regularization 3 - Data Augmentation (0) | 2021.04.18 |
Regularization 1 - L1,L2 regularization (0) | 2021.04.18 |
Activation Functions (0) | 2021.04.13 |
Logistic Regression (0) | 2021.04.07 |