Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Como a Autoatenção é Calculada | Compreendendo os Fundamentos dos Transformers
Transformers para Processamento de Linguagem Natural

bookComo a Autoatenção é Calculada

Deslize para mostrar o menu

Para compreender como a autoatenção é calculada em transformers, é necessário seguir uma sequência precisa de operações matemáticas. O mecanismo de autoatenção permite que cada palavra em uma frase foque em outras palavras ao produzir uma representação de saída. Isso é alcançado ao calcular uma soma ponderada de todos os vetores de entrada, onde os pesos refletem a importância de cada palavra para a palavra atual em processamento.

Suponha que você tenha uma frase curta representada como uma matriz, onde cada linha é um embedding de palavra. Primeiro, esses embeddings são projetados em queries, keys e values utilizando matrizes de pesos aprendidas. O núcleo da autoatenção é então o cálculo dos scores de atenção e a agregação dos vetores de value com base nesses scores.

Note
Definição

Queries, keys e values são diferentes representações da entrada, cada uma utilizada para um papel específico no cálculo da atenção.

Cálculo de Self-Attention

A autoatenção pode ser decomposta em uma série de etapas matemáticas claras para cada palavra na sequência:

Projeção dos inputs em queries, keys e values: projetar a matriz de entrada utilizando matrizes de pesos aprendidas para obter queries, keys e values.

123456789101112131415161718192021222324252627282930313233
import numpy as np # Example input: 3 words, embedding size 4 X = np.array([ [1.0, 0.0, 1.0, 0.0], # word 1 [0.0, 2.0, 0.0, 2.0], # word 2 [1.0, 1.0, 1.0, 1.0] # word 3 ]) # Weight matrices for queries, keys, values (embedding size 4 -> 4) W_q = np.array([ [0.1, 0.2, 0.0, 0.0], [0.0, 0.1, 0.3, 0.0], [0.1, 0.0, 0.0, 0.2], [0.0, 0.0, 0.2, 0.3] ]) W_k = np.array([ [0.2, 0.0, 0.1, 0.0], [0.0, 0.1, 0.0, 0.3], [0.1, 0.0, 0.2, 0.0], [0.0, 0.2, 0.0, 0.1] ]) W_v = np.array([ [0.0, 0.1, 0.0, 0.2], [0.2, 0.0, 0.2, 0.0], [0.0, 0.3, 0.1, 0.0], [0.1, 0.0, 0.0, 0.3] ]) # Compute queries, keys, values Q = X @ W_q K = X @ W_k V = X @ W_v
copy

Cálculo dos scores de atenção:

  • Calcular a similaridade entre cada query e todas as keys;
  • Esses scores indicam o quanto cada palavra deve focar nas outras.
1
scores = Q @ K.T
copy

Escalonar os scores: dividir os scores de atenção pela raiz quadrada da dimensão das chaves. Esse escalonamento ajuda a estabilizar os gradientes durante o treinamento.

12
d_k = Q.shape[1] scaled_scores = scores / np.sqrt(d_k)
copy

Aplicar a função softmax: converter os scores escalados em pesos de atenção usando a função softmax. Isso garante que os pesos sejam positivos e somem 1 para cada palavra.

123456
# Softmax to get attention weights def softmax(x): e_x = np.exp(x - np.max(x, axis=-1, keepdims=True)) return e_x / np.sum(e_x, axis=-1, keepdims=True) attention_weights = softmax(scaled_scores)
copy

Calcular a soma ponderada dos valores: usar os pesos de atenção para calcular uma soma ponderada dos vetores de valor. Isso produz a saída final de self-attention para cada palavra.

12345
# Weighted sum of values output = attention_weights @ V print("Attention weights:\n", attention_weights) print("Self-attention output:\n", output)
copy

Esses passos capturam os cálculos essenciais por trás do mecanismo de self-attention em modelos transformer.

1. Qual é a ordem correta das operações em self-attention para uma palavra de entrada?

2. Por que escalamos os scores de atenção pela raiz quadrada da dimensão das chaves?

3. Quais vetores são usados para calcular os scores de atenção

question mark

Qual é a ordem correta das operações em self-attention para uma palavra de entrada?

Selecione a resposta correta

question mark

Por que escalamos os scores de atenção pela raiz quadrada da dimensão das chaves?

Selecione a resposta correta

question mark

Quais vetores são usados para calcular os scores de atenção

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 1. Capítulo 5
some-alt