Explore Transformers e atenção
Calcule a autoatenção manualmente, veja por que os LLMs mascaram o futuro e siga um bloco Transformer.
- Atenção ao produto escalar em escala computacional
- Explique a máscara causal usada por LLMs somente decodificadores
- Descreva o que um bloco Transformer contém
O Transformer (Vaswani et al., 2017) é a arquitetura por trás de essencialmente todo LLM moderno. Sua ideia principal é a autoatenção: cada token constrói sua nova representação olhando para os outros tokens e decidindo quais deles são importantes.
Cada token é projetado em três vetores: uma consulta (o que estou procurando?), uma chave (o que eu contenho?) e um valor (o que eu passo?). Os pesos de atenção do token para cada token são
onde é o tamanho dos vetores e a saída do token é a soma ponderada dos valores: .
Experimente
Até 15 XPA que palavra “ela” dá atenção?
Pesos fictícios de uma cabeça de atenção. Clique em ela e depois em leve para ver quais palavras anteriores recebem mais atenção. Em um modelo real, cada cabeça pode aprender relações diferentes.
Clique em uma palavra para ver para onde ela olha
“O” dá mais atenção a “O” (23%). Os pesos somam 100%.
- O23,2%
- robô8,5%
- pegou8,5%
- a8,5%
- pequena8,5%
- bola8,5%
- porque8,5%
- ela8,5%
- era8,5%
- leve8,5%
Sem espiar: a máscara causal
Um LLM é treinado para prever cada token seguinte, portanto, um token não deve ver os tokens posteriores - isso seria trapaça. Modelos somente decodificadores (GPT, Claude, Llama e a maioria dos modelos de chat) aplicam uma máscara causal: as pontuações para posições futuras são definidas como −∞ antes do softmax, então seus pesos se tornam exatamente 0.
Um bloco transformador é então: atenção (muitas cabeças em paralelo) → adicionar e normalizar → uma rede feed-forward aplicada a cada token → adicionar e normalizar. Os modelos empilham dezenas de blocos. Como a própria atenção ignora a ordem, informações posicionais (como incorporações de posição rotativa) são misturadas, de modo que “cachorro morde homem” difere de “homem morde cachorro”.
1import numpy as np
2scores = np.array([2.0, 1.0, -np.inf])
3weights = np.exp(scores - scores.max())
4weights /= weights.sum()
5print(np.round(weights, 2))[0.73 0.27 0. ]
Principais conclusões
Os pesos de atenção são ; os resultados são somas ponderadas de valores.
LLMs somente decodificadores mascaram tokens futuros para que cada posição veja apenas o passado.
Um Transformer empilha blocos de atenção de múltiplas cabeças e camadas de feed-forward, com informações posicionais.
Quiz da aula
7 perguntas · aprovação com 5 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: escreva código em Python
Escreva código Python no editor e execute os testes com exemplos. O Python roda localmente no navegador usando WebAssembly.
Atenção dimensionada ao produto escalar com numpy
Leia três matrizes JSON, uma por linha: Q, K e V. Calcule linha por linha ( = número de colunas de Q) e a saída . Imprima weights: e output: seguidos por cada um como uma lista aninhada arredondada para 2 casas decimais (np.round(...).tolist()).
- Duas consultas, três chaves
O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.
Aplique uma máscara causal
Leia uma matriz JSON quadrada de pontuações de atenção. Defina cada pontuação acima da diagonal (posições futuras) como −∞, aplique softmax a cada linha e imprima os pesos de cada linha com 2 casas decimais separadas por espaços.
- Três tokens
O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…