Où vivent vraiment les faits d'un modèle.

SRC·35 Source
L'attention récolte les lauriers. Cette couche garde les souvenirs.

L'attention récolte les lauriers. Cette couche garde les souvenirs.

Chaque bloc transformer a deux moitiés. L'attention décide quoi regarder — et récolte tout le mérite. L'autre moitié, la couche feed-forward, vient juste après et détient en silence l'essentiel de ce que le modèle sait vraiment. Quand il se rappelle qu'un citron est acide ou qu'une rivière traverse une ville, ce fait vit sans doute ici — pas dans le regard, mais dans la mémoire.
La moitié célèbre est la plus petite.

La moitié célèbre est la plus petite.

attn: 4d2vsFFN: 2ddff=8d2    (dff=4d)    8d212d2=23\text{attn: } 4d^2 \quad\text{vs}\quad \text{FFN: } 2\,d\,d_{ff} = 8d^2 \;\;(d_{ff}=4d)\;\Rightarrow\; \frac{8d^2}{12d^2}=\frac{2}{3}
Comme un iceberg : l'attention est la pointe brillante au-dessus de l'eau, mais la couche feed-forward est la masse en dessous. Comptez les grandes matrices de poids d'un bloc et près des deux tiers tiennent dans cette seule couche. La partie que tout le monde étudie est la plus petite. Et contrairement à l'attention, elle traite chaque mot seul — pas de mélange, pas de voisins, juste un token qui passe.
D'abord, elle teste chaque mot contre des milliers de motifs.

D'abord, elle teste chaque mot contre des milliers de motifs.

h=max(0,  xW1+b1)Rdff,dff=4dh = \max(0,\; xW_1 + b_1)\in\mathbb{R}^{d_{ff}}, \qquad d_{ff} = 4d
Comme un plateau d'aiguilles de boussole : passez un aimant au-dessus et seules celles qui lui sont alignées pivotent. La couche feed-forward fait cela avec chaque mot — elle l'élargit dans un espace environ quatre fois plus grand, où attendent des milliers de motifs appris. Chaque motif mesure à quel point le mot lui correspond ; un simple seuil garde allumés les forts et met le reste à zéro.
Chaque motif est relié à une réponse stockée.

Chaque motif est relié à une réponse stockée.

FFN(x)=i=1dfff ⁣(kix)vi\text{FFN}(x) = \sum_{i=1}^{d_{ff}} f\!\left(k_i^{\top} x\right)\, v_i
Voici le secret : chaque unité allumée est une key reliée à un value. La key est le motif qu'elle cherche ; le value est la part de sens qu'elle réécrit. Comme un jeu de tampons encrés : ceux qu'on presse laissent leur marque, et la page finit par les porter tous à la fois. La sortie d'un mot, c'est simplement chaque value activé, additionné.
C'est donc la mémoire du modèle — et elle peut être modifiée.

C'est donc la mémoire du modèle — et elle peut être modifiée.

x    x+FFN(x)x \;\leftarrow\; x + \text{FFN}(x)
Si un fait est une key reliée à un value, alors il a une adresse. Et la couche n'écrase jamais le mot — elle ajoute ses values rappelés au flux en cours. Comme perforer un rouleau de piano mécanique : chaque trou déclenche une note stockée, donc reperforer un seul trou ne change que celle-là — le reste du morceau continue. Trouvez les bons values et un seul fait peut souvent être localisé et modifié, sans toucher au reste.
Les modèles récents ajoutent une porte plus maligne.

Les modèles récents ajoutent une porte plus maligne.

Swish(z)=zσ(z),σ(z)=11+ezSwiGLU(x)=(Swish(xW1)xW3)W2\begin{aligned} \text{Swish}(z) &= z\,\sigma(z), \quad \sigma(z)=\tfrac{1}{1+e^{-z}} \\ \text{SwiGLU}(x) &= \big(\text{Swish}(xW_1)\otimes xW_3\big)\,W_2 \end{aligned}
Les couches récentes divisent le travail en deux. Une branche propose le contenu ; une seconde devient une porte qui décide, canal par canal, quelle part passe — puis les deux sont multipliées. Comme un pochoir sur de la peinture en aérosol : la peinture est le contenu, le pochoir décide où elle se pose. Cette porte, appelée SwiGLU, ajoute une troisième matrice ; les modèles réduisent donc la largeur cachée aux deux tiers et ne paient rien de plus.
Deux gestes par bloc : rassembler, puis se souvenir.

Deux gestes par bloc : rassembler, puis se souvenir.

xx+Attn(x)(gather)xx+FFN(x)(recall)\begin{aligned} x &\leftarrow x + \text{Attn}(x) && \text{(gather)} \\ x &\leftarrow x + \text{FFN}(x) && \text{(recall)} \end{aligned}
Maintenant tout le bloc s'emboîte. L'attention rassemble le contexte — elle demande qu'est-ce qui est pertinent ici ? Puis la couche feed-forward répond depuis la mémoire — voici ce que j'en sais. Comme un passage de témoin : un coureur amène le contexte, le suivant ramène le savoir à l'arrivée. Empilez cette paire des dizaines de fois — avec les normalisations stabilisatrices intercalées — et vous avez le moteur : regarder, se rappeler, regarder, se rappeler.
🌱 Se souvenir d'un fait, est-ce différent de le chercher ?

🌱 Se souvenir d'un fait, est-ce différent de le chercher ?

Nous avons trouvé où réside le savoir : des keys reliées à des values, des motifs reliés à des réponses — une bibliothèque qui répond à l'instant où la bonne question l'effleure. Mais une bibliothèque ne comprend pas les livres qu'elle abrite. Si tout ce que le modèle sait est un value qui attend sa key, se souvenir d'un fait est-il une forme de pensée — ou seulement une recherche très rapide ? Et quelque part dans tout ce câblage, où le savoir devient-il compréhension ?
touchez →balayez ↑ pour approfondirbalayez ↓ pour quitter