Layer Norm

Transformer LayerNorm은 Token에 무엇을 할까?

Layer Normalization을 공부하다 보면 수식 자체는 어렵지 않습니다.

평균 계산
→ 분산 계산
→ 정규화
→ gamma(γ)
→ beta(β)

하지만 여기서 더 중요한 질문이 생깁니다.

그래서 LayerNorm을 하면 Token에는 실제로 어떤 변화가 생길까?

그리고 또 하나,

왜 Transformer는 굳이 Token의 feature를 정규화해야 할까?

이번 글에서는 LayerNorm의 계산식보다는 LayerNorm이 Token의 표현에 어떤 영향을 주는지를 중심으로 살펴보겠습니다.


1. 먼저 Token의 벡터를 이해해 보자

Transformer에서 하나의 Token은 하나의 숫자가 아니라 여러 개의 feature로 이루어진 벡터로 표현됩니다.

예를 들어 d_model=4라고 가정하면 하나의 Token은 다음과 같이 표현될 수 있습니다.

여기서 중요한 점은

[1, 2, 3, 4]

4개의 Token이 아니라 하나의 Token을 표현하는 4개의 feature라는 것입니다.

실제 Transformer에서 d_model=512라면 하나의 Token은

처럼 512개의 feature를 가진 벡터로 표현됩니다.


2. LayerNorm은 Token을 다른 Token으로 바꾸는 것이 아니다

예를 들어 하나의 Token이 다음과 같은 feature를 가지고 있다고 가정해 보겠습니다.

Token A

[1, 2, 3, 4]

LayerNorm을 적용하면 대략 다음과 같이 변합니다.

Token A

[1, 2, 3, 4]

       ↓ LayerNorm

[-1.34, -0.45, 0.45, 1.34]

여기서 Token 자체가 다른 Token으로 변한 것은 아닙니다.

즉,

Token A
   ↓
Token B

가 아닙니다.

정확하게는

Token A의 기존 표현

[1, 2, 3, 4]

        ↓ LayerNorm

Token A의 새로운 표현

[-1.34, -0.45, 0.45, 1.34]

입니다.

Token은 그대로이고, 그 Token을 표현하는 feature의 숫자가 조정되는 것입니다.


3. LayerNorm은 어떤 차원을 정규화할까?

Transformer 내부 Tensor의 일반적인 shape은 다음과 같습니다.

[batch_size, seq_len, d_model]

예를 들어,

[32, 10, 512]

라면

32  → batch_size
10  → seq_len
512 → d_model

입니다.

LayerNorm은 여기에서 마지막 차원인 d_model을 기준으로 정규화합니다.

seq_len 방향으로 Token들을 모아서 정규화하는 것이 아닙니다.

각 Token 내부의 feature들을 대상으로 합니다.

각 Token은 독립적으로 정규화됩니다.


4. 실제 숫자로 보면 어떻게 변할까?

다음 Token을 생각해 보겠습니다.

Token A

[1, 2, 3, 4]

평균은

mean = 2.5

이고 분산은

var = 1.25

입니다.

LayerNorm의 Normalization 부분을 적용하면

[1, 2, 3, 4]

       ↓

평균 제거

       ↓

[-1.5, -0.5, 0.5, 1.5]

       ↓

분산을 이용한 Scale 정규화

       ↓

[-1.34, -0.45, 0.45, 1.34]

처럼 변합니다.

정규화 직후에는 대략

mean ≈ 0
var  ≈ 1

인 분포를 가지게 됩니다.


5. 왜 굳이 이렇게 바꿀까?

이제 가장 중요한 부분입니다.

Attention이나 FFN을 여러 번 통과하면서 Token의 feature 값은 계속 변합니다.

예를 들어 매우 단순화해서 다음과 같은 Token들이 있다고 가정해 보겠습니다.

Token A

[1, 2, 3, 4]


Token B

[100, 200, 300, 400]


Token C

[0.01, 0.02, 0.03, 0.04]

각 Token의 숫자 Scale이 크게 다릅니다.

이런 값들이 Transformer의 여러 Layer를 계속 통과하면 내부 activation의 Scale을 안정적으로 유지하기 어려워질 수 있습니다.

LayerNorm을 적용해 보겠습니다.

Token A

[1, 2, 3, 4]

        ↓ LayerNorm

[-1.34, -0.45, 0.45, 1.34]
Token B

[100, 200, 300, 400]

        ↓ LayerNorm

[-1.34, -0.45, 0.45, 1.34]
Token C

[0.01, 0.02, 0.03, 0.04]

        ↓ LayerNorm

[-1.34, -0.45, 0.45, 1.34]

이 예제에서는 세 벡터가 단순히 서로의 배수이기 때문에 정규화 결과가 동일하게 나타납니다.

즉 LayerNorm은 단순히

큰 숫자를 작은 숫자로 바꾸는 것

이 아닙니다.

각 Token 내부 feature들의 상대적인 분포를 기준으로 Scale을 정리하는 것에 가깝습니다.


6. LayerNorm의 중요한 역할: 안정적인 Scale

Transformer는 매우 깊은 신경망이 될 수 있습니다.

Input
 ↓
Transformer Layer 1
 ↓
Transformer Layer 2
 ↓
Transformer Layer 3
 ↓
...
 ↓
Transformer Layer N

각 Layer에서

Attention
FFN
Residual Connection

등의 연산이 반복적으로 수행됩니다.

LayerNorm은 중간 표현의 수치적 Scale을 조절하여 깊은 네트워크의 최적화를 돕습니다.

쉽게 표현하면,

각 Layer에서 계속 변하는
Token의 feature 값

        ↓

    LayerNorm

        ↓

보다 안정적인 Scale의 표현

        ↓

다음 Layer

이라고 볼 수 있습니다.

LayerNorm은 Token 표현의 수치적인 분포를 조절하여 Transformer가 안정적으로 학습할 수 있도록 도와줍니다.


7. 그러면 Token의 정보가 사라지는 것은 아닐까?

여기서 자연스럽게 이런 의문이 생길 수 있습니다.

정규화하면 Token이 가지고 있던 정보도 사라지는 것 아닌가?

일반적인 경우 그렇지 않습니다.

예를 들어

[1, 2, 3, 4]

라는 feature가 있다고 생각해 보겠습니다.

여기에는 다음과 같은 상대적인 관계가 있습니다.

f1 < f2 < f3 < f4

LayerNorm 후에는

[-1.34, -0.45, 0.45, 1.34]

가 됩니다.

여전히

f1 < f2 < f3 < f4

라는 상대적인 패턴은 유지됩니다.

즉 LayerNorm은 Token의 정보를 무조건 없애는 연산이라기보다,

Token feature의 전체적인 위치와 Scale을 정리하는 연산

이라고 이해하는 것이 좋습니다.


8. 그런데 왜 gamma와 beta가 필요할까?

LayerNorm의 수식은 Normalization에서 끝나지 않습니다.

전체 수식은 다음과 같습니다.

y=γxμσ2+ϵ+βy= \gamma \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} + \beta

즉 먼저

Normalization

을 수행한 뒤,

× gamma
+ beta

를 추가합니다.

왜 그럴까요?

Normalization만 사용하면 Token의 feature가 항상 특정한 형태로 강제됩니다.

하지만 신경망 입장에서는 어떤 feature는 크게 표현하고 싶을 수도 있고, 어떤 feature는 작게 표현하는 것이 더 유리할 수도 있습니다.

그래서 학습 가능한 gammabeta를 추가합니다.


9. gamma(γ)의 역할 — Scale

gamma는 정규화된 값을 확대하거나 축소합니다.

normalized_x

        ↓

     × gamma

        ↓

Scale 조절

예를 들어,

normalized_x

[-1.34, -0.45, 0.45, 1.34]

라고 하겠습니다.

gamma

[0.5, 1.0, 2.0, 3.0]

이라면 각 feature마다 다르게 적용됩니다.

-1.34 × 0.5

-0.45 × 1.0

 0.45 × 2.0

 1.34 × 3.0

즉 모델은 각 feature에 대해

feature 1 → 조금 축소

feature 2 → 그대로 유지

feature 3 → 확대

feature 4 → 크게 확대

하는 식의 조절을 학습할 수 있습니다.


10. beta(β)의 역할 — Shift

beta는 값을 이동시키는 역할을 합니다.

gamma × normalized_x

        ↓

      + beta

        ↓

위치 조절

예를 들어,

beta = [1, 0, 0, -1]

이라면 각 feature에 각각 다른 값을 더합니다.

즉,

feature 1 → +1

feature 2 → +0

feature 3 → +0

feature 4 → -1

처럼 조정할 수 있습니다.


11. gamma와 beta는 Token마다 따로 존재할까?

여기서 중요한 점이 하나 있습니다.

d_model=4라면

처럼 feature마다 하나씩 존재합니다.

따라서

에 대해

처럼 계산합니다.

하지만 여기서 주의해야 합니다.

Token마다 서로 다른 gamma와 beta를 가지는 것은 아닙니다.

같은 LayerNorm 층에서는 모든 Token이 동일한 gamma와 beta 파라미터를 공유합니다.

예를 들어,

Token 1 ─┐
Token 2 ─┼→ 같은 gamma / beta 사용
Token 3 ─┘

입니다.

d_model=512라면 하나의 LayerNorm 층에는

512개의 gamma
+
512개의 beta

가 존재합니다.

즉 총

1024개의 학습 가능한 파라미터

가 추가됩니다.


12. gamma와 beta는 어떻게 학습될까?

처음 LayerNorm을 생성하면 일반적으로

gamma = [1, 1, 1, ..., 1]

beta  = [0, 0, 0, ..., 0]

으로 시작합니다.

따라서 초기에는

gamma × normalized_x + beta

= 1 × normalized_x + 0

= normalized_x

가 됩니다.

하지만 모델 학습이 시작되면 gamma와 beta도 다른 모델 파라미터와 함께 업데이트됩니다.

Transformer
    ↓
Prediction
    ↓
Loss
    ↓
Backpropagation
    ↓
gamma gradient
beta gradient
    ↓
Optimizer
    ↓
gamma / beta 업데이트

즉 LayerNorm 자체가

gamma는 0.5가 되어야 한다!

라고 판단하는 것이 아닙니다.

전체 모델의 Loss를 줄이는 방향으로 Backpropagation을 통해 학습됩니다.


13. gamma와 beta를 두 개의 조절 노브로 생각하기

직관적으로는 다음처럼 생각하면 쉽습니다.

즉,

Normalization
→ 먼저 안정적인 분포로 정리

gamma
→ 각 feature의 Scale 조절

beta
→ 각 feature의 위치 조절

이라고 기억하면 됩니다.


14. Self-Attention과 LayerNorm의 역할은 다르다

예를 들어 다음 문장을 생각해 보겠습니다.

I deposited money in the bank.

여기서 bank라는 Token이 있습니다.

Self-Attention은 주변 Token을 참고합니다.

그리고 문맥 정보를 반영하여 bank의 표현을 변화시킵니다.

반면 LayerNorm은

bank = 은행

이라는 의미를 직접 판단하는 역할이 아닙니다.

LayerNorm은 Attention 등을 거친 bank의 feature 벡터를 받아서 그 벡터의 수치적인 분포를 조정합니다.


15. Attention, FFN, LayerNorm의 차이

Transformer를 공부할 때 세 가지 역할을 구분하면 전체 구조가 훨씬 이해하기 쉬워집니다.

구성 요소핵심 역할
Self-AttentionToken 간 정보를 주고받고 문맥을 반영
FFN각 Token의 feature를 비선형적으로 변환
LayerNorm각 Token 내부 feature의 수치 분포를 조정

조금 더 직관적으로 표현하면,

라고 생각할 수 있습니다.


16. LayerNorm 전후에도 Token의 차원은 그대로다

LayerNorm을 적용한다고 해서 d_model이 변하는 것도 아닙니다.

예를 들어

d_model = 4가 LayerNorm을 통과하면

d_model = 4가 됩니다.

즉,

입니다.

shape은 그대로이고 feature의 값만 변합니다.


17. 전체 흐름 한 번에 이해하기

하나의 Token을 기준으로 LayerNorm 전체 과정을 정리해 보겠습니다.

Token의 shape이나 개수는 바뀌지 않습니다.

변하는 것은 Token을 표현하는 feature의 값입니다.


18. 핵심 정리

LayerNorm을 이해할 때는 단순히

평균을 0으로 만들고 분산을 1에 가깝게 만든다.

라고만 외우는 것보다 Token 관점에서 이해하는 것이 중요합니다.

LayerNorm은 하나의 Token에 대해

을 수행합니다.

결국 한 문장으로 정리하면 다음과 같습니다.

LayerNorm은 Token의 의미 자체를 바꾸는 연산이 아니라, 각 Token 내부의 d_model feature 분포를 정규화하여 안정적인 수치 Scale을 만들고, 학습 가능한 gamma(γ)beta(β)를 통해 각 feature에 필요한 Scale과 Shift를 다시 조정하는 과정입니다.

Transformer의 역할을 함께 기억하면 더 쉽습니다.

Self-Attention
→ Token 간 정보 교환

FFN
→ Token feature 변환

LayerNorm
→ Token feature의 수치 분포 조정

즉 LayerNorm은 “Token이 무엇을 의미하는지”를 결정하는 층이라기보다, 그 Token의 표현이 다음 Layer에서 안정적으로 처리될 수 있도록 정리해 주는 층이라고 이해하면 좋습니다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다