본문 바로가기
C.W.K.
Stream
Lesson 01 of 06 · published

MoE의 직관: 모든 토큰에 모든 전문가가 필요하진 않아

~12 min · moe, intuition, ffn

Level 0정찰자
0 XP0/41 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

토큰마다 필요한 일이 달라

시퀀스 안의 모든 토큰이 같은 처리를 요구하지는 않아. 흔한 단어와 복잡한 수식, 드문 언어의 코드 식별자에 똑같은 계산 경로를 쓰는 건 낭비일 수 있어. Dense는 난이도와 관계없이 모든 토큰에 전체 연산 비용을 내. Mixture of Experts는 토큰과 관련된 네트워크 일부만 켜면 어떨지 묻는 구조야.

FFN 하나를 전문가 묶음으로 바꿔

MoE는 트랜스포머 레이어의 Dense FFN 하나를 여러 전문가 FFN과 라우터로 교체해. 어텐션, 층 정규화, 임베딩, 위치 인코딩은 Dense 트랜스포머와 같아. 구조가 달라지는 자리는 FFN 안쪽뿐이야.

네 가지 부품

  • 전문가: 같은 모양이지만 각자 다른 가중치를 학습하는 독립 FFN이야.
  • 라우터: 선형 층과 softmax 또는 sigmoid 같은 작은 네트워크가 토큰마다 전문가 점수를 매겨.
  • Top-K 선택: 점수가 높은 K개 전문가만 토큰을 처리해. Mixtral은 top-2, DeepSeek-V2는 top-6, DeepSeek-V3와 Qwen3 MoE는 top-8을 써.
  • 공유 전문가: DeepSeek 같은 일부 구조는 라우터 결정과 상관없이 모든 토큰이 거치는 전문가를 한두 개 둬.

얻는 것과 치르는 것

전체 파라미터 풀이 크므로 큰 모델의 용량을 얻고, N개 가운데 K개만 켜므로 토큰당 연산량은 훨씬 작은 모델에 가깝게 유지할 수 있어. 다만 K개만 계산하더라도 N개 전문가의 가중치를 모두 메모리에 올려야 해. MoE는 메모리와 연산량을 같은 숫자로 보던 습관을 깨.

먼저 모양부터 익혀

라우팅 규칙, 부하 균형 손실, 전문가 붕괴, 메모리 역설, 모델 패밀리별 차이는 뒤에서 다룰 거야. 지금은 Dense FFN 하나가 전문가 묶음과 라우터로 바뀐다는 모양만 단단히 잡아.

Code

Dense FFN과 MoE FFN의 유일한 아키텍처 차이·python
# Dense FFN: one network, all tokens use it.
def dense_ffn(x):
    return W_down @ silu(W_gate @ x) * (W_up @ x)   # all weights active

# MoE FFN: one router + N experts, top-K of them fire.
def moe_ffn(x, router, experts, k=2):
    scores  = router(x)                              # (N,)
    top_k   = topk_indices(scores, k)
    weights = softmax(scores[top_k])
    output  = 0
    for i, w in zip(top_k, weights):
        output += w * experts[i](x)                  # only k experts compute
    return output
BF16에서 top-K 마스킹 라우팅 결정·python
import torch

def route(x, gate_proj, k=2, num_experts=8):
    logits  = gate_proj(x)                  # (B*T, num_experts)
    weights, idx = logits.topk(k, dim=-1)   # top-K logits per token
    weights = weights.softmax(dim=-1)
    return idx, weights                     # idx: (B*T, k), weights: (B*T, k)

External links

Exercise

4층 트랜스포머를 종이에 그려 봐. 1층과 3층은 Dense FFN, 2층과 4층은 전문가 네 명 가운데 둘을 고르는 MoE FFN이야. 토큰 하나가 순전파할 때 실제로 활성화되는 가중치를 표시해. MoE가 모델 전체 교체가 아니라 레이어 안의 변화라는 점이 눈에 들어올 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.