1. Why ?
- 학습 속도 개선
- 오버 피팅 억제( 드롭아웃 필요성 감소 )
- 방법 : 활성화 값을 적당히 분포하도록 조정, 활성화함수(Ex. Relu 는 양수값(positive)값만 사용하고 나머지는 버리기 때문)
2. 종류
- LRN(Local Response Normalization )
: Alexnet(2012에 사용) , Tensorflow 함수
- 하이퍼파라미터 : k,n,a,b , ( n 은 계산에 반영할 인접 kernel 의 범위를 지정)
- Error율 1~2% 감소
미니배치 B , 즉 m개의 데이터 집합에 평균과 분산값을 계산
평균 0, 표준편차가 1이 되도록 정규화.( 가우시안 분포를 normal distribution으로 변환하는거와 동일!)
활성화 함수 앞, 또는 뒤에 삽입함으로써 데이털를 덜 치우치게 하는 역할!!
def __forward(self, x, train_flg): if self.running_mean is None: N, D = x.shape self.running_mean = np.zeros(D) self.running_var = np.zeros(D) if train_flg: mu = x.mean(axis=0) xc = x - mu var = np.mean(xc**2, axis=0) std = np.sqrt(var + 10e-7) xn = xc / std self.batch_size = x.shape[0] self.xc = xc self.xn = xn self.std = std self.running_mean = self.momentum * self.running_mean + (1-self.momentum) * mu self.running_var = self.momentum * self.running_var + (1-self.momentum) * var else: xc = x - self.running_mean xn = xc / ((np.sqrt(self.running_var + 10e-7))) out = self.gamma * xn + self.beta return out
- 출저 : 밑바닥부터 시작하는 딥러닝 -
https://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization