#transformer-bloc — LLM et transformers
Le bloc transformer : attention, résidus, normalisation, FFN.
Ce que tu vas manipuler
- Bienvenue dans #transformer-bloc. À l'écran, un transformer jouet vu en coupe : en bas, la boîte jaune des embeddings + positions ; au-dessus, L = 2 blocs empilés, chacun fait d'une sous-couche d'attention (bleue) et d'un FFN (rose), encadrées par une bande grise de normalisation et, à gauche, un arc jaune : la connexion résiduelle. En haut, la sortie verte. Les 5 tokens de « le chat regarde le chien » sont des billes posées à l'entrée : leur taille suit la norme de leur vecteur (dimension d = 8), leur couleur sa direction. GPT-2, c'est exactement cette coupe répétée 12 fois en d = 768 ; GPT-3, 96 fois en d = 12 288. Tout tient dans ce bloc.
- Envoie la phrase à travers la pile :
/propager. Les billes montent sous-couche par sous-couche ; à droite, le profil des normes se dessine à leur passage. - Coupe la connexion résiduelle :
/residuel off. Chaque sous-couche remplace désormais le vecteur au lieu de le corriger. - Enlève aussi la normalisation :
/norme aucune. Plus aucune bande grise : rien ne fixe l'échelle des vecteurs. - Rebranche le résidu, sans remettre la norme :
/residuel on. - Remets la pré-norme :
/norme pre. La bande grise revient sous chaque sous-couche : c'est le vecteur normalisé qui entre dans l'attention et le FFN, le flux résiduel reste intact. - Supprime l'encodage positionnel :
/position aucun. Les embeddings entrent seuls, sans savoir à quelle place ils sont. - Empile :
/couches 6. Douze sous-couches, et le compteur de paramètres en haut fait × 3 : le compte est linéaire en L (et quadratique en d). - À toi de jouer :
/parametrespour le détail du compte (formule et termes),/norme postpour la recette de 2017,/position apprispour une table de positions apprise comme dans GPT-2,/ffn 64pour élargir le FFN,/dimension 16pour doubler d (l'attention, quadratique en d, fait × 4),/phrase le chien regarde le chatpour changer de texte,/etape 2pour arrêter les billes après le FFN du bloc 1,/reinitpour repartir. Prochaine étape : le canal #generation-temperature, où la tête de sortie devient une distribution de probabilité sur le vocabulaire et où l'on choisit le prochain mot.
Commandes du canal
/propager— Retire les poids (nouvelle graine) et rejoue la phrase sous-couche par sous-couche./couches <1..6>— Nombre L de blocs empilés./position <sinus|appris|aucun>— Encodage positionnel ajouté aux embeddings : sinus, table apprise ou rien./residuel <on|off>— Active ou coupe la connexion résiduelle autour de chaque sous-couche./norme <pre|post|aucune>— Place la normalisation de couche avant (pre), après (post) ou nulle part./ffn <8..64>— Largeur w de la couche cachée du réseau feed-forward./dimension <8|16>— Dimension d des vecteurs (8 ou 16)./phrase <mot>— Remplace la phrase propagée (toute la ligne, 2 à 8 mots)./etape <n=0..13>— Arrête les billes au niveau n : 0 = entrée, 1..2L = sous-couches, 2L+1 = sortie./parametres— Détaille le calcul du nombre de paramètres./reinit— Revient à L = 2, d = 8, w = 32, positions sinus, résidu actif, pré-norme.
Glossaire
- bloc transformer
- Unité répétée L fois dans un transformer : une sous-couche d'attention multi-têtes puis un réseau feed-forward, chacune entourée d'une connexion résiduelle et d'une normalisation de couche. Les embeddings entrent en bas, la tête de sortie lit le dernier bloc.
- encodage positionnel
- Vecteur ajouté à l'embedding de chaque token pour lui dire à quelle place il se trouve : sinus et cosinus de fréquences décroissantes (2017) ou table apprise (GPT-2). Sans lui, l'attention ne voit qu'un sac de mots et deux tokens identiques ont la même représentation.
- connexion résiduelle
- Raccourci qui additionne l'entrée d'une sous-couche à sa sortie :
x + f(x). Le flux conserve l'information d'origine, chaque sous-couche n'apprend qu'une correction, et le gradient remonte sans s'affaiblir. Sans elle, les représentations des tokens s'effondrent les unes sur les autres. - normalisation de couche
- Recentre et remet à l'échelle chaque vecteur token sur ses d composantes (moyenne 0, variance 1, donc norme sqrt(d)), avec un gain et un biais appris. Elle fixe l'échelle du signal quelle que soit la profondeur et stabilise l'entraînement.
- pré-norme vs post-norme
- Où placer la normalisation : pré-norme
x + f(LN(x))normalise l'entrée de la sous-couche et laisse le flux résiduel intact (GPT-2, LLaMA) ; post-normeLN(x + f(x))normalise après l'addition (transformer de 2017, BERT), plus délicate à entraîner en profondeur. - réseau feed-forward
- Petit perceptron appliqué à chaque token séparément dans chaque bloc :
W2 · GELU(W1 · x), avec une couche cachée de largeur w (souvent 4d). C'est là que le modèle stocke l'essentiel de ses connaissances, et les deux tiers de ses paramètres par bloc. - attention multi-têtes
- L'attention calculée h fois en parallèle sur des sous-espaces de dimension d/h, chaque tête avec ses propres matrices Q, K, V, puis les résultats concaténés et projetés par une matrice de sortie. Chaque tête peut suivre une relation différente (syntaxe, coréférence, position).
- encodeur vs décodeur
- Deux façons d'empiler des blocs : l'encodeur (BERT, ce canal) laisse chaque token regarder toute la phrase ; le décodeur (GPT) ajoute un masque causal — un token ne voit que ceux qui le précèdent — pour prédire le mot suivant. Le transformer de 2017 combinait les deux pour la traduction.
- profondeur
- Nombre L de blocs empilés : 12 pour GPT-2 small, 96 pour GPT-3, 80 pour LLaMA-2 70B. Résidus et normalisation sont ce qui permet d'aller si profond sans que le signal explose ni s'efface d'un bloc à l'autre.
- nombre de paramètres
- Taille du modèle : par bloc, environ
4d² + 2dw(attention + FFN, soit 12d² si w = 4d), multiplié par L, plus V×d pour les embeddings. Linéaire en L, quadratique en d : doubler la largeur coûte quatre fois plus que doubler la profondeur.
Autres canaux du thème LLM et transformers
- #tokenisation — Tokenisation et BPE : comment un LLM découpe le texte.
- #attention — Self-attention : chaque mot regarde les autres.
- #transformer-bloc — Le bloc transformer : attention, résidus, normalisation, FFN.
- #generation-temperature — Génération : température, top-k et top-p.
- #rag — RAG : répondre en s'appuyant sur ses documents.
- #alignement-rlhf — Alignement et RLHF : apprendre ce que les humains préfèrent.