Entendendo o mecanismo de Self attention

 

O mecanismo de self attention é dividido em 4 partes:

 

Passo 1: Cálculo do produto escalar entre a matriz de consulta (Q) e a matriz de chaves (Kt)

Nesse passo, calculamos o produto escalar entre a matriz de consulta (Q) e a matriz de chaves (Kt). Isso nos dá uma medida de similaridade entre a consulta e as chaves. A similaridade é calculada para cada palavra da sentença, comparando a consulta com todas as chaves.

 

Passo 2: Divisão da matriz Q.Kt pelo valor da raiz quadrada da dimensão do vetor de chaves (√d)

Dividimos a matriz Q.Kt pelo valor da raiz quadrada da dimensão do vetor de chaves (√d). Isso é feito para obter gradientes estáveis no cálculo.

 

Passo 3: Normalização dos valores utilizando a função softmax

Aplicamos a função softmax para normalizar os valores da matriz resultante. A função softmax transforma os valores em uma distribuição de probabilidades, onde cada valor é mapeado para um valor entre 0 e 1, e a soma de todos os valores é igual a 1. Isso nos dá uma medida de atenção para cada palavra da sentença, indicando a relevância em relação a outras palavras.

 

Passo 4: Cálculo da matriz de atenção (Z) multiplicando a matriz de scores pelo vetor de valores (V)

Multiplicamos a matriz de scores, obtida no passo anterior, pelo vetor de valores (V). Isso nos dá a matriz de atenção (Z), que contém os valores de atenção para cada palavra da sentença.

 

Esse mecanismo é conhecido como "scaled dot product attention" (Eu não vou ousar em traduzir isto não)  , pois envolve o cálculo do produto escalar e a escala dos valores.

 

Esses passos do mecanismo de autoatenção nos permitem entender como cada palavra da sentença está relacionada com as outras palavras, ajudando na representação e compreensão das relações entre as palavras.

 

Vou dar um exemplo dos 4 passos do mecanismo de autoatenção usando matemática e explicações claras:

 

Suponha que temos uma sentença com três palavras: "I am good". Vamos representar cada palavra como um vetor de valores. Para simplificar, vamos considerar vetores de dimensão 2.

 

Passo 1: Cálculo do produto escalar entre a matriz de consulta (Q) e a matriz de chaves (Kt)

 

Vamos supor que a matriz de consulta (Q) seja:

 

Q = [[0.5, 0.3],

[0.2, 0.7],

[0.8, 0.4]]

 

E a matriz de chaves (Kt) seja:

 

Kt = [[0.9, 0.6],

[0.3, 0.2],

[0.7, 0.5]]

 

Para calcular o produto escalar entre a consulta Q e as chaves Kt, fazemos o seguinte:

 

Q.Kt = [[0.50.9 + 0.30.3, 0.50.6 + 0.30.2],

[0.20.9 + 0.70.3, 0.20.6 + 0.70.2],

[0.80.9 + 0.40.3, 0.80.6 + 0.40.2]]

 

Simplificando os cálculos, obtemos:

 

Q.Kt = [[0.78, 0.39],

[0.43, 0.14],

[0.87, 0.46]]

 

Nesse resultado, cada valor representa a similaridade entre a palavra correspondente na matriz de consulta (Q) e as palavras na matriz de chaves (Kt).

 

Passo 2: Divisão da matriz Q.Kt pelo valor da raiz quadrada da dimensão do vetor de chaves (√d)

 

Supondo que a dimensão do vetor de chaves (d) seja 2, a raiz quadrada de d (√d) será igual a √2.

 

Então, dividimos a matriz Q.Kt por √2:

 

Q.Kt / √2 = [[0.78/√2, 0.39/√2],

[0.43/√2, 0.14/√2],

[0.87/√2, 0.46/√2]]

 

Essa divisão é feita para estabilizar os gradientes no cálculo.

 

Passo 3: Normalização dos valores utilizando a função softmax

 

Aplicamos a função softmax para normalizar os valores da matriz resultante. A função softmax é aplicada em cada linha da matriz. A função softmax transforma os valores em uma distribuição de probabilidades, onde cada valor é mapeado para um valor entre 0 e 1, e a soma de todos os valores na linha é igual a 1.

 

Aplicando a função softmax em cada linha, obtemos:

 

softmax(Q.Kt / √2) = [[softmax(0.78/√2), softmax(0.39/√2)],

[softmax(0.43/√2), softmax(0.14/√2)],

[softmax(0.87/√2), softmax(0.46/√2)]]

 

Supondo que as funções softmax sejam aplicadas corretamente, obtemos uma matriz normalizada de scores.

 

Passo 4: Cálculo da matriz de atenção (Z) multiplicando a matriz de scores pelo vetor de valores (V)

 

Vamos supor que temos uma matriz de valores (V):

 

V = [[0.1, 0.2],

[0.3, 0.4],

[0.5, 0.6]]

 

Multiplicando a matriz de scores pelo vetor de valores, obtemos a matriz de atenção (Z):

 

Z = softmax(Q.Kt / √2) * V

 

As multiplicações são feitas elemento por elemento:

 

Z = [[softmax(0.78/√2)*0.1 + softmax(0.39/√2)*0.3, softmax(0.78/√2)*0.2 + softmax(0.39/√2)*0.4],

[softmax(0.43/√2)*0.1 + softmax(0.14/√2)*0.3, softmax(0.43/√2)*0.2 + softmax(0.14/√2)*0.4],

[softmax(0.87/√2)*0.1 + softmax(0.46/√2)*0.3, softmax(0.87/√2)*0.2 + softmax(0.46/√2)*0.4]]

 

Simplificando os cálculos, obtemos a matriz de atenção final (Z).

 

Esse exemplo ilustra como o mecanismo de autoatenção calcula a similaridade entre as palavras de uma sentença e produz uma matriz de atenção que indica a relevância de cada palavra em relação às outras palavras.

 

Vamos analisar detalhadamente o resultado da explicação anterior:

 

Passo 1: Cálculo do produto escalar entre a matriz de consulta (Q) e a matriz de chaves (Kt)

 

Neste passo, calculamos o produto escalar entre cada vetor de consulta (representando cada palavra da sentença) e cada vetor de chaves (também representando cada palavra da sentença). O resultado é uma matriz de similaridades, onde cada valor representa a similaridade entre uma palavra de consulta e uma palavra-chave.

 

No exemplo dado, obtemos a matriz Q.Kt:

 

Q.Kt = [[0.78, 0.39],

[0.43, 0.14],

[0.87, 0.46]]

 

Essa matriz mostra as similaridades entre as palavras "I", "am" e "good" em relação a todas as palavras da sentença.

 

Passo 2: Divisão da matriz Q.Kt pelo valor da raiz quadrada da dimensão do vetor de chaves (√d)

 

Neste passo, dividimos cada valor da matriz Q.Kt pelo valor da raiz quadrada da dimensão do vetor de chaves (√d). Essa divisão é realizada para estabilizar os gradientes e controlar a escala dos valores.

 

No exemplo dado, considerando que a dimensão do vetor de chaves é 2, obtemos a matriz Q.Kt/√2:

 

Q.Kt/√2 = [[0.78/√2, 0.39/√2],

[0.43/√2, 0.14/√2],

[0.87/√2, 0.46/√2]]

 

Passo 3: Normalização dos valores utilizando a função softmax

 

Neste passo, aplicamos a função softmax em cada linha da matriz Q.Kt/√2. A função softmax transforma os valores em uma distribuição de probabilidades, onde cada valor é mapeado para um valor entre 0 e 1, e a soma de todos os valores na linha é igual a 1.

 

No exemplo dado, aplicando a função softmax em cada linha, obtemos a matriz de scores normalizada:

 

softmax(Q.Kt/√2) = [[valor1, valor2],

[valor3, valor4],

[valor5, valor6]]

 

Os valores exatos dos softmax não foram especificados no exemplo, mas cada valor representa a relevância de uma palavra em relação a todas as palavras da sentença.

 

Passo 4: Cálculo da matriz de atenção (Z) multiplicando a matriz de scores pelo vetor de valores (V)

 

Neste último passo, multiplicamos a matriz de scores normalizada pelo vetor de valores (representando as informações associadas a cada palavra da sentença). Essa multiplicação é feita elemento por elemento, resultando na matriz de atenção (Z).

 

No exemplo dado, considerando que temos o vetor de valores V:

 

V = [[0.1, 0.2],

[0.3, 0.4],

[0.5, 0.6]]

 

Multiplicando a matriz de scores normalizada pelo vetor de valores, obtemos a matriz de atenção Z:

 

Z = [[valor10.1 + valor20.3, valor10.2 + valor20.4],

[valor30.1 + valor40.3, valor30.2 + valor40.4],

[valor50.1 + valor60.3, valor50.2 + valor60.4]]

 

A matriz de atenção final (Z) representa a relevância de cada palavra em relação a todas as palavras da sentença, considerando as informações associadas a cada palavra.

 

Esses passos ilustram o mecanismo de autoatenção, também conhecido como atenção de produto escalar escalonado, que permite entender como as palavras em uma sentença estão relacionadas umas com as outras.