La función softmax, también conocida como softargmax o función exponencial normalizada, es una función matemática que convierte un vector de números reales en una distribución de probabilidad. Es una generalización de la función logística a múltiples dimensiones y se utiliza ampliamente en aprendizaje automático, especialmente en aprendizaje profundo, para problemas de clasificación multiclase.
Definición
Dado un vector de entrada \( \mathbf{z} = (z_1, \dots, z_K) \in \mathbb{R}^K \) con \( K > 1 \), la función softmax \( \sigma: \mathbb{R}^K \to (0,1)^K \) se define para cada componente \( i \) como:
\[ \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \]
El resultado es un vector de valores positivos que suman 1, lo que permite interpretarlo como una distribución de probabilidad categórica. La operación exponencial amplifica las diferencias entre los valores de entrada, de modo que valores mayores producen probabilidades desproporcionadamente más altas. Por ejemplo, al aplicar softmax al vector \( (1, 2, 8) \) se obtiene aproximadamente \( (0.001, 0.002, 0.997) \), asignando casi toda la masa de probabilidad al elemento más grande.
Propiedades
La función softmax tiene varias propiedades importantes:
- Rango de salida: Cada componente se encuentra estrictamente entre 0 y 1.
- Suma igual a uno: La suma de todos los componentes de salida es exactamente 1.
- Preservación del orden: Si \( z_i > z_j \), entonces \( \sigma(\mathbf{z})_i > \sigma(\mathbf{z})_j \).
- Invarianza a desplazamientos constantes: Añadir una constante \( c \) a todas las entradas no cambia la salida, ya que \( e^{z_i + c} / \sum_j e^{z_j + c} = e^{z_i} / \sum_j e^{z_j} \). Esta propiedad se utiliza a menudo para mejorar la estabilidad numérica restando el valor máximo de entrada antes del cálculo.
Parámetro de temperatura
Una variante de la función softmax introduce un parámetro de temperatura \( \beta \) (o su inverso \( T = 1/\beta \)):
\[ \sigma(\mathbf{z})_i = \frac{e^{\beta z_i}}{\sum_{j=1}^{K} e^{\beta z_j}} \]
Cuando \( \beta > 1 \), la distribución resultante es más concentrada ("más nítida") alrededor del valor máximo de entrada, mientras que con \( 0 < \beta < 1 \) se obtiene una distribución más uniforme. Este parámetro se usa comúnmente en muestreo top-k y escalado de temperatura en modelos de IA generativa para controlar la aleatoriedad de las salidas.
Aplicaciones
Softmax es un componente fundamental en muchas arquitecturas de redes neuronales:
- Clasificación: Como capa de activación final, convierte las puntuaciones brutas (logits) en probabilidades de clase, lo que permite el entrenamiento con funciones de pérdida como la entropía cruzada.
- Mecanismos de atención: En modelos transformers, softmax se utiliza para calcular los pesos de atención sobre las posiciones de una secuencia, como se observa en atención multi-cabeza.
- Aprendizaje por refuerzo: Convierte preferencias de acción en una política estocástica.
- Modelos de mezcla: Se emplea para calcular los pesos de mezcla en modelos como los de mezcla de gaussianas.
Estabilidad numérica
El cálculo directo de la exponencial puede provocar desbordamientos numéricos con entradas grandes. Una solución común es restar el valor máximo de entrada antes de aplicar la exponencial:
\[ \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} \]
Esta transformación no altera el resultado gracias a la propiedad de invarianza a desplazamientos, pero garantiza que el mayor exponente sea cero, evitando así el desbordamiento.
Conceptos relacionados
La función softmax está estrechamente relacionada con la función logística, que es su caso especial cuando \( K = 2 \). También aparece en el contexto de funciones de pérdida como la entropía cruzada, y en la decodificación mediante búsqueda de haz para la generación de secuencias. En la inferencia de modelos de lenguaje grandes, softmax se aplica a los logits para obtener probabilidades de tokens, a menudo con ajustes de temperatura para equilibrar creatividad y coherencia.