Deepseek-V3 Explication détaillée Série d'articles: Mécanisme d'attention potentiel des taureaux (MLA)
Cet article est le premier article de la série "Explication détaillée de Deepseek-V3".
Cette série d'articles couvrira deux sujets principaux:
Cet article se concentre principalement sur le mécanisme d'attention potentiel multi-tête (MLA) , qui a été initialement proposé dans le développement de Deepseek-V2 et a été appliqué dans Deepseek-V3.
Catalogue:
MHA dans le transformateur de décodeur
La figure suivante compare trois architectures de transformateur pour le décodage, où (a) montre le codeur et le décodeur proposés dans le papier "l'attention de l'attention est tout ce dont vous avez besoin". La partie de décodeur est ensuite simplifiée par [6] pour obtenir le modèle de transformateur uniquement du décodeur indiqué dans (b), qui a été utilisé plus tard par de nombreux modèles génératifs tels que GPT [8].
Aujourd'hui, les grands modèles de langage choisissent le plus souvent la structure indiquée en (C) pour une formation plus stable, appliquez une normalisation sur les entrées plutôt que sur les sorties, et améliorez la norme Layernor à RMS. Cela servira d'architecture de base dont nous discutons dans cet article.
Dans ce contexte, les calculs MHA suivent largement le processus dans [6], comme le montre la figure ci-dessous:
Supposons que nous ayons n_h têtes d'attention, et la dimension de chaque tête d'attention est exprimée comme d_h , donc la dimension connectée sera ( h_n · d_h ).
l calque, si nous représentons l'entrée de la balise T-th dans cette couche comme h_t avec une dimension de d , puis Nous devons utiliser une matrice de mappage linéaire pour cartographier les dimensions de h_t de d à ( h_n · d_h ).
Plus formellement, nous avons (Eq de [3]): où w ^ q , w ^ k et w ^ v sont des matrices de cartographie linéaires:
q_t , k_t et v_t dans n_h t pour calculer le produit à points proportionnel.
où
est une autre matrice de projection utilisée pour cartographier les dimensions inversement de ( h_n · d_h ) à d :
Notez que les procédures décrites ci-dessus dans l'équation (1) à (8) ne sont que pour un seul marqueur. Pendant le processus de raisonnement, nous devons répéter ce processus pour chaque balisage nouvellement généré, qui implique de nombreux calculs répétés. Cela conduit à une technique appelée mise en cache de valeur clé.
cache de valeur clé
Le cache
KV est généralement implémenté en tant que tampon de roulement. Dans chaque étape de décodage, seule la nouvelle requête Q est calculée, et les K et V stockés dans le cache seront réutilisés afin de calculer l'attention en utilisant le nouveau Q et Resseuched K et V. Dans le même temps, les nouveaux taggés K et V seront également ajoutés au cache pour une utilisation ultérieure.Cependant, l'accélération apportée par le cache de valeur clé se fait au prix de la mémoire, car les caches de valeur clé varient généralement avec
Taille du lot × longueur de séquence × taille cachée × nombre de têtes
Lorsque nous avons plus grand cela Peut provoquer des goulots d'étranglement de mémoire lorsque la taille ou la séquence du lot est plus longue.Cela conduit en outre à deux techniques conçues pour aborder cette limitation: l'attention multi-remerge et l'attention de la requête en groupe.
Attention à requête multiple (MQA) par rapport à l'attention de groupe (GQA)La figure suivante montre la comparaison entre le MHA d'origine, l'attention de la requête groupée (GQA) [10] et l'attention multi-remery (MQA) [9].
L'idée de base de la MQA est de partager des clés uniques et des en-têtes à valeur unique dans tous les en-têtes de requête, ce qui peut réduire considérablement l'utilisation de la mémoire mais affectera également la précision de l'attention.
GQA peut être considéré comme une méthode d'interpolation entre MHA et MQA, où une seule paire de clés et d'en-têtes de valeur sera partagée par un seul ensemble d'en-têtes de requête, pas toutes les requêtes. Mais cela conduira toujours à des résultats pires que MHA.
Le dernier fond que nous devons mentionner est la corde [11], qui code directement sur la position dans le mécanisme d'attention en faisant tourner la requête et les vecteurs clés dans l'attention multi-tête à l'aide d'une fonction sinusoïdale.
Plus précisément, Rope applique la matrice de rotation dépendante de la position à la requête et au vecteur clé de chaque balise et utilise les fonctions sinus et cosinus comme base, mais les applique d'une manière unique pour implémenter Rotate.
Pour comprendre ce qui rend la position dépendante de la position, considérez un vecteur d'intégration de jouets avec seulement 4 éléments, c'est-à-dire (x_1, x_2, x_3, x_4).Pour appliquer une corde, nous regroupons d'abord les dimensions continues en paires:
où θ = θ (p) = p ⋅ θ_0, et θ_0 est la fréquence fondamentale
. Dans notre exemple de jouet 4D, cela signifie (x_1, x_2) tournera θ_0, tandis que (x_3, x_4) fera tourner 2 ⋅ θ_0.
C'est pourquoi nous appelons cette matrice de rotation liée à la position : À chaque position (ou chaque paire), nous appliquerons une matrice de rotation différente où l'angle de rotation est déterminé par la position.
est largement utilisée dans les modèles modernes de grande langue en raison de son efficacité dans le codage de longues séquences, mais comme nous pouvons le voir à partir de la formule ci-dessus, il a une sensibilité positionnelle à la fois Q et K, ce qui le rend dans certains aspects incompatibles avec MLA. Mécanisme d'attention potentiel des Bules
Enfin, nous pouvons continuer à discuter de la section MLA. Dans cette section, nous élaborerons d'abord les idées avancées de MLA, puis plongerons pourquoi elle nécessite une modification de la corde. Enfin, nous présenterons également les algorithmes détaillés et leurs performances de MLA.
L'idée de base de MLA est de compresser l'attention de l'attention
h_t, où d_c est beaucoup plus petit que l'original ( h_n · d_h ). Plus tard, lorsque nous devons calculer l'attention, nous pouvons ramener ce vecteur latent à un espace de haute dimension pour restaurer les clés et les valeurs. Par conséquent, seul le vecteur potentiel doit être stocké, réduisant ainsi considérablement l'utilisation de la mémoire. Ce processus peut être décrit plus formellement avec l'équation suivante, où c ^ {kv} _t est le vecteur latent, et
w ^ {dkv} est à H_T est mappée de ( h_n · d_h ) à la matrice de compression de d_c (D dans l'expositement représente ici "la projection de réduction de la dimensionnalité de dimensionnalité ", ce qui signifie la compression, et w ^ {uk} et w ^ {uv} sont tous deux des matrices de projection supérieures que la carte partageait les vecteurs latents à un espace de haute dimension.
De même, nous pouvons mapper la requête à un vecteur potentiel de basse dimension, puis le ramener à l'espace de haute dimension d'origine: Comme mentionné précédemment, la corde est un choix courant pour la formation de modèles génératifs pour gérer de longues séquences. Si nous appliquons directement la politique MLA ci-dessus, cela sera incompatible avec la corde. Pour voir cela plus clairement, considérons ce qui se passe lorsque nous calculons l'attention en utilisant l'équation. La matrice w ^ q et w ^ {uk} apparaîtra au milieu, et leur combinaison est équivalente à d_c à d un seul Dimension de cartographie pour .
Dans l'article d'origine [3], l'auteur le décrit comme w ^ {uk} qui peut être absorbé par " w ^ q , par conséquent, Nous n'avons pas besoin de stocker w ^ {uk} dans le cache, réduisant ainsi davantage l'utilisation de la mémoire.
Cependant, ce n'est pas le cas lorsque nous considérons la matrice de rotation de la figure (4), car la corde appliquera la matrice de rotation à gauche de w ^ {uk} et cette matrice de rotation finira par être Situé entre w ^ q w ^ {uk} transposé.
Comme nous l'avons expliqué dans la section d'arrière-plan, cette matrice de rotation dépend de la position, ce qui signifie que la matrice de rotation pour chaque position est différente. Par conséquent, w ^ {uk} ** ne peut pas être absorbé par w ^ q ** w ^ q ** .
Pour résoudre ce conflit, les auteurs ont proposé ce qu'ils ont appelé " Corde découplée
L'ensemble du processus MLA peut être résumé comme suit (le numéro d'équation est réutilisé à partir de l'annexe C de [3]):
où
Fait intéressant, les capacités de modélisation de MLA dépassent même celles du MHA d'origine. ### Pourquoi avez-vous besoin de découpler la corde
eqn.
eqn.
Plus précisément, le tableau suivant montre les performances de MHA, GQA et MQA sur le modèle 7B, où MHA a des performances nettement meilleures que MQA et GQA.
[3] ont également analysé MHA et MLA, et les résultats sont résumés dans le tableau ci-dessous, où MLA a obtenu de meilleurs résultats dans l'ensemble.
références
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!