1. Prefácio
Com o desenvolvimento dos grandes modelos de linguagem e da área de aprendizagem profunda, o MoE (Mixture of Experts, modelo de mistura de especialistas), graças às suas características de computação condicional e à alta escalabilidade, tem se tornado gradualmente um tema quente de pesquisa. Este artigo faz uma organização dos princípios básicos do MoE, do desenho geral da arquitetura e das principais tecnologias-chave. Também combina alguns exemplos open source para descrever, de forma sucinta, as ideias principais de implementação de modelos MoE típicos e seus cenários de aplicação.
2. O que é MoE?
Antes de aprofundar no MoE, vamos relembrar a arquitetura clássica do Transformer. No Transformer padrão, cada camada de Encoder/Decoder contém uma atenção multi-cabeças (Multi-Head Attention) e uma rede feed-forward totalmente conectada (Feed-Forward Network, normalmente abreviada como FNN). Essa FNN executa as mesmas transformações lineares e mapeamentos não lineares para todos os tokens de entrada, o que gera computação densa e traz alto consumo de recursos.
Já a técnica de mistura de especialistas (Mixture of Experts, abreviada como MoE) introduz, na posição da FNN, um mecanismo de “especialistas”: ela divide uma rede feed-forward de grande escala em vários sub-redes (isto é, especialistas) e, com a ajuda de uma rede de roteamento (Router), faz o roteamento dinâmico dos tokens. Especificamente, o roteador calcula uma pontuação (score) para cada especialista com base nas características do token (por exemplo, embedding ou contexto de atenção) e ativa apenas os K especialistas com maior pontuação para participar do cálculo; os demais permanecem ociosos. Assim, o total de parâmetros do modelo pode chegar a centenas de bilhões, mas em cada execução real os parâmetros efetivamente ativados (Activated Parameters) são apenas uma pequena parte — tipicamente entre 5% e 15% — reduzindo bastante o custo computacional e o uso de memória de GPU.
- Diferença essencial entre Transformer e MoE
- Computação densa: no Transformer padrão, a FNN processa todos os parâmetros de forma igual;
- Computação condicional: o MoE calcula apenas em parte dos especialistas, obtendo ativação esparsa.
- Por que esse desenho? As principais razões incluem:
- Escalabilidade: dentro do orçamento, é possível aumentar o número de especialistas para ampliar a capacidade do modelo;
- Eficiência: como poucos parâmetros são ativados, reduz-se rapidamente o uso de FLOPs e memória;
- Especialização: diferentes especialistas podem se “especializar” em tipos de características ou tarefas, melhorando o desempenho geral.
Imagine uma biblioteca (como o Transformer) com milhares de livros (parâmetros): para encontrar uma informação, seria preciso folhear todos. Já o MoE é como um bibliotecário (roteador) que, com base na sua pergunta, pega apenas alguns livros mais relevantes (especialistas). Isso economiza tempo e é muito eficiente.
3. Componentes centrais do MoE
A operação do MoE depende principalmente de dois módulos:
- Especialistas (Experts)
- Cada especialista é, por si só, uma subcamada feed-forward independente (normalmente duas transformações lineares com função de ativação). Isso equivale a treinar de forma especializada um subconjunto do espaço de parâmetros do modelo (ver Outrageously Large Neural Networks: The Sparsely‑Gated Mixture‑of‑Experts Layer).
- Entre especialistas, podem ser usadas diferentes estratégias de particionamento, como clusterização de parâmetros (Balanced K‑Means), particionamento por grafo de coativação (Co‑activation Graph) ou particionamento sensível ao gradiente, para garantir a melhor configuração de parâmetros no domínio em que cada especialista é mais forte.
- Roteador (Router)
- A entrada x passa por um mapeamento linear para obter as pontuações dos especialistas H(x)=xW_g e, em seguida, adiciona ruído aprendível para suavização: H'(x)=H(x)+SoftPlus(xW_n)⊙𝒩(0,1) (processo chamado Noisy Gating).
- Usa uma estratégia Top‑K: mantém os K especialistas com maior pontuação, normaliza e produz G(x)=Softmax(KeepTopK(H'(x),K)), distribuindo a entrada para esses K especialistas selecionados.
- Também é usado um termo auxiliar de balanceamento de carga L_aux=λ·CV(n_1,…,n_E) para minimizar a variância no número de tokens enviados a cada especialista, evitando sobrecarga de “especialistas populares”.
4. Por que o MoE é tão eficiente?
1. Redução de FLOPs via computação condicional
No Transformer padrão, a FNN precisa computar para todas as subcamadas e todos os tokens, com complexidade O(N·d^2). No MoE, apenas K especialistas são ativados, reduzindo a complexidade para O(K·d^2). Quando K ≪ N, o volume de computação pode cair quase linearmente em um fator N/K.
2. Superparametrização e capacidade de representação
Modelos supergrandes frequentemente precisam de muitos parâmetros para ajustar padrões complexos, mas o crescimento denso leva a gargalos computacionais. O MoE, com roteamento esparso, permite durante o treino um total de parâmetros globais várias vezes maior do que os parâmetros ativados (E·d^2), aumentando a capacidade de capturar padrões diversos.
3. Especialização e paralelismo distribuído
Cada especialista aprende apenas características de um subespaço, promovendo divisão de funções. O paralelismo por especialistas (Expert Parallelism) pode implantar especialistas em dispositivos diferentes, reduzindo a sobrecarga de sincronização da rede principal. Com paralelismo em pipeline ou tensor, é possível obter maior throughput e menor latência (ver GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding).
4. Evidência prática
- O GLaM, com 1,2 trilhão de parâmetros, ativa apenas 8% e supera o GPT‑3 (175B) em 29 tarefas de NLP, mostrando a vantagem da computação condicional.
- O Switch Transformer, usando roteamento Top‑1, quase dobra o throughput mantendo o desempenho.
5. Detalhes técnicos do MoE
Redes neurais grandes tradicionais (como o Transformer) se comportam como um “generalista”: a cada processamento, todos os parâmetros participam do cálculo, o que é caro.
O MoE usa “chamada sob demanda” (computação condicional), fazendo apenas alguns especialistas participarem do cálculo e evitando desperdício de recursos.
1. Ativação esparsa e parâmetros ativados
Na camada FFN do Transformer, teoricamente todos os tokens exigem cálculo completo, mas testes mostram que apenas parte dos neurônios é ativada — há uma esparsidade natural (ver MoEfication: Transformer Feed-forward Layers are Mixtures of Experts). O MoE explora isso, dividindo uma FNN grande em E especialistas e fazendo o roteador selecionar apenas K especialistas por token:
| Métrica | Descrição |
|---|---|
| Total de parâmetros | Pode chegar a dezenas de bilhões ou até a centenas de bilhões |
| Parâmetros ativados | Aproximadamente total × (K/E); normalmente entre 5% e 15% |
| Vantagens | FLOPs e uso de memória caem proporcionalmente, aumentando bastante a eficiência de treino e inferência |
2. Roteador e estratégias de roteamento
A seleção de especialistas é feita pelo roteador (Router). Uma implementação comum é:
- Mapeamento linear: H(x)=xW_g
- Injeção de ruído: H'(x)=H(x)+g·StandardNormal()⊙SoftPlus(H(x)) (também chamado Noisy Gating)
- Seleção Top-K: G(x)=Softmax(KeepTopK(H'(x),K))
- Top-2 vs. Top-1: o GShard usa Top‑2 e mistura as saídas para maior robustez; o Switch Transformer usa Top‑1 para reduzir a complexidade de comunicação (ver GShard e Switch Transformers).
- Esparsidade hierárquica: modelos como o Qwen3 ajustam dinamicamente K em diferentes profundidades para uma computação condicional mais granular.
3. Balanceamento de carga e perda auxiliar
Alguns especialistas podem ser ativados continuamente e ficar sobrecarregados. Para evitar desequilíbrio, o MoE introduz a perda auxiliar de carga (Auxiliary Load Loss), geralmente definida pelo coeficiente de variação do número de tokens por especialista:
L_aux = λ · CV(n₁, n₂, …, n_E) onde nᵢ é a quantidade de tokens processados pelo especialista i no batch atual e λ é um peso de balanceamento.
Esse termo é otimizado junto com a perda principal no pré-treino para manter o uso de especialistas aproximadamente uniforme (ver o GShard e a implementação de aux_loss em bibliotecas de transformers).
6. Exemplos clássicos de modelos MoE
A seguir, alguns modelos open source representativos, em ordem cronológica:
1. Sparsely-Gated Mixture-of-Experts Layer (2017)
Proposto por Shazeer et al. (Google Brain) em Outrageously Large Neural Networks: The Sparsely‑Gated Mixture‑of‑Experts Layer. Introduziu roteamento por portão com ruído e Top‑K (Noisy Top‑K Gating) e a perda auxiliar de carga para balancear especialistas. Estabeleceu a base da computação condicional e da ativação esparsa eficiente em larga escala.
2. GShard (2020)
Proposto por Lepikhin et al. (Google Research) em GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding. Colocou MoE com portão Top‑2 em cada camada FNN, introduziu capacidade de especialistas (capacity) e particionou automaticamente especialistas em múltiplas máquinas/GPUs; também usou estratégias de roteamento aleatório e balanceamento. Treina e infere modelos na faixa de 600 bilhões de parâmetros, aumentando a escalabilidade.
3. Switch Transformer (2021)
Proposto por Fedus et al. (Google Research) em Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity. Usou roteamento Top‑1, simplificando comunicação; introduziu o Capacity Factor para otimizar carga; suportou bfloat16. Conseguiu bom equilíbrio entre overhead e throughput, chegando a 1 trilhão de parâmetros.
4. GLaM (2021)
Proposto por Du et al. (Google Research) em GLaM: Efficient Scaling of Language Models with Mixture-of-Experts. Tem 64 especialistas e ativa 2 por camada; usa roteamento Mixture-of-Modality para direcionar tarefas (texto, código etc.) a especialistas diferentes; ativa apenas 8% dos parâmetros. Mostrou que a ativação esparsa mantém desempenho e melhora multitarefa/multimodal.
5. DeepSeek-MoE (2024)
Proposto pela equipe DeepSeek AI em DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models. Usa segmentação fina de especialistas, dividindo a FFN em especialistas menores, e introduz especialistas compartilhados (Shared Experts) para conhecimento comum. Cada token ativa 6 especialistas.
6. LLaMA-MoE (2024)
Desenvolvido pela equipe Sys4NLP com base no Meta LLaMA2, ver LLaMA-MoE: Building Mixture-of-Experts from LLaMA with Continual Pre-training. Suporta várias formas de particionar especialistas; oferece portão com ruído Top‑K e roteamento Switch de especialista único; especialistas ficam mais leves. Mostra um caminho para MoE em modelos mais leves.
7. Qwen3-235B-A22B (2025)
Lançado pela equipe Tongyi Qianwen (Alibaba), ver documentação oficial e repositório open source. Total de 235 bilhões de parâmetros, 128 especialistas; usa agendamento esparso hierárquico com ativação dinâmica, ativando 8 especialistas por token; suporta 32K de contexto e pode estender a 128K com YaRN; usa GQA e offloading assíncrono para otimizar paralelismo. Reduz custos de inferência em cenários de alto throughput e texto longo.
7. Cenários de uso e limitações
Na implantação, MoE e Transformer denso têm vantagens distintas; a escolha depende de recursos e necessidades:
- MoE é mais adequado para cenários multi-máquina e alto throughput
- Paralelismo por especialistas: sub-redes de especialistas podem ser distribuídas em várias máquinas/dispositivos; cada uma calcula poucos especialistas, reduzindo pressão de memória.
- Roteamento condicional: o roteador transmite só a informação de roteamento necessária, sem sincronizar todos os parâmetros, reduzindo comunicação e aumentando throughput.
- Escala elástica: ao expandir o cluster, basta aumentar/reorganizar especialistas; capacidade do modelo fica mais desacoplada do hardware.
- Transformer denso é mais adequado para máquina única, pouca memória ou baixa demanda de throughput
- Overhead de roteamento e agendamento: em cenário de máquina única, o custo relativo do portão, gestão de estado e comunicação pode aumentar e elevar a latência.
- Implantação mais simples: não requer balanceamento/roteamento extra; frameworks são maduros; é mais fácil equilibrar tamanho e desempenho.
- Eficiência de recursos: com memória e compute limitados, pode-se usar pruning, quantização ou distilação para melhorar custo-benefício.
8. Conclusão e perspectivas
Ao observar a trajetória do MoE, desde o “portão Top‑K com ruído” até o “sharding automático em múltiplas máquinas”, e depois inovações como “roteamento por especialista único”, “especialistas multimodais”, “segmentação fina” e “agendamento esparso hierárquico”, cada iteração busca equilibrar “maior capacidade” com “menor custo computacional”. A ideia central é a computação condicional, que dá alta escalabilidade e eficiência, mas traz desafios em roteamento, balanceamento de carga e comunicação.
O MoE se tornou um ramo importante no campo de modelos grandes de deep learning. Entender seus princípios e cenários de aplicação é crucial para impulsionar a próxima geração de sistemas inteligentes eficientes.
Alguns termos
Token:unidade mínima usada no processamento de texto do modelo; pode ser um caractere ou uma palavra.Parâmetros (Parameters):valores treináveis em uma rede neural, como peças de LEGO; quanto mais parâmetros, mais complexo o modelo.
Computação condicional (Conditional Computation):mecanismo que ativa apenas parte dos especialistas conforme a entrada, como consultar professores especialistas em vez de reunir todos.
Especialista (Expert):sub-rede dentro do MoE, responsável por tratar certos tipos de dados/características.
Roteador (Router/Gating Network):módulo que decide para quais especialistas cada token deve ser enviado.
Parâmetros ativados (Activated Parameters):quantidade de parâmetros efetivamente usada em uma computação; normalmente muito menor que o total.
Ativação esparsa (Sparse Activation):ativar apenas parte dos especialistas/parâmetros a cada cálculo, economizando recursos.
Modelo denso (Dense Model):modelo tradicional em que todos os parâmetros participam do cálculo, como uma reunião com todos os membros.
FLOPs (Floating Point Operations):métrica do volume de computação; quanto menor, mais eficiente.
Memória de GPU (GPU Memory):espaço na GPU para parâmetros e resultados intermediários; quanto menor o consumo, mais fácil implantar.
Rede feed-forward (Feed-Forward Network, FFN):camada do Transformer que aplica transformações não lineares.
Atenção multi-cabeças (Multi-Head Attention):mecanismo do Transformer que permite focar em diferentes partes da entrada.
Seleção/roteamento Top-K (Top-K Routing):estratégia em que o roteador escolhe os K especialistas com maior pontuação.
Noisy Gating:inserção de ruído na escolha de especialistas para melhorar robustez e balanceamento.
Perda auxiliar de carga (Auxiliary Load Loss):perda para balancear carga entre especialistas e evitar sobrecarga.
Coeficiente de variação (Coefficient of Variation, CV):métrica estatística do balanceamento; menor CV indica distribuição mais uniforme.
Paralelismo por especialistas (Expert Parallelism):distribuir especialistas em diferentes máquinas para cálculo em paralelo.
Paralelismo distribuído (Distributed Parallelism):distribuir modelo/dados em múltiplos dispositivos para computar em paralelo.
Paralelismo em pipeline:dividir o modelo em etapas e atribuir a diferentes dispositivos, como uma linha de produção.
Paralelismo de tensor:dividir o cálculo de uma camada em vários dispositivos.
Fator de capacidade (Capacity Factor):parâmetro que limita quantos tokens cada especialista pode processar.
Capacidade do especialista (Expert Capacity):número máximo de tokens por especialista em um forward.
Segmentação fina de especialistas (Fine-Grained Expert Segmentation):dividir a FFN em mais especialistas menores.
Especialistas compartilhados (Shared Experts):especialistas usados por múltiplas tarefas/entradas para conhecimento comum.
Esparsidade hierárquica (Hierarchical Sparsity):ajustar dinamicamente a quantidade de especialistas ativados em diferentes camadas.
GQA (Grouped Query Attention):mecanismo de atenção eficiente para acelerar inferência.
Offloading assíncrono (Asynchronous Offloading):transferir tarefas/dados de forma assíncrona para otimizar recursos.
Mixture-of-Modality:direcionar especialistas conforme a modalidade de entrada (texto, código etc.) para melhorar multimodal.
Pruning:remover parâmetros menos importantes para reduzir tamanho e computação.
Quantização (Quantization):usar tipos numéricos de menor precisão para reduzir consumo.
Distilação (Distillation):treinar um modelo pequeno a partir de um grande para herdar capacidades.
Roteamento (Routing):processo do roteador em escolher especialistas para cada token.
Perda principal (Main Loss):objetivo principal de otimização no treino (por exemplo, cross-entropy).
Perda auxiliar (Auxiliary Loss):objetivo adicional para melhorar propriedades como balanceamento.
Particionamento de especialistas (Expert Partitioning):processo de dividir uma rede grande em especialistas.
Particionamento por grafo de coativação (Co-activation Graph Partitioning):particionar especialistas com base na correlação de ativações.
Particionamento sensível ao gradiente (Gradient-aware Partitioning):particionar especialistas com base em gradientes.
Roteamento de especialistas (Expert Routing):distribuir a entrada para especialistas apropriados.
Roteamento Top-1/Top-2:enviar cada token para o especialista de maior pontuação (ou para os dois maiores).
Capacidade (Capacity):conceito do máximo de tokens por especialista em um forward.
Proporção de ativação (Activation Ratio):porcentagem de parâmetros ativados em cada computação.
Throughput:quantidade de dados processada por unidade de tempo; quanto maior, melhor.
Latência (Latency):tempo para processar uma entrada; quanto menor, melhor.
Sharding automático (Automatic Sharding):distribuição automática de parâmetros em múltiplos dispositivos.
bfloat16:formato de ponto flutuante de baixa precisão usado em treino para economizar memória.
Tecnologia YaRN:técnica para estender o comprimento de contexto.