본문 바로가기

AI/이론

[CNN] Batch Normalization

 

 

[Part Ⅵ. CNN 핵심 요소 기술] 1. Batch Normalization [1] - 라온피플 머신러닝 아카데미 -

Part I. Machine Learning Part V. Best CNN Architecture Part VII. Semantic ...

blog.naver.com


Batch Normalization은 기본적으로 Gradient Vanishing / Gradient Exploding 이 일어나지 않도록 하는 아이디어 중의 하나이다. 지금까지는 이 문제를 Activation 함수의 변화 (ReLU 등), Careful Initialization, small learning rate 등으로 해결하였지만, 이 논문에서는 이러한 간접적인 방법보다는 training 하는 과정 자체를 전체적으로 안정화하여 학습 속도를 가속시킬 수 있는 근본적인 방법을 찾고싶어 했다.

이들은 이러한 불안정화가 일어나는 이유가 ‘Internal Covariance Shift’ 라고 주장하고 있다. Internal Covariance Shift라는 현상은 Network의 각 층이나 Activation 마다 input의 distribution이 달라지는 현상을 의미한다. 이 현상을 막기 위해서 간단하게 각 층의 input의 distribution을 평균 0, 표준편차 1인 input으로 normalize 시키는 방법을 생각해볼 수 있고, 이는 whitening이라는 방법으로 해결할 수 있다. Whitening은 기본적으로 들어오는 input의 feature들을 uncorrelated 하게 만들어주고, 각각의 variance를 1로 만들어주는 작업이다.

 

문제는 whitening을 하기 위해서는 covariance matrix의 계산과 inverse의 계산이 필요하기 때문에 계산량이 많을 뿐더러, 설상가상으로 whitening을 하면 일부 parameter 들의 영향이 무시된다는 것이다. 예를 들어 input u를 받아 x=u+b라는 output을 내놓고 적절한 bias b를 학습하려는 네트워크에서 x에 E[x]를 빼주는 작업을 한다고 생각해보자. 그럴 경우 E[x]를 빼는 과정에서 b의 값이 같이 빠지고, 결국 output에서 b의 영향은 없어지고 만다. 단순히 E[x]를 빼는 것이 아니라 표준편차로 나눠주는 등의 scaling 과정까지 들어갈 경우 이러한 경향은 더욱 악화될 것이고, 논문에서는 이를 실험적으로 확인했다고 한다.

이와 같은 whitening의 단점을 보완하고, internal covariance shift는 줄이기 위해 논문에서는 다음과 같은 접근을 취했다.

 

 

 

 

Batch Normalization 설명 및 구현

NIPS (Neural Information Processing Systems) 는 머신러닝 관련 학회에서 가장 권위있는 학회들 중 하나이다. 이 학회에서는 매년 컨퍼런스를 개최하고, 작년 12월에도 NIPS 2015라는 이름으로 러시아에서 컨��

shuuki4.wordpress.com


Batch Normalization

Batch Normalization은 딥러닝 네트웍의 학습에서 gradient vanishing과 exploding을 회피하기 위한 방법 중의 하나이다.

딥러닝 알고리즘은 층이 깊어질수록 표현 능력과 추상화 레벨이 높아지는 것으로 알려져 있다. 그러나 층이 깊어질 때 출력단의 Loss값의 gradient가 내부로 도달하지 않고 소멸해버리는 현상으로 학습에 한계가 있었다. 이러한 문제점을 해결하고 깊은 층을 가지는 넷을 설계하기 위해, ReLU 활성함수, Dropout, 학습 샘플 초기화 전략, Learning rate 조절 등의 여러가지 방법이 개발되어 왔다.

딥러닝 구조의 내재적 불안정성은 Internal Covariance Shift 현상에 의한 것으로 BN 논문의 저자는 주장한다. 이것은 넷 각 층의 입력 값의 분포(variance)가 일관성없이 계속해서 달라지는 현상을 말한다.
레이어 입력값 분포의 변화가 발생하면 입력을 받아들이는 레이어는 새로운 분포에 계속해서 적응해야 한다. 레이어의 입력 값은 이전의 모든 레이어 파라메터에 의해 영향을 받고, 네트웍 파라메터의 작은 변화는 네트웍이 깊어질 때 증폭되고 학습의 복잡성은 증가한다.

이에 대한 해결책으로 각 층의 입력값의 평균을 구해 제거하고 분산으로 값들을 나누어 표준편차를 1로 만드는 것을 생각할 수 있다.
그러나 이 방법은 역행렬의 요구 등으로 계산량이 많은 점과 f=Wx+b의 연산에서 오프셋 b의 영향이 소거되는 등의 문제로 적용이 어렵다.

 

또한 층의 입력 값을 정규화를 통해 평균 0, 분산 1로 고정시키는 것은 Activation 함수의 가장 중요한 역할인 비선형성을 없애 버릴 수 있다. 즉, 넷은 비선형성을 가지고 있어야 복잡한 함수를 표현할 수 있는데 이 능력이 사라질 수 있다.  예를 들면, sigmoid 활성함수의 입력 값이 평균 0, 분산 1이라면 입력 값의 범위는 -1~+1이 되고, 이 범위의 sigmoid 함수 값은 0.5를 중심으로 0.2~0.7사이의 거의 직선인 선형 영역이다.
이 점을 보완하기 위해 정규화된 값에 scale 팩터(γ)와 shift 팩터(β)을 도입하고 정규화된 값에 곱하고 더해준다. 두 인자는 오차 역전파 과정에서 학습해 준다. 이를 통해 활성함수로 들어가는 값의 범위를 바꾸어줌에 의해 비선형성을 부여할 수 있다.


 

BN의 적용 방식은 현재 입력되는 학습 샘플의 mini-batch에 대해 특징 맵 별로 정규화를 수행한다. 이 값에 scale과 shift팩터를 곱하고 더해 적용하게 된다. 따라서, 맵 별 파라메터는 2개이다.
예를 들면, 어떤 중간층에서 BN유닛의 입력이 (mini-batch,128, 32, 32)였다면 (mini-batchx32x32)의 데이터에 대해 mean(μB)과 vari(σB)를 구해 정규화를 수행한 후 scale, shift팩터를 위 식처럼 적용한다. 인자 수는  맵이 128개이므로 256개이다.

 

 

 

Batch Normalization

Batch Normalization은 딥러닝 네트웍의 학습에서 gradient vanishing과 exploding을 회피하기 위한 방법 중의 하나이다. 딥러닝 알고리즘은 층이 깊어질수록 표현 능력과 추상화 레벨이 높아지는 것으로 알��

funmv2013.blogspot.com

 

 

문과생도 이해하는 딥러닝 (10) - 배치 정규화

2017/09/27 - 문과생도 이해하는 딥러닝 (1) - 퍼셉트론 Perceptron 2017/10/18 - 문과생도 이해하는 딥러닝 (2) - 신경망 Neural Network 2017/10/25 - 문과생도 이해하는 딥러닝 (3) - 오차 역전파, 경사하강..

sacko.tistory.com

'AI > 이론' 카테고리의 다른 글

Cross entropy의 이해, 사용 방법(Categorical, Binary, Focal loss)  (0) 2020.12.30
ImageNet  (0) 2020.12.28
[ML] 오차(error)와 잔차(residual)의 차이  (0) 2020.08.18
[ML] ResNet 2  (0) 2020.08.18
[ML] ResNet 1  (0) 2020.07.30