A autoatenção é um mecanismo em aprendizado de máquina no qual cada elemento de uma sequência atende a todos os outros elementos, calculando pesos de atenção com base em suas relações. Diferentemente dos mecanismos de atenção anteriores, que operavam entre sequências de codificador e decodificador, a autoatenção deriva consultas, chaves e valores da mesma sequência de entrada, permitindo que o modelo capture dependências globais diretamente. Esse conceito é central para a arquitetura transformer, que substituiu a recorrência por mecanismos de atenção, e tornou-se a base para modelos como BERT, T5 e transformadores generativos pré-treinados (GPT).
Na autoatenção, cada token na sequência de entrada é transformado em três vetores: uma consulta, uma chave e um valor. O peso de atenção entre dois tokens é calculado como o produto escalar da consulta de um token com a chave do outro, tipicamente escalado e passado por uma função softmax. Esses pesos, frequentemente chamados de pesos "suaves", existem apenas na passagem direta e mudam a cada etapa de entrada, ao contrário dos pesos "rígidos" calculados durante o treinamento. A saída para cada token é uma soma ponderada dos valores, onde os pesos refletem a relevância de outros tokens para o token atual.
História
Mecanismos de atenção foram desenvolvidos para abordar fraquezas em redes neurais recorrentes (RNNs), que favoreciam informações de palavras posteriores em uma frase, atenuando o contexto anterior. Os primeiros designs de atenção anexaram um mecanismo de atenção a uma RNN codificador-decodificador para tradução automática, conforme descrito por Bahdanau et al. em 2014. No entanto, o grande avanço veio com a autoatenção, onde cada elemento na sequência de entrada atende a todos os outros, permitindo que o modelo capture dependências globais. Essa ideia foi central para a arquitetura transformer, introduzida no artigo de 2017 "Attention Is All You Need" por Jakob Uszkoreit, Lukasz Kaiser e colegas do Google. Os transformers eliminaram a RNN sequencial mais lenta e dependeram de atenção paralela mais rápida, levando a modelos como BERT, T5 e GPT. Pesquisas adicionais sobre mecanismos de atenção em aprendizado profundo são fornecidas por Niu et al. e Soydaner.
Mecanismo
A autoatenção opera em uma sequência de embeddings de tokens, cada um representado por um vetor. Para cada token, o modelo calcula um vetor de consulta, um vetor de chave e um vetor de valor por meio de transformações lineares aprendidas. A pontuação de atenção entre o token i e o token j é calculada como o produto escalar de consulta_i e chave_j, frequentemente dividido pela raiz quadrada da dimensão para estabilizar gradientes. Essas pontuações são passadas por uma softmax para produzir pesos de atenção que somam um para cada consulta. A saída para o token i é a soma ponderada de todos os vetores de valor, usando esses pesos.
Esse mecanismo permite que cada token acesse diretamente qualquer parte da sequência, independentemente da distância, superando o gargalo sequencial das RNNs. Na prática, os transformers usam atenção multi-cabeça, onde múltiplos conjuntos de projeções de consulta, chave e valor operam em paralelo, permitindo que o modelo atenda a diferentes aspectos da sequência simultaneamente.
Interpretando Pesos de Atenção
Na tradução, alinhamento refere-se a corresponder palavras da frase de origem a palavras na frase traduzida. Redes que realizam tradução literal sem considerar a ordem das palavras mostrariam as maiores pontuações de atenção ao longo da diagonal da matriz de alinhamento. Dominância fora da diagonal indica alinhamento mais matizado. Por exemplo, traduzindo "I love you" para o francês: na primeira passada do decodificador, 94% do peso de atenção está em "I", produzindo "je"; na segunda passada, 88% em "you", produzindo "t'"; na terceira passada, 95% em "love", produzindo "aime". Isso resulta em uma matriz de alinhamento onde "love" se alinha com "aime".
Às vezes, o alinhamento é muitos-para-muitos, como "look it up" correspondendo a "cherchez-le". Pesos de atenção suaves, que produzem uma soma ponderada de vetores ocultos, funcionam melhor do que atenção rígida (definir um peso como 1 e outros como 0), pois pode não haver um único vetor oculto melhor.
Variantes
Muitas variantes de atenção implementam pesos suaves. Formas iniciais incluem programadores de peso rápido ou controladores de peso rápido (1992), onde uma rede neural "lenta" gera os pesos "rápidos" de outra rede por meio de produtos externos, posteriormente renomeados como "autoatenção linearizada". Atenção estilo Bahdanau, também conhecida como atenção aditiva, e atenção estilo Luong, ou atenção multiplicativa, são comuns em sistemas baseados em RNN. Mecanismos de atenção iniciais semelhantes à autoatenção moderna foram propostos usando RNNs, mas a autoatenção altamente paralelizável foi introduzida em 2017 e usada no transformer. Outras variantes incluem atenção posicional e atenção posicional fatorada. Para redes neurais convolucionais, a atenção pode operar em dimensões espaciais, dimensões de canal ou combinações. Essas variantes recombinam entradas do lado do codificador para redistribuir efeitos a cada saída alvo, frequentemente usando uma matriz de estilo produto escalar para re-ponderação.
Otimizações
O tamanho da matriz de atenção cresce quadraticamente com o número de tokens, exigindo memória de GPU significativa para sequências longas. A atenção flash (Flash Attention), introduzida em 2022, reduz as necessidades de memória e aumenta a eficiência sem sacrificar a precisão, particionando o cálculo de atenção em blocos que cabem na memória on-chip mais rápida da GPU, reduzindo o armazenamento intermediário. O FlexAttention, desenvolvido pela Meta, permite que usuários modifiquem pontuações de atenção antes da softmax e escolham dinamicamente o algoritmo de atenção ideal.
Aplicações
A atenção é amplamente usada em processamento de linguagem natural, visão computacional e reconhecimento de fala. Em PNL, melhora a compreensão de contexto em tarefas como resposta a perguntas e sumarização. Em visão, a atenção visual ajuda modelos a focar em regiões relevantes da imagem, aprimorando detecção de objetos e legenda de imagens. A autoatenção é um componente central de grandes modelos de linguagem, que a usam para processar e gerar texto.
Mapas de Atenção como Mapas de Saliency em Transformadores Visuais
Do transformador visual original (ViT), mapas de atenção como mapas de calor, chamados de mapas de saliency ou mapas de atenção, são uma forma rotineira de inspecionar o processo de tomada de decisão de modelos ViT. É possível calcular mapas de atenção para qualquer cabeça de atenção em qualquer camada, com camadas mais profundas mostrando visualizações semanticamente mais significativas. O rollout de atenção é um algoritmo recursivo que combina mapas de atenção de todas as camadas calculando o produto escalar de mapas de atenção sucessivos. Como os transformadores visuais são geralmente treinados de maneira auto-supervisionada, os mapas de atenção não são discriminativos de classe por padrão. Quando uma cabeça de classificação é anexada, métodos interpretáveis sensíveis à classe, como mapas de atenção e gradientes em relação ao token de classe, combinam mapas de atenção e gradientes para criar mapas específicos de classe. Alguns métodos de interpretabilidade sensíveis à classe, originalmente desenvolvidos para outros arquiteturas, podem ser adaptados para ViTs.