antonio leandro

ia generativa

Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer

paper · Shazeer, Noam, Mirhoseini, Azalia, Maziarz, Krzysztof, Davis, Andy, Le, Quoc, Hinton, Geoffrey, Dean, Jeff · · ~54 min de leitura do original

a tese

dá para multiplicar a capacidade de um modelo por mil sem multiplicar o custo: um gate treinável escolhe uns poucos especialistas por posição do texto e simplesmente não calcula os outros milhares

o que fica

  1. Capacidade e computação deixam de ser a mesma variável: o modelo com 137 bilhões de parâmetros na camada MoE gastava cerca de 9 milhões de operações por timestep, contra 8,4 milhões do baseline dez mil vezes menor.
  2. O gargalo da computação condicional não é a matemática, é o batch: se o gate escolhe k de n experts, cada expert recebe kb/n exemplos, e a solução foi rodar as réplicas data-parallel em sincronia para juntar tudo num batch só por expert.
  3. O gate desbalanceia sozinho e o desbalanceio se auto-reforça, porque o expert mais escolhido treina mais rápido e por isso passa a ser escolhido ainda mais; sem loss de balanceamento a perplexidade foi 39,8 contra 35,6 com ela, e o expert mais carregado recebia 17,8 vezes a carga média.
  4. O ruído gaussiano somado antes do top-k não existe para regularizar: ele transforma a contagem discreta de exemplos por expert num estimador suave e diferenciável, que é o que permite treinar o balanceamento por backpropagation.
  5. Mais sparsity não é sempre melhor: a perplexidade melhorou até 65.536 experts e piorou com 131.072, e a eficiência despencou de 0,72 para 0,30 TFLOPS por GPU nesse último salto.
  6. Os experts se especializam sozinhos por sintaxe e semântica, sem ninguém dizer a cada um o que aprender.

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.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·