[ 제 네이버 블로그 글을 티스토리로 이전한 글입니다. 해당 글은 제 네이버 블로그에 2018.06.27에 작성되었었습니다 ]
Kdnuggets에서 Batch normalization 관련 글을 보고 정리합니다.
Batch normalization 논문이 발표된 이후(2015년), 대부분의 network들은 over-fitting을 줄이고 학습 속도를 높이기 위해 Batch normalization을 사용해왔습니다.
데이터를 처리함에 있어서, normalization의 유/무는 결과에 큰 영향을 주며, Batch normalization은 신경망 모델이 데이터를 처리할 때 각 Batch단위마다 normalization을 취해주는 것입니다.
Batch normalization은 hidden unit 값의 covariance shift 양을 줄여줘서, over-fitting과 학습 속도 증가에 도움을 준다고 합니다. (covariance shift는 training데이터와 test 데이터 간의 성질의 shift라고 보면 될 것 같습니다.) 또한, Batch normalization은 network의 각 layer들이 조금 더 독립적으로 학습할 수 있게 도와준다고 합니다.
Batch normalization의 작동 원리
- Batch normalization은 이전 activation layer의 출력을 batch 평균(beta)으로 빼주고 batch 표준편차(gamma)로 나누어줌으로써, 학습 모델의 안전성의 증가를 준다고 합니다. (output range가 일정 범위에 머무르게 함으로써 network의 안정성을 증가시키는 것으로 보입니다.)
- 이 beta와 gamma 역시 trainable parameter로 둠으로써, Stochastic gradient descent(SGD)가 각 layer의 activation에서 이 두 parameter만 비 정규화하게 만듭니다. 즉, 나머지 network 파라미터들의 변화는 비교적 안정적으로 변하게 됩니다. (이 부분은 reference부분을 좀더 찾아봐야겠습니다...)
정리
- Batch normalization을 사용하면, learning rate가 어느정도 높아도 안정적으로 학습할 수 있습니다.
- Batch normalization을 사용하면, over-fitting 문제를 어느정도 해결할 수 있습니다. (regularization effect를 준다고 함.) 원본 글의 글쓴이는 drop-out과 Batch normalization을 함께 쓰는 것을 추천합니다.
참고)
https://www.kdnuggets.com/2018/06/batch-normalization-neural-networks.html
https://arxiv.org/abs/1502.03167
Imbalanced 데이터 다루기 (0) | 2021.08.03 |
---|---|
학습 데이터와 테스트 데이터의 차이가 있을 때 (gap between train dataset and test dataset) (0) | 2021.08.02 |
Stroop task (스트루프 태스크) (0) | 2021.08.02 |
[세미나] Working memory (0) | 2021.07.30 |
Gradient descent 분류 (0) | 2021.01.12 |
댓글 영역