Question:
Que sont exactement les clés, les requêtes et les valeurs dans les mécanismes d'attention?
Seankala
2019-08-13 14:00:55 UTC
view on stackexchange narkive permalink

Comment comprendre les clés, les requêtes et les valeurs souvent mentionnées dans les mécanismes d'attention?

J'ai essayé d'effectuer des recherches en ligne, mais toutes les ressources que je trouve ne parlent d'eux que comme si le lecteur savait déjà ce qu'elles sont.

À en juger par l'article rédigé par Bahdanau ( Neural Machine Translation en apprenant conjointement à aligner et à traduire ), il semble que les valeurs soient le vecteur d'annotation $ h $ mais ce que l'on entend par "requête" et "clé" n'est pas clair.

Le document que j'ai mentionné indique que l'attention est calculée par

$$ c_i = \ sum ^ {T_x} _ {j = 1} \ alpha_ {ij} h_j $$

avec

$$ \ begin {align} \ alpha_ {ij} & = \ frac {e ^ {e_ {ij}}} {\ sum ^ {T_x} _ {k = 1} e ^ {ik}} \\\\ e_ {ij} & = a (s_ {i - 1}, h_j) \ end {align} $$

Où les gens obtiennent-ils la clé, la requête et la valeur de ces équations?

Merci.

Si [c'est le papier] (https://arxiv.org/abs/1409.0473) dont vous parlez, il ne mentionne aucune "clé", "requête" ou "valeur" pour attirer l'attention, et il sembleExpliquez les symboles des équations que vous citez, donc je ne semble pas comprendre exactement sur quoi porte votre question?
J'étais tout confus par Q, K, V dans l'attention, jusqu'à ce que je lis cet article: https://medium.com/@b.terryjack/deep-learning-the-transformer-9ae5e9c5a190.Il couvre toutes les questions de l'histoire à la mise en œuvre récente.J'espère que cela vous sera également utile.
J'examine également cela.Pour autant que je sache, Query est également représenté par des "s" à certains endroits.Il est donc sorti de l'itération précédente du décodeur.Et la clé et la valeur qui sont également représentées par "h" à certains endroits, est le vecteur de mot de l'encodeur.Pour référence, vous pouvez consulter https://www.youtube.com/watch?v=OyFJWRnt_AY et https://www.youtube.com/watch?v=yInilk6x-OY&list=PLyqSpQzTE6M9gCgajvQbc68Hk_JKGBAYT&index=115 Encore une fois, j'essaie toujours de comprendreplus.Veuillez faire vos recherches supplémentaires et faites-moi savoir si vous trouvez quelque chose.
La meilleure explication pour moi: https://youtu.be/XXtpJxZBa2c?t=4337
@QtRoS Je ne pense pas qu'il y ait été expliqué quelles étaient les clés, seulement quelles étaient les valeurs et les requêtes.
@QtRoS J'ai également regardé cette vidéo au moment où j'ai posté cette question.Cela ne m'a franchement pas beaucoup aidé.Je m'attendais à une définition intuitive derrière la motivation pour utiliser la terminologie elle-même, mais cela a été traité comme un «donné».
@Seankala il y a encore une vidéo, malheureusement elle est en russe uniquement, mais c'est la meilleure explication que j'ai vue jusqu'à présent.Les illustrations qu'il contient peuvent vous être utiles.Faites-moi savoir si vous voulez l'essayer.
Cinq réponses:
dontloo
2019-08-29 13:49:36 UTC
view on stackexchange narkive permalink

Je viens de votre autre question Travail original d'auto-attention? La formulation clé / valeur / requête de l'attention est tirée du document L'attention est tout ce dont vous avez besoin.

Comment comprendre les requêtes, les clés et les valeurs

Les concepts clé / valeur / requête proviennent de systèmes de récupération. Par exemple, lorsque vous tapez une requête pour rechercher une vidéo sur Youtube, le moteur de recherche mappera votre query avec un ensemble d'keys (titre de la vidéo, description, etc.) associé aux vidéos candidates dans la base de données, puis vous présentera les meilleures vidéos correspondantes vidéos (values).

L'opération d'attention peut également être considérée comme un processus de récupération, de sorte que les concepts clé / valeur / requête s'appliquent également ici. (BTW l'exemple ci-dessus est juste un système de jouet pour l'illustration, dans les moteurs de recherche de pratique et les systèmes de recommandation sont beaucoup plus complexes.)

Comme mentionné dans l'article que vous avez référencé ( Neural Machine Translation en apprenant conjointement à aligner et à traduire), l'attention par définition n'est qu'une moyenne pondérée de valeurs,

$$ c = \ sum_ {j} \ alpha_jh_j $$ $ \ sum \ alpha_j = 1 $ .

Si nous limitons $ \ alpha $ à un vecteur one-hot, cette opération devient la même que la récupération à partir d'un ensemble d'éléments $ h $ avec index $ \ alpha $ . Une fois la restriction supprimée, l'opération d'attention peut être considérée comme effectuant une "récupération proportionnelle" selon le vecteur de probabilité $ \ alpha $ .

Il devrait être clair que $ h $ dans ce contexte est value. La différence entre les deux articles réside dans la façon dont le vecteur de probabilité $ \ alpha $ est calculé. Le premier article (Bahdanau et al.2015) calcule le score via un réseau neuronal $$ e_ {ij} = a (s_i, h_j), \ qquad a_ {i, j} = \ frac {\ exp (e_ {ij})} {\ sum_k \ exp (e_ {ik})} $$ $ h_j $ provient de la séquence du codeur et $ s_i $ provient de la séquence du décodeur. Un problème de cette approche est, disons que la séquence du codeur est de longueur $ m $ et que la séquence de décodage est de longueur $ n $ , nous devons passer par le réseau $ m * n $ fois pour obtenir tous les scores d'attention $ e_ {ij} $ .

Un modèle plus efficace consisterait à projeter d'abord $ s $ et $ h $ sur un espace, puis choisissez une mesure de similarité (par exemple, produit scalaire) comme score d'attention, comme $$ e_ {ij} = f (s_i) g (h_j) ^ T $$ donc nous n'avons qu'à calculer $ g (h_j) $ $ m $ fois et $ f (s_i) $ $ n $ fois pour obtenir les vecteurs de projection et $ e_ {ij} $ peut être calculé efficacement par multiplication matricielle.

C'est essentiellement l'approche proposée par le deuxième article (Vaswani et al.2017), où les deux vecteurs de projection sont appelés query (pour décodeur) et key (pour encodeur), qui est bien aligné avec les concepts des systèmes de récupération .

Comment les requêtes, clés et valeurs sont-elles obtenues?

L'attention multi-têtes proposée à elle seule ne dit pas grand-chose sur la façon dont les requêtes, les clés et les valeurs sont obtenues tant que les exigences de dimension sont satisfaites.Ils peuvent provenir de différentes sources selon le scénario de l'application.

enter image description here

Pour la formation non supervisée sur un modèle de langage comme GPT, $ Q, K, V $ proviennent généralement de la même source, donc une telle opération estaussi appelé auto-attention.

Pour la tâche de traduction automatique du deuxième article, il applique d'abord l'auto-attention séparément aux séquences source et cible, puis en plus de cela, il applique une autre attention où $ Q $ span> provient de la séquence cible et $ K, V $ provient de la séquence source.

Pour les systèmes de recommandation, $ Q $ peut provenir des éléments cibles, $ K, V $ peut provenir du profil et de l'historique de l'utilisateur.

Bonjour.Merci d'avoir répondu.Malheureusement, ma question est de savoir comment ces valeurs elles-mêmes sont obtenues (c'est-à-dire les Q, K et V).J'ai lu d'autres articles de blog (par exemple, The Illustrated Transformer) et je ne sais toujours pas comment les valeurs sont obtenues à partir du contexte de l'article.Par exemple, Q est-il simplement le produit matriciel de l'entrée X et de quelques autres poids?Si oui, comment ces poids sont-ils obtenus?
De plus, cette question elle-même ne se rapporte pas réellement au calcul de Q, K et V. Au contraire, je ne comprends pas pourquoi les auteurs ont utilisé une terminologie différente de celle du document d'attention original.
@Seankala salut j'ai fait quelques mises à jour pour vos questions, j'espère que cela vous aidera
Merci beaucoup pour cette explication!J'ai encore du mal à interpréter la notation e_ij = a (s_i, h_j).Ainsi, le réseau neuronal est une fonction de h_j et s_i, qui sont des séquences d'entrée provenant respectivement des séquences de décodeur et de codeur.Mais à quoi ressemble le réseau neuronal?Par exemple.Quelles sont les variables cibles et quel est le format de l'entrée?
@Emil salut, c'est un sous-réseau de l'ensemble, il n'y a pas de cible spécifique pour cela en formation, il est généralement formé conjointement avec l'ensemble du réseau pour la tâche donnée, dans ce cas la traduction automatique, plus de détails dans le A.1.2MODÈLE D'ALIGNEMENT de l'article.
Très utile - Qu'est-ce que $ a $ dans $ e_ {ij} = a (s_i, h_j) $?
@Josh c'est un réseau de neurones à feedforward selon l'article https://arxiv.org/pdf/1409.0473.pdf
Emil
2020-01-17 21:22:05 UTC
view on stackexchange narkive permalink

Voir L'attention est tout ce dont vous avez besoin - masterclass, à partir de 15h46, Lukasz Kaiser explique ce que sont q, K et V .

Donc en gros:

  • q = le vecteur représentant un mot
  • K et V = votre mémoire, donc tous les mots qui ont été générés auparavant.Notez que K et V peuvent être identiques (mais ce n'est pas obligatoire).

Donc, ce que vous faites avec attention, c'est que vous prenez votre requête actuelle (mot dans la plupart des cas) et cherchez dans votre mémoire des clés similaires.Pour arriver à une distribution des mots pertinents, la fonction softmax est alors utilisée.

Sean Kernitsman
2020-05-16 01:00:20 UTC
view on stackexchange narkive permalink

Tensorflow et Keras viennent de développer leur documentation pour les couches Attention et AdditiveAttention. Voici un aperçu de la documentation:

La signification de la requête, de la valeur et de la clé dépend de l'application. Dans le cas de la similitude de texte, par exemple, la requête correspond aux incorporations de séquence du premier morceau de texte et la valeur correspond aux incorporations de séquence du deuxième morceau de texte. key est généralement le même tenseur que value.

Mais pour ma propre explication, différentes couches d'attention essaient d'accomplir la même tâche en mappant une fonction $ f: \ Bbb {R} ^ {T \ times D} \ mapsto \ Bbb {R} ^ {T \ times D} $ où T est la longueur de la séquence cachée et D est la taille du vecteur de caractéristiques. Pour le cas de l'auto-attention globale qui est l'application la plus courante, vous avez d'abord besoin de données de séquence sous la forme de $ B \ times T \ times D $ , où $ B $ est la taille du lot. A chaque propagation avant (en particulier après un encodeur tel qu'une couche Bi-LSTM, GRU ou LSTM avec return_state et return_sequences = True pour TF), il tente de mapper l'état caché sélectionné (Query) au plus autres états cachés similaires (clés). Après l'avoir répété pour chaque état caché, et softmax les résultats, multipliez à nouveau avec les clés (qui sont aussi les valeurs) pour obtenir le vecteur qui indique l'attention à accorder à chaque état caché. J'espère que cela aidera n'importe qui car il m'a fallu des jours pour le comprendre.

The flow of any attention layer

Sam Tseng
2020-04-28 23:05:49 UTC
view on stackexchange narkive permalink

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: Image source: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3 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:

enter image description here 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:

Application of SVD

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.

Le code Python pour entraîner la matrice ressemble à ceci: » x_Train = np.array ([ [1, 1, 1, 0, 0], [3, 3, 3, 0, 0], ... [0, 1, 0, 2, 2]]) y_Train = np.array ([[1], [1], ..., [-1]]) x_Test = np.array ([ [5, 0, 0, 0, 0], [0, 4, 5, 0, 0]]) y_Test = np.array ([[1], [1]]) model = séquentiel () model.add (Dense (unités = 2, input_dim = 5, activation = 'tanh')) model.add (Dense (unités = 1, activation = 'tanh')) model.compile (loss = 'mean_squared_error', optimizer = 'sgd', metrics = ['mse']) model.fit (x = x_Train, y = y_Train, époques = 100) predictions = model.predict (x_Test) `
Tim
2019-09-02 15:03:10 UTC
view on stackexchange narkive permalink

Où les gens obtiennent-ils la clé, la requête et la valeur de ces équations?

Le document auquel vous faites référence n'utilise pas une terminologie telle que «clé», «requête» ou «valeur», de sorte que ce que vous entendez par ici. Il n'y a pas de définition unique de l '«attention» pour les réseaux de neurones, donc je suppose que vous avez confondu deux définitions de différents articles.

Dans l'article, le module d'attention a des poids $ \ alpha $ et les valeurs à pondérer $ h $ , où les poids sont dérivés des sorties récurrentes du réseau de neurones, comme décrit par les équations que vous avez citées, et sur la figure de l'article reproduit ci-dessous.

![enter image description here

Une chose similaire se produit dans le modèle Transformer du document Attention est tout ce dont vous avez besoin de Vaswani et al, où ils utilisent des "clés", des "requêtes" et "values" ( $ Q $ , $ K $ , $ V $ ). Vaswani et al définissent la cellule d'attention différemment:

$$ \ mathrm {Attention} (Q, K, V) = \ mathrm {softmax} \ Big (\ frac {QK ^ T} {\ sqrt {d_k}} \ Big) V $$

Ils utilisent également une attention multi-têtes, où au lieu d'une seule valeur pour chaque $ Q $ , $ K $ , $ V $ , ils fournissent plusieurs de ces valeurs.

enter image description here

Où, dans le modèle Transformer, le $ Q $ , $ K $ , $ V $ peuvent provenir soit des mêmes entrées dans l'encodeur (partie inférieure de la figure ci-dessous), soit de différentes sources dans le décodeur (partie supérieure droite de la figure). Cette partie est cruciale pour utiliser ce modèle dans les tâches de traduction.

enter image description here

Dans les deux articles, comme décrit, les valeurs qui viennent en entrée des couches d'attention sont calculées à partir des sorties des couches précédentes du réseau.Les deux articles définissent différentes manières d'obtenir ces valeurs, car ils utilisent une définition différente de la couche d'attention.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...