MultiHeadAttention — Transformer 의 심장
MultiHeadAttention 은 Transformer 패밀리 전체가 그 둘레로 지어진 layer 야. sequence 의 모든 위치가 다른 모든 위치를 보고 뭐가 relevant 한지 정하게 해 — 그게 "attention" — 그리고 그 lookup 을 여러 독립 head 로 동시에 돌려서 model 이 서로 다른 관계를 병렬로 attend 할 수 있어. 인자 둘이 의미 대부분을 짊어져 — num_heads 는 병렬 attention 패턴 몇 개 학습할지, key_dim 은 각 head 의 query/key 공간 폭.
query·key·value 에 같은 tensor 넘기면 self-attention (sequence 가 자기 자신이랑 관계 맺기), key/value 에 다른 소스 넘기면 cross-attention (encoder-decoder 연결).
Normalization — 깊은 망을 학습 가능하게 유지
Normalization layer 는 activation 을 안정된 분포로 rescale 해서 깊이가 늘어도 gradient 가 터지거나 사라지지 않게 해. 어느 축으로 normalize 하느냐로 종류가 갈려:
| Layer | 정규화 단위 | 적합 |
|---|---|---|
BatchNormalization | batch 별 (sample 가로질러) | CNN, 일반 학습 |
LayerNormalization | sample 별 (feature 가로질러) | Transformer, RNN |
GroupNormalization | 채널 group 별 | 작은 batch |
이 갈림이 중요한 이유 — BatchNormalization 은 batch 통계에 의존해서 batch 가 작거나 sequence 길이가 들쭉날쭉하면 취약해. 반면 LayerNormalization 은 각 sample 을 *제 안에서* (feature 차원 평균/분산) 정규화해서 batch 1 이어도 안정 — Transformer 와 RNN 이 이걸 잡는 이유야. 보통 attention / FFN block 의 *전* (pre-norm) 또는 *후* (post-norm) 에 박혀.