IA — Le Cœur des Transformers : Attention, Multi-Head, Feed Forward et Masque Causal


Pourquoi les anciens modèles étaient limités

Avant les Transformers, on utilisait principalement :

  • les RNN (Recurrent Neural Networks),
  • les LSTM / GRU.

Ces modèles lisaient le texte mot par mot, dans l’ordre.

Problèmes principaux

  • ⏳ Difficulté à paralléliser (lent sur GPU).
  • 🧠 Mémoire limitée pour les longues phrases.
  • 🔗 Difficulté à capturer des dépendances lointaines.

Exemple :

"Le livre que tu m’as prêté hier est passionnant."

Relier "livre" et "est" est difficile si la phrase est longue.

Les Transformers ont résolu ce problème grâce à l’attention.


Self-Attention : relier les tokens entre eux

La self-attention permet à chaque token de regarder tous les autres tokens de la séquence et de décider lesquels sont importants.

Intuition

Chaque mot se pose la question :

"De quels autres mots ai-je besoin pour comprendre mon sens ?"

Exemple :

"Marie a donné un livre à Paul parce qu’il aime lire."

Le token "il" doit comprendre qu’il fait référence à "Paul".


Query, Key, Value (Q, K, V)

Chaque embedding est projeté en trois vecteurs :

  • Query (Q) → ce que je cherche
  • Key (K) → ce que je propose
  • Value (V) → l’information que je transporte

Le mécanisme :

  1. On compare chaque Q avec tous les K.
  2. On calcule des scores de similarité.
  3. On normalise avec un softmax.
  4. On fait une somme pondérée des V.

Résultat : chaque token récupère l’information pertinente des autres.

Formule simplifiée de l’attention

Attention(Q, K, V) = softmax(QKᵀ / √d) · V


Visualisation d’une matrice d’attention

Chaque cellule représente l’importance d’un token pour un autre token.

Plus une valeur est élevée, plus un token influence l’autre.


Multi-Head Attention : plusieurs points de vue en parallèle

Au lieu d’une seule attention, on utilise plusieurs têtes d’attention en parallèle.

Chaque tête apprend à se spécialiser :

  • relations syntaxiques,
  • dépendances longues,
  • accords grammaticaux,
  • liens sémantiques.

Les sorties des têtes sont concaténées puis recombinées.


Self-Attention vs Cross-Attention

  • 🔁 Self-attention : Q, K, V viennent de la même séquence.
  • 🔀 Cross-attention : Q vient d’une séquence, K et V d’une autre.

Exemples

  • GPT, BERT → uniquement self-attention.
  • Traduction (encoder–decoder) → self-attention + cross-attention.

Feed Forward Network : transformer chaque token individuellement

Après l’attention, chaque token passe dans un petit réseau neuronal appelé Feed Forward Network (FFN).

Structure simplifiée :


Vecteur → Linear → Activation → Linear

Caractéristiques :

  • Le même réseau est appliqué à tous les tokens.
  • Chaque token est traité indépendamment.
  • Il ajoute de la non-linéarité et de la capacité d’expression.

Intuition

  • 👀 Attention → échange d’informations entre tokens.
  • 🧠 Feed Forward → réflexion locale sur chaque token.

Le Masque Causal : empêcher de voir le futur

Dans un modèle génératif (comme GPT), le modèle prédit le texte mot par mot.

Lorsqu’il prédit un token, il ne doit pas voir les tokens futurs.

Exemple

Phrase cible :

"Je mange une pomme"

Quand le modèle prédit "mange", il ne doit pas voir "pomme".

Le masque causal bloque l’attention vers le futur.


Token i peut voir : [0 ... i]
Token i ne peut pas voir : [i+1 ... fin]

Attention masquée vs non masquée

  • ✅ GPT : self-attention masquée (génération autoregressive).
  • ✅ BERT : self-attention non masquée (compréhension globale).

Cela explique pourquoi BERT est très bon pour l’analyse de texte, mais pas pour la génération.


Un bloc Transformer complet

Un bloc Transformer contient :

  1. 1. Multi-Head Attention

    Les tokens échangent l’information.

  2. 2. Normalisation + Résidu

    Stabilisation de l’apprentissage.

  3. 3. Feed Forward

    Transformation locale des représentations.

  4. 4. Normalisation + Résidu

    Préservation de l’information.

Ce bloc est répété N fois pour former le Transformer.


Pseudo-code simplifié d’un bloc


x = embeddings
x = x + MultiHeadAttention(x)
x = x + FeedForward(x)
Pourquoi on ajoute des connexions résiduelles ?

Elles facilitent la propagation du gradient et évitent la perte d’information dans les réseaux profonds.


Ce qu’il faut retenir