문제점 : Internal Covariate Shift
학습 시 현재 layer의 입력은 모든 이전 layer의 파라미터의 영향을 받게 되며,
망이 깊어짐에 따라 이전 layer에서의 작은 파라미터 변화가 증폭되어 뒷단에 큰 영향을 끼침
Covariate shift : 학습하는 도중에 이전 layer의 파라미터 변화로 인해 현재 layer의 입력의 분포가 바뀌는 현상
Covariate의 해결책으로 제시된 것
Whitening
- Layer로 들어가는 입력을 whitening(평균 0, 분산 1로 바꿔준다)
- 하지만 단순하게 whitening만 한다면, whitening 과정과 parameter를 계산하기 위한 최적화 과정(backpropagation)과 무관하게 진행되기 때문에 특정 파라미터가 계속 커지는 상태로 whitening이 진행될 수 있음
이런 whitening의 문제를 해결하기 위해 Batch norm이 나옴
Batch normalization
=> 평균과 분산을 조정하는 과정이 별도의 process로 있는 것이 아닌 신경망에 포함되어 있음.
=> training 시에 평균과 분산을 조정하는 과정 역시 같이 조절된다.
Normalization은 원래 training 전체 집합에 대하여 실시하는 것이 최고의 효과지만, mini-batch SGD를 사용하면, update가 mini-batch 단위로 일어나기 때문에, mini-batch 단위로 BN을 실행
1. 평균과 분산은 보통의 통계학에서 평균 분산 구하는 과정
2. 평균과 분산으로 normalize => -1~1 분포로 바뀜
3. Gamma와 Beta가 있으며 이는 scale과 shift 연산을 위해 있음(whitening과의 차이) => 정규화 시켰던 부분을 원래대로 돌리는 identity mapping도 가능하고, 학습을 통해 gamma와 beta를 정할 수 있다.
BN은 보통 non-linear activation function 함수 앞쪽에 배치된다.
Back propagation을 통해 학습 가능
학습 시: mini-batch마다 gamma와 beta를 구하고 그 값을 저장
테스트 시: mini-batch마다 구했던 gamma와 beta의 평균을 사용
10에서 m/(m-1)을 곱해주는 이유: 통계학적으로 unbiased variance에는 “Bessel’s correction”을 통해 보정
학습 전체에 대한 분산이 아니고, mini-batch들의 분산을 통해 전체 분산을 추정할 때 통계학적인 보정을 위해
Scale(gamma) , shift(beta)
신경망에 적용
Z = activation(Wx + b) => 기본 신경망
Z = activation(BN(Wx)) => BN 적용시
Wx+b에 BN을 적용하면 정규화 후 scale과 shift항을 학습을 통해 결정, b는 shift항으로 대체할 수 있기 때문에 b는 무시 가능
Convolution에 적용할 때
Convolutional layer에서는 shared weight와 sliding window 방식을 적용하여 출력 feature-map의 모든 픽셀에 대하여 동일한 연산을 수행
=> BN도 마찬가지, fully connected처럼 activation마다 붙는 것이 아니라, feature-map(W x H)에 대하여 gamma와 beta쌍이 학습을 통해 결정
Reference
'딥러닝관련 > 기초 이론' 카테고리의 다른 글
Orthogonal (직교) vector (0) | 2021.02.07 |
---|---|
Norm (0) | 2021.02.06 |
Representation (0) | 2020.07.07 |
왜 딥러닝(deep learning) 이라고 하는가 (0) | 2020.07.01 |
Sensitivity(민감도) & Specificity(특이도) (0) | 2020.07.01 |