Transformer MLP/FFN
Transformer block에는 attention만 있는 것이 아니다. attention 뒤에는 보통 MLP 또는 FFN이라고 부르는 부분이 있다.
x: [B, T, D]
MLP(x): [B, T, D]
겉에서 보면 입력과 출력 shape은 같다. 하지만 내부에서는 보통 hidden dimension을 크게 늘렸다가 다시 줄인다.
D -> F -> D
많은 Transformer에서 F는 D보다 크다.
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 쪽을 바꾸는 이유는 무엇인가?