Absolute Position Encoding (Encodage Positionnel Absolu)
L’encodage positionnel absolu est un mécanisme qui assigne à chaque position dans une séquence un vecteur unique (fixe ou appris), ajouté aux embeddings des tokens pour donner au Transformer la capacité de distinguer l’ordre des éléments, compensant l’invariance par permutation inhérente au mécanisme d’attention.
- Concept
- Chaque position i reçoit un vecteur P_i ajouté à l’embedding du token
- Deux variantes
- Sinusoïdes (fixes, Transformer 2017) et appris (GPT-2, BERT)
- Injection
- Au niveau de l’embedding d’entrée (bas du réseau)
- Extrapolation
- Limitée (sinusoïdes) à nulle (appris)
- Statut actuel
- Supplanté par les encodages relatifs (RoPE, ALiBi) pour les LLM modernes
- Modèles historiques
- Transformer original, BERT, GPT-2, GPT-3, ViT
Pourquoi encoder la position
Le mécanisme de self-attention d’un Transformer calcule les interactions entre tous les tokens en parallèle, sans notion d’ordre. Pour le self-attention, les phrases « le chat mange la souris » et « la souris mange le chat » sont identiques : les mêmes tokens interagissent de la même manière, seul l’ordre diffère, et l’attention seule ne capture pas cet ordre.
C’est un problème fondamental car la signification d’une phrase dépend crucialement de l’arrangement des mots. L’encodage positionnel résout ce problème en « marquant » chaque token avec sa position dans la séquence. L’encodage positionnel absolu est la première famille de solutions, introduite dans le papier original du Transformer (« Attention Is All You Need », Vaswani et al., 2017).
Encodages sinusoïdaux (Transformer original, 2017)
La formule
L’encodage sinusoïdal assigne à chaque position pos un vecteur de dimension d_model, dont chaque composante est une fonction sinusoïdale de fréquence différente :
PE(pos, 2i) = sin(pos / 100002i/d_model)
PE(pos, 2i+1) = cos(pos / 100002i/d_model)
Les dimensions paires utilisent le sinus, les impaires le cosinus. La constante 10000 crée une progression géométrique de longueurs d’onde allant de 2π (premières dimensions, haute fréquence) à 10000 × 2π (dernières dimensions, basse fréquence). Chaque position reçoit un vecteur unique, comme une « empreinte digitale » positionnelle.
Ce vecteur est ensuite ajouté (pas concaténé) à l’embedding sémantique du token : input = embedding(token) + PE(position). L’addition est choisie plutôt que la concaténation pour ne pas augmenter la dimension du modèle, économisant ainsi des paramètres.
Propriétés des sinusoïdes
Valeurs normalisées. Les fonctions sin et cos produisent des valeurs dans [-1, 1], ce qui maintient les encodages dans une plage compatible avec les embeddings de tokens (eux aussi normalisés pendant l’entraînement).
Unicité par position. Chaque position produit un vecteur unique grâce au jeu de fréquences géométriquement espacées. Pour des dimensions suffisamment grandes (typiquement d_model ≥ 256), les vecteurs de positions différentes sont bien séparés dans l’espace.
Relation linéaire entre positions. Pour tout décalage fixe k, le vecteur PE(pos+k) peut s’écrire comme une transformation linéaire de PE(pos). Cela permet théoriquement au modèle d’apprendre à s’attendre à des positions relatives via des opérations linéaires sur les vecteurs positionnels. C’était l’hypothèse de Vaswani et al., bien que la pratique ait montré que cette propriété ne se traduit pas toujours en une capacité effective de raisonnement relatif.
Zéro paramètre. L’encodage est entièrement déterministe, calculé par formule fermée. Il ne consomme aucun paramètre du modèle et peut être pré-calculé pour n’importe quelle longueur de séquence.
Encodages positionnels appris (GPT-2, BERT)
Principe
Les encodages positionnels appris remplacent les sinusoïdes par une matrice d’embeddings entraînable P ∈ RN_max × d_model, où N_max est la longueur maximale de séquence. Chaque position i ≤ N_max est mappée vers un vecteur appris p_i. Le vecteur positionnel est ajouté à l’embedding de token de la même manière que les sinusoïdes.
GPT-2 utilisait N_max = 1024, ce qui limitait physiquement le modèle à des séquences de 1024 tokens. BERT utilisait N_max = 512. Au-delà de ces longueurs, aucun vecteur positionnel n’existe, et le modèle ne peut tout simplement pas fonctionner.
Avantages et inconvénients
Flexibilité maximale. Le modèle peut apprendre n’importe quelle représentation positionnelle qui minimise la loss d’entraînement. Cela permet une adaptation fine aux spécificités des données et de la tâche.
Extrapolation nulle. C’est la limitation fatale. Les positions au-delà de N_max n’ont pas de vecteur défini. Les heuristiques de contournement (réutiliser le dernier vecteur, interpoler entre vecteurs existants) fonctionnent mal en pratique. Cette limitation rigide est la raison principale pour laquelle les encodages appris ont été abandonnés au profit de méthodes comme RoPE.
Performance empirique comparable aux sinusoïdes. Le papier original du Transformer notait que les encodages appris et sinusoïdaux produisaient des performances quasiment identiques. Vaswani et al. ont choisi les sinusoïdes pour leur potentiel d’extrapolation, mais dans la pratique, les modèles les plus influents (GPT-2, GPT-3, BERT) ont opté pour les encodages appris, privilégiant la flexibilité et la simplicité d’implémentation.
Les trois limites fondamentales de l’encodage absolu
1. Extrapolation faible ou nulle
C’est le problème le plus critique. Les encodages appris n’ont pas de représentation pour les positions au-delà de N_max. Les sinusoïdes, bien que mathématiquement définies pour toute position, produisent des patterns que le modèle n’a jamais vus pendant l’entraînement. Des études empiriques (Press et al., 2021) montrent que la perplexité explose dès que la séquence d’inférence dépasse la longueur d’entraînement, tant pour les sinusoïdes que pour les encodages appris.
2. Mélange sémantique et positionnel
L’addition du vecteur positionnel à l’embedding sémantique mélange deux types d’information dans le même espace vectoriel. Le modèle doit ensuite « désemmêler » ces signaux pour traiter séparément le contenu et la position. Des travaux comme TUPE (Transformer with Untied Positional Encoding, ICLR 2021) ont montré que séparer explicitement les corrélations contenu-contenu et position-position dans le calcul d’attention améliore les performances.
En pratique, les dimensions de l’embedding sont suffisamment grandes (512 à 4096+) pour que ce mélange ne soit pas catastrophique. Mais il reste sous-optimal par rapport aux approches qui injectent la position directement dans l’attention (RoPE, ALiBi), où la sémantique et la position sont traitées séparément par conception.
3. Encodage relatif seulement implicite
Le score d’attention entre deux tokens aux positions i et j, avec encodage absolu, s’écrit :
score(i, j) ∝ (E_i + P_i)T W_QT W_K (E_j + P_j)
En développant, on obtient quatre termes : contenu-contenu, contenu-position, position-contenu, et position-position. La distance relative (i-j) n’apparaît qu’implicitement dans l’interaction entre P_i et P_j. Le modèle doit apprendre séparément que (P_5, P_2) et (P_105, P_102) encodent la même distance relative de 3. C’est un gaspillage de capacité que les encodages relatifs évitent en paramétrant directement la distance.
L’encodage absolu dans les Vision Transformers
L’encodage positionnel absolu connaît une survie notable dans le domaine de la vision (ViT). Les Vision Transformers découpent une image en patches (par exemple, 196 patches de 16×16 pixels pour une image 224×224). Chaque patch est traité comme un « token » visuel et reçoit un encodage positionnel.
Les études d’ablation originales de ViT (Dosovitskiy et al., 2020) montrent un écart de performance significatif entre « sans encodage positionnel » et « avec encodage positionnel », confirmant que la position spatiale est une information cruciale pour comprendre les images. En revanche, les différences entre les variantes d’encodage (1D appris, 2D appris, sinusoïdal) sont minimes. La raison est double : les séquences sont courtes (196 patches, là où un LLM traite des milliers voire des centaines de milliers de tokens), et les images ont généralement une résolution fixe pendant l’entraînement et l’inférence.
Cette situation rend le problème d’extrapolation beaucoup moins critique que pour le texte. Un modèle ViT entraîné sur des images 224×224 sera utilisé sur des images de la même résolution. Si une résolution différente est nécessaire, les encodages appris peuvent être interpolés bilinéairement avec un léger fine-tuning.
Cependant, la tendance dans la vision évolue aussi vers les encodages relatifs. Les ViT modernes adoptent de plus en plus RoPE-2D (avec rotations sur les axes x et y), les encodages relatifs appris (Swin Transformer), ou des approches hybrides. La raison principale est le besoin croissant de gérer des résolutions variables (images de tailles différentes, vidéo) et de capturer plus naturellement les relations spatiales locales entre patches voisins.
Fondements théoriques
Universalité d’approximation
Des travaux théoriques (Yun et al., 2019) montrent qu’un Transformer avec encodages sinusoïdaux est un approximateur universel pour les fonctions de séquence, à condition que le nombre de couches et de têtes soit suffisant. Plus précisément, pour les séquences de longueur jusqu’à N_max, les vecteurs positionnels uniques garantissent que le modèle peut distinguer chaque position et donc représenter n’importe quelle fonction dépendant de l’ordre.
Cette garantie théorique a cependant une limitation importante : elle ne s’étend pas au-delà de N_max. Pour les sinusoïdes, les patterns à très grande position peuvent devenir ambigus (répétitions de certaines fréquences). Pour les encodages appris, les positions au-delà de N_max ne sont tout simplement pas représentées. C’est cette limitation qui a motivé l’ensemble de la recherche sur les encodages relatifs et les techniques d’extension de contexte.
Pourquoi l’addition aux embeddings est sous-optimale
L’ajout du vecteur positionnel P_i à l’embedding sémantique E_i crée un vecteur composite X_i = E_i + P_i. Ce mélange a des conséquences subtiles mais mesurables. Le modèle doit allouer une partie de sa capacité à « séparer » les composantes sémantiques et positionnelles dans les couches ultérieures. Des analyses de TUPE (ICLR 2021) montrent que dans un BERT pré-entraîné, les patterns d’attention contenu-contenu et position-position sont effectivement distincts et interprétables, ce qui confirme que le modèle apprend à les séparer, mais au prix d’une utilisation sous-optimale de ses paramètres.
Les approches modernes qui injectent la position directement dans l’attention (RoPE sur les Q et K, ALiBi sur les scores, biais T5 sur les scores) évitent ce mélange par construction. Les embeddings de tokens restent purement sémantiques, et l’information positionnelle n’intervient que dans le calcul d’attention. C’est une séparation plus propre qui améliore à la fois la capacité du modèle et l’interprétabilité.
De l’absolu au relatif : l’évolution complète
L’histoire des encodages positionnels suit une trajectoire claire :
2017 : Sinusoïdes absolues (Transformer original). Simple, sans paramètres, mais mélange sémantique/position et extrapolation limitée.
2018 : Encodages relatifs explicites (Shaw et al.). Introduction de la notion de distance relative dans l’attention. Plus expressif mais plus coûteux en calcul.
2018-2020 : Encodages appris absolus (GPT-2, GPT-3, BERT). Flexibles mais sans extrapolation. Dominent en pratique grâce à la simplicité.
2019-2020 : Biais relatifs (Transformer-XL, T5). Meilleur compromis coût/expressivité pour les modèles encoder-decoder.
2021 : RoPE et ALiBi. Encodages relatifs sans paramètres supplémentaires, injectés dans l’attention plutôt que dans les embeddings. RoPE offre l’expressivité via les rotations, ALiBi l’extrapolation via le biais linéaire.
2023-2026 : RoPE + scaling (YaRN, LongRoPE2). Extension de contexte massive (128K à 1M+ tokens) avec un fine-tuning minimal. RoPE devient le standard absolu.
L’encodage positionnel absolu pur (sinusoïdes ou appris ajoutés aux embeddings) n’est plus utilisé dans aucun LLM majeur. Son héritage vit dans RoPE, qui utilise la même base 10000 et la même progression géométrique de fréquences, mais les applique comme rotations sur les Q et K plutôt que comme additions aux embeddings.
Quand l’encodage absolu reste pertinent
Vision Transformers sur images de taille fixe : les séquences courtes (< 1000 patches) et les résolutions constantes rendent le problème d'extrapolation moins critique.
Petits modèles encodeurs (classification, NER) avec séquences courtes et fixes : la simplicité des encodages appris est un avantage, et les limites d’extrapolation ne sont pas pertinentes.
Combinaison avec encodage relatif : DeBERTa utilise un encodage relatif dans les couches d’attention et un encodage absolu dans les dernières couches pour capturer l’information de position globale (utile pour le token [CLS] dans les tâches de classification).
Pour tout nouveau LLM autorégressif, l’encodage absolu pur est obsolète. RoPE est le choix par défaut sans exception.
Implémentation pratique
Pour les rares cas où l’encodage absolu est encore pertinent (ViT, petits modèles encodeurs), voici les considérations d’implémentation :
Sinusoïdes : Pré-calculez la matrice PE une seule fois au démarrage et stockez-la comme buffer non-apprenable. Utilisez la formule standard avec base 10000. Pour PyTorch : torch.register_buffer('pe', pe_matrix). Les sinusoïdes sont compatibles avec torch.compile et n’ajoutent aucun overhead d’entraînement.
Encodages appris : Utilisez nn.Embedding(max_len, d_model). Initialisez avec Xavier uniform ou normal (l’initialisation aléatoire standard fonctionne bien). Choisissez max_len avec soin : c’est une limite dure que vous ne pouvez pas dépasser sans ré-entraînement. Prévoyez une marge de 10-20% au-delà de votre longueur de séquence d’entraînement prévue.
Choix entre les deux : Si votre séquence d’inférence sera toujours de la même longueur que l’entraînement (cas des ViT sur images fixes), les encodages appris sont préférables car ils s’adaptent aux données. Si vous anticipez des longueurs variables ou une éventuelle extension, les sinusoïdes offrent plus de robustesse. Dans tous les cas, si vous travaillez sur un LLM, utilisez RoPE plutôt que l’une ou l’autre de ces méthodes.
Questions fréquentes sur l’encodage positionnel absolu
Quelle est la différence entre les encodages sinusoïdaux et appris ?
Les encodages sinusoïdaux sont calculés par une formule fixe (sin/cos de fréquences géométriques) sans aucun paramètre apprenable. Ils sont définis pour toute position mais le modèle peut mal interpréter les positions non vues pendant l’entraînement. Les encodages appris sont des vecteurs entraînés (une matrice N_max × d_model) qui s’adaptent aux données, mais n’existent pas au-delà de N_max. En pratique, les deux produisent des performances quasi identiques sur les longueurs d’entraînement, mais aucun n’extrapole bien.
Pourquoi les LLM modernes n’utilisent-ils plus d’encodage positionnel absolu ?
Trois raisons. L’extrapolation est insuffisante : les modèles modernes nécessitent des contextes de 128K à 1M+ tokens, ce qui est incompatible avec les limites des encodages absolus. Le mélange sémantique/position par addition est sous-optimal : injecter la position directement dans l’attention (comme RoPE et ALiBi) sépare mieux les deux types d’information. Et l’encodage relatif implicite est gaspilleur : le modèle doit apprendre séparément que des paires de positions différentes encodent la même distance, alors que les encodages relatifs paramétrisent directement cette distance.
Les encodages sinusoïdaux et RoPE utilisent-ils les mêmes fonctions ?
Les deux utilisent sin et cos avec la même base 10000 et la même progression géométrique de fréquences. La différence fondamentale est dans l’application : les sinusoïdes sont ajoutées aux embeddings de tokens (mélange sémantique/position), tandis que RoPE multiplie les vecteurs Q et K par des matrices de rotation (séparation propre). De plus, les sinusoïdes traitent chaque dimension indépendamment, alors que RoPE mélange des paires de dimensions par rotation 2D. RoPE est en quelque sorte la version « bien faite » de l’intuition originale des sinusoïdes.
Peut-on étendre un modèle GPT-2 ou BERT au-delà de sa longueur maximale ?
C’est très difficile avec des encodages appris. Les positions au-delà de N_max n’ont pas de vecteur d’embedding. Les heuristiques (interpolation, réutilisation du dernier vecteur) fonctionnent mal. La solution réaliste est de convertir le modèle vers un encodage relatif (RoPE) via un uptraining, ou d’utiliser des techniques comme l’interpolation de position avec fine-tuning. En pratique, les modèles à encodage absolu sont considérés comme des architectures d’anciennes générations et il est préférable de migrer vers des modèles modernes nativement RoPE.
L’encodage positionnel absolu est-il totalement obsolète ?
Pour les LLM autorégressifs, oui. Aucun nouveau modèle de langage majeur n’utilise d’encodage absolu pur. Pour les Vision Transformers sur images de taille fixe, les encodages appris restent compétitifs car les séquences sont courtes et l’extrapolation n’est pas un enjeu. DeBERTa combine encodage relatif et absolu de manière intéressante. Mais la tendance générale, y compris en vision, va vers les encodages relatifs (RoPE-2D).