[LLM] 12. Transformer Block 이해하기
Transfromer Block
Transformer Block을 이해하기 위해서는 다음 개념들을 알고 있어야합니다.
Multi-Head Attention
, LayerNorm
, FFN
, Residual Connection
실행 흐름
입력 (Token Embedding + Positional Encoding)
↓
LayerNorm (Self-Attention 전에 정규화)
↓
Multi-Head Self-Attention (문장에서 중요한 단어 찾기)
↓
Residual Connection (원래 정보 유지)
↓
LayerNorm (FFN 전에 정규화)
↓
Feed Forward Network (FFN, Self-Attention 결과를 정제)
↓
Residual Connection (원래 정보 유지)
↓
출력 (다음 Transformer 블록으로 전달 or 최종 예측)
Transformer Block은 위와 같은 프로세스로 문장의 의미를 파악하고 학습합니다.
LayerNorm
뉴런 출력을 정규화하여 학습을 안정적으로 만드는 기법입니다. 즉 그냥 출력 정규화입니다.
필요한 이유
- 기울기 소실/발산 문제 (Gradient Vanishing/Exploding)
- 네트워크가 깊어지면 뉴런의 출력을 계속 곱하고 합쳐지면서 갑이 너무 커지거나 작아질 수 있습니다.
- 값이 너무 크면 Exploding -> 학습이 불안정해지고 NaN이 발생할 수 있습니다.
- 값이 너무 작으면 Vanishing -> 모델이 제대로 학습을 못할 수도 있습니다.
- 뉴런의 값 분포가 균일하지 않는 문제
- 어떤 뉴런은 평균적으로 10을 출력하고 어떤 뉴런은 0.1을 출력하게 되면 학습이 불균형 해지고 특정 뉴런의 영향력만 커집니다.
그래서 LayerNorm을 사용해서 뉴런 간 균형을 맞춥니다.
동작원리
LayerNorm은 뉴런들의 값을 정규화하는데 Self-Attention과 FFN 전 또는 후에 적용하게 됩니다.
$\hat{x} = \frac{x - \mu}{\sigma + \epsilon} * \gamma + \beta$
- ✅ 프로세스
- 입력 x의 평균을 빼서 평균 0으로 맞추고
- 표준편차로 나눠서 출력의 크기를 균일하게 만든다.
- 이후에 학습 가능한 파라미터를 곱하고 더하여 최적의 스케일을 조정합니다.
방식
Post-LayerNorm 방식
- Self-Attention과 FFN 후에 LayerNorm을 하는 경우이다.
Pre-LayerNorm 방식
- Self-Attention과 FFN 전에 LayerNorm을 하는 경우이다.
- 최근에는 이 방식이 더 안정적이라서 GPT 모델에서 사용한다.
FFN이란
FFN은 Transformer 블록 내에서 토큰을 개별적으로 가공하는 중요한 신경망 모듈입니다.
Self-Attention이 문맥을 반영한 정보를 전달하면 FFN은 이를 더 정교하게 하여 풍부한 의미를 갖는 표현으로 만든다고 합니다.
FFN 동작 방식
차원확장
- 입력토큰을 더 넓은 차원으로 변환합니다.
비선형 변환
- GELU를 적용하여 더욱 복잡한 패턴을 학습하도록 합니다.
차원 축소
- 다시 차원을 축소하여 모델이 효율적으로 처리할 수 있도록 합니다.
ReLU vs GELU
✅ ReLU (Rectified Linear Unit)
- 양수는 남기고 음수를 0으로 바꾸는 함수입니다.
- 불필요한 정보를 제거해서 더 간결한 표현을 만들고자 하는 목표를 갖고 있습니다.
✅ GELU (Gaussiian Error Linear Unit)
- ReLU보다 조금 더 부드럽게 처리합니다. 약한 음수를 조금 남겨둡니다.
- 작은 값들은 0 근처에서 천천히 변하고 큰 값들은 빠르게 증가합니다.
비선형 함수를 사용해야 하는 이유
선형 계층만 있다면 하나의 선형 변환을 한 효과만 나타난다고 합니다. 수학적인 부분이라 넘어가도록 합니다.
Residual Connection 이란? ( Shortcut Connection )
원래 정보를 유지하면서 새로운 정보를 추가하는 기법입니다.
Self-Attention과 FFN을 통과한 이후에도 원본 정보를 유지할 수 있도록 해줍니다.
Residual Connection이 필요한 이유
기울기 문제..
- LayerNorm에서도 마주한 기울기 문제인데 깊은 네트워크에서는 초기 입력과 출력간의 차이가 커질 수 있습니다. 역전파 할 때 Gradient가 사라지는 문제가 발생하기 때문입니다.
정보 손실
- Self-Attention과 FFN을 통과하면서 새 정보를 추가하다보면 기존 중요 정보가 사라질 수도 있습니다.
학습 속도 향상
- 원래 정보 유지하면서 새 정보 추가하기 때문에 학습 속도가 향상되고 성능이 나빠지는 문제 방지 가능합니다.
동작 방식
$y = f(x) + x$
- ✅ 프로세스
- $x$: 원본 입력 (Self-Attention , FFN 통과 이전 값)
- $f(x)$: 새로운 정보 (Self-Attention 또는 FNN을 통과한 출력)
- $y$: 최종 출력 (원본 입력 + 새로운 정보)
결론
- ✅ Residual Connection을 사용한다면
- 정보 손실이 적다 -> 문맥 유지 가능
- 학습이 더 빨리 진행된다 -> 네트워크가 깊어져도 안정적임
- 모델 성능 향상 -> 정보가 풍부하게 남음.