Le transformer décortiqué
L'attention en détail : Q, K, V
Chaque token produit trois vecteurs par projections apprises :
- Query (Q) : « ce que je cherche » ;
- Key (K) : « ce que j'offre comme repère » ;
- Value (V) : « l'information que je transporte ».
Le score d'attention entre deux tokens = Q·K (produit scalaire — la similarité, encore). On softmax les scores en poids, et chaque token repart avec la moyenne pondérée des V des autres. En une formule : Attention(Q,K,V) = softmax(QKᵀ/√d)·V.
Multi-têtes, couches, MLP
- Multi-head : 8-96 attentions en parallèle, chacune libre de se spécialiser (syntaxe, coréférence, position…) ;
- chaque bloc transformer = attention + petit MLP (+ normalisations, connexions résiduelles) ;
- un LLM = ce bloc empilé 30 à 100 fois. C'est tout. La magie est dans l'échelle, pas dans l'exotisme.
La génération : autoregressive, token par token
Le modèle prédit une distribution sur le token suivant, on échantillonne (temperature, module 2), on ajoute le token au contexte, on recommence. Conséquences opérationnelles directes :
- la latence croît avec la longueur de sortie (module 1 : le p99 instable) ;
- recalculer l'attention de tout le contexte à chaque token serait ruineux → le KV-cache mémorise les K et V déjà calculés. C'est LUI qui remplit ta VRAM (module 1 : la heap), et sa gestion (PagedAttention dans vLLM) est un sujet central du serving ;
- prefill vs decode : ingérer le prompt est parallèle et rapide ; générer est séquentiel et lent — d'où le « time to first token » vs « tokens/seconde » de tes futurs dashboards.
Encodeur, décodeur : la carte des familles
- Décodeur seul (GPT, Llama, Claude) : génération autoregressive — les LLMs de chat ;
- Encodeur seul (BERT et héritiers) : comprendre/classifier/embarquer du texte — les modèles d'embeddings ;
- Encodeur-décodeur (T5, Whisper) : transformer une séquence en une autre (traduction, transcription).
Dans l'attention, le score entre deux tokens se calcule par…