Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Rotary Position Embedding (RoPE)

ia

Définition

Le Rotary Position Embedding (RoPE) est une technique d'encodage positionnel relatif proposée par Su et al. (2021) dans le paper "RoFormer: Enhanced Transformer with Rotary Position Embedding". C'est aujourd'hui l'encodage positionnel dominant dans les LLMs open-source modernes : LLaMA 2/3, Mistral, Mixtral, Qwen, DeepSeek, Phi et de nombreux autres l'utilisent. L'idée fondamentale de RoPE est d'encoder la position d'un token en faisant "tourner" les vecteurs de query et de key d'un angle proportionnel à leur position dans la séquence. Mathématiquement, pour un vecteur q à la position m, RoPE applique une rotation de matrice Rm : q_m = Rm × q. Les keys à la position n sont également rotées de Rn × k. Le produit scalaire qm · kn dépend alors uniquement de (m-n), soit la distance relative entre les deux tokens — ce qui est exactement la propriété souhaitée pour l'attention relative. Cette approche présente plusieurs avantages majeurs sur les encodages absolus : elle encode nativement les positions relatives, elle est compatible avec le caching du KV-Cache pour l'inférence incrémentale, et elle permet d'étendre la longueur de contexte au-delà de la longueur d'entraînement via des techniques d'interpolation/extrapolation comme YaRN, LongRoPE ou Dynamic NTK scaling. Pour les applications enterprise, RoPE est directement impactant : Llama 3.1 avec RoPE + YaRN supporte 128K tokens, permettant l'analyse complète de contrats de 200+ pages, de bases de code volumineuses ou de transcriptions de réunions sans découpage. Les modèles Qwen2.5 et Mistral Large supportent jusqu'à 1M tokens avec des variantes de RoPE.

Fonctionnement mathématique

RoPE encode la position m d'un vecteur x ∈ ℝ^d via des rotations dans des sous-espaces 2D :

RoPE(x, m) = [ x₁cos(mθ₁) - x₂sin(mθ₁), x₁sin(mθ₁) + x₂cos(mθ₁), ... ]

Les fréquences θᵢ = base^(-2i/d) avec base=10000 par défaut. Les récents modèles long-context utilisent base=500000 (LLaMA 3.1) ou même 1M pour étendre le contexte.

Extensions long-context

  • YaRN (Yet Another RoPE extensioN) : interpolation + scaling des fréquences → Mistral 7B v0.2 (32K→128K)
  • LongRoPE : Microsoft, extension à 2M tokens pour Phi-3
  • Dynamic NTK scaling : ajuste base dynamiquement selon la longueur de séquence réelle
  • Llama 3.1 : base=500000 + YaRN → 128K tokens natif

Implémentation pratique

from transformers import AutoTokenizer, AutoModelForCausalLM

# Vérifier le support long-context
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-8B-Instruct")
print(tokenizer.model_max_length)  # 131072 = 128K tokens

# Activer le sliding window si nécessaire pour économiser la mémoire
model.config.rope_scaling = {"type": "yarn", "factor": 4.0}

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis