La fórmula: softmax(x_i) = exp(x_i) / ∑ exp(x_j). La exponencial amplifica las diferencias: si un logit es 10 y otro es 5, la proporción después de softmax no es 2:1 sino aproximadamente 150:1. Este comportamiento de "el ganador se lleva casi todo" es por qué los modelos tienden a ser confiados — softmax naturalmente produce distribuciones con picos en lugar de uniformes.
La temperatura se aplica dividiendo los logits antes del softmax: softmax(x_i / T). La temperatura T=1 es estándar. T<1 agudiza la distribución (más confiada, más determinista). T>1 la aplana (más uniforme, más aleatoria). Esto es exactamente cómo funciona el parámetro de "temperatura" en las APIs de LLMs — es un escalar aplicado a los logits antes del softmax final que selecciona el siguiente token.
Un detalle práctico de implementación: calcular exp(x) para valores grandes de x causa desbordamiento. La solución estándar es restar el valor máximo de todos los logits antes de aplicar softmax: softmax(x_i - max(x)). Esto no cambia la salida (la constante sustraída se cancela en la proporción) pero mantiene los números en un rango manejable. Toda implementación de softmax en producción hace esto, y es el tipo de detalle que importa cuando construyes desde cero.