HyperAI

Incorporation De Position Rotative (RoPE)

Rotary Position Embedding (RoPE) est un article intituléRoformer : Transformateur amélioré avec positionnement Rotray intégré« Une méthode de codage de position qui peut intégrer la dépendance des informations de position relative dans l'auto-attention et améliorer les performances de l'architecture du transformateur.Il s'agit d'un codage positionnel largement utilisé dans les grands modèles, notamment, mais sans s'y limiter, Llama, Baichuan, ChatGLM, Qwen, etc. En raison des limitations des ressources informatiques, la plupart des grands modèles actuels sont formés avec des longueurs de contexte plus petites. Lors de l’inférence, si la durée de pré-formation est dépassée, les performances du modèle seront considérablement réduites. En conséquence, de nombreux travaux basés sur l'extrapolation de la longueur RoPE ont émergé, visant à permettre aux grands modèles d'obtenir de meilleurs résultats au-delà de la longueur de pré-formation. Il est donc crucial de comprendre les principes sous-jacents de RoPE pour l’extrapolation de la longueur du modèle basé sur RoPE.

Le principe de base de RoPE

Le principe de base de RoPE est de coder chaque position comme un vecteur de rotation dont la longueur et la direction sont liées aux informations de position. Plus précisément, pour une séquence de longueur n, RoPE encode chaque position i comme un vecteur de rotation pe_i, qui est défini comme suit :

pe_i = (sin(ioméga), cos(ioméga))

Ici, oméga est un hyperparamètre qui contrôle la fréquence du vecteur de rotation.

Avantages du RoPE

Ce qui rend RoPE unique est sa capacité à intégrer de manière transparente des dépendances de position relative explicites dans le mécanisme d’auto-attention du modèle. Cette approche dynamique présente trois avantages :

  • Flexibilité dans la longueur des séquences:Les intégrations positionnelles traditionnelles nécessitent généralement la définition d'une longueur de séquence maximale, ce qui limite leur adaptabilité. D’autre part, RoPE est très flexible. Il peut générer des intégrations positionnelles à la volée pour des séquences de longueur arbitraire.
  • Réduire les dépendances entre les jetons:RoPE est très intelligent dans la modélisation des relations entre les jetons. À mesure que les jetons s'éloignent les uns des autres dans la séquence, RoPE réduit naturellement les dépendances de jetons entre eux. Ce modèle de disparition progressive est plus cohérent avec la façon dont les humains comprennent le langage.
  • Amélioration de l'attention à soi-même:RoPE équipe le mécanisme d'auto-attention linéaire d'un codage de position relative, qui est une fonctionnalité non présente dans le codage de position absolue traditionnel. Cette amélioration permet une exploitation plus précise des intégrations de jetons.

Implémentation du codage de rotation (extrait de Roformer

L'encodage de position absolue traditionnel revient à spécifier qu'un mot apparaît à la position 3, 5 ou 7, quel que soit le contexte. En revanche,RoPE permet au modèle de comprendre comment les mots sont liés les uns aux autres.Il reconnaît que le mot A apparaît souvent après le mot B et avant le mot C. Cette compréhension dynamique améliore les performances du modèle.

Mise en œuvre de RoPE

Décomposez le code de l’encodage de position rotationnelle (RoPE) pour comprendre comment il est implémenté.

  • precompute_theta_pos_frequencies La fonction calcule une valeur spéciale de RoPE. Définissez d'abord un theta Les hyperparamètres à contrôlerAmplitude de rotation. Des valeurs plus petites produisent des rotations plus petites. Il utilise ensuite le calculAngle de rotation du groupetheta . La fonction crée également une liste de positions dans la séquence et calcule l'angle de rotation en prenant le produit extérieur de la liste de positions et de l'angle de rotation.Le montant de rotation de chaque position. Enfin, il convertit ces valeurs en nombres complexes sous forme de coordonnées polaires de taille fixe, ce qui est comme un chiffre pour représenter la position et la rotation.
  • apply_rotary_embeddings La fonction prend des valeurs numériques et les augmente avec des informations de rotation. Il entre d'abord la valeurLa dernière dimension est divisée enReprésente les parties réelles et imaginaires de. Ces paires sont ensuite combinées en un seul nombre complexe. Ensuite, la fonctionMultipliez le nombre complexe précalculé par l'entrée, en appliquant efficacement la rotation. Enfin, il convertit les résultats en nombres réels et remodèle les données, les préparant ainsi à un traitement ultérieur.

Références

【1】https://www.bolzjb.com/archives/PiBBdbZ7.html