Mixture of Experts (MoE)
전문가 혼합(MoE)은 각 토큰을 소수의 전문가 하위 네트워크로 전달하므로, 모델의 전체 파라미터 수가 토큰당 연산량보다 훨씬 빠르게 증가합니다.
전문가 혼합(MoE)은 모델 일부를 전문가라고 부르는 다수의 병렬 하위 네트워크로 나누고, 학습된 소형 라우터가 각 입력을 그중 일부에만 전달하는 신경망 아키텍처입니다. 각 토큰이나 이미지 패치가 전문가 중 일부만 통과하므로, 입력당 연산량은 크게 늘리지 않으면서 전체 파라미터 수를 훨씬 빠르게 늘릴 수 있습니다. Mixtral 8x7B는 파라미터가 470억 개이지만 토큰마다 130억 개를 사용하고, DeepSeek-V3는 6,710억 개 중 370억 개를 활성화합니다. 오늘날의 대규모 언어 모델(LLM)에서 사용하는 라우터 게이트 방식의 희소 MoE 계층은 Google이 2017년에 발표한 희소 게이트 MoE 계층을 기반으로 합니다. 이 계층은 스택된 LSTM 계층 사이에서 파라미터 1,370억 개 규모에 도달했습니다.
MoE 계층의 작동 방식#
Transformer에서 MoE 계층은 일반적으로 각 셀프 어텐션 블록 뒤에 오는 피드포워드 네트워크(FFN)를 대체합니다. 계층에는 동일한 형태의 전문가 FFN N개와 라우터가 있습니다. 라우터는 토큰마다 모든 전문가의 점수를 산출하는 단일 선형 계층입니다. 토큰은 점수가 가장 높은 k개 전문가로 전달되고, 전문가의 출력은 라우터의 정규화된 점수로 가중치를 적용해 합산됩니다. 나머지 전문가는 해당 토큰을 처리하지 않습니다. Mixtral은 각 계층에서 전문가 8개 중 2개를 선택하고, DeepSeek-V3는 경로 지정 전문가 256개 중 규모가 작은 8개를 선택하며 모든 토큰을 공유 전문가 하나에도 전달합니다. 라우팅은 각 계층에서 독립적으로 이루어지므로 토큰은 깊이에 따라 서로 다른 전문가를 사용할 수 있고, 같은 문장의 두 토큰도 동일한 계층에서 서로 다른 경로를 거칠 수 있습니다.
Mixtral의 전문가들은 주제별로 특화되지 않았습니다. 저자들은 생물학이나 철학 같은 분야별로 전문가가 명확히 구분되지 않는다고 밝혔습니다. 대신 라우팅은 구문을 따랐으며, Python 코드의 self와 들여쓰기 토큰 등은 같은 전문가에게 전달되는 경향이 있었습니다.
부하 분산과 전문가 용량#
새로 초기화된 라우터는 소수의 전문가를 선호하는 경향이 있습니다. 그러면 해당 전문가가 더 빠르게 학습해 더 많은 토큰을 끌어들이는 반면 나머지 전문가는 유휴 상태로 남습니다. 아래의 6개 토큰 예제에서는 전문가 8개로 구성된 top-2 계층을 거쳐 라우팅하고 전문가별로 전달받은 토큰 수를 계산합니다.
import torch
torch.manual_seed(0)
dim, num_experts, top_k = 32, 8, 2
experts = torch.nn.ModuleList(
torch.nn.Sequential(torch.nn.Linear(dim, 4 * dim), torch.nn.GELU(), torch.nn.Linear(4 * dim, dim))
for _ in range(num_experts)
)
router = torch.nn.Linear(dim, num_experts, bias=False)
tokens = torch.randn(6, dim)
# 라우터는 각 토큰에서 점수가 가장 높은 전문가 2개의 점수를 유지하고, 소프트맥스를 적용해 혼합 가중치로 변환합니다.
scores, chosen = router(tokens).topk(top_k, dim=-1)
weights = scores.softmax(dim=-1)
out = torch.zeros_like(tokens)
for e, expert in enumerate(experts):
token_idx, slot = (chosen == e).nonzero(as_tuple=True) # 전문가 e를 선택한 토큰
out[token_idx] += weights[token_idx, slot, None] * expert(tokens[token_idx])
print("Experts per token:", chosen.tolist())
print("Tokens per expert:", torch.bincount(chosen.flatten(), minlength=num_experts).tolist())전문가 쌍 [[3, 6], [7, 6], [0, 7], [3, 1], [6, 1], [2, 3]]과 전문가별 개수 [1, 2, 1, 3, 0, 0, 3, 2]를 출력합니다. 전문가 3과 6은 각각 토큰 3개를 처리하고 전문가 4와 5는 토큰을 하나도 받지 않습니다. 각 토큰은 전문가 네트워크 8개 중 2개만 통과합니다. 각 토큰을 전문가 하나에만 라우팅하고 파라미터 1조 6,000억 개 규모로 확장한 Switch Transformer는 토큰과 라우터 확률이 전문가 전체에 고르게 분산될 때 최소가 되는 보조 손실 항을 추가했으며, 이후의 많은 MoE 모델도 유사한 항을 사용합니다. DeepSeek-V3는 보조 손실을 사용하지 않고, 학습 중 라우팅 점수에 적용되는 전문가별 편향을 위아래로 조정합니다. 학습 시스템은 한 배치에서 전문가가 수용하는 토큰 수, 즉 용량에도 상한을 설정합니다. 상한을 초과한 토큰은 해당 계층의 전문가를 건너뛰고 잔차 연결을 통해 계속 진행합니다.
MoE와 관련 개념 비교#
- 모델 앙상블: 여러 개의 완전한 모델이 각 입력을 모두 처리한 뒤 예측값을 평균하거나 투표하므로 모델을 추가할 때마다 연산량이 늘어납니다. MoE는 종단 간 학습된 하나의 네트워크이며, 라우터가 토큰마다 서로 다른 경로를 선택합니다.
- 모델 라우팅: 라우터는 요청마다 간단한 질문에 소형 모델을, 어려운 질문에 대형 모델을 사용하는 식으로 전체 모델 하나를 선택합니다. MoE 라우팅은 단일 모델의 각 MoE 계층 내부에서 토큰 단위로 이루어집니다.
- 깊이 혼합(MoD): 라우터가 일부 토큰을 블록 전체에서 건너뛰게 하므로 토큰별 연산량이 달라집니다. MoE와 함께 사용되는 경우가 많습니다.
- 에이전트 혼합(MoA): 여러 개의 독립된 LLM이 프롬프트에 답하고, 이후 계층의 LLM들이 답변을 결합해 다듬습니다. 공유 가중치가 없는 프롬프팅 파이프라인입니다.
언어 및 비전 모델의 MoE#
DeepSeek-V3, Llama 4, Qwen3의 MoE 버전, OpenAI의 gpt-oss 등 규모가 가장 큰 오픈 웨이트 LLM 중 다수가 MoE 계층을 사용합니다. 컴퓨터 비전에서는 비전 MoE(V-MoE)가 비전 Transformer(ViT)의 일부 FFN 계층을 전문가로 대체하고 개별 이미지 패치를 라우팅했습니다. 그 결과 추론 연산량을 절반까지 줄이면서도 최첨단 정확도를 달성했으며, 파라미터 150억 개 버전은 ImageNet에서 top-1 정확도 90.35%를 기록했습니다.
메모리와 서빙#
MoE는 메모리가 아니라 연산량을 줄입니다. 토큰마다 일부 전문가만 사용하더라도 모든 전문가를 메모리에 적재해야 하므로, Mixtral은 토큰당 연산량이 파라미터 130억 개 모델과 같지만 파라미터 470억 개 모델에 해당하는 메모리가 필요합니다. 따라서 대규모 MoE 모델은 전문가 병렬 처리를 사용해 GPU 여러 대에 분산합니다. 각 GPU가 전문가 일부를 보유하며, 전체 통신을 통해 각 토큰을 선택된 전문가가 있는 장치로 보냈다가 다시 가져옵니다. DeepSpeed-MoE와 같은 프레임워크는 학습을 위해 전문가 병렬 처리를 데이터 병렬 처리 및 텐서 병렬 처리와 결합합니다. 엣지 비전 모델은 밀집 방식으로 처리합니다. YOLO26은 모든 이미지에 대해 모든 계층을 실행하므로, 입력마다 메모리 사용량과 이미지당 연산량이 동일합니다.










