🧮 Computational Mathematics

Inicio · Parte 16 — Matemática de Transformers, modelos generativos, grafos y RL

321 — Softmax y distribuciones categóricas

experto clase 1 de 20 4 horas demostración softmax_distributions

Restar el máximo antes de exponenciar no cambia el resultado y evita el desbordamiento.

Fórmulas

softmax(z)ᵢ = e^{zᵢ} / Σⱼ e^{zⱼ}
softmax(z + c) = softmax(z)  para todo c
implementación: restar max(z) antes de exponenciar

Desarrollo

Softmax convierte un vector de números reales cualesquiera en una distribución de probabilidad: todos positivos y sumando 1. Es la capa de salida de todo clasificador y la pieza que normaliza los pesos de atención, así que aparece dos veces en cada bloque Transformer.

Su propiedad estructural es la invariancia frente a desplazamientos: sumar la misma constante a todos los logits no cambia la salida, porque el factor común se cancela entre numerador y denominador. Solo importan las diferencias entre logits, no sus valores absolutos.

Esa invariancia tiene una consecuencia práctica que no es opcional. Si un logit vale 1000, exp(1000) desborda a infinito y el resultado es NaN. Como restar el máximo no altera la salida, toda implementación seria lo hace: los exponentes quedan entre exp(−algo) y exp(0) = 1, siempre representables. Es el truco de estabilidad numérica más rentable de todo el aprendizaje profundo, y viene directamente de la parte 01.

Conviene además recordar su origen: softmax es la distribución de máxima entropía compatible con los logits, como se vio en la clase 267. No es una normalización elegida por comodidad sino la solución de un problema de optimización con restricciones, y esa es la razón de su forma exponencial.

Ejemplo trabajado

Invariancia y estabilidad numérica.

logits: [2,0 ; 1,0 ; 0,1 ; −1,0]

probabilidades: [0,638066 ; 0,234731 ; 0,095435 ; 0,031767]
suman 1,0                                            ✓

Sumando 1000 a todos los logits:
  [0,638066 ; 0,234731 ; 0,095435 ; 0,031767]
  idéntico resultado                                 ✓

Sin restar el máximo:
  exp(1002) = inf  →  inf/inf = NaN                  ✗

Restando el máximo (2,0 o 1002,0, da igual):
  exponentes en [exp(−3), exp(0)]                    ✓

Solo importan las diferencias entre logits.

Qué calcula el laboratorio

Softmax: de logits arbitrarios a una distribución categórica.

python classes/part-16-matematica-de-transformers-modelos-generativos-grafos-y-rl/321-softmax-y-distribuciones-categoricas/lab.py
compmath run 321

Salidas del laboratorio (9)

Muestra de la ejecución real

{
  "logits": [
    2.0,
    1.0,
    0.1,
    -1.0
  ],
  "probabilidades": [
    0.638066,
    0.234731,
    0.095435,
    0.031767
  ],
  "suman_1": 1.0,
  "invariante_a_desplazamiento": [
    0.638066,
    0.234731,
    0.095435,
    0.031767
  ],
  "con_logits_enormes": [
    0.638066,
    0.234731,
    0.095435,
    0.031767
  ],
  "sin_restar_el_maximo": "exp(1000) desborda a inf"
}

Errores comunes

Dónde se usa

Capa de salida de clasificadores, normalización de pesos de atención, muestreo de tokens y políticas estocásticas en aprendizaje por refuerzo.

Idea rectora de la parte

La atención es un promedio ponderado por similitud, normalizado con softmax.

Error a evitar

Olvidar la máscara causal en el modelado autoregresivo.

Conexión con IA

Esta parte es la traducción matemática directa de los papers que definen el estado del arte actual.

Bibliografía de la clase

Archivos de la clase