Analytics

11 mai, 2026

Logits: o que acontece antes da IA escolher a próxima palavra

Publicidade

Você já ouviu falar sobre os “logits“? Se não, prepare-se pra um post mais técnico de como LLMs funcionam por baixo dos panos e como eles fazem a inferência pra escolher a próxima palavra (na verdade, o próximo token) da frase que estão gerando.

De forma bem direta, logits são as pontuações brutas, “cruas” e não normalizadas geradas pela camada de projeção linear final da rede neural de um modelo de IA.

Voltando pro começo, quando você vai treinar um LLM do zero, você faz a tokenização (a separação das palavras do seu conjunto de treinamento em tokens, ou pedaços de palavras, como os tokens “in” e “feliz” que formam a palavra “infeliz”). Essa etapa acontece antes do treinamento da rede neural, e você treina o tokenizador sobre o corpus pra definir um vocabulário fixo, que geralmente varia entre 50.000 a mais de 100.000 tokens. Vamos supor 100.000 pro nosso exemplo.

Quando você manda um prompt, um modelo instruído vai tentar “completá-lo” dando uma resposta. Pra facilitar, vamos dar o exemplo de completar uma frase. Suponha a frase: “O céu é ____“. O LLM vai processar essa informação através de dezenas de blocos de atenção e feedforward (o coração do Transformer), e no final, uma camada de projeção linear cospe um vetor 100.000 logits de tamanho, o tamanho exato do nosso vocabulário. Ou seja, ele atribui uma pontuação bruta a todos os 100.000 tokens que ele conhece em seu dicionário, avaliando qual faria mais sentido a seguir.

Exemplo hipotético de logits para o próximo token de “O céu é ____”:

["azul" = 5.7,
"lindo" = 5.0,
"abacaxi" = -3.1,
...,
"Maria" = -2.7,
"rosado" = 4.8,
...]

https://media.licdn.com/dms/image/v2/D4E12AQGUCJeN3xQ93g/article-inline_image-shrink_1500_2232/B4EZzdF8H6IgAc-/0/1773235848126?e=1779926400&v=beta&t=FVxuCgXq31YQqDAZdQCBg2mIIv9CNaudeG5ZOxXN8NY

Como os logits não são limitados entre 0 e 1, o treinamento via gradiente descendente consegue operar de forma mais estável numericamente (evitando problemas com valores extremamente pequenos). Mas esses valores brutos não são intuitivos pra nós, então, no final, é aplicada uma função matemática chamada Softmax, que transforma esses valores em porcentagens de 0 a 100%. No nosso exemplo acima, poderia ser algo como:

["azul" = 18.7%,
"lindo" = 17.3%,
"abacaxi" = 0.001%,
...,
"Maria" = 0.001%,
"rosado" = 15.9%,
...]

https://media.licdn.com/dms/image/v2/D4E12AQFUmVLhyXkPmQ/article-inline_image-shrink_1500_2232/B4EZzdGfNQKQAc-/0/1773235991772?e=1779926400&v=beta&t=XNXtV6VFLoJtVFvQw31JcymLhpqxzi-ECej0PLbqsfQ

Mas antes de passarem por essa função Softmax, o sistema pode manipular matematicamente esses logits pra controlar como o modelo escreve. O parâmetro mais famoso pra fazer isso é a Temperatura. A fórmula é basicamente softmax(logits/Temperatura), assim:

  • Se você usa uma Temperatura Baixa (ex: 0.1), os logits são divididos por 0.1, o que equivale a multiplicá-los por 10. Isso amplifica drasticamente a diferença entre as pontuações, fazendo a IA ser mais conservadora, factual e previsível (o logit de “azul” vai esmagar todos os outros).

  • Já com uma Temperatura alta (ex: 1.5), a divisão reduz as diferenças e as pontuações se aproximam umas das outras (a IA passa a dar mais chance pra palavras menos óbvias, ficando muito mais criativa e diversificada, mas consequentemente com mais risco de alucinar).

É também nesse momento que entram filtros famosos como o Top-K (onde o modelo ignora os milhares de logits baixos e foca só nos K valores maiores). Depois, já no espaço de probabilidades (após o Softmax), entra o Top-P, também chamado de nucleus sampling, que seleciona apenas os tokens cujas probabilidades somadas atingem um limiar (ex: 90%). Outros filtros como o Repetition Penalty (que penaliza tokens já gerados para evitar repetições) também podem ser aplicados.

Depois de tudo isso, a IA “rola os dados”, escolhe o token, adiciona ele ao texto e recomeça o ciclo. Esse processo autoregressivo se repete dezenas ou centenas de vezes por segundo até a resposta estar completa.

Se você roda modelos localmente com ferramentas como Ollama, LM Studio, llama.cpp ou text-generation-webui, provavelmente já viu esses parâmetros expostos na interface ou na linha de comando. Agora você sabe exatamente o que eles estão fazendo por baixo dos panos: manipulando os logits antes (ou depois) do Softmax pra controlar o comportamento do modelo.

Usando a biblioteca Transformers da HuggingFace, dá pra ver os logits diretamente:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")
inputs = tokenizer("O céu é", return_tensors="pt")
with torch.no_grad():
output = model(**inputs)
next_token_logits = output.logits[0, -1, :]

É esse vetor “next_token_logits” que contém a pontuação de cada token do vocabulário. Na prática, o “model.generate()” faz isso em loop pra você, aplicando automaticamente os parâmetros de temperature, top_k, top_p e repetition_penalty a cada passo antes de escolher o próximo token.

E é mais ou menos isso! 🙂 Saber como a salsicha é feita por baixo dos panos ajuda muito a “domar” essas IAs.