Layer Normalization은 Batch Normalization과 함께 Normalization을 시켜주는 방법이다.
딥러닝에서의 Normalization의 효과는 다음과 같다.
일반적인 경우 layer의 활성화함수 직전에 batch normalization을 배치하는데, 이때 batch normalization을 통해 활성화함수에서의 위치를 조절해 줄 수 있다. 예를 들어, sigmoid 의 경우 matrix를 통과한 활성화함수 입력값이 양 극단에 쏠려있다면, gradient값이 0에 가깝게 되고 이는 gradient vanishing과 함께 느린 학습의 원인이 된다.
이러한 활성화함수의 입력값을 표준화시켜준 후 적당한 위치에 배치시켜준다면, 적절한 학습을 할 수 있고 이로 인해 빠른 학습 효과도 기대해 볼 수 있다.
따라서 Normalization의 단계는 두 단계를 가진다고 할 수 있다.
Batch Normalization의 경우 두 가지 문제를 가진다.
1. batch size에 크게 의존적이다.
2. RNN과 LSTM 같이 sequential한 데이터를 다룰 때는 한계가 있다.
이러한 두 가지 문제로 인해 sequential 데이터를 transformer와 같은 모델에서는 batch nornalization이 아닌 layer normalization을 사용한다.
가장 직관적으로 이해할 수 있는 사진은 아래와 같다. BN (batch normalization)에서는 Batch 단위로 표준화를 하기 때문에 Batch에 있는 모든 영역에 색이 칠해진 것을 확인할 수 있다. (색이 칠해진 부분은 한 번 표준화를 할 때 해당되는 대상들이다.)
반면 layer normalization에서는 아래와 같이 하나의 데이터에서 Feature 대상으로만 표준화가 일어나는 것을 확인할 수 있다.
즉, layer normalization은 batch size와 관계 없이 하나의 단어 차원에서만 작동한다는 것을 알 수 있다.
아래 그림과 같이 세로축인 feature 차원에 대해 표준화를 진행한다.
여기서 공부할 때 헷갈릴 수 있는 점이 있다.
아까 normalization에서는 크게 두 단계의 과정을 거친다고 했다.
Batch Normalization의 경우에는 batch 단위로 표준화를 시키고 batch 단위로 분포를 이동시킨다.
layer Normalization 에서는 feature 단위로 표준화를 시키지만 분포를 이동시키는 건 featrue 단위로 일어나지 않고, sequence length와 batch 단위로 일어난다.
이는 transformer 코드를 보면 이해할 수 있다.
여기서 우리가 표준화를 시킨 후 새로 학습하고자 하는 값은 단어의 차원 수 (d_model)만큼 있다.
그림을 예시로 들어보면 참고로 이 그림에서 d_model은 5개이다.
실제로 표준화는 5개를 대상으로 하지만, 막상 표준화된 값들을 새로운 분포로 이동시켜 줄 때에는 5개의 파라미터를 이용하여 모든 데이터들 중 첫 번째 차원을 가지는 애는 첫 번째 파라미터로, 두 번째는 두 번째 파라미터로 표준화 시켜주는 것을 확인할 수 있다.