Эпоха 4 · Архитектуры и масштаб · 2017

31 Mixture-of-Experts

Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer · Shazeer и др. · Google Brain · ICLR
🟧 оригинал выборочно~1 чоригинал ↗
Суть за 20 секунд. Слой из тысяч «экспертов»; обучаемый gating шлёт каждый токен лишь к нескольким (top-k). Общее число параметров огромно, но компьют на токен — как у маленькой сети. Условные вычисления = масштаб без пропорционального роста стоимости. Предок MoE-фронтира.

Контекст

Качество растёт с числом параметров, но компьют на каждый пример растёт вместе с ним — дорого. Шазир и др. разрывают эту связь через условные вычисления.

Идея и механизм

Слой содержит много (тысячи) «экспертов» — небольших подсетей. Обучаемый gating для каждого токена выбирает лишь несколько (top-k) экспертов и смешивает их выходы; остальные не считаются (sparse activation). Так ОБЩЕЕ число параметров огромно, но компьют на токен — как у маленькой сети.

оптимизация Sparse gating и балансировка нагрузки

Для токена x gating даёт распределение по E экспертам, из которого берут top-k (например k=2), ренормируют и смешивают выходы только выбранных:

g(x) = softmax(Wg x),   y = Σi ∈ top-k gi(x) · Experti(x)

Проблема коллапса. Gating склонен слать все токены к немногим «любимым» экспертам — остальные не учатся, и масштаб пропадает зря. Лечат вспомогательным load-balancing loss, штрафующим неравномерность:

Laux = E · Σi fi · Pi

где 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
токен router E1 E2 ✓ E5 ✓ E8 Σ gᵢ·Eᵢ(x)
Router выбирает для токена 2 эксперта из многих (зелёные); только они считаются. Огромная ёмкость при компьюте маленькой сети.
Аналогия. Большая поликлиника с сотней узких специалистов. Пациента (токен) регистратура (router) направляет не ко всем, а к двум профильным врачам. Клиника обладает всей экспертизой ста специалистов, но на каждого пациента тратит время лишь двоих. Расширять штат можно почти бесконечно, не увеличивая нагрузку на отдельный приём.

Почему это важно

Прямой предок MoE-фронтира — Mixtral (#52), DeepSeek (#53) и (по слухам) GPT-4. Архитектура дошла до 137 млрд параметров уже в 2017-м. Идея «активируй только нужную часть сети» — ключ к дешёвому масштабированию: общих параметров много, активных мало.

Связи

↔ родственник12. Random Forests

И там, и там «много специалистов вместо одного». Но лес усредняет все деревья, а MoE через gating активирует лишь немногих экспертов на вход. Ансамбль (всё сразу) против условных вычислений (по необходимости) — разные ответы на «как объединять много моделей».

→ масштабируется в52. Mixtral

Mixtral переносит sparse-MoE прямо в трансформер: FFN каждого слоя заменён на 8 экспертов, router берёт 2. Идея 2017-го, дозревшая до открытой LLM с качеством большой модели по цене средней.

→ во фронтире53. DeepSeek V3 / R1

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 во всех современных фронтир-моделях.