31 Mixture-of-Experts
Контекст
Качество растёт с числом параметров, но компьют на каждый пример растёт вместе с ним — дорого. Шазир и др. разрывают эту связь через условные вычисления.
Идея и механизм
Слой содержит много (тысячи) «экспертов» — небольших подсетей. Обучаемый gating для каждого токена выбирает лишь несколько (top-k) экспертов и смешивает их выходы; остальные не считаются (sparse activation). Так ОБЩЕЕ число параметров огромно, но компьют на токен — как у маленькой сети.
оптимизация Sparse gating и балансировка нагрузки
Для токена x gating даёт распределение по E экспертам, из которого берут top-k (например k=2), ренормируют и смешивают выходы только выбранных:
Проблема коллапса. Gating склонен слать все токены к немногим «любимым» экспертам — остальные не учатся, и масштаб пропадает зря. Лечат вспомогательным load-balancing loss, штрафующим неравномерность:
где fi — доля токенов, ушедших к эксперту i, а Pi — средняя вероятность gating на него. Минимум этого произведения достигается при равномерном использовании — так роутер не схлопывается в пару экспертов.
PyTorch Top-k MoE-слой (схема)
import torch
def moe(x, gate, experts, k=2):
w, idx = gate(x).softmax(-1).topk(k, -1) # top-k экспертов + веса
w = w / w.sum(-1, keepdim=True) # ренормировка
out = torch.zeros_like(x)
for j in range(k):
e = idx[:, j]
out += w[:, j:j+1] * run_expert(experts, e, x) # только выбранные
return out
Почему это важно
Прямой предок MoE-фронтира — Mixtral (#52), DeepSeek (#53) и (по слухам) GPT-4. Архитектура дошла до 137 млрд параметров уже в 2017-м. Идея «активируй только нужную часть сети» — ключ к дешёвому масштабированию: общих параметров много, активных мало.
Связи
И там, и там «много специалистов вместо одного». Но лес усредняет все деревья, а MoE через gating активирует лишь немногих экспертов на вход. Ансамбль (всё сразу) против условных вычислений (по необходимости) — разные ответы на «как объединять много моделей».
Mixtral переносит sparse-MoE прямо в трансформер: FFN каждого слоя заменён на 8 экспертов, router берёт 2. Идея 2017-го, дозревшая до открытой LLM с качеством большой модели по цене средней.
DeepSeek-V3 — это MoE на 671B параметров с ~37B активными на токен, плюс инженерные улучшения роутинга (балансировка без auxiliary loss). Прямая линия от «Outrageously Large» 2017-го к фронтир-моделям 2025-го.
Вопросы пытливого ума
Если активных параметров мало, почему MoE считают «большой» моделью — это не читерство?
Зависит от того, что считать. По ёмкости (общему числу параметров, хранящих знание) модель действительно огромна; по компьюту на токен — маленькая. Размен: экономишь FLOPs, но платишь памятью (все эксперты надо держать в VRAM) и сложностью роутинга/коммуникации. Не читерство, а другая точка на кривой «качество / компьют / память».
Эксперты реально специализируются по смыслу (синтаксис, темы)?
Меньше, чем хотелось бы. Анализы показывают, что специализация часто не «человекочитаемая» (не «эксперт по медицине»), а скорее по поверхностным признакам — пунктуация, конкретные токены, позиция. Роутинг учится тому, что снижает лосс, а не интерпретируемому разделению труда. Красивая интуиция «узкие специалисты» на практике размыта.
Зачем нужен top-k > 1 — почему не один эксперт на токен?
При k=1 (как в Switch Transformer) роутинг недифференцируем по выбору и обучение нестабильнее; k=2 даёт градиент через смешивание двух экспертов и плавнее обучается, ценой удвоения активного компьюта. Это баланс между стабильностью обучения и стоимостью инференса; разные модели выбирают разное (Switch — 1, Mixtral — 2).
Что читать в оригинале
Читать ключевое — механизм gating и балансировку нагрузки; это прямой предок MoE во всех современных фронтир-моделях.