o problema
A capacidade de uma rede de absorver informação é limitada pelo número de parâmetros. Isso já era sabido em 2016, e o caminho óbvio era crescer. O caminho óbvio era caro: como todo parâmetro é ativado para todo exemplo, o custo de treino cresce mais ou menos com o produto entre tamanho do modelo e tamanho do corpus. Dobrar os dois quadruplica a conta. O hardware não estava acompanhando.
A saída teórica tinha nome desde os anos 1990: computação condicional, ligar e desligar pedaços da rede por exemplo. Ninguém tinha feito funcionar em escala, e o paper enumera por quê. GPU é rápida em aritmética e lenta em branching. Batch grande é o que amortiza carga e atualização de parâmetros, e a computação condicional fatia o batch em pedacinhos. Banda de rede entre dispositivos pode ser milhares de vezes menor que a capacidade de cálculo agregada, então o esquema só fecha se cada parâmetro puxado da rede for usado em muita conta. E os trabalhos anteriores testavam a ideia em datasets de imagem com até 600.000 exemplos — pouco sinal para treinar bilhões de parâmetros, mesmo que o resto funcionasse.
a ideia
Em vez de uma rede grande, uma camada composta de muitas redes pequenas e idênticas — os experts, cada um um feed-forward com uma hidden layer — mais uma rede de roteamento minúscula que decide, para cada posição do texto, quais dois ou quatro experts merecem ver aquele vetor. Os outros nem são avaliados. Tudo treina junto, por backpropagation, sem reinforcement learning e sem pré-treino do roteador.
A camada entra entre duas LSTMs empilhadas e é chamada uma vez por posição da sequência. A mesma camada, decisões diferentes a cada token. É essa aplicação convolucional que dá o volume: os milhares de posições de um batch viram, elas mesmas, o batch grande de que os experts precisam.
como funciona
O gate é um softmax com dois enfeites. Antes de normalizar, soma-se ruído gaussiano cuja amplitude é ela própria aprendida; depois, tudo que não está entre os k maiores vira menos infinito, o que zera o peso correspondente:
H = x @ W_g + randn() * softplus(x @ W_noise)
G = softmax(keep_top_k(H, k)) # não-selecionados: -inf -> peso 0
y = sum(G[i] * expert_i(x) for i in topo)
Com k maior que 1, os experts escolhidos têm derivada não nula e o gate aprende. Quando os experts passam de alguns milhares, uma hierarquia de dois níveis reduz o fan-out: um gate primário escolhe grupos, um gate secundário escolhe dentro do grupo.
O balanceamento vem de duas losses somadas à principal, cada uma sendo o quadrado do coeficiente de variação de um vetor, com peso ajustado à mão. A primeira olha a importância, a soma dos pesos do gate por expert no batch. A segunda olha a carga, o número esperado de exemplos por expert — e é aqui que o ruído paga: como carga é uma contagem discreta, o paper estima a probabilidade de cada expert entrar no top-k dado um novo sorteio de ruído, o que dá uma função suave da CDF normal. As matrizes do gate começam zeradas, para que a camada nasça equilibrada e não estoure a memória antes das losses agirem.
A engenharia distribuída é metade do trabalho. As réplicas rodam síncronas para que seus batches possam ser combinados; os experts ficam parados em seus dispositivos e são os dados que viajam. A razão entre cálculo e tráfego de um expert é exatamente o tamanho da sua hidden layer, então basta engordá-la para caber no orçamento de rede. Ativações dos experts não são guardadas, são recalculadas no backward, e o Adam roda sem primeiro momento e com o segundo momento fatorado em médias de linha e coluna.
o que isso custou
Eficiência. Os modelos esparsos de baixo orçamento rodaram a 0,74 a 0,90 TFLOPS por GPU contra 1,07 a 1,29 dos baselines densos, e o maior de todos, com 131.072 experts, caiu para 0,30 — e ainda por cima teve perplexidade pior que o de 65.536. Sparsity demais degrada.
Duas losses auxiliares com pesos escolhidos à mão continuam sendo duas losses auxiliares. O top-k introduz descontinuidades que os autores admitem serem teoricamente feias, resolvendo o ponto com “não observamos problema na prática”. Aplicar MoE dentro de uma recorrência quebra o truque convolucional e o batch encolhe de novo — fica como trabalho futuro. Nos experimentos de tradução, peculiaridades de infraestrutura obrigaram a um gating estritamente balanceado por batch, que não funciona na inferência e exigiu treinar um vetor de thresholds por expert para imitá-lo. E o ganho não é uniforme: no modelo multilíngue, inglês para coreano piorou, efeito de sobre-amostrar um par raro.
onde isso aparece hoje
A camada sobreviveu à arquitetura que a hospedava. As LSTMs sumiram, o gate esparso não: Switch Transformers simplificou para um único expert por token e levou a ideia ao trilhão de parâmetros, Mixtral tornou MoE aberta e usável em produção, e DeepSeek-V3 construiu um modelo de fronteira inteiro sobre roteamento esparso, ainda brigando com o mesmo problema de balanceamento de carga descrito aqui. Noam Shazeer, primeiro autor, assinaria no mesmo ano Attention Is All You Need.