🖥️ 컴퓨터 싸이언스

딥러닝 | 정규화? (Batch Normalization, Layer Normalization)

노바깅 2023. 5. 16. 20:14

기계학습 살펴보기 할 때, 정규화와 표준화를 잠깐 언급하긴 했는데 이번에 좀 더 자세히 정리하려고 한다.

 

 일단, 우리는 보통 zero-mean, unit-variance를 선호하는데 그 이유가 무엇일까? activation 함수를 생각해보자. 대부분의 활성함수는 0 부근에서 gradient 값을 갖고, 0에서 멀어지면 gradient가 거의 0에 수렴하게 되고 더 이상 학습이 진행되지 않는다. 따라서 우리는 데이터 인풋이 0 근처에 있었으면! 하는 것이다. 그래서 input을 어느정도 normalization 해주자!가 되는 것이다.

 


 

배치 정규화 (Batch Normalization)

 위에서 언급했듯이, zero-mean, unit-variance를 위해서 아래 수식을 이용한다. (아래에서 소개할 레이어 정규화 및 인스탄스 정규화도 마찬가지!)

$$\hat{x}^{(k)} = \frac{x^{k} - E[x^{(k)}]}{\sigma[x^{(k)}]}$$

 이 때, input data가 N x D 차원이라면, D차원 데이터가 N개 존재하는 것인데, 각 차원마다 평균과 표준편차를 구해준다. 즉, 평균과 표준편차는 각각 1 x D 차원이 되는 것이다. input data가 이미지라서 N x C x H x W 라면? 평균과 표준편차, 그리고 $\gamma$와 $\beta$ 모두 1 x C x 1 x 1 차원이 된다. 즉, 차원 (혹은 채널) 마다 하나의 값을 갖도록 한다.

 음... 그런데 과연.. 항상 normalization 해주는 것이 좋을까? 우리가 활성 함수를 사용하는 이유는 비선형성을 추가해주기 위함이다. 하지만, sigmoid 같은 활성 함수를 보면, 0부근에서 gradient는 갖지만 거의 선형에 가깝다. 그래서 조금 값을 흔들어준다! 원래 수식이 $x - \mu / \sigma$ 이런 꼴이었다면, $\gamma$와 $\beta$를 이용해서 값을 살짝 흔들어준다. 즉, [yellow]$\gamma(x - \mu) / \sigma + \beta$[/yellow] 가 되는 것이다.이 때 $\gamma$ $\beta$는 모두 학습 가능한 파라미터이다. 

 쨋든 이런식으로 배치 정규화를 하고, 배치 정규화는 일반적으로 fully connected와 nonlinearity (활성함수) 사이에 넣어준다. 주의할 점은, 추론 시에는 학습 데이터 전체에 대한 평균과 분산을 계산해서 적용해야한다는 점이다.

 

레이어 정규화 (Layer Normalization)

 배치 정규화가 batch dimension 으로 평균과 표준편차를 구해서 사용했다면, 레이어 정규화는 feature (혹은 channel) dimension으로 평균과 표준편차를 구해서 사용한다. 따라서 N x D 데이터에 대한 batchnorm은 1 x D 차원의 평균과 표준편차를 구했다면, 레이어 정규화 (for fully connected) 는 N x 1 차원의 평균과 표준편차를 구한다. ($\gamma$, $\beta$ 역시 마찬가지)

 레이어 정규화는 일반적으로 RNN과 Transformer에서 사용한다고 한다.

 비슷하게 Instance normalization (for convolutional networks) 에서는 N x C x H x W input이 들어오면 N x C x 1 x 1 차원의 평균과 표준편차를 구한다.

 

 

정리

출처 https://towardsdatascience.com/what-is-group-normalization-45fe27307be7

  • Batch Norm: channel 별로~
  • Layer Norm: batch는 내버려 두고 channel, feature~
  • Instance Norm: feature만
  • Group Norm: channel을 subset으로 나눠서~