Ir al contenido

¿Qué es Softmax?

Función softmax convirtiendo logits en distribución de probabilidad

Softmax es una función matemática que recibe una lista de números cualesquiera y los convierte en probabilidades que suman 1.

Es una fórmula que cualquier persona con una calculadora puede ejecutar. No hay complejidad oculta.

La razón por la que es importante es que los LLM la usan constantemente. Cada vez que el modelo tiene que decidir cuál es el siguiente token, pasa sus logits por softmax para obtener probabilidades. Sin softmax, el modelo no podría elegir nada.

La fórmula de softmax para un elemento i de un vector z es:

softmax(z_i) = e^(z_i) / Σ e^(z_j) para todo j

Donde e es el número de Euler (aproximadamente 2.71828).

En palabras simples: para cada número del vector, calculas e elevado a ese número. Después divides por la suma de todos los e elevado a cada número. El resultado es un número entre 0 y 1 que representa la probabilidad de ese elemento.

Imagina que el modelo produce estos tres logits para tres tokens posibles:

Token A: 2.0
Token B: 1.0
Token C: 0.5

Paso 1. Calculamos e elevado a cada logit:

e^2.0 = 7.389
e^1.0 = 2.718
e^0.5 = 1.649

Paso 2. Sumamos todo:

7.389 + 2.718 + 1.649 = 11.756

Paso 3. Dividimos cada uno por la suma:

Token A: 7.389 / 11.756 = 0.628 (62.8%)
Token B: 2.718 / 11.756 = 0.231 (23.1%)
Token C: 1.649 / 11.756 = 0.140 (14.0%)

Resultado: El Token A tiene un 62.8% de probabilidad de ser elegido, el B un 23.1% y el C un 14%.

Verificación: 0.628 + 0.231 + 0.140 = 0.999 (la diferencia es redondeo).

Se usa en dos sitios principales dentro de un Transformer:

En el mecanismo de atención: Cuando el modelo calcula cuánta atención debe prestar cada token a los demás tokens de la secuencia, genera unos scores brutos. Softmax convierte esos scores en pesos que suman 1, para que el modelo pueda hacer una media ponderada de la información de cada token.

En la capa final de predicción: Después de que el texto ha pasado por todos los bloques del Transformer, el modelo genera un logit por cada token posible del vocabulario. Si el vocabulario tiene 200.000 tokens, hay 200.000 logits. Softmax los convierte en 200.000 probabilidades que suman 1.

La exponencial tiene dos propiedades que la hacen útil:

Primera: Siempre da un resultado positivo. No importa si el logit es negativo. e elevado a cualquier número real es siempre mayor que cero. Eso garantiza que todas las probabilidades sean positivas.

Segunda: Amplifica las diferencias. Si un logit es un poco mayor que otro, la exponencial hace que la diferencia sea proporcionalmente mayor. Eso significa que softmax tiende a concentrar la probabilidad en los valores altos. El token con el logit más alto recibe una probabilidad desproporcionadamente mayor.

El nombre softmax sugiere que es una versión suavizada del máximo (max). Técnicamente, lo que hace es una versión suavizada del argmax: en vez de devolver solo el índice del valor más grande, devuelve una distribución de probabilidad donde el valor más grande tiene la mayor probabilidad. Algunos investigadores prefieren el nombre “softargmax”, pero softmax es el término estándar en la industria.

Puedes ejecutar este código en Python para comprobar el ejemplo:

import math
logits = [2.0, 1.0, 0.5]
exponenciales = [math.exp(x) for x in logits]
suma = sum(exponenciales)
probabilidades = [e / suma for e in exponenciales]
print(probabilidades)
# [0.6285, 0.2312, 0.1402]

Los números son verificables. La matemática no miente.

Prueba con distintos valores de logits y observa cómo cambian las probabilidades en nuestro simulador interactivo, donde puedes ver todo el proceso de generación de tokens paso a paso.

  • Diferencias pequeñas en logits producen diferencias grandes en probabilidades.
  • Un token con probabilidad del 90% puede ser completamente incorrecto.
  • La exponencial amplifica cualquier ventaja mínima hasta hacerla dominante.

Creer que alta probabilidad significa que el modelo está diciendo la verdad. La confianza del modelo no tiene relación con la veracidad del contenido.