Data Science/Convolutional Neural Network(CNN)

3. Batch Normalization

HJChung 2020. 3. 14. 17:37

저번까지 CNN을 시작하기 위한 기본적인 개념에 대해서 살펴보았습니다. 

이번 시간에는 Convolution layer을 본격적으로 시작하기 전에 Batch Normalization이라는 특수한 Technique를 살펴보고자 합니다. 

 

1. Gradient Descent

Batch Normalization을 하기에 앞서서 Gradient Descent에 대해 다시 한 번 짚고 넘어가보겠습니다. 

1) Vanilla Gradient Descent(일반 경사 하강법)

 : N개의 학습 데이터를 -> Neural Network 모델을 통해 학습을 시키고 -> 손실함수를 계산하여 -> 역전파 알고리즘을 이용하여 -> N개의 Gradient의 평균을 내는 것으로 Gradient Descent을 진행하는 과정을 반복합니다. 

즉, Vanilla Gradient Descent에서는 Gradient를 한 번 업데이트 하기 위해서 모든 학습 데이터를 사용합니다. 그러나 N이 몇 만개를 넘어가는 경우는 불가능하게 될 것입니다. 

 

 

2) Stochastic Gradient Descent(확률적 경사 하강법) 

-> 이 경우, 데이터를 Batch size 만큼 쪼개서 데이터를 선택하여 위의 과정을 반복하게 되는 것을 Stochastic Gradient Descent라고 합니다.

 

 

 

 

 

3) Mini-batch Gradient Descent

위의 개념으로  Mini-batch Gradient Descent을 정의하자면

- Epoch : 전체 데이터를 한 번 학습 하는 것을 Epoch라고 합니다. 

- Batch : 한 번 Gradient를 구하는 단위를 Batch라고 합니다. 

 

 

 

 

 

2. Internal Covariate Shift

 

그러나 위의 과정을 하였을 때, 왼쪽 그림처럼 학습 과정에서 계층별로 입력의 데이터 분포가 달라지는 현상이 발생합니다. 

 

 

 

 

 

 

 

이를 해결하기 위한 방법이 Batch Normalization입니다. 

 

3. Batch Normalization

Batch Normalization은 아래와 같이 fully connected layer의 출력을 Activation function으로 넣어주기 전에 batch에 대해서 normalization을 수행합니다. 

각 batch 별로,  (아래 사진의 batch1, 2와 같이) 분포가 다를 수 있는데, 이를 평균과 분산을 이용하여 정규화 하는 과정(계층)을 batch Normalization layer라고 합니다. 

 

Batch Normalization이 뭔지, 왜 필요한지에 대해서 알아보았으니 이것이 학습 단계에서 어떻게 이루어지는지, 예측 단계에서는 어떻게 사용되는지에 대해서 알아보도록 하겠습니다. 

 

4. 학습 단계에서의 Batch Normalization

입력 (X) -> Batch Norm =   

 -> BatchNormed(X)

 

 

 

그리고, batch Norm과 batch standard deviation은 batch 별로 계산됩니다.

정규화로 인해 모든 계층의 feature가 동일한 Scale이 되어 scale에 따라 학습이 편향되는 것을 막을 수 있습니다. 

또한 추가적인 Scale, Bias를 학습하여 Activation에 적합한 분포로 변환할 수 있습니다. 

 

5. 추론 단계에서의 Batch Normalization

추론 단계에서의 Batch Normalization은 위와 식이 조금 다른데, 

batch를 계속 받으면서 최근 N개에 대한 이동 평균을 계산하여 batch Norm과 batch standard deviation으로 사용합니다. 

'Data Science > Convolutional Neural Network(CNN)' 카테고리의 다른 글

5. Advanced CNN-1  (0) 2020.03.18
4. Basic CNN Implementation(v2)  (0) 2020.03.15
4. Basic CNN Implementation(v1)  (0) 2020.03.15
2. Basic CNN-2  (0) 2020.03.14
1. Basic CNN-1  (0) 2020.03.14