J'ai également été intrigué par les clés, les requêtes et les valeurs des mécanismes d'attention pendant un certain temps. Après avoir cherché sur le Web et assimilé les informations pertinentes, j'ai une idée claire du fonctionnement des clés, des requêtes et des valeurs et pourquoi ils fonctionneraient!
Voyons comment ils fonctionnent, puis pourquoi ils fonctionnent.
Dans un modèle seq2seq, nous encodons la séquence d'entrée dans un vecteur de contexte, puis nous transmettons ce vecteur de contexte au décodeur pour obtenir le bon résultat attendu.
Cependant, si la séquence d'entrée est longue, se reposer sur un seul vecteur de contexte devient moins efficace. Nous avons besoin de toutes les informations des états cachés dans la séquence d'entrée (encodeur) pour un meilleur décodage (le mécanisme d'attention).
Une façon d'utiliser les états masqués d'entrée est illustrée ci-dessous:
Source de l'image: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3
En d'autres termes, dans ce mécanisme d'attention, le vecteur de contexte est calculé comme une somme pondérée des valeurs, où le poids attribué à chaque valeur est calculé par une fonction de compatibilité de la requête avec la clé correspondante (c'est un peu phrase modifiée de [Attention Is All You Need] https://arxiv.org/pdf/1706.03762.pdf).
Ici, la requête provient de l'état caché du décodeur, la clé et la valeur proviennent des états cachés de l'encodeur (la clé et la valeur sont les mêmes sur cette figure). Le score est la compatibilité entre la requête et la clé, qui peut être un produit scalaire entre la requête et la clé (ou une autre forme de compatibilité). Les scores passent ensuite par la fonction softmax pour produire un ensemble de poids dont la somme est égale à 1. Chaque poids multiplie ses valeurs correspondantes pour donner le vecteur de contexte qui utilise tous les états cachés d'entrée.
Notez que si nous définissons manuellement le poids de la dernière entrée sur 1 et toutes ses priorités sur 0, nous réduisons le mécanisme d'attention au mécanisme de vecteur de contexte seq2seq d'origine. Autrement dit, il n'y a aucune attention aux états précédents de l'encodeur d'entrée.
Maintenant, considérons le mécanisme d'auto-attention comme indiqué dans la figure ci-dessous:
Source de l'image: https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a
La différence avec la figure ci-dessus est que les requêtes, clés et valeurs sont des transformations des vecteurs d'état d'entrée correspondants. Les autres restent les mêmes.
Notez que nous pourrions toujours utiliser les vecteurs d'état de l'encodeur d'origine comme requêtes, clés et valeurs. Alors, pourquoi avons-nous besoin de la transformation? La transformation est simplement une multiplication matricielle comme celle-ci:
Requête = I x W (Q)
Clé = I x W (K)
Valeur = I x W (V)
où I est le vecteur d'état d'entrée (encodeur), et W (Q), W (K) et W (V) sont les matrices correspondantes pour transformer le vecteur I en vecteurs Query, Key, Value.
Quels sont les avantages de cette multiplication matricielle (transformation vectorielle)?
Rappelez-vous l'effet de la décomposition en valeurs singulières (SVD) comme celui de la figure suivante:
Source de l'image: https://youtu.be/K38wVcdNuFc?t=10
En multipliant un vecteur d'entrée par une matrice V (à partir du SVD), on obtient une meilleure représentation pour calculer la compatibilité entre deux vecteurs, si ces deux vecteurs sont similaires dans l'espace thématique comme le montre l'exemple de la figure.
Et ces matrices de transformation peuvent être apprises dans un réseau neuronal!
En bref, en multipliant le vecteur d'entrée par une matrice, on obtient:
1) meilleure représentation (latente) du vecteur d'entrée;
2) conversion du vecteur d'entrée en un espace avec une dimension souhaitée, par exemple de la dimension 5 à 2, ou de n à m, etc. (ce qui est pratiquement utile);
où la matrice peut être apprise (sans réglage manuel).
J'espère que cela vous aidera à comprendre les requêtes, les clés et les valeurs du mécanisme (d'auto) attention des réseaux de neurones profonds.