# M5. A matemática do Transformer
> Toda a arquitetura cabe em três multiplicações e um softmax.
**Duração prevista:** 5 semanas. **Filme:** 11 minutos de animação narrada em https://llms.newortho.com.br/movimento#m5
Tokenização, embeddings, posição, consultas, chaves e valores, atenção escalada, múltiplas cabeças, MLP, normalização, conexões residuais e a cabeça de saída. O módulo em que todas as peças anteriores se encaixam.
**Por que este módulo existe.** Este é o objetivo declarado do projeto. Ao terminar, você consegue narrar o caminho completo de um token, da string ao logit, sabendo qual operação matemática acontece em cada etapa e por quê.

## 1. Tokenização e o problema dos números fatiados
Antes de qualquer matemática, o texto vira uma lista de inteiros. O tokenizador quebra a string em pedaços do vocabulário, que podem ser palavras inteiras, pedaços de palavra ou até bytes isolados, e troca cada pedaço pelo seu índice.
Essa etapa parece administrativa e não é. Ela explica limitações reais. Um número como 1234 pode virar dois tokens, 12 e 34, ou três, dependendo do tokenizador. O modelo nunca vê o número como quantidade, vê símbolos arbitrários que precisou aprender a relacionar. É uma das raízes concretas de erros aritméticos.
Também explica por que contar letras em uma palavra é difícil para um LLM: as letras individuais quase nunca são tokens separados, então a informação que a pergunta exige simplesmente não está disponível na representação de entrada.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s0.webm) (narração em voz humana)

## 2. Embeddings e posição
Cada índice de token é usado para buscar uma linha em uma matriz de embeddings. Essa linha é um vetor de dimensão d, tipicamente entre 768 e alguns milhares, e é a primeira representação numérica com significado do token.
A operação é uma consulta em tabela, mas equivale matematicamente a multiplicar um vetor one-hot pela matriz de embeddings. Vale conhecer as duas leituras, porque papers usam a segunda.
Como a atenção, por construção, não distingue ordem, a posição precisa ser injetada explicitamente. Modelos somam ou combinam uma codificação posicional ao embedding. Sem isso, gato mordeu cachorro e cachorro mordeu gato seriam entradas idênticas para o mecanismo de atenção.

$$
x_t = E[\text{token}_t] + P[t] \qquad x_t \in \mathbb{R}^{d}
$$
*Leitura:* A representação da posição t é a linha da matriz de embeddings correspondente ao token, somada à codificação posicional daquela posição.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s1.webm) (narração em voz humana)

## 3. Consultas, chaves e valores
De cada vetor de entrada o modelo deriva três vetores diferentes, multiplicando por três matrizes de pesos aprendidas: W maiúsculo com subscrito Q, K e V.
A analogia que funciona é a de uma busca. A consulta é o que este token está procurando. A chave é o que cada token oferece como rótulo de si mesmo. O valor é a informação que cada token entrega se for selecionado. Três papéis distintos, extraídos do mesmo vetor por três projeções diferentes.
Nada disso é imposto por regra. As três matrizes são aprendidas no treino, e o modelo descobre sozinho que projeções tornam a busca útil.

$$
Q = X W_Q \qquad K = X W_K \qquad V = X W_V
$$
*Leitura:* Q, K e V são obtidos multiplicando a matriz de entradas X por três matrizes de pesos distintas e aprendidas.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s2.webm) (narração em voz humana)

## 4. Atenção escalada: a fórmula inteira, agora entendida
Q vezes K transposta calcula, de uma vez, o produto escalar entre toda consulta e toda chave. O resultado é uma matriz de pontuações: a célula da linha i e coluna j diz o quanto a posição i acha a posição j relevante. Você já sabe que produto escalar mede concordância de direção, e é exatamente isso que está sendo medido.
A divisão pela raiz de d k existe por uma razão numérica precisa. Em dimensões altas, produtos escalares crescem em magnitude proporcionalmente à raiz da dimensão. Sem a divisão, as pontuações ficariam grandes demais, o softmax saturaria em praticamente zero ou um, e os gradientes desapareceriam. A raiz de d k mantém a escala em uma faixa onde o treino funciona.
O softmax é aplicado linha a linha, transformando cada linha de pontuações em uma distribuição que soma um: os pesos de atenção. Por fim, multiplicar por V produz, para cada posição, uma média ponderada dos valores de todas as posições, com os pesos que acabaram de ser calculados.
Em modelos causais existe ainda uma máscara: antes do softmax, todas as posições futuras recebem menos infinito, o que faz o softmax lhes atribuir probabilidade zero. É assim que o modelo é impedido de ver o que ainda não foi gerado.

$$
\text{Atenção}(Q, K, V) = \operatorname{softmax}\!\left( \frac{Q K^{\top}}{\sqrt{d_k}} + M \right) V
$$
*Leitura:* Atenção é o softmax das pontuações escaladas, somadas à máscara causal, multiplicado pela matriz de valores.

**Exemplo, Uma linha de atenção, à mão.** Suponha três posições, com pontuações escaladas iguais a 2,0, 1,0 e 0,1 para a primeira consulta. O softmax dessa linha, que você já calculou no M4, dá 0,659, 0,242 e 0,099. A saída para essa posição é 0,659 vezes o valor da posição um, mais 0,242 vezes o da posição dois, mais 0,099 vezes o da posição três. Atenção é, literalmente, uma média ponderada.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s3.webm) (narração em voz humana)

## 5. Múltiplas cabeças
Em vez de uma atenção sobre a dimensão inteira, o modelo divide o espaço em h fatias e roda o mesmo procedimento em paralelo em cada uma, com matrizes Q, K e V próprias. Cada fatia é uma cabeça.
A motivação é de capacidade. Uma única atenção precisa comprometer-se com um tipo de relação por posição. Com várias cabeças, uma pode acompanhar concordância gramatical, outra referência de pronomes, outra proximidade posicional, e assim por diante. As descobertas de interpretabilidade mostram que cabeças de fato se especializam, ainda que raramente de forma tão limpa quanto o exemplo sugere.
As saídas das cabeças são concatenadas e passam por uma última projeção, W com subscrito O, que devolve o resultado à dimensão original do modelo.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s4.webm) (narração em voz humana)

## 6. MLP: onde a informação é processada
Depois da atenção vem um bloco totalmente conectado aplicado a cada posição independentemente: expande o vetor para uma dimensão maior, tipicamente quatro vezes maior, aplica uma não linearidade, e comprime de volta.
Se a atenção é a etapa em que as posições conversam entre si, o MLP é a etapa em que cada posição pensa sozinha sobre o que acabou de receber. É também onde mora a maior parte dos parâmetros do modelo, e há evidência de interpretabilidade de que muito do conhecimento factual está armazenado ali.

$$
\operatorname{MLP}(x) = W_2 \cdot g\!\left( W_1 x + b_1 \right) + b_2
$$
*Leitura:* O MLP multiplica por uma matriz que expande, aplica a não linearidade g, e multiplica por outra matriz que comprime de volta.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s5.webm) (narração em voz humana)

## 7. Normalização de camada e conexões residuais
A normalização de camada recentra e reescala o vetor de ativações para média zero e desvio padrão um, e depois aplica dois parâmetros aprendidos de ganho e deslocamento. Serve para manter as ativações em uma faixa estável através de dezenas de camadas, sem o que o treino se torna instável.
A conexão residual soma a entrada do bloco à sua saída. Parece um detalhe e é estrutural: garante um caminho direto para o gradiente atravessar a rede inteira sem ser multiplicado sucessivamente por derivadas pequenas. É o que torna possível treinar oitenta ou cem camadas empilhadas.
Junte as duas e você tem a forma canônica de um bloco: x recebe x mais atenção da versão normalizada de x, e depois x recebe x mais MLP da versão normalizada de x.

$$
x \leftarrow x + \text{Atenção}\big(\operatorname{LN}(x)\big) \qquad x \leftarrow x + \operatorname{MLP}\big(\operatorname{LN}(x)\big)
$$
*Leitura:* O bloco de Transformer moderno: normaliza, aplica a operação, soma de volta à entrada. Duas vezes, uma para atenção e uma para o MLP.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s6.webm) (narração em voz humana)

## 8. Logits e a cabeça de saída
Depois do último bloco, o vetor da última posição é multiplicado por uma matriz de saída de shape dimensão do modelo por tamanho do vocabulário. O resultado é um logit por token possível.
Muitos modelos amarram essa matriz à matriz de embeddings de entrada, usando a transposta da mesma tabela. A leitura é bonita: prever o próximo token vira medir o produto escalar entre o estado final e o embedding de cada token candidato, ou seja, perguntar de qual token o estado atual mais se aproxima em direção.
Sobre esses logits roda o softmax com temperatura, o corte por top-k ou top-p, e o sorteio. O token escolhido é anexado à sequência e o processo inteiro recomeça. Este é o fluxograma completo, do prompt ao token, que o projeto se propôs a tornar transparente.

$$
\text{logits} = h_{\text{final}}\, E^{\top} \qquad p = \operatorname{softmax}\!\left(\frac{\text{logits}}{T}\right)
$$
*Leitura:* Os logits são o produto do estado final pela transposta da matriz de embeddings, e as probabilidades saem do softmax com temperatura.

[Ouvir esta seção](https://llms.newortho.com.br/audio/m5-s7.webm) (narração em voz humana)

## Exercícios

1. **Por que a atenção precisa de codificação posicional?**

   Porque a operação de atenção é invariante à ordem: ela calcula produtos escalares entre todos os pares, sem nenhuma noção de quem veio antes. Sem posição injetada, permutar a frase não mudaria o resultado.

2. **Qual o shape de QKᵀ para uma sequência de n tokens?**

   n por n. Cada célula é a pontuação de relevância de uma posição em relação a outra, o que explica por que o custo da atenção cresce com o quadrado do comprimento do contexto.

3. **O que aconteceria sem a divisão por √dk?**

   As pontuações teriam magnitude proporcional à raiz da dimensão, o softmax saturaria perto de zero e um, e os gradientes ficariam próximos de zero, travando o treino.

4. **Explique a máscara causal em termos de softmax.**

   Somar menos infinito às posições futuras faz a exponencial delas valer zero, então o softmax lhes atribui probabilidade zero. O token só pode atender a si mesmo e ao passado.

5. **Em uma frase, qual a divisão de trabalho entre atenção e MLP?**

   A atenção move informação entre posições; o MLP processa a informação dentro de cada posição.

## Trilhos do tutor socrático

### Uma linha inteira de atenção, calculada à mão (7 passos)

Três posições, dimensão de chave igual a quatro. A consulta da primeira posição é q igual a (2, 1, 1, 1). As chaves são k1 igual a (1, 2, 0, 0), k2 igual a (0, 1, 1, 0) e k3 igual a (0; 0; 0; 0,2). Os valores são v1 igual a (2, 0), v2 igual a (0, 4) e v3 igual a (1, 1). Vamos percorrer a fórmula inteira, do produto escalar até a média ponderada.

**Passo 1.** Calcule o produto escalar entre a consulta q e a chave k1.

   Resposta: 4. A soma é 2 mais 2 mais 0 mais 0, igual a 4. Essa é a pontuação bruta que a posição um atribui à posição um.

**Passo 2.** Divida essa pontuação pela raiz de d k, sabendo que d k vale quatro. Uma casa decimal.

   Resposta: 2.0. O resultado é 2,0. É a mesma pontuação de 2,0 que abriu o exemplo do módulo anterior, e não por acaso: o exemplo foi construído para casar.

**Passo 3.** Calcule agora a pontuação escalada da segunda chave, ou seja o produto escalar de q com k2 dividido pela raiz de d k. Uma casa decimal.

   Resposta: 1.0. A pontuação escalada vale 1,0. Com a terceira chave o mesmo procedimento dá 0,1, então a linha completa é 2,0, 1,0 e 0,1.

**Passo 4.** Aplique o softmax à linha 2,0, 1,0 e 0,1 e informe o peso de atenção da primeira posição. Três casas decimais.

   Resposta: 0.659. O peso é 0,659. A primeira posição vai contribuir com quase dois terços da saída desta linha.

**Passo 5.** Qual o peso de atenção da terceira posição? Três casas decimais.

   Resposta: 0.099. O peso é 0,099. Some com 0,659 e 0,242 para confirmar que a linha soma um, como toda distribuição deve somar.

**Passo 6.** Calcule a primeira componente da saída, ou seja a média dos valores ponderada pelos pesos, usando v1 igual a (2, 0), v2 igual a (0, 4) e v3 igual a (1, 1). Três casas decimais.

   Resposta: 1.417. A soma é 1,318 mais 0 mais 0,099, igual a 1,417. Repare que o resultado ficou perto de v1, porque v1 levou o maior peso.

**Passo 7.** Calcule a segunda componente da saída. Três casas decimais.

   Resposta: 1.068. A soma é 0 mais 0,970 mais 0,099, igual a 1,068. A saída completa desta posição é o vetor (1,417; 1,068).

Você percorreu a fórmula inteira da atenção sem pular nenhuma etapa: produto escalar, escala pela raiz de d k, softmax e média ponderada dos valores. Tudo o que um Transformer faz nessa camada é repetir esse cálculo para cada linha e para cada cabeça.

### Da string ao vetor de entrada (5 passos)

Considere um modelo com vocabulário de 50 000 tokens e dimensão d igual a 768. Vamos acompanhar o que acontece antes de o primeiro bloco começar a trabalhar.

**Passo 1.** Quantos números guarda a matriz de embeddings desse modelo?

   Resposta: 38400000. São 38 400 000 números. Só a tabela de entrada já guarda quase quarenta milhões de parâmetros, antes de qualquer bloco de atenção existir.

**Passo 2.** Depois de somar a codificação posicional ao embedding, qual a dimensão do vetor da posição t?

   Resposta: 768. A dimensão continua 768. A posição é injetada dentro do mesmo espaço, sem alargar o vetor.

**Passo 3.** Para uma sequência de 10 tokens, quantos números tem a matriz de entrada X?

   Resposta: 7680. São 7 680 números. Esse bloco de números é tudo o que o primeiro bloco do Transformer recebe do mundo externo.

**Passo 4.** Multiplicar um vetor one-hot pela matriz de embeddings produz o quê?

   Resposta: 0. A resposta é a primeira alternativa. Buscar uma linha na tabela e multiplicar por um vetor one-hot são a mesma operação, escritas de duas formas: a primeira é como se implementa, a segunda é como os artigos escrevem.

**Passo 5.** Sem codificação posicional, o que aconteceria com as frases gato mordeu cachorro e cachorro mordeu gato?

   Resposta: 0. A resposta é a primeira alternativa. É exatamente por isso que a posição precisa ser injetada explicitamente na entrada, e não deduzida pelo mecanismo.

Antes de qualquer atenção acontecer, o texto já virou uma tabela de números com posição embutida. Duas decisões de projeto, a tabela de embeddings e a codificação posicional, definem tudo o que o modelo pode enxergar.

### Formas e custos de Q, K e V (6 passos)

Um modelo com d igual a 768 projeta cada posição em consultas, chaves e valores de dimensão d k igual a 64. A sequência tem 12 tokens. Vamos contar parâmetros e células para entender de onde vem o custo da atenção.

**Passo 1.** Quantos parâmetros tem a matriz W com subscrito Q, de forma 768 por 64?

   Resposta: 49152. São 49 152 parâmetros. É esse bloco de números que define o que a consulta de cada posição vai procurar.

**Passo 2.** Somando W com subscrito Q, W com subscrito K e W com subscrito V, quantos parâmetros essa cabeça de atenção usa nas projeções?

   Resposta: 147456. São 147 456 parâmetros por cabeça, contando só as projeções de entrada e deixando de fora a projeção de saída W com subscrito O.

**Passo 3.** Quantos números tem a matriz Q para essa sequência de 12 tokens?

   Resposta: 768. São 768 números. Coincidência divertida com o valor de d, mas a origem é outra: 12 posições vezes 64 coordenadas por consulta.

**Passo 4.** Quantas células tem a matriz de pontuações Q vezes K transposta para essa sequência?

   Resposta: 144. São 144 células. Repare que a dimensão 64 não aparece: ela foi consumida dentro de cada produto escalar.

**Passo 5.** Se a sequência dobrar para 24 tokens, quantas células passa a ter essa matriz?

   Resposta: 576. São 576 células, quatro vezes as 144 anteriores. É esse crescimento quadrático que torna contexto longo caro em memória e em tempo.

**Passo 6.** O que a célula da linha i e coluna j da matriz de pontuações representa?

   Resposta: 0. A resposta é a primeira alternativa. Só depois do softmax linha a linha essas pontuações viram pesos que somam um.

As três projeções custam parâmetros que não dependem do comprimento do texto, mas a matriz de pontuações cresce com o quadrado desse comprimento. Essa assimetria é a explicação inteira de por que janelas de contexto longas são caras.

### O bloco por dentro: MLP, normalização e residual (6 passos)

Ainda com d igual a 768 e expansão de quatro vezes no MLP, vamos contar os parâmetros do bloco e depois normalizar um vetor pequeno à mão para ver o que a normalização de camada realmente faz.

**Passo 1.** Qual a dimensão interna do MLP quando a expansão é de quatro vezes?

   Resposta: 3072. A dimensão interna é 3 072. É nesse espaço alargado que a não linearidade g atua antes da compressão de volta.

**Passo 2.** Quantos parâmetros tem a matriz W com subscrito 1, que faz a expansão?

   Resposta: 2359296. São 2 359 296 parâmetros em uma única matriz, e ainda falta a que comprime de volta.

**Passo 3.** Somando as duas matrizes do MLP, quantos parâmetros o bloco usa, deixando os vieses de fora?

   Resposta: 4718592. São 4 718 592 parâmetros por bloco, só no MLP. Isso é mais de trinta vezes o que as três projeções de uma cabeça consomem, e explica por que a maior parte dos parâmetros do modelo mora aqui.

**Passo 4.** Considere o vetor de ativações (2, 4, 4, 4, 5, 5, 7, 9). Qual a média dele?

   Resposta: 5. A média é 5. Esse é o valor que será subtraído de cada coordenada para recentrar o vetor em zero.

**Passo 5.** Qual o desvio padrão desse vetor, usando a divisão pelo número de coordenadas?

   Resposta: 2. A variância é 4 e o desvio padrão é 2. É por esse valor que cada coordenada recentrada será dividida.

**Passo 6.** Qual o valor normalizado da primeira coordenada, aquela que valia 2? Uma casa decimal.

   Resposta: -1.5. O resultado é menos 1,5. A coordenada estava a um desvio e meio abaixo da média, e é isso que o número normalizado passa a dizer.

O bloco tem duas metades com papéis opostos: o MLP concentra a maior parte dos parâmetros e processa cada posição sozinha, enquanto a normalização e a conexão residual não carregam quase nenhum parâmetro e existem só para que o treino continue possível camada após camada.

### Do estado final ao token escolhido (6 passos)

Um modelo de brinquedo tem dimensão três e vocabulário de três tokens. O estado final da última posição é h igual a (1, 2, menos 1). Os embeddings dos tokens são eA igual a (2, 1, 0), eB igual a (0, 1, 1) e eC igual a (1, 0, 1). Vamos fechar o caminho até o token de saída.

**Passo 1.** Qual o logit do token A, ou seja o produto escalar entre h e eA?

   Resposta: 4. A soma é 2 mais 2 mais 0, igual a 4. O token A é o que mais se alinha em direção com o estado final.

**Passo 2.** Qual o logit do token C?

   Resposta: 0. A soma é 1 mais 0 menos 1, igual a 0. Logit zero não significa probabilidade zero, como o próximo passo vai mostrar.

**Passo 3.** Os três logits são 4, 1 e 0. Some as três exponenciais. Três casas decimais.

   Resposta: 58.316. A soma vale 58,316. Repare o peso da primeira parcela: quatro pontos de vantagem em logit já dominam quase todo o denominador.

**Passo 4.** Com temperatura igual a um, qual a probabilidade do token A? Três casas decimais.

   Resposta: 0.936. O resultado é 0,936. O modelo está bastante confiante nesse token, e uma vantagem de três pontos sobre o segundo colocado basta para isso.

**Passo 5.** Agora ligue a temperatura em 2. Qual passa a ser a probabilidade do token A? Três casas decimais.

   Resposta: 0.736. O resultado é 0,736. Dobrar a temperatura tirou vinte pontos percentuais do favorito e os distribuiu entre os outros dois tokens.

**Passo 6.** De volta à temperatura um, o token C ficou com probabilidade 0,017. Se ele fosse o token correto, qual seria a contribuição dessa posição para a perda? Três casas decimais.

   Resposta: 4.066. A perda vale 4,066. É uma penalização alta, e deve ser mesmo: o modelo estava confiante em outro token e errou.

Você fechou o caminho completo: do estado final saem logits por produto escalar com os embeddings, do softmax com temperatura sai a distribuição, e do logaritmo dessa distribuição sai o sinal que treinou o modelo em primeiro lugar.

## Dúvidas frequentes

**Por que dividir pela raiz de dk e não pelo próprio dk?**

Porque o que cresce com a dimensão é o desvio padrão do produto escalar, e não a magnitude bruta dele. Se as coordenadas de q e k forem aproximadamente independentes e de variância um, a soma de d k produtos tem variância d k, logo desvio padrão igual à raiz de d k. Dividir por esse desvio devolve as pontuações a uma faixa de variância um, que é exatamente onde o softmax ainda tem gradiente útil. Dividir pelo próprio d k encolheria demais e achataria a distribuição de atenção.

**A máscara causal é aplicada antes ou depois do softmax?**

Antes, e isso é essencial. A máscara soma menos infinito às posições futuras enquanto elas ainda são pontuações, e a exponencial de menos infinito vale zero, então o softmax atribui probabilidade zero a elas e ainda assim a linha soma um. Se você zerasse os pesos depois do softmax, a linha deixaria de somar um e seria preciso renormalizar na mão. Somar a máscara antes resolve as duas coisas de uma vez.

**Se atenção é só uma média ponderada, de onde vem a inteligência do modelo?**

De três lugares que a média ponderada sozinha não mostra. Primeiro, os pesos não são fixos: eles são recalculados a cada posição e a cada entrada, a partir de projeções aprendidas. Segundo, o bloco se repete dezenas de vezes, e cada camada trabalha sobre o resultado da anterior. Terceiro, entre as atenções está o MLP, que é onde a maior parte dos parâmetros mora e onde a informação recolhida é de fato processada. A média ponderada é o mecanismo de transporte, não o modelo inteiro.

**Qual a diferença entre chave e valor? Parecem a mesma informação.**

São projeções diferentes do mesmo vetor de entrada, e cumprem papéis que não se confundem. A chave existe para ser comparada com as consultas e decide o quanto aquela posição será atendida. O valor existe para ser entregue e decide o que aquela posição contribui quando é atendida. Separar as duas permite que uma posição seja fácil de encontrar por um critério e entregue conteúdo de outra natureza, e o modelo aprende essa separação sozinho durante o treino.

**Cada cabeça de atenção realmente aprende uma coisa diferente?**

Em parte. Trabalhos de interpretabilidade encontram cabeças com comportamento reconhecível, por exemplo cabeças que acompanham o token anterior ou que ligam pronomes a seus antecedentes. Mas a especialização raramente é limpa: a mesma cabeça costuma participar de vários padrões, e um padrão costuma estar espalhado por várias cabeças. Trate os exemplos didáticos como ilustração do porquê de haver várias cabeças, e não como descrição fiel do que cada uma faz.

**Por que concatenar as cabeças e ainda passar por uma projeção W com subscrito O?**

Por duas razões. A primeira é de forma: a concatenação devolve um vetor do tamanho da dimensão do modelo, mas ele é apenas a justaposição de fatias independentes, e a projeção final permite que informação de uma cabeça influencie coordenadas associadas a outra. A segunda é de aprendizado: sem essa matriz, o modelo não teria como ponderar a importância relativa das cabeças, e cada fatia entraria na conexão residual com o mesmo peso.

**Por que o MLP expande a dimensão antes de comprimir de volta?**

Porque a não linearidade precisa de espaço para trabalhar. Em uma dimensão maior é possível separar padrões que ficariam sobrepostos no espaço original, e a compressão seguinte escolhe o que vale a pena manter. A expansão de quatro vezes é convenção empírica, não teorema: valores diferentes funcionam, e arquiteturas recentes ajustam esse fator junto com o tipo de não linearidade usada.

**Normalização de camada e normalização de lote são a mesma coisa?**

Não. A normalização de camada calcula média e desvio padrão sobre as coordenadas de um único vetor, uma posição por vez, e por isso funciona igual em treino e em inferência e não depende de quantos exemplos há no lote. A normalização de lote calcula essas estatísticas sobre o lote inteiro, o que cria dependência entre exemplos e complica o uso em sequências de comprimento variável. Transformers usam normalização de camada justamente para evitar essa dependência.

**O que muda entre normalizar antes ou depois do bloco?**

Muda a estabilidade do treino. Na forma que o módulo apresenta, a normalização acontece antes da operação e a soma residual recebe a saída direto, o que deixa um caminho totalmente livre para o gradiente atravessar a rede. Na forma original do artigo de 2017, a normalização vinha depois da soma, e treinar modelos muito profundos exigia aquecimento cuidadoso da taxa de aprendizado. A prática atual prefere normalizar antes, porque o treino fica mais tolerante.

**Por que amarrar a matriz de saída à matriz de embeddings?**

Por economia e por coerência. Economia porque a tabela de embeddings costuma ser uma das maiores do modelo, e reutilizá-la na saída elimina uma segunda tabela do mesmo tamanho. Coerência porque a leitura fica limpa: prever o próximo token vira medir o produto escalar entre o estado final e o embedding de cada candidato, ou seja perguntar de qual token o estado atual mais se aproxima em direção. Nem todo modelo faz isso, mas é prática comum.

**Por que os modelos erram contas simples se sabem tanta coisa?**

Uma das raízes está na tokenização. Um número como 1234 pode virar dois ou três tokens conforme o tokenizador, e nenhum desses pedaços carrega a noção de quantidade. O modelo aprendeu a relacionar símbolos que aparecem juntos, e não a executar um algoritmo posicional de soma. Some a isso o fato de que cada passo produz apenas uma distribuição sobre o próximo token, sem memória de trabalho separada, e fica claro por que contas longas quebram com facilidade.

**Por que contar as letras de uma palavra é difícil para um LLM?**

Porque as letras individuais quase nunca são tokens separados. A palavra chega ao modelo como um ou dois pedaços, e a decomposição em caracteres simplesmente não está presente na representação de entrada. Para responder, o modelo precisa recuperar da memória de treino como aquele pedaço se soletra, o que é indireto e falível. É o mesmo problema de fundo dos erros de aritmética: a pergunta exige uma informação que a tokenização apagou.

**O custo da atenção cresce com o quadrado do contexto. Isso é inevitável?**

É inevitável na forma exata apresentada no módulo, porque a matriz de pontuações compara todos os pares de posições e o número de pares cresce com o quadrado do comprimento. Existem alternativas que trocam exatidão por custo, por exemplo restringir cada posição a uma janela local, atender a um subconjunto esparso de posições ou aproximar o produto por métodos de baixa dimensão. Todas mudam o que é calculado, então a fórmula deste módulo continua sendo a referência do que está sendo aproximado.

**A conexão residual não estraga o resultado ao somar a entrada crua na saída?**

Não, e o motivo é que o bloco não precisa produzir a saída inteira: ele produz apenas a correção a ser somada. Isso torna a identidade fácil de representar, porque basta o bloco devolver algo próximo de zero para a informação atravessar intacta. O ganho decisivo aparece no gradiente, que encontra um caminho direto até as camadas iniciais sem ser multiplicado sucessivamente por derivadas pequenas. É essa soma aparentemente ingênua que viabiliza dezenas de camadas empilhadas.

**Onde exatamente entram temperatura e top-p no fluxo do Transformer?**

Bem no final, depois de tudo o que o módulo descreve. O modelo termina o último bloco, projeta o estado final na matriz de saída e produz um logit por token do vocabulário. Só então a temperatura divide esses logits, o softmax os converte em probabilidades, o corte por top-k ou top-p descarta candidatos e o sorteio escolhe um token. Nada disso faz parte do modelo: são decisões de amostragem aplicadas sobre a saída dele, e é por isso que dá para mudá-las sem retreinar nada.

**Depois de escolher um token, o modelo recalcula tudo do zero?**

Conceitualmente sim: o token escolhido é anexado à sequência e o processo inteiro recomeça com um contexto uma posição maior. Na prática, as implementações guardam as chaves e os valores já calculados das posições anteriores, porque eles não mudam quando um token novo entra no final. Assim, cada passo novo calcula apenas a consulta, a chave e o valor da posição recém acrescentada, e reaproveita o resto. O resultado é idêntico, só que muito mais barato.

## Checkpoint

1. Narre o caminho de um token da string ao embedding.

   O tokenizador quebra o texto e devolve um índice; o índice busca uma linha na matriz de embeddings; a codificação posicional é somada; o resultado é o vetor de entrada do primeiro bloco.

2. O que Q, K e V representam?

   Consulta, o que a posição procura; chave, o rótulo que cada posição oferece; valor, a informação que cada posição entrega quando selecionada.

3. Por que existe a divisão pela raiz de dk?

   Para manter a escala das pontuações em uma faixa onde o softmax não satura e os gradientes continuam úteis.

4. Qual o papel da conexão residual?

   Oferecer um caminho direto para o gradiente atravessar toda a rede, viabilizando o treino de modelos muito profundos.

5. Como se obtêm os logits e o que se faz com eles?

   Multiplicando o estado final pela matriz de saída, frequentemente a transposta da matriz de embeddings. Depois vem softmax com temperatura, corte por top-k ou top-p, e sorteio do token.

## Bibliografia

- **Attention Is All You Need**, Ashish Vaswani e outros, NeurIPS, 2017. Seções 3.1 a 3.3. O paper original do Transformer. Depois deste módulo você consegue ler essas três seções inteiras entendendo cada fórmula. É o teste de leitura de paper previsto no PRD.

- **Deep Learning: Foundations and Concepts**, Christopher M. Bishop e Hugh Bishop, Springer, 2024. Capítulo sobre Transformers. O tratamento mais didático e atual da atenção em livro-texto, com a álgebra explicitada passo a passo. Versão de leitura livre disponível no site do livro.

- **Dive into Deep Learning**, Zhang, Lipton, Li e Smola, Cambridge University Press, edição aberta. Capítulo de mecanismos de atenção e Transformers. Traz o código junto da matemática, útil para conferir shapes rodando os exemplos.

## Vídeos curados

- [Attention in transformers, visually explained](https://www.youtube.com/watch?v=eMlx5fFNoYc), 3Blue1Brown, cap. 6. Assista duas vezes: uma antes de ler a seção de atenção, outra depois de fazer os exercícios.

- [How might LLMs store facts](https://www.youtube.com/watch?v=9-Jl0dxWQs8), 3Blue1Brown, cap. 7. Cobre o MLP e prepara o terreno para o M7.

- [The Transformer Attention Mechanism](https://machinelearningmastery.com/the-transformer-attention-mechanism/), MachineLearningMastery. Texto de referência com a álgebra passo a passo, útil para conferir os shapes.
