Le FFN standard : FFN(x) = W2 · activation(W1 · x + b1) + b2, où W1 projette de la dimension du modèle vers une dimension intermédiaire plus grande (typiquement 4x), la fonction d'activation introduit la non-linéarité, et W2 projette en retour vers la dimension du modèle. Chaque position (token) passe à travers cela indépendamment — le FFN ne voit pas les autres tokens, seule la couche d'attention le fait.
Les LLM modernes (LLaMA, Mistral, etc.) utilisent SwiGLU au lieu du FFN standard : SwiGLU(x) = (W1 · x · SiLU) ⊗ (W3 · x). Cela ajoute une troisième matrice de poids (W3) et un mécanisme de porte qui permet au réseau de contrôler quelle information passe. Malgré les paramètres supplémentaires, ça performe mieux à calcul équivalent, donc la dimension intermédiaire est ajustée à la baisse pour compenser. C'est un cas où un composant légèrement plus complexe améliore le système entier.
La recherche suggère que les couches FFN fonctionnent comme des mémoires clé-valeur : la première couche linéaire (W1) détecte des patterns dans l'entrée (clés), et la seconde couche linéaire (W2) associe ces patterns à des mises à jour de sortie (valeurs). « La tour Eiffel est à » active des neurones spécifiques dans W1, qui via W2 promeuvent le token « Paris ». Cette interprétation clé-valeur explique pourquoi les couches FFN stockent les connaissances factuelles et pourquoi les techniques d'édition de connaissances peuvent modifier des faits spécifiques en mettant à jour des poids FFN spécifiques.