Dans la couche d’attention, les vecteurs Q, K et V sont utilisés pour calculer un score d’alignement entre chaque token à chaque position d’une séquence. Ces scores d’alignement sont ensuite normalisés en poids d’attention à l’aide d’une fonction softmax.
Pour chaque token x d’une séquence, les scores d’alignement sont calculés en multipliant le produit scalaire du vecteur de requête Qx de ce token par le vecteur de clé K de chacun des autres tokens. Si une relation significative entre deux tokens se traduit par des similitudes entre leurs vecteurs respectifs, la multiplication de ces vecteurs donnera une valeur élevée. Si les deux vecteurs ne sont pas alignés, leur multiplication donnera une valeur faible ou négative. La plupart des modèles de transformeur utilisent une variante appelée attention par produit scalaire dimensionné, dans laquelle QK est dimensionné (c’est-à-dire multiplié) par afin d’améliorer la stabilité de l’entraînement.
Ces scores d’alignement des clés de requête sont ensuite saisis dans une fonction softmaxqui normalise toutes les entrées à une valeur comprise entre 0 et 1, de manière à ce que leur somme soit égale à 1. Les résultats de la fonction softmax sont les poids d’attention, chacun représentant la part (sur 1) de l’attention du token x à accorder à chacun des autres tokens. Si le poids d’attention d’un token est proche de 0, il sera ignoré. Un poids d’attention de 1 signifie qu’un token reçoit toute l’attention de x et que tous les autres sont ignorés.
Enfin, le vecteur de valeur de chaque token est multiplié par son poids d’attention. Une moyenne des contributions pondérées par l’attention de chaque token précédent est calculée et ajoutée au plongement vectoriel d’origine du token x. Avec cela, le plongement du token x est maintenant mis à jour pour refléter le contexte fourni par les autres tokens de la séquence pertinents.
Le plongement vectoriel mis à jour est ensuite envoyé à une autre couche linéaire, avec sa propre matrice de poids WZ, où le vecteur mis à jour en contexte est renormalisé avec un nombre cohérent de dimensions, puis envoyé à la couche d’attention suivante. Chaque couche d’attention progressive capture une plus grande nuance contextuelle.