A regra da cadeia por trás dos modelos autorregressivos
Índice
Você já ouviu que “modelos autorregressivos fatoram a distribuição conjunta” e quer uma explicação compacta e prática do que isso significa, por que funciona e como se conecta ao treinamento com entropia cruzada.
Modelos autorregressivos (AR) parecem misteriosos até você perceber que são construídos sobre uma única identidade muito antiga: a regra da cadeia da probabilidade.
A regra da cadeia da probabilidade (o truque inteiro)
Para qualquer sequência de variáveis aleatórias , a distribuição conjunta sempre pode ser escrita como:
Isso não é uma aproximação. É uma reexpressão da probabilidade conjunta usando probabilidades condicionais.
Duas consequências imediatas:
- Se você consegue modelar as condicionais , você consegue modelar a conjunta completa .
- Você obtém um procedimento generativo natural: amostre , depois amostre condicionado em , e assim por diante.
Essa é a definição de “autorregressivo” neste contexto: o modelo prevê o próximo elemento condicionado nos anteriores.
Por que a fatoração importa para modelos de linguagem
Para texto, normalmente definimos como um token (word piece / subword) e treinamos um modelo para produzir:
Um modelo de linguagem transformer é essencialmente um grande estimador de probabilidade condicional que mapeia um prefixo para uma distribuição sobre o próximo token.
A regra da cadeia transforma “modelar uma distribuição conjunta complicada sobre strings” em “repetir uma tarefa de predição mais simples muitas vezes.”
Um pequeno exemplo concreto
Considere uma sequência de três tokens: . A regra da cadeia nos dá:
Uma derivação um pouco mais formal
A regra da cadeia segue da aplicação repetida da definição de probabilidade condicional:
Para três variáveis:
Generalizando, temos:
Essa é a identidade que os modelos autorregressivos exploram.
O modelo nunca precisa produzir diretamente. Ele só precisa produzir três distribuições menores.
Treinamento: máxima verossimilhança se torna “soma de losses do próximo token”
Se o modelo define a conjunta via regra da cadeia, então a log-verossimilhança de uma sequência se decompõe de forma elegante:
Portanto, o treinamento por máxima verossimilhança se transforma em maximizar a soma das log-probabilidades condicionais ao longo das posições.
Na prática, minimizamos a log-verossimilhança negativa (NLL), que é exatamente a entropia cruzada para um alvo next-token one-hot.
É por isso que a “loss de modelagem de linguagem” é tipicamente implementada como “deslocar as entradas para a direita, prever o próximo token, calcular a entropia cruzada, fazer a média.”
Teacher forcing: por que é tão eficiente
Durante o treinamento, normalmente alimentamos o modelo com o prefixo verdadeiro (do dataset) ao prever . Isso é conhecido como teacher forcing.
Benefícios:
- Você pode calcular as losses para todos os passos de tempo em paralelo (importante para transformers).
- O sinal do gradiente é estável: você sempre condiciona em contexto real, não nos próprios erros do modelo.
A contrapartida é um descompasso no momento da geração: na inferência, o modelo condiciona nas suas próprias amostras, o que pode acumular erros. Esse descompasso é frequentemente discutido sob nomes como exposure bias.
Amostragem: a regra da cadeia se torna um algoritmo
Uma vez que você tem , a geração é simplesmente:
- Comece com um prompt (possivelmente vazio).
- Calcule a distribuição do próximo token.
- Amostre (ou pegue o argmax).
- Anexe o token e repita.
Diferentes métodos de decodificação (greedy, beam search, top-, nucleus/top-, temperatura) são apenas formas diferentes de transformar essa distribuição condicional em uma escolha de token concreta.
Uma visão prática: log-probs somam, probabilidades multiplicam
Por causa do produto, as probabilidades podem ficar minúsculas rapidamente. No código, você quase sempre trabalha com log-probabilidades:
import math
# Example: p(x1) = 0.2, p(x2|x1) = 0.5, p(x3|x1,x2) = 0.1
probs = [0.2, 0.5, 0.1]
logp = sum(math.log(p) for p in probs)
p_joint = math.exp(logp)
print("log p(x1:x3):", logp)
print("p(x1:x3):", p_joint)
Isso espelha o que os frameworks computam: soma de log-probs no nível de token (ou loss média), não uma probabilidade conjunta direta.
”Regra da cadeia” também aparece no backprop (mas é uma diferente)
Às vezes as pessoas confundem duas “regras da cadeia”:
- Regra da cadeia da probabilidade: fatora uma distribuição conjunta em condicionais.
- Regra da cadeia do cálculo: propaga gradientes através de funções compostas.
A modelagem autorregressiva depende da regra da cadeia da probabilidade. O treinamento autorregressivo (como a maior parte do deep learning) depende da regra da cadeia do cálculo durante a retropropagação.
Elas são conceitualmente distintas, mas ambas são a razão pela qual todo o pipeline é tratável:
- a regra da cadeia da probabilidade fornece um objetivo decomponível e aprendível;
- a regra da cadeia do cálculo permite otimizá-lo com gradiente descendente.
O modelo mental que eu mantenho
Um modelo autorregressivo é:
- uma escolha de ordenação (da esquerda para a direita para texto);
- a regra da cadeia da probabilidade;
- uma classe de modelo condicional (transformer, RNN, etc.);
- treinamento por máxima verossimilhança (entropia cruzada sobre predições do próximo token).
Todo o resto — prompting, truques de decodificação, fine-tuning estilo RLHF — se assenta sobre essa fundação.
Perplexidade: a métrica comum para modelos de linguagem AR
Como a log-verossimilhança se decompõe em termos no nível de token, podemos definir a log-verossimilhança negativa média por token:
A perplexidade é simplesmente a NLL média exponenciada (com a mesma convenção de base logarítmica):
Intuição:
- Menor perplexidade significa que o modelo atribui maior probabilidade aos próximos tokens observados.
- A perplexidade é essencialmente o “fator de ramificação efetivo”: sobre quantos próximos tokens plausíveis o modelo está, em média, distribuindo massa de probabilidade.
(Quando alguém reporta PPL, os detalhes importam: tokenização, base do logaritmo e se a avaliação usa o mesmo pré-processamento do treinamento.)
Tokens, não palavras: o que é na prática?
Em LMs modernos, quase nunca é uma palavra inteira. Tipicamente é um token de subpalavra de um vocabulário aprendido por BPE/Unigram.
Isso muda como você deve ler a regra da cadeia:
- O modelo fatora a probabilidade sobre sequências de tokens, não sequências de palavras.
- Uma única “palavra” pode ser 1 token ou muitos tokens.
- As métricas reportadas (loss/perplexidade) são, portanto, dependentes da tokenização.
Concretamente, o mesmo texto pode corresponder a diferentes (comprimento de sequência) sob diferentes tokenizadores, o que afeta a loss média e o PPL.
Um diagrama da fatoração AR + loop de geração
graph TD;
A[Training text: x1..xn] --> B[Shifted inputs: x1..x{n-1}]
B --> C[Model outputs: p(x_t | x_<t)]
C --> D[Cross-entropy vs target x_t]
D --> E[Sum/mean over t => loss]
F[Prompt: x1..xk] --> G[p(x_{k+1} | x_<=k)]
G --> H[Decode: greedy / top-k / top-p / temp]
H --> I[Sample token x_{k+1}]
I --> F