Transformers em Deep Learning: atenção, embeddings e paralelismo em sequências

Capítulo 11

Tempo estimado de leitura: 7 minutos

+ Exercício

Por que Transformers: atenção como alternativa à recorrência

Em tarefas com sequências (texto, áudio, séries temporais), o objetivo é construir representações que capturem relações entre elementos distantes e próximos. Em modelos recorrentes, essa dependência é processada passo a passo no tempo. Já em Transformers, o mecanismo central é a atenção: para representar um elemento (por exemplo, uma palavra), o modelo aprende a ponderar o quanto cada outro elemento da sequência é relevante para ele.

A ideia prática é: para cada posição, o modelo cria uma mistura (soma ponderada) de informações das demais posições. Isso substitui a recorrência em muitos casos porque: (1) permite acesso direto a qualquer posição (dependências longas sem “caminhar” pela sequência), e (2) permite paralelismo no treinamento e inferência por camada, já que todas as posições podem ser processadas ao mesmo tempo.

Embeddings: transformando tokens em vetores treináveis

Transformers operam sobre vetores. Antes da atenção, cada token (palavra, subpalavra ou símbolo) é mapeado para um vetor denso chamado embedding.

  • Embedding de token: uma tabela (matriz) onde cada token tem um vetor associado. Esses vetores são aprendidos durante o treinamento.
  • Dimensão do embedding (d_model): tamanho do vetor que representa cada token. Valores comuns em modelos reais vão de centenas a milhares.

Exemplo conceitual: a frase “o gato bebe leite” vira uma sequência de vetores x_1, x_2, x_3, x_4, um por token.

Autoatenção (Self-Attention): Query, Key e Value

Na autoatenção, cada posição da sequência “consulta” as demais posições para decidir de onde extrair informação. Isso é feito criando três projeções lineares para cada token:

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

  • Query (Q): o que a posição atual está procurando.
  • Key (K): o que cada posição oferece como “chave” para ser comparada.
  • Value (V): a informação que será combinada (misturada) se aquela posição for relevante.

Para uma sequência com matriz de embeddings X (shape: seq_len × d_model), calculamos:

Q = X W_Q   K = X W_K   V = X W_V

Em seguida, calculamos uma pontuação de similaridade entre cada query e todas as keys. A forma padrão é o produto escalar, com escala para estabilidade:

scores = (Q K^T) / sqrt(d_k)

Aplicamos softmax para transformar pontuações em pesos que somam 1:

weights = softmax(scores)

E finalmente obtemos a saída da atenção como soma ponderada dos values:

Attention(X) = weights V

Passo a passo prático (visão operacional)

  • 1) Entrada: embeddings dos tokens X.
  • 2) Projeções: calcular Q, K, V com matrizes treináveis.
  • 3) Similaridade: calcular scores entre cada posição e todas as outras.
  • 4) Normalização: aplicar softmax para obter pesos de atenção por posição.
  • 5) Mistura: combinar V com os pesos, gerando uma nova representação por token.

Exemplo conceitual: atenção em uma frase curta

Considere a frase: “João viu Maria porque ela sorriu”. Queremos atualizar a representação do token “ela”. Idealmente, “ela” deve se conectar a “Maria” (referência) mais do que a “João”.

Na autoatenção, a posição de “ela” gera uma query q_ela. Cada token gera uma key (k_joão, k_viu, k_maria, …). O modelo aprende que q_ela deve ter alta similaridade com k_maria quando o contexto sugere correferência.

Token (posição)Intuição de relevância para “ela”Peso de atenção (exemplo)
JoãoPossível referente, mas menos provável aqui0,10
viuVerbo, ajuda pouco na identidade de “ela”0,05
MariaReferente mais provável0,60
porqueConector, estrutura a relação causal0,10
sorriuAjuda a inferir gênero/entidade em alguns contextos0,15

A nova representação de “ela” após atenção é uma combinação dos V de todos os tokens, com maior contribuição de “Maria”. Isso permite que a representação carregue informação contextual (correferência) sem precisar de um estado recorrente que percorra a frase.

Múltiplas cabeças (Multi-Head Attention): várias “perspectivas” em paralelo

Uma única atenção pode capturar um tipo de relação dominante. Em multi-head attention, o modelo executa várias atenções em paralelo, cada uma com projeções próprias, permitindo capturar relações diferentes simultaneamente (por exemplo, concordância gramatical, correferência, dependências sintáticas, relações semânticas).

Formalmente, para cada cabeça h:

head_h = Attention(X W_Q^h, X W_K^h, X W_V^h)

Depois concatenamos as cabeças e projetamos de volta para d_model:

MultiHead(X) = Concat(head_1, ..., head_H) W_O

Passo a passo prático (o que muda com várias cabeças)

  • 1) Dividir capacidade: cada cabeça trabalha com dimensão menor (d_k), mantendo custo controlado.
  • 2) Atenções independentes: cada cabeça aprende padrões distintos de alinhamento.
  • 3) Fusão: concatenar e misturar para formar uma representação única por token.

Posição: por que precisamos de Positional Encoding

Autoatenção, por si só, não impõe ordem: se você embaralhar os tokens, as operações de similaridade ainda funcionam do mesmo modo. Para que o modelo saiba quem vem antes/depois, adicionamos informação de posição aos embeddings.

  • Positional encoding fixo: vetores determinísticos (por exemplo, funções senoidais) somados aos embeddings.
  • Positional embedding aprendível: uma tabela de vetores por posição, aprendida no treinamento.
  • Variações modernas: codificações relativas (a relação “distância” entre tokens) podem melhorar generalização para comprimentos diferentes.

Na prática, a entrada para a primeira camada costuma ser:

X0 = TokenEmbedding(tokens) + PositionalEncoding(positions)

Residual connections e LayerNorm: treinando profundo com estabilidade

Transformers empilham muitas camadas. Dois componentes são essenciais para manter o treinamento estável e permitir profundidade:

Residual connections (atalhos)

Em vez de substituir completamente a representação, cada sub-bloco (atenção ou MLP) é adicionado à entrada original:

Y = X + SubBlock(X)

Isso facilita o fluxo de gradiente e permite que a camada aprenda “correções” incrementais, em vez de reconstruir tudo do zero.

LayerNorm

LayerNorm normaliza as ativações por token (ao longo das dimensões do vetor), ajudando a controlar escalas internas e estabilizar a otimização. É comum ver variantes:

  • Post-LN: Y = LayerNorm(X + SubBlock(X))
  • Pre-LN: Y = X + SubBlock(LayerNorm(X)) (frequentemente mais estável em redes muito profundas)

O ponto-chave: residual + normalização tornam viável empilhar blocos de atenção e manter gradientes utilizáveis.

Paralelismo em sequências: onde Transformers ganham eficiência

Em uma camada de Transformer, as projeções Q, K, V e os produtos matriciais são operações altamente paralelizáveis em hardware moderno. Como todas as posições são processadas simultaneamente, o tempo por camada não cresce linearmente com a dependência temporal como em abordagens estritamente sequenciais.

Esse paralelismo é especialmente vantajoso no treinamento com lotes grandes e sequências moderadas, pois a computação vira essencialmente álgebra linear densa.

Aplicações típicas e limitações

Aplicações típicas

  • Modelagem de linguagem: previsão do próximo token, geração de texto, sumarização, resposta a perguntas.
  • Tradução e tarefas sequência-a-sequência: codificar uma sequência e decodificar outra.
  • Classificação de texto: sentimento, intenção, tópicos, detecção de spam.
  • Visão e multimodal: variantes com patches (imagens) e fusão texto-imagem.
  • Áudio: reconhecimento de fala e modelagem de sequências acústicas (com adaptações).

Limitações (custo computacional e contexto)

  • Custo quadrático em relação ao comprimento: a matriz scores tem tamanho seq_len × seq_len, tornando atenção completa cara em memória e tempo para sequências longas.
  • Janela de contexto finita: o modelo só “enxerga” até um certo número de tokens; além disso, informações muito antigas podem ser truncadas ou resumidas.
  • Inferência auto-regressiva pode ser lenta: em geração token a token, apesar do paralelismo por camada, a saída é produzida sequencialmente (um token por passo), exigindo cache de K/V para eficiência.
  • Sensibilidade a dados e alinhamento: a qualidade depende fortemente de dados, tokenização e objetivos de treinamento; atenção não garante por si só raciocínio correto.

Agora responda o exercício sobre o conteúdo:

Qual afirmação descreve corretamente por que Transformers substituem a recorrência em muitas tarefas com sequências?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Transformers usam atenção para combinar informações de todas as posições com pesos aprendidos, permitindo capturar dependências longas sem percorrer passo a passo e processar todas as posições em paralelo por camada.

Próximo capitúlo

Por que Redes Neurais profundas funcionam bem: representações, viés indutivo e escala

Arrow Right Icon
Capa do Ebook gratuito Introdução a Redes Neurais: do perceptron ao deep learning moderno
73%

Introdução a Redes Neurais: do perceptron ao deep learning moderno

Novo curso

15 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.