Batch/Layer/Group Normalization

2024. 11. 25. 15:54·딥러닝
반응형

Batch/Layer/Group Noralization의 개념과 차이를 정리한 글입니다.

 

Background

DNN 에서 Covariant Shift 문제를 해결하기 위해 Normalization이 제안되었습니다.

Covariant Shift란 학습 과정에서 계층 별로 입력의 데이터 분포가 달라지는 현상을 말합니다. 각 계층은 FC 연산이나 Convolution 연산 등을 거친 뒤 activation function을 적용하게 됩니다. 그러면, 연산 전/후에 데이터 간 분포가 달라질 수 있습니다. 이 문제점을 개선하기 위해 Normalization 개념이 제안됩니다.


Normalization

 

딥러닝에서 일반적으로 널리 쓰이는 4가지 Norm 기법을 정리해보았습니다.

 

H와 W가 하나의 차원에 묶여있기 때문에 직관적으로 이해하기 어려울 수 있습니다. N, H, W, C 각 차원을 모두 표현한 아래 그림이 직관적으로 이해하기에 더 도움이 될 것 같습니다.

출처: Xu Cao on X: "Summary and visualization of different normalization techniques: batch norm, layer norm, instance norm and group norm; mean and variance is calculated among blocks of the same color. https://t.co/qBLQyoUDSr" / X


Batch Normalization

Batch Normalization (BN) normalizes the mean and standard deviation for each individual feature channel/map.

 

Batch Normalization(BN)은 각 채널에 대해 배치사이즈 내의 평균과 편차를 구하여 정규화 하는 방법입니다.

 

학습 단계에서 Batch Normalization을 적용하는 수식은 다음과 같습니다.

 

$$BN = \gamma(\frac{X-\mu_{batch}}{\sigma_{batch}})+\beta$$

 

Batch 단위의 데이터에 대해 $X \sim N(0, 1)$로 강제하는 것 보다, 적절한 분포를 학습하는 방향으로 추가적인 학습 가능한 파라미터인 $\gamma$와 $\beta$가 제안됩니다.

 

이와 같은 Normalization 과정을 통하여, 모든 계층의 Feature가 동일하게 Scale 되어 learning rate 결정에 유리한 효과를 가져올 수 있습니다.

 

추론 단계에서 Batch Normalization은 다음과 같습니다.

 

$$BN = \gamma(\frac{X-\mu_{BN}}{\sigma_{BN}}) + \beta $$

$$\mu_{BN} = \frac{1}{B}\sum_ix_i$$

$$\sigma^2_{BN}=\frac{1}{B}\sum_i(x_i-\mu_{BN})^2$$

 

추론 단계에선 배치 단위의 Normalization을 사용하지 않습니다. 추론 단계에서는 학습 단계에서 결정된 평균과 분산값을 고정하여 사용합니다.

 

BN은 주로 CNN, 이미지 처리 분야에서 사용됩니다.


Layer Normalization

Batch Normalization의 몇몇 문제점을 해결하기 위해 Layer Normalization이 제안되었습니다.

 

문제점

1. Batch Normalization은 배치 사이즈에 의존적입니다.

  • 배치 크기가 너무 작으면 잘 동작하지 않습니다.

2. RNN(Recurrent Neural Network)에는 적합하지 않습니다.

  • Sequential 데이터를 다루는 RNN에서는 각 시점마다 다른 데이터가 나오는 형태이기 때문에 배치 정규화를 적용시키기 어렵습니다.

배치 사이즈가 $N$, $R^{N \times K}$인 데이터를 처리할 때, LN은 다음과 같이 수식적으로 표현할 수 있습니다.

 

$$\mu_n = \frac{1}{K}\sum^K_{k=1}x_{nk}$$

$$\sigma^2_n = \frac{1}{K}\sum^K_{i=1}(x_{nk}-\mu_n)^2$$

$$LN_{\gamma, \beta}(x_n) = \gamma\hat(x_n) + \beta, x_n \in R$$

 

$K$는 sample의 dimension 입니다.

 

BN은 Batch 차원에서의 정규화 / LN은 (각 샘플별로) Feature 차원의 정규화 라는 차이가 있습니다.

 

아래 그림을 통해 BN과 LN의 차이를 직관적으로 이해해 볼 수 있을 것 같습니다.

 

Batch Normalization vs Layer Normalization 출처: https://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/

 


Instance Normalization

IN(Instance Normalization)은 각 데이터 샘플당 채널별로 normalization을 수행합니다.

 



IN은 LN과 유사하지만, 한 단계 더 나아가 각 채널 별로 평균과 분산을 구하여 각 샘플의 각 채널에 정규화를 진행합니다.

 

이러한 normalization 방법은 style transfer에서 효과적이라고 합니다.

 

IN에 대해서는 추후 자세히 다룰 수 있는 기회가 있을 때 다시 작성해보겠습니다.


Group Normalization

GN(Group Normalization)은 LN과 IN의 절충된 형태로 볼 수 있는데, 각 채널을 N개의 group으로 나누어 normalization 하는 방법입니다. group = 1이면 LN과 동일하게 되고 group = c 이면 IN과 동일해집니다.

 

GN은 BN의 한계를 극복하기 위해 제안되었습니다.

  • BN은 작은 배치 크기에서의 성능이 저하됨
  • 작은 배치 통계에 의존하여 배치 간 변동성이 큼
  • 특히, Object detection이나 Segmentation와 같은 high resolution image를 사용하여 작은 batch-size를 설정할 수 밖에 없는 task에서 성능 저하 발생

 

GN의 $\mu$, $\sigma$, set $S_i$는 다음과 같이 정의됩니다.

$$S_i = \{k|k_N = i_N, \lfloor{\frac{K_C}{C/G}}\rfloor = \lfloor\frac{i_C}{C/G}\rfloor\}$$

 

출처: Group Normalization(Figure 5: Sensitivity to batch sizes)

 

BN과 GN의 각 batch-size 별 성능을 비교했을 때, BN은 작은 batch-size에서 성능이 좋지 못함을 보여주고 있습니다. 반면, GN은 batch-size에 상관 없이 BN(high batch-size)과 유사한 좋은 성능을 보여줌을 확인할 수 있습니다.

 


Reference

  • 배치 정규화(Batch Normalization) - gaussian37
  • In-layer normalization techniques for training very deep neural networks | AI Summer
  • Review: Group Normalization. 이 포스팅은 루닛 블로그에 2018년 4월에 올렸던 포스트입니다. | by Brian Jaehong Aum | Lunit Team Blog | Medium
  • How does Layer Normalization work?
  • [개념] Deep Learning Normalization Techniques

 

반응형

'딥러닝' 카테고리의 다른 글

모두의 딥러닝 시즌 1  (0) 2024.12.22
Positional Encoding: sin/cos을 사용하는 이유  (1) 2024.11.25
RNN: Backpropagation  (0) 2024.11.18
'딥러닝' 카테고리의 다른 글
  • 모두의 딥러닝 시즌 1
  • Positional Encoding: sin/cos을 사용하는 이유
  • RNN: Backpropagation
hangyuwon
hangyuwon
  • hangyuwon
    191
    hangyuwon
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (38)
      • 기타 (1)
      • Stanford CS231n (19)
      • 논문 리뷰 (5)
      • Error (4)
      • 알고리즘 (2)
      • Linux (1)
      • 잡동사니 (2)
      • 딥러닝 (4)
  • 인기 글

  • 태그

    error
    논문 리뷰
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hangyuwon
Batch/Layer/Group Normalization
상단으로

티스토리툴바