Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Comment le mécanisme d'attention dans les transformateurs améliore-t-il la génération de code


Comment le mécanisme d'attention dans les transformateurs améliore-t-il la génération de code


Le mécanisme d'attention dans les transformateurs améliore fondamentalement la génération de code en permettant au modèle de se concentrer sélectivement sur différentes parties de la séquence d'entrée tout en produisant chaque jeton de sortie. Il en résulte plus de génération de code plus contextuelle et cohérente. Le mécanisme d'attention aide à capturer les dépendances à longue portée, les modèles structurels et les nuances sémantiques dans le code source, qui sont cruciales pour générer des programmes syntaxiquement corrects et logiquement cohérents. Ses capacités aux multiples facettes offrent des avantages significatifs par rapport aux modèles traditionnels de séquence à séquence qui reposaient sur des représentations de contexte de longueur fixe.

Concept de base de l'attention dans les transformateurs

Dans les transformateurs, l'attention est une technique qui calcule un ensemble de vecteurs de sortie comme des sommes pondérées de vecteurs de valeur d'entrée. Les poids sont calculés dynamiquement en fonction des scores de compatibilité entre une requête (représentant la position actuelle pour laquelle une sortie est générée) et un ensemble de vecteurs clés (représentant toutes les positions dans la séquence d'entrée). Cela permet au modèle de «fréquenter» ou de se concentrer sur les parties pertinentes de l'entrée lors de la génération de chaque jeton, plutôt que de traiter la séquence entière uniformément ou de la compresser dans un vecteur de taille fixe.

La formule centrale pour l'attention du produit de point à l'échelle est:

$$
\ text {attention} (q, k, v) = \ text {softMax} \ Left (\ frac {qk ^ t} {\ sqrt {d_k> \ droit) v
$$

Où $$ Q $$, $$ K $$ et $$ V $$ sont des matrices de requêtes, de clés et de valeurs, respectivement, et $$ D_K $$ est la dimension des clés utilisées pour la mise à l'échelle. La fonction Softmax transforme les scores du produit DOT entre les requêtes et les clés en une distribution de probabilité, qui est ensuite utilisée pour pondérer les valeurs.

Capturer le contexte et les dépendances dans le code

Le code de programmation est intrinsèquement structuré avec des dépendances à longue portée; Les variables déclarées au début d'une fonction peuvent être utilisées dans de nombreux endroits bien plus tard. Des modèles traditionnels comme les RNN ou les CNN ont eu du mal à maintenir de telles relations contextuelles à long terme en raison de leur nature réceptive séquentielle ou locale. En revanche, le mécanisme d'auto-agencement dans les transformateurs peut relier tous les token à tous les autres jeton, quelle que soit leur distance dans la séquence.

L'auto-attention permet à chaque position de jeton de recueillir des informations de toutes les autres positions de la séquence d'entrée simultanément. Par exemple, tout en générant un support de clôture, le modèle peut s'occuper de son support d'ouverture correspondant qui peut être plusieurs lignes plus tôt. Cette connectivité complète permet au modèle d'encoder plus efficacement la structure syntaxique et sémantique, ce qui est essentiel pour générer du code sans erreur.

Attention multiples pour divers contextes

Les transformateurs utilisent une attention multiples, où plusieurs opérations d'attention parallèle (têtes) sont effectuées sur différentes projections linéaires des incorporations d'entrée. Chaque tête apprend à se concentrer sur différents aspects de l'entrée, tels que les noms de variables, les constructions de flux de contrôle ou les limites de la fonction. Cette configuration multi-têtes offre plusieurs avantages:

- Il permet au modèle de s'occuper conjointement des informations de différents sous-espaces de représentation.
- Il combine plusieurs perspectives sur la séquence d'entrée, élargissant la portée de ce que le modèle peut apprendre.
- Il améliore la robustesse en ne s'appuyant pas sur une seule représentation de l'attention.

Les sorties de ces multiples têtes sont concaténées et transformées linéairement pour former la représentation finale utilisée pour générer des jetons de sortie.

ATTENTION DE CODER-DECODER pour l'alignement de cible source

Dans la génération de code, les transformateurs utilisent généralement une architecture d'encodeur, où le codeur traite la description de l'entrée (par exemple, la spécification du problème du langage naturel) dans une représentation contextuelle, et le décodeur génère la séquence de code correspondante. Le décodeur utilise l'attention du coder-décodeur (astrtention croisée) pour se concentrer sélectivement sur les parties pertinentes de l'entrée codée à chaque étape de décodage. Cet alignement entre l'entrée et la sortie aide le modèle à générer des extraits de code pertinents et précis qui correspondent étroitement à l'intention exprimée dans l'invite d'entrée.

Attention causale et masquée pour la génération autorégressive

Lors de la génération de jeton de code par homme, le décodeur utilise l'auto-attention causale (masquée) pour s'assurer que les prévisions de position $$ i $$ ne dépendent que des jetons précédents $$