Deep Learning

정규화 -Normalization

바람냥냥 2018. 6. 7. 17:28

1. Why ? 

- 학습 속도 개선

- 오버 피팅 억제( 드롭아웃 필요성 감소 )

- 방법 : 활성화 값을 적당히 분포하도록 조정, 활성화함수(Ex. Relu 는 양수값(positive)값만 사용하고 나머지는 버리기 때문)  


2. 종류

- LRN(Local Response Normalization )

  : Alexnet(2012에 사용)  , Tensorflow 함수

   

- 하이퍼파라미터 : k,n,a,b , ( n 은 계산에 반영할 인접 kernel 의 범위를 지정)

- Error율 1~2% 감소

 


- BN( Batch Normalization )

  미니배치 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