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.
0 Comments
Postar um comentário