Mixture-of-Experts¶
L'intuition¶
Dans un Transformer classique, chaque jeton traverse le même réseau feed-forward. Ce réseau contient la majorité des paramètres du modèle, et il est intégralement utilisé pour chaque jeton — que le jeton soit un mot de liaison français ou un identifiant de fonction C++.
Le Mixture-of-Experts (MoE) remplace ce réseau unique par un ensemble de réseaux plus petits, les experts, et n'en active qu'une poignée par jeton. Un petit module appelé routeur décide lesquels.
Résultat : le modèle peut contenir énormément de paramètres — donc de connaissance — sans que le coût de calcul par jeton n'explose.
Le mécanisme¶
Pour un jeton de représentation \(x\) :
- le routeur calcule un score \(s_e\) pour chacun des \(N\) experts ;
- on retient les \(k\) meilleurs scores ;
- la sortie est la somme pondérée des sorties de ces \(k\) experts.
où \(E_e\) est le \(e\)-ième expert et \(g_e\) le poids de routage normalisé.
Les chiffres de DeepSeek-V4.1-Flash¶
| Paramètre | Valeur |
|---|---|
| Experts routés par couche | 384 |
| Expert partagé par couche | 1 |
| Experts routés activés par jeton | 6 |
| Dimension interne d'un expert | 2 304 |
| Fonction d'activation | SwiGLU, écrêtée à 10 |
| Couches MoE | les 40 |
L'expert partagé est toujours actif : il capture ce qui est utile à tous les jetons, ce qui libère les experts routés pour la spécialisation. Chaque jeton traverse donc \(1 + 6 = 7\) experts sur 385.
Le compte des paramètres¶
Un expert SwiGLU contient trois matrices (\(W_{\text{gate}}\), \(W_{\text{up}}\), \(W_{\text{down}}\)) de taille \(5\,120 \times 2\,304\) :
Sur 385 experts et 40 couches :
C'est 98,7 % des 552 G annoncés. Tout le reste — attention, plongements, encodeur visuel — tient dans les 7 G restants. Le recalcul complet retrouve 551,93 G, à 0,01 % de l'annonce.
Et pour les paramètres activés par jeton :
auxquels s'ajoutent l'attention (5,1 G) et la tête de sortie (0,66 G), soit 15,7 G — les 16 G annoncés.
Le rapport 385/7
Un jeton n'utilise que 1,8 % des paramètres MoE du modèle. C'est ce facteur 55 qui permet à un modèle de 552 G de coûter, par jeton, à peu près ce que coûterait un modèle dense de 16 G.
L'équilibrage de charge¶
Le problème classique du MoE est l'effondrement du routage : si quelques experts sont choisis beaucoup plus souvent que les autres, les experts délaissés ne s'entraînent pas, et le calcul distribué se déséquilibre.
DeepSeek utilise depuis V3 un équilibrage sans perte auxiliaire : au lieu d'ajouter un terme à la fonction de coût — ce qui perturbe l'objectif principal — on maintient un biais de correction par expert, ajouté aux scores uniquement pour la sélection. Les poids de combinaison, eux, viennent des scores non biaisés.
Après chaque pas d'entraînement, chaque biais est ajusté selon la charge observée de son expert : trop sollicité, on le baisse ; délaissé, on le monte.
La nouveauté de V4.1 : l'équilibrage par modalité¶
Les jetons d'image et les jetons de texte n'ont pas la même distribution de représentations, et donc pas les mêmes préférences de routage. Équilibrer leur charge agrégée peut masquer un déséquilibre à l'intérieur de chaque modalité : un expert peut paraître équilibré tout en étant saturé d'images et ignoré par le texte.
DeepSeek-V4.1-Flash maintient donc deux jeux de biais de correction indépendants, un pour le texte et un pour l'image. Chaque jeton utilise le biais de sa modalité pour choisir ses experts ; les deux jeux sont mis à jour séparément selon leurs charges respectives.
La vitesse de mise à jour est de 0,001 pour les deux modalités, avec en plus une petite perte d'équilibre au niveau de la séquence (poids 0,0001) pour éviter les déséquilibres extrêmes à l'intérieur d'une même séquence.
À retenir
Le MoE explique pourquoi 552 G de paramètres coûtent 16 G par jeton. Il n'explique rien sur le cache clé-valeur : un MoE stocke exactement autant de cache qu'un modèle dense de même profondeur. Les deux compressions sont orthogonales.
Chapitre suivant : FP8, FP4 et quantification