Comprendre Softmax
Un réseau qui calcule des scores de classe ou de token produit des réels arbitraires, qui ne peuvent pas se lire comme des probabilités : ils peuvent être négatifs et leur somme ne vaut rien de particulier. Le softmax est la réparation standard. Exponentier rend chaque entrée positive et préserve l’ordre, et diviser par la somme fait des entrées une distribution. Rien d’autre n’est changé, donc le plus grand score reste l’issue la plus probable.
L’exponentielle n’est pas un choix arbitraire de fonction positive. C’est elle qui place la sortie dans la famille exponentielle, et c’est elle qui réduit le gradient de l’entropie croisée par rapport aux scores à la distribution prédite moins la distribution observée - une soustraction, sans division ni chaîne de facteurs. Cette simplicité explique la constance avec laquelle les deux sont employés ensemble.
Deux propriétés comptent en pratique. Le softmax est invariant par translation : ajouter une constante à tous les scores ne change rien, ce qui dit que les scores n’ont de sens que les uns par rapport aux autres. Les implémentations en profitent en soustrayant le plus grand score avant d’exponentier, car l’exponentielle d’un grand nombre déborde tandis que celle d’un nombre négatif ou nul ne le peut pas. Et diviser chaque score par une température aiguise la distribution quand la température tend vers zéro et l’aplatit vers l’uniforme quand elle grandit.
Le nom induit en erreur d’une manière qu’il vaut la peine de nommer. Le softmax est un substitut lisse de l’argmax, non du maximum : il renvoie une distribution sur des positions, qui devient un vecteur one-hot à la position gagnante quand la température tend vers zéro.
Comment calculer
\mathrm{softmax}(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}
où
- z_i
- le score brut, ou logit, de l’issue i
- K
- le nombre d’issues, classes ou tokens du vocabulaire
Exemple : Softmax
Prenez les scores 2, 1 et 0. L’exponentiation donne 7,389056, 2,718282 et 1, de somme 11,107338, donc la distribution vaut 0,665241, 0,244728 et 0,090031. Un écart d’une unité dans les scores est devenu un rapport d’environ 2,72 dans les probabilités : c’est l’exponentielle à l’œuvre.
Ajoutez 100 à chaque score et la réponse est inchangée jusqu’au dernier chiffre, car le facteur ajouté se simplifie entre numérateur et dénominateur. Le calcul naïf n’y survivrait pas : exp(1000) déborde franchement un flottant double, et c’est exactement pourquoi les implémentations soustraient d’abord le plus grand score.
Changer la température déplace beaucoup ces mêmes trois scores. À une température de 0,5 la distribution vaut 0,8668, 0,1173 et 0,0159 ; à 1 elle vaut 0,6652, 0,2447, 0,0900 ; à 10 elle vaut 0,3672, 0,3322 et 0,3006, soit presque uniforme sur trois issues.
Questions fréquentes
Pourquoi ne pas simplement diviser chaque score par le total ?
Parce que les scores peuvent être négatifs, ce qui produirait des probabilités négatives, et qu’un total nul diviserait par zéro. Exponentier d’abord supprime les deux problèmes, et c’est aussi ce qui donne à l’entropie croisée son gradient simple.
Une probabilité softmax élevée signifie-t-elle que le modèle est sûr ?
Elle signifie que le score gagnant était loin devant les autres, ce qui n’est pas la même chose. Un modèle peut produire une distribution très piquée sur une entrée fort différente de tout ce qu’il a vu à l’entraînement, et le pic n’en dit rien.
En résumé
Le softmax transforme des scores en distribution en exponentiant puis en normalisant. Il préserve l’ordre, ignore toute constante ajoutée à tous les scores, s’aiguise ou s’aplatit avec la température, et remplace en douceur l’argmax plutôt que le max.