Deep Learning/기초

Batch Normalization

Hwanin99 2024. 7. 24. 22:18

Normalization

정규화란 여러 feature 값의 범위를 사용자가 원하는 범위로 제한하는 것을 의미한다.

 

그렇다면 왜 정규화를 해야하는 것일까?

input data가 (0,1)인 $x_1$과 (0,0.01)인 $x_2$가 있다고 가정해보자. 네트워크 내에서 학습이 진행되게 되면 각 입력값의 파라미터는 다른 척도에 존재하게 된다. 즉, $x_1$과 $x_2$의 feature가 다른 범위에 있기 때문에 학습 가능한 파라미터 $w_1,w_2$가 갖는 값의 범위는 상당히 다르게 된다.

왼쪽 그림: Unnormalized input feature, 오른쪽 그림: Normalized input feature

 

위 그림을 보면 정규화하지 않은 input feature는 왼쪽 그림과 같이 길게 나타나고, 정규화를 한 input feature는 보다 대칭적인 형태를 띈다. 왼쪽 그림은 파라미터가 최적의 값을 찾아가는데 많이 진동하는 모습을 볼 수 있고 이때는 작은 learning rate를 사용해야한다. 그렇게되면 학습 시간이 길어지게 되는 단점이 있다.

반면에 오른쪽 그림은 파라미터가 진동하지 않고 최적의 값을 찾아가고 초기화되는 위치가 중요하지 않게 된다. 즉, 더 높은 learning rate를 사용할 수 있어 학습 시간이 더 빨라진다.

 

컴퓨터는 매우 크거나 작은 숫자에 대해 연산을 수행할 때 정확도를 잃으며, 일반적인 (1,-1) 범위와 완전히 다른 척도에 있는 경우 신경망의 기본 파라미터가 data에 적합하지 않을 수 있다.

이미지의 경우 0~255 사이의 값을 가지는데, 이를 255로 나누어 0.0~1.0 사이의 픽셀값으로 조정하는 것이 일반적이다.


Internal Covariate Shift

모델 학습 전에 input data 간 범위를 조정할 수 있지만, 학습 과정에서 layer를 통과할 때마다 출력값의 분포는 layer마다 다르게 나타나는 현상이 있다. 이러한 현상은 Internal Covariate Shift(ICS)라고 한다.

Internal Covariate Shift 현상 그래프

 

위 그림과 같이 layer마다 분포가 계속해서 다른 feature를 받게 되면,  학습의 성능이 떨어지게 된다.


Batch Normalization

배치 정규화는 학습 과정에서 배치마다 평균과 분산을 활용하여 데이터의 분포를 정규화하는 과정을 말한다. 데이터의 종류에 따라 값의 범위는 천차만별이기 때문에 배치마다 입력값의 범위를 스케일링하는 과정이 바로 배치 정규화이다.

Batch Normalization 그래프

 

위 그림과 같이 어떤 데이터 분포가 들어와도 모두 정규화하기 때문에 모든 layer의 feature가 동일한 스케일이이 되도록 만든다. 즉, ICS 현상을 방지할 수 있고 learning rate 결정 시 효과적이다.


예시를 들어 직접 계산을 해보자.

5개의 데이터를 묶은 행렬 $ \begin{bmatrix} 1&-1&1\\2&-2&1\\3&-3&2\\4&-4&2\\5&-5&4\\  \end{bmatrix} $에 대하여 확대는 $\gamma=[\sqrt{2},2\sqrt{2},\sqrt{30}]$, 이동은 $\beta=[2,4,5]$로써 배치 정규화를 적용한 결과를 구해보자.

 

우선 주어진 행렬을 $x$라고 할 때, 각 feature의 평균을 먼저 구하면 $\mu=[3,-3,2]$가 된다.

이후에 분산을 구하기 위해 각 열의 평균을 0으로 만든 $x_c$를 계산하는데 $x_c=x-\mu$이므로 $x_c$는 $ \begin{bmatrix} -2&2&-1\\-1&1&-1\\0&0&0\\1&-1&0\\2&-2&2\\  \end{bmatrix} $가 된다.

 

각 열의 분산 $\sigma^2=\frac{1}{N}\sum\limits_{i=1}^N {x_c}^2$으로 계산할 수 있고, 식에 대입해서 풀어보면 $\sigma^2=[\frac{4+1+0+1+4}{5}, \frac{4+1+0+1+4}{5} , \frac{1+1+0+0+4}{5}]=[2,2,\frac{6}{5}]$가 된다.

 

이제 x의 각 열을 정규화해보자.

정규화한 값을 $x_n$이라고 할 때, $x_n=\frac{x_c}{\sigma}$이다.

위에서 구한 $x_c$와 $\sigma$(=표준편차)를 대입하여 풀면, $x_n=\begin{bmatrix} -\sqrt{2}&\sqrt{2}&-\sqrt{\frac{5}{6}}\\-\frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}}&-\sqrt{\frac{5}{6}}\\0&0&0\\ \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}&0\\ \sqrt{2}&-\sqrt{2}&2\sqrt{\frac{5}{6}}\\ \end{bmatrix}$이 된다.