Self-Attention

Tópicos em Ciência de Dados

Pontifícia Universidade Católica de Campinas

Prof. Dr. Denis M. L. Martins

Diferentes Mecanismos de Atenção

Problema com longas sequências de texto

center

RNN perdem referência em longas sequências

center

RNNs/GRUs apresentam dificuldade de capturar dependências longas.
Custo computacional linear no comprimento da sequência.

ver tbm: https://learnopencv.com/attention-mechanism-in-transformer-neural-networks/

Resolvendo o problema através de atenção

center

Breve Histórico

"Intuitively, this implements a mechanism of attention in the decoder. The decoder decides parts of the source sentence to pay attention to. (...) information can be spread throughout the sequence (...)."

  • 2014: Primeiro mecanismo de atenção.
    • Contexto de Neural Translation.
    • Bengio é um dos autores.
  • 2017: Transformers, self-attention e multi-head attention.
    • Dot product attention (próximos slides)
    • Proposta similar de 1991 por Schmidhuber: Fast Weight Programmer (hoje conhecida como Linear Transformers).
  • 2018: Primeiro GPT é proposto.


Primeiro mecanismo de atenção. Fonte: https://arxiv.org/abs/1409.0473.

Self-Attention: Visão Geral

center

Visão geral do mecanismo de atenção em Transformers. Fonte: Jaiyam Sharma @LearnOpenCV.

Self-Attention: Query, Key, Value

center

Primeiro passo no mecanismo de atenção. Fonte: Jaiyam Sharma @LearnOpenCV.

  • Projeções lineares onde os embeddings dos tokens são multiplicados por matrizes de parâmetros , e da rede neural (aprendidos durante o treinamento).
  • : representam o token de origem.
  • : representam os tokens de destino.
  • : representam a semântica e contexto dos tokens.

Detalhes do funcionamento na lousa

Self-Attention

onde:

  • é a matriz de embeddings da sequência (n = comprimento).
  • são as matrizes de projeção treináveis.

  • é a dimensionalidade dos vetores query e key (usado para estabilidade numérica).
  • Cada palavra cria uma query e recebe keys e values das demais palavras.
  • Dot product mede a similaridade entre queries e keys.
  • esses números em pesos (probabilidades) pesos de atenção.
  • Os values são então somados ponderadamente, produzindo uma representação que leva em conta todas as palavras relevantes.

Mecanismo self-attention. Fonte:Jeremy Jordan.

Self-Attention

Elemento Intuição Como aparece na prática?
Queries (Q) Pergunta: Cada palavra da frase está “fazendo uma pergunta” sobre quais outras palavras ela quer saber. Vetor que representa a própria palavra, gerado por multiplicação do embedding pela matriz .
Keys (K) Chaves de um armário: As demais palavras têm “chaves” que podem ser comparadas com as perguntas. Se uma chave for semelhante à pergunta, ela “abre” a porta para a informação relevante. Vetor gerado pela mesma palavra, mas usando .
Values (V) Conteúdo guardado nas portas: Quando a porta abre, o que vem dentro é a informação que a palavra quer transmitir à pergunta. Vetor resultante da multiplicação do embedding por .

Analogia com o YouTube

  • Query (Q): o vídeo que você está assistindo agora funciona como a "pergunta". Ele pede informações sobre quais outros vídeos podem ser relevantes.
  • Key (K): Cada vídeo em sua lista de recomendações tem um “título + descrição” que atua como uma chave; o algoritmo compara essa chave com a pergunta para ver quão semelhante é.
  • Value (V): Quando a chave corresponde, o valor é o próprio vídeo (ou seu link). Ele contém tudo o que você recebe: título, thumbnail, descrição, etc.

Resumo e Próximos Passos

  • Objetivo: Permitir que cada token acesse e combine informação de todas as posições da sequência simultaneamente.
  • Queries (Q): Vetores “perguntas” gerados a partir do próprio token.
  • Keys (K): Vetores “chaves” que representam o conteúdo de cada token na mesma sequência.
  • Values (V): Vetores contendo a informação real que será combinada.
  • Próximos Passos: Compreender Multi‑Head Attention Repete o mecanismo em (h) sub‑espaços diferentes e concatena os resultados, permitindo capturar múltiplas relações simultaneamente.


Multi-Head Attention. Fonte: Jeremy Jordan.

# Self-Attention ![center h:400](https://jalammar.github.io/images/t/transformer_self_attention_vectors.png) Fonte: https://jalammar.github.io/illustrated-transformer/ The first step in calculating self-attention is to create three vectors from each of the encoder’s input vectors (in this case, the embedding of each word). So for each word, we create a Query vector, a Key vector, and a Value vector. These vectors are created by multiplying the embedding by three matrices that we trained during the training process. Notice that these new vectors are smaller in dimension than the embedding vector. Their dimensionality is 64, while the embedding and encoder input/output vectors have dimensionality of 512. They don’t HAVE to be smaller, this is an architecture choice to make the computation of multiheaded attention (mostly) constant. What are the “query”, “key”, and “value” vectors? They’re abstractions that are useful for calculating and thinking about attention. Once you proceed with reading how attention is calculated below, you’ll know pretty much all you need to know about the role each of these vectors plays. The second step in calculating self-attention is to calculate a score. Say we’re calculating the self-attention for the first word in this example, “Thinking”. We need to score each word of the input sentence against this word. The score determines how much focus to place on other parts of the input sentence as we encode a word at a certain position. The score is calculated by taking the dot product of the query vector with the key vector of the respective word we’re scoring. So if we’re processing the self-attention for the word in position #1, the first score would be the dot product of q1 and k1. The second score would be the dot product of q1 and k2. --- # Multi-head Attention