Fazendo um LLM do Zero #03: Atenção é Tudo o que Você Precisa? 🎯👀 Você já parou para pensar em como é difícil entender uma frase isolada?
Imagine que eu chego para você e digo:
“Eu estou indo para o banco.”
Você pensaria em dinheiro 💰 ou em um parque 🌳?
Sem o resto da conversa, é impossível saber. A palavra “banco” é ambígua. O que define o significado dela não são as letras B-A-N-C-O, mas sim as palavras que estão ao redor dela.
Se a frase fosse “Sentei no banco da praça”, a palavra “banco” absorve o significado de “praça”.
Se fosse “Saquei dinheiro no banco”, ela absorve o significado de “dinheiro”.
Esse “superpoder” de misturar significados baseados no contexto é algo que nós fazemos naturalmente. Mas, para computadores, isso sempre foi um pesadelo. Até 2017.
Bem-vindo ao nossa 3a jornada, onde vamos desvendar o Self-Attention (Autoatenção), o mecanismo que transformou papagaios digitais em modelos capazes de manter uma conversa coerente.
1. O Problema da Tradução “Robótica”
Antigamente, modelos de linguagem liam texto como um cavalo com antolhos: focados apenas na palavra atual ou na anterior.
O resultado? Traduções literais e frases sem nexo. Veja este exemplo clássico de tradução do Alemão para o Inglês:
Contexto importa na tradução
Para traduzir corretamente, a palavra final da frase depende de uma palavra que apareceu lá no começo. Se o modelo não tiver “memória” ou “visão periférica”, ele erra.
2. A Intuição: Todo Mundo Olhando para Todo Mundo
A grande sacada do paper “Attention Is All You Need” foi dizer: e se cada palavra pudesse “olhar” para todas as outras palavras da frase e decidir quais são importantes para ela?
Na frase “O gato que estava no telhado miou”, quando processamos a palavra “miou”, o modelo deve prestar muita atenção em “gato” (quem miou?) e pouca atenção em “telhado” (onde estava).
Isso cria uma teia de conexões semânticas. O modelo aprende quem fez o quê, onde e como, apenas ajustando o foco da atenção.
3. O Coquetel de Informações
Matematicamente, o que acontece é que a palavra “banco” deixa de ser um vetor estático. Ela se torna uma mistura ponderada de todas as palavras da frase.
Se a palavra “dinheiro” está na frase, ela “doa” um pouco do seu significado para “banco”.
O resultado final (o vetor de contexto) é uma representação muito mais rica. É a diferença entre um dicionário (significado estático) e uma conversa (significado contextual).
4. O Mecanismo: Query, Key e Value (A Busca no Spotify)
Aqui a coisa fica técnica (e genial). Como o modelo decide quanto foco dar para cada palavra?
Ele usa um sistema de busca parecido com o do YouTube ou Spotify.
Join Medium for free to get updates from this writer.
Para cada palavra, criamos três vetores:
1. Query (Q — A Pergunta): O que eu estou procurando?
2. Key (K — A Etiqueta): O que eu tenho a oferecer?
3. Value (V — O Conteúdo): Se você gostar de mim, leve esta informação.
A “Atenção” nada mais é do que o casamento (produto escalar) entre a Pergunta (Query) de uma palavra e a Etiqueta (Key) de outra. Se elas combinam, a afinidade é alta, e o modelo absorve muito do Conteúdo (Value).
Mas esses vetores Q, K e V não são fixos! Eles são aprendidos. O modelo possui matrizes de pesos treináveis que ele ajusta durante o treinamento para aprender como prestar atenção melhor.
5. Regras do Jogo: Sem Spoilers e Sem Decorar
Para criar um GPT (que gera texto), temos uma regra de ouro: você não pode ler o futuro.
Se o modelo pudesse ver a próxima palavra durante o treino, ele apenas copiaria a resposta em vez de aprender a prever.
Para impedir essa “cola”, aplicamos uma Máscara Causal. Ela zera a atenção para qualquer palavra que venha depois da atual. É como colocar uma cortina no futuro.
Além disso, para evitar que o modelo “decore” frases específicas, usamos o Dropout. Desligamos aleatoriamente algumas conexões de atenção durante o treino. Isso força o modelo a ser robusto e aprender caminhos alternativos para entender o contexto.
6. Multi-Head Attention: Vários Pontos de Vista
Linguagem é complexa. Uma frase pode ter uma estrutura gramatical difícil E um tom emocional sutil. É difícil focar nas duas coisas ao mesmo tempo.
A solução? Multi-Head Attention (Atenção com Múltiplas Cabeças).
Em vez de fazer esse processo uma vez, fazemos 4, 8 ou 12 vezes em paralelo.
Head 1 (Cabeça 1) foca na gramática (quem é o sujeito?).
Head 2 (Cabeça 2) foca na relação temporal (aconteceu antes ou depois?).
Head 3 (Cabeça 3) foca no vocabulário específico.
No final, juntamos tudo e temos uma compreensão super-humana do texto.
7. Onde isso tudo se encaixa?
A Atenção é o coração, mas precisa de um corpo. Ela é o primeiro grande bloco dentro da arquitetura do Transformer que estamos construindo.
Depois de entender o contexto com a Atenção, a informação flui para as redes neurais (Feed Forward) que processam esse significado.
🚀 Mão na Massa
A teoria é linda, mas implementar o Self-Attention do zero, multiplicando matrizes na mão, é onde você realmente entende a mágica. E é exatamente isso que fazemos no notebook deste capítulo. Nada de import attention. Nós criamos a classe MultiHeadAttention linha por linha.
Quer ver como transformar essa teoria em código Python puro?
👇 Acesse agora:
📓 Notebook no Google Colab:Rodar no colab
📂 Código no GitHub: Ver repositório:vongrossi/fazendo-um-llm-do-zero
No proximo post, vamos pegar esses blocos de atenção e finalmente construir o corpo do GPT. Prepare-se, porque o monstro vai ganhar vida.
🧟♂️🤖









Top comments (0)