Transformer MLP/FFN

transformermlpffn

Transformer block에는 attention만 있는 것이 아니다. attention 뒤에는 보통 MLP 또는 FFN이라고 부르는 부분이 있다.

x: [B, T, D]
MLP(x): [B, T, D]

겉에서 보면 입력과 출력 shape은 같다. 하지만 내부에서는 보통 hidden dimension을 크게 늘렸다가 다시 줄인다.

Input
D
Expand
F ~= 4D
Project
D
MLP/FFN은 각 token 위치에서 D차원 벡터를 더 넓은 F차원으로 확장한 뒤 다시 D차원으로 되돌린다.
D -> F -> D

많은 Transformer에서 FD보다 크다.

F ~= 4D

token-wise 계산

MLP/FFN은 각 token 위치에 같은 network를 적용한다고 볼 수 있다.

for each token position:
  D-dimensional vector
    -> expand to F
    -> activation
    -> project back to D

Attention처럼 token 1이 token 2를 직접 참고하는 구조가 아니다. token 사이의 정보는 attention에서 이미 섞였고, MLP는 그 결과를 각 token 위치에서 더 깊게 변환한다.

왜 중요한가

MLP/FFN은 단순한 부속품이 아니다. 큰 Transformer에서는 MLP가 parameter와 FLOPs의 큰 비중을 차지한다.

그래서 MoE 같은 현대 LLM 구조도 주로 attention이 아니라 MLP/FFN 쪽을 바꾼다. dense MLP 하나를 모든 token에 적용하는 대신, 여러 expert MLP 중 일부만 선택하게 만든다.

확인

  • Transformer MLP/FFN의 일반적인 차원 흐름은 무엇인가?
  • MLP/FFN은 token 사이를 직접 섞는가?
  • MoE가 주로 attention이 아니라 MLP/FFN 쪽을 바꾸는 이유는 무엇인가?