밑바닥부터 만드는 mini GPT 공부 시리즈 5편
attention만으로 GPT 모델이 완성되지는 않는다. attention 결과를 안정적으로 쌓고, 각 위치별로 비선형 변환을 수행하고, 깊은 층에서도 신호가 흐르도록 만드는 장치들이 필요하다.
이 글에서는 GPT block을 이루는 핵심 부품인 LayerNorm, GELU, FeedForward, residual connection을 한 흐름으로 정리한다.
GPT block의 기본 흐름
x
-> LayerNorm
-> Causal Multi-Head Attention
-> residual add
-> LayerNorm
-> FeedForward
-> residual add
이 흐름에서 가장 중요한 규칙은 shape가 계속 `(B, T, C)`로 유지된다는 점이다. 그래야 원래 입력과 새 계산 결과를 residual로 더할 수 있다.
1. LayerNorm은 각 토큰 벡터를 안정화한다
LayerNorm은 마지막 차원, 즉 한 토큰의 embedding 벡터 내부를 기준으로 평균과 분산을 맞춘다. batch 전체를 기준으로 보는 BatchNorm과 다르게, 문장 길이나 batch 크기가 바뀌어도 토큰 단위로 동작한다.
| 정규화 | 기준 | GPT에서의 감각 |
|---|---|---|
| LayerNorm | 각 토큰 벡터의 마지막 차원 | 한 토큰의 표현을 안정화 |
| BatchNorm | batch 방향 통계 | 언어 모델보다 CNN 등에서 더 익숙한 방식 |
2. GELU는 딱 잘라 버리지 않는 비선형 함수다
FeedForward 안에는 보통 GELU가 들어간다. ReLU가 0보다 작으면 바로 0으로 잘라내는 함수라면, GELU는 값을 더 부드럽게 통과시키거나 줄인다. 여기서 중요한 것은 이름을 외우는 것이 아니라, GPT block 안에서 “선형층만 반복되는 구조”를 막는 비선형 변환이 필요하다는 점이다.
음수는 0, 양수는 그대로. 단순하고 빠르다.
입력을 확률적으로 부드럽게 통과시키는 느낌에 가깝다.
3. FeedForward는 각 위치별 작은 MLP다
attention이 토큰들 사이의 관계를 섞는다면, FeedForward는 각 위치의 벡터를 더 풍부한 표현으로 바꾼다. 보통 `d_model -> 4*d_model -> d_model` 구조를 사용한다.
현재 토큰 표현
표현 공간 확장
다음 block이 받을 크기로 복귀
4. Residual connection은 원래 신호를 살려둔다
Transformer block은 attention이나 FeedForward 결과를 그대로 다음으로 넘기지 않는다. 원래 입력 `x`에 새로 계산한 결과를 더한다.
x = x + attention(layer_norm(x))
x = x + feed_forward(layer_norm(x))
이렇게 하면 깊은 모델에서도 정보와 gradient가 더 잘 흐른다. 처음 공부할 때 residual을 단순한 더하기로만 보면 안 된다. 깊은 층을 안정적으로 쌓기 위한 핵심 통로다.
5. pre-norm 구조로 읽으면 block이 덜 헷갈린다
이번 구현은 attention이나 FeedForward에 넣기 전에 먼저 LayerNorm을 적용한다. 그래서 흐름을 `정규화 -> 계산 -> 원래 값에 더하기`로 읽으면 된다.
x + attention(layer_norm(x))
x + feed_forward(layer_norm(x))
이 관점으로 보면 GPT block은 낯선 부품 묶음이 아니라, 같은 패턴을 두 번 반복하는 구조가 된다.
이번 글에서 기억할 것
- LayerNorm은 토큰 벡터의 스케일을 안정화한다.
- GELU는 FeedForward 안에서 비선형 변환을 담당한다.
- FeedForward는 각 위치의 표현을 비선형으로 변환한다.
- Residual connection은 깊은 block을 쌓을 수 있게 하는 정보 통로다.
스스로 점검
- LayerNorm은 어느 차원을 기준으로 평균과 분산을 계산하는가?
- GELU가 없다면 FeedForward는 어떤 종류의 변환만 반복하게 되는가?
- FeedForward가 `4*d_model`로 확장했다가 다시 줄어드는 이유는 무엇인가?
- Residual connection이 없다면 깊은 모델에서 어떤 문제가 커질 수 있는가?
다음 글 예고
다음 글에서는 loss 계산, 생성, checkpoint를 포함한 사전학습 흐름을 정리한다.
한 줄 정리: GPT block은 attention 하나가 아니라, 정규화와 비선형 변환과 residual connection이 함께 묶인 반복 가능한 층이다.