La formule : softmax(x_i) = exp(x_i) / ∑ exp(x_j). L'exponentielle amplifie les différences : si un logit est 10 et un autre 5, le ratio après softmax n'est pas 2:1 mais environ 150:1. Ce comportement de « le gagnant rafle presque tout » est la raison pour laquelle les modèles tendent à être confiants — softmax produit naturellement des distributions piquées plutôt qu'uniformes.
La température est appliquée en divisant les logits avant softmax : softmax(x_i / T). La température T=1 est standard. T<1 affine la distribution (plus confiant, plus déterministe). T>1 l'aplatit (plus uniforme, plus aléatoire). C'est exactement ainsi que le paramètre « température » des API de LLM fonctionne — c'est un scalaire appliqué aux logits avant le softmax final qui sélectionne le prochain token.
Un détail pratique d'implémentation : calculer exp(x) pour de grandes valeurs de x cause un dépassement. Le correctif standard est de soustraire la valeur maximale de tous les logits avant d'appliquer softmax : softmax(x_i - max(x)). Cela ne change pas la sortie (la constante soustraite s'annule dans le ratio) mais garde les nombres dans une plage gérable. Chaque implémentation de softmax en production fait cela, et c'est le genre de détail qui compte quand tu construis à partir de zéro.