Escalado de temperatura y ECE: calibra la confianza del modelo paso a paso

Trabaja con softmax, ajusta una temperatura sobre seis predicciones, calcula el ECE y descubre por qué una mejor verosimilitud aún puede producir una peor puntuación de calibración agrupada.

Comparte este artículo

Seis predicciones pueden ser correctas cuatro de cada seis veces y, aun así, contar dos historias de probabilidad muy distintas. En el ejemplo desarrollado a continuación, la clase ganadora nunca cambia. Dividir cada logit por una temperatura ajustada solo reduce o aumenta la confianza asociada a cada ganadora.

Ese pequeño ajuste mejora la verosimilitud logarítmica negativa media de 0.8230.823 a 0.8120.812. Después ocurre algo incómodo: el error de calibración esperado, calculado con cuatro intervalos de igual anchura, aumenta del 12.9%12.9\% al 38.0%38.0\%.

La aritmética no indica un fallo del escalado de temperatura. Expone una lección más útil: la calibración es una relación entre las probabilidades predichas y los resultados observados, mientras que el ECE es una estimación de esa relación que depende de la muestra y de los intervalos. Al terminar, podrás ajustar la temperatura, calcular el ECE, reproducir ambos resultados en Python y explicar por qué ninguno de los dos números puede trasladarse sin cambios a una nueva población de despliegue.

El trabajo actual de evaluación hace práctica esta distinción. Un piloto de Google DeepMind publicado el 27 de agosto mantuvo ocultos entre sí los pesos propietarios del modelo y los prompts de prueba externos, mientras que MLCommons proporcionó un subconjunto reservado de AILuminate. Esos controles protegen el material de prueba. No deciden qué población debe describir una probabilidad. NIST AI 800-3 plantea el mismo punto para la exactitud: el rendimiento en preguntas fijas de referencia y el rendimiento en un universo más amplio de preguntas similares son objetivos de medición distintos.

Un pronóstico probabilístico hace una promesa comprobable

Supón que un clasificador predice la clase AA con una confianza de 0.80.8 en muchos ejemplos independientes. Una confianza calibrada significa que alrededor del 80%80\% de esas predicciones son correctas. De forma más formal, si Y^\hat{Y} es la clase predicha y P^\hat{P} su confianza declarada, la calibración perfecta de la etiqueta principal exige

Pr(Y=Y^P^=p)=p.\Pr(Y=\hat{Y}\mid \hat{P}=p)=p.

Esta definición no dice que el clasificador sea exacto. Un modelo que predice con confianza 0.60.6 y acierta el 60%60\% de las veces está calibrado aunque se equivoque a menudo. Un modelo también puede ordenar correctamente cada ejemplo y, sin embargo, informar de 0.990.99 para casos que solo aciertan el 80%80\% de las veces. La exactitud pregunta quién ganó; la calibración comprueba si la probabilidad asociada cumplió su promesa.

El evento y la población necesitan nombres. «Correcto» puede significar coincidencia exacta de clase, finalización de una tarea u otro resultado puntuado. Los ejemplos pueden ser solicitudes de asistencia al cliente en un idioma, preguntas de referencia o el tráfico de producción de mañana. Cambia cualquiera de los dos lados y también cambia la afirmación probabilística. Para conocer el flujo de evaluación más amplio que sustenta esa elección, consulta cómo las evaluaciones dan forma a los productos de IA.

La temperatura gira el dial de confianza

Un clasificador suele emitir logits: puntuaciones sin restricciones z1,,zKz_1,\ldots,z_K para KK clases. Softmax las convierte en probabilidades:

pk=ezkj=1Kezj.p_k=\frac{e^{z_k}}{\sum_{j=1}^{K}e^{z_j}}.

El escalado de temperatura introduce un número positivo TT:

pk(T)=ezk/Tj=1Kezj/T.p_k(T)=\frac{e^{z_k/T}}{\sum_{j=1}^{K}e^{z_j/T}}.

Cuando T>1T>1, las diferencias entre los logits escalados se reducen y el vector de probabilidades se concentra menos. Cuando 0<T<10<T<1, las diferencias aumentan y el vector se vuelve más agudo. T=1T=1 deja intactas las probabilidades originales.

Para el primer ejemplo, los logits son [3,1,0][3,1,0]. Restar el logit máximo antes de exponenciar da el mismo softmax sin manejar números innecesariamente grandes:

softmax([3,1,0])=[1,e2,e3]1+e2+e3[0.844,0.114,0.042].\operatorname{softmax}([3,1,0]) =\frac{[1,e^{-2},e^{-3}]}{1+e^{-2}+e^{-3}} \approx[0.844,0.114,0.042].

Con T=1.23T=1.23, el vector se convierte aproximadamente en [0.779,0.153,0.068][0.779,0.153,0.068]. La clase AA sigue ganando. De hecho, toda temperatura positiva conserva el orden de los logits, así que el escalado de temperatura no puede cambiar la clase predicha ni la exactitud de clasificación. Solo cambia la concentración de probabilidad.

Ajusta un escalar frente a etiquetas reservadas

El artículo de calibración revisado por pares de Guo y sus colegas ajusta TT minimizando la verosimilitud logarítmica negativa (NLL) en un conjunto de validación reservado, mientras mantiene fijos los parámetros de la red. Para nn ejemplos etiquetados, el objetivo es

L(T)=1ni=1nlogpi,yi(T),\mathcal{L}(T)=-\frac{1}{n}\sum_{i=1}^{n}\log p_{i,y_i}(T),

donde pi,yi(T)p_{i,y_i}(T) es la probabilidad escalada asignada a la clase verdadera del ejemplo ii. Un error cometido con mucha confianza recibe una penalización grande porque la probabilidad de la clase verdadera es pequeña.

Este es el conjunto de validación sintético completo. Las etiquetas AA, BB y CC representan tres clases arbitrarias; no intervienen predicciones privadas ni de alto riesgo.

EjemploLogitsClase realClase predicha¿Correcto?Confianza con T=1T=1Confianza con T=1.23T=1.23
1[3,1,0][3,1,0]AA0.8440.779
2[2.5,1,0][2.5,1,0]AA0.7660.701
3[3,0.5,0][3,0.5,0]BANo0.8830.821
4[1.5,2,0][1.5,2,0]BB0.5740.537
5[0.5,0,1.5][0.5,0,1.5]CC0.6290.575
6[2,2.2,0][2,2.2,0]ABNo0.5180.496

La búsqueda de temperaturas positivas da T1.22975T\approx1.22975. La NLL media baja de 0.822780.82278 con T=1T=1 a 0.812430.81243 con el valor ajustado. La exactitud se mantiene en 4/64/6, exactamente como predice el orden de clases conservado.

Este conjunto es deliberadamente pequeño para facilitar el cálculo. No es lo bastante grande para aprobar un calibrador desplegado, y utilizar las mismas seis filas para ajustar TT y declarar el rendimiento produciría una estimación optimista de la generalización.

El ECE comprime un diagrama de fiabilidad

Un diagrama de fiabilidad, también llamado curva de calibración, agrupa las predicciones por confianza. Para cada intervalo BmB_m, calcula

acc(Bm)=1BmiBm1(y^i=yi)\operatorname{acc}(B_m) =\frac{1}{|B_m|}\sum_{i\in B_m}\mathbf{1}(\hat{y}_i=y_i)

y

conf(Bm)=1BmiBmp^i.\operatorname{conf}(B_m) =\frac{1}{|B_m|}\sum_{i\in B_m}\hat{p}_i.

El indicador 1(y^i=yi)\mathbf{1}(\hat{y}_i=y_i) vale 11 para una predicción correcta y 00 en caso contrario. Un intervalo se encuentra en la diagonal ideal cuando su exactitud coincide con su confianza media.

El error de calibración esperado toma un promedio ponderado por muestra de las diferencias absolutas entre intervalos:

ECE=m=1MBmnacc(Bm)conf(Bm).\operatorname{ECE} =\sum_{m=1}^{M}\frac{|B_m|}{n} \left|\operatorname{acc}(B_m)-\operatorname{conf}(B_m)\right|.

El cálculo siguiente utiliza cuatro intervalos de confianza fijos y de igual anchura: [0,0.25)[0,0.25), [0.25,0.50)[0.25,0.50), [0.50,0.75)[0.50,0.75) y [0.75,1][0.75,1]. Los intervalos vacíos no contribuyen.

Diagramas de fiabilidad de cuatro intervalos para el cálculo de seis ejemplos. El escalado de temperatura desplaza la confianza hacia el centro, pero los ejemplos también cruzan los límites de los intervalos, por lo que la estimación ECE agrupada empeora.
Puntos de fiabilidad antes y después del escalado de temperatura Una diagonal marca la calibración perfecta. Antes del escalado, dos puntos circulares aparecen con confianza media 0,574 y exactitud 0,667, y con confianza 0,831 y exactitud 0,667. Después aparecen tres puntos cuadrados: confianza 0,496 y exactitud cero; confianza 0,604 y exactitud uno; y confianza 0,800 y exactitud 0,500. La muestra pequeña y los cruces de intervalos elevan el ECE del 12,9 al 38,0 por ciento.
Estadísticas exactas de los intervalos representados en el diagrama
TemperaturaIntervalo de confianzaEjemplosConfianza mediaExactitud
1.00[0.50, 0.75)30.5740.667
1.00[0.75, 1.00]30.8310.667
1.23[0.25, 0.50)10.4960.000
1.23[0.50, 0.75)30.6041.000
1.23[0.75, 1.00]20.8000.500

Antes del escalado, las tres predicciones de [0.50,0.75)[0.50,0.75) contribuyen

360.6670.5740.047,\frac{3}{6}|0.667-0.574|\approx0.047,

y las tres de [0.75,1][0.75,1] contribuyen aproximadamente 0.0820.082. Su suma es ECE0.129\operatorname{ECE}\approx0.129, o un 12.9%12.9\%.

Después del escalado, una predicción cruza por debajo de 0.500.50 y los otros ejemplos forman grupos de tres y dos. Las tres contribuciones de los intervalos son aproximadamente 0.0830.083, 0.1980.198 y 0.1000.100, lo que da ECE0.380\operatorname{ECE}\approx0.380, o un 38.0%38.0\%.

Mejor verosimilitud, peor ECE

La temperatura ajustada optimizó la NLL, no el ECE de cuatro intervalos. La NLL evalúa la probabilidad completa asignada a cada clase verdadera y cambia suavemente con TT. El ECE arroja las predicciones en intervalos, descarta el detalle dentro de cada uno y cambia bruscamente cuando una confianza cruza un borde.

Seis ejemplos amplifican esa inestabilidad. Un error en un intervalo de un solo ejemplo tiene una exactitud del 0%0\%; un resultado correcto haría que el mismo intervalo tuviera una exactitud del 100%100\%. Mover el borde o elegir un número distinto de intervalos puede producir otro ECE sin cambiar ninguna predicción. Guo et al. señalan explícitamente que el ECE es una aproximación agrupada y que el esquema de agrupación puede afectar a los resultados. La guía de calibración de scikit-learn también acompaña la curva con un histograma porque un punto sin su recuento de muestras se puede sobreinterpretar fácilmente.

Así que el ejemplo respalda tres afirmaciones separadas:

  • la TT seleccionada mejora la NLL en estas seis filas;
  • el escalado de temperatura deja sin cambios sus clases predichas y su exactitud;
  • el ECE de cuatro intervalos empeora en las mismas filas.

Nada de esto implica que el calibrador vaya a mejorar las probabilidades de una muestra nueva. Esa cuestión requiere datos de evaluación intactos extraídos de la población a la que se refiere la decisión de despliegue.

Reproduce todos los números con NumPy

El siguiente programa realiza una búsqueda densa sobre un escalar positivo. La cuadrícula es deliberadamente transparente; el código de producción puede usar un optimizador escalar acotado y debe conservar un conjunto de evaluación final independiente.

import numpy as np

logits = np.array([
    [3.0, 1.0, 0.0],
    [2.5, 1.0, 0.0],
    [3.0, 0.5, 0.0],
    [1.5, 2.0, 0.0],
    [0.5, 0.0, 1.5],
    [2.0, 2.2, 0.0],
])
labels = np.array([0, 0, 1, 1, 2, 0])

def probabilities(temperature):
    scaled = logits / temperature
    scaled -= scaled.max(axis=1, keepdims=True)
    exp = np.exp(scaled)
    return exp / exp.sum(axis=1, keepdims=True)

def nll(temperature):
    p = probabilities(temperature)
    return -np.log(p[np.arange(len(labels)), labels]).mean()

temperatures = np.linspace(0.25, 4.0, 15_001)
temperature = temperatures[np.argmin([nll(t) for t in temperatures])]

def ece(temperature, edges=np.linspace(0.0, 1.0, 5)):
    p = probabilities(temperature)
    predictions = p.argmax(axis=1)
    confidence = p.max(axis=1)
    correct = predictions == labels
    total = 0.0
    for lower, upper in zip(edges[:-1], edges[1:]):
        in_bin = (confidence >= lower) & (confidence < upper)
        if upper == 1.0:
            in_bin = (confidence >= lower) & (confidence <= upper)
        if in_bin.any():
            total += in_bin.mean() * abs(
                correct[in_bin].mean() - confidence[in_bin].mean()
            )
    return total

print(f"T={temperature:.5f}")
print(f"NLL: {nll(1.0):.5f} -> {nll(temperature):.5f}")
print(f"ECE: {ece(1.0):.3f} -> {ece(temperature):.3f}")

La salida esperada es aproximadamente:

T=1.22975
NLL: 0.82278 -> 0.81243
ECE: 0.129 -> 0.380

Un calibrador pertenece a un contrato de medición

Un registro de calibración defendible debe indicar el punto de control del modelo, los logits sin escalar, la definición del resultado, la población, las ventanas temporales de los datos, el método de división, la TT ajustada, el objetivo de optimización, los límites de los intervalos de fiabilidad, sus recuentos y al menos una regla de puntuación adecuada, como la NLL. Ajusta el calibrador con ejemplos que no se hayan utilizado para entrenar el clasificador y evalúalo después con datos intactos.

El cambio de distribución es el caso límite decisivo. Una temperatura ajustada con preguntas de referencia limpias puede ser incorrecta para prompts cortos, otro idioma, una mezcla de clases nueva o entradas recopiladas después de que cambie el producto. El escalado de temperatura no puede reparar un ordenamiento de clases deficiente, detectar un dominio no observado ni demostrar que un sistema es seguro. Solo reescala los logits bajo los supuestos de validación utilizados para ajustar un número.

Por eso, una revisión del despliegue debe mantener la curva de fiabilidad y los recuentos de muestras junto al ECE, en lugar de tratar el escalar como un certificado. Si una nueva cohorte aleja esos puntos de la diagonal, la siguiente tarea no es defender el ECE antiguo. Es identificar qué población cambió, reunir suficientes etiquetas para medirlo y decidir si el contrato de calibración aún describe el sistema en uso.

Fuentes

  1. On Calibration of Modern Neural Networks
  2. NIST AI 800-3 expands the AI evaluation toolbox
  3. scikit-learn probability calibration documentation
  4. Google DeepMind's double-blind AI evaluation pilot
  5. MLCommons on AILuminate's double-blind reliability evaluation