47  R4 · Medir tu propio γ (y reproducir el atlas)

Qué es. Un laboratorio para convertir atención real en una medida de decaimiento reproducible. Primero decidimos qué estamos midiendo; después ajustamos la curva. Conservamos la idea del libro: darte cómo comprobar una afirmación, no pedirte que la creas.

Tras repetir la medición, indica si cambió el protocolo, difieren las curvas o parecen estables. Registra esa observación en el seguimiento del resolutor para adaptar la siguiente comprobación. Es una declaración tuya; no modifica el análisis inicial.

47.1 La idea en una frase

γ necesita apellido: modelo, capa, cabeza, textos, posiciones y regla de ajuste. Dos números llamados γ pueden responder a preguntas distintas si cambia ese protocolo.

🧩 Analogía — medir la lluvia. Un pluviómetro en un jardín, el promedio de una ciudad y el máximo durante una tormenta miden lluvia, pero no son intercambiables. Con atención pasa lo mismo: la última consulta y el promedio de todas las consultas miran distancias parecidas desde situaciones distintas.

47.2 El procedimiento, paso a paso

  1. Congela el contexto de la medida. Identificador y revisión del modelo, tokenizador, plantilla, corpus y semilla; longitud efectiva, precisión, motor y configuración de RoPE. Usa textos independientes y representativos. Tokens aleatorios son un control aparte.
  2. Recoge atención real por capa y cabeza. Ejecuta el modelo con un backend que exponga las probabilidades de atención. output_attentions=True no garantiza que todos los kernels las devuelvan. Guarda la versión y el backend realmente utilizados; desactiva dropout y documenta el coste de materializar matrices grandes.
  3. Declara las posiciones de consulta. Por ejemplo, solo la última posición de cada texto de longitud fija. Promediar todas las filas es otro protocolo: cambia la mezcla de normalizadores y de contextos disponibles. No intercambies ambos resultados.
  4. Separa sumidero, recencia y cola. Declara cuántos tokens iniciales excluyes del ajuste y el rango de distancias. Mide su masa aparte. No renormalices silenciosamente las filas después de excluirlos: cambiaría el peso relativo de cada consulta.
  5. Promedia por distancia y después ajusta. Primero media aritmética de los pesos válidos a cada distancia; después logaritmo y recta. Ajustar todos los pares individuales en log-log es otro estimador: sobrepondera distancias con más pares y promedia logaritmos.
  6. Entrega la curva y su incertidumbre. γ, R² en log-log, residuos, número de pares por distancia y rango de ajuste. Repite por cabeza y capa antes de resumir el modelo.

47.3 La fórmula, con cada decisión a la vista

Piensa en reunir en un vaso todas las medidas tomadas a la misma distancia. La media es el nivel de ese vaso; la recta resume cómo cambian los niveles al alejarse:

\[\bar A(d)=\frac{1}{|\mathcal P_d|}\sum_{(b,i,j)\in\mathcal P_d} A^{(b)}_{ij}, \qquad \log\bar A(d)=c-\gamma\log d+r_d.\]

  • \(b\) identifica un texto; \(i,j\), consulta y clave. Se fija una cabeza y una capa.
  • \(\mathcal P_d\) reúne solo los pares admitidos por el protocolo con \(i-j=d\); \(|\mathcal P_d|\) cuenta cuántas observaciones entran en la media.
  • \(c\) fija la altura de la recta; \(\gamma\) es la pendiente con signo cambiado. \(r_d\) es el residuo: lo que la recta no explica a esa distancia.

Ejemplo a mano. Dos muestras dan pesos 0,04 y 0,16 a una distancia. Su media es 0,10. La media de sus logaritmos corresponde a \(\sqrt{0{,}04\times0{,}16}=0{,}08\). Promediar antes o después del logaritmo ya cambió el dato, antes incluso de ajustar γ.

47.4 Código mínimo que sí promedia por distancia

Este ejemplo recibe probabilidades ya extraídas, de una cabeza y una capa, con forma [muestras, consulta, clave]. Exige textos de igual longitud sin padding y atención causal densa. No carga pesos ni hace inferencia. Para matrices con otra máscara o longitudes distintas, adapta y versiona el protocolo en lugar de rellenar con ceros.

Descargar el estimador completo.

import numpy as np
from gamma_measurement import measure_gamma

# attention.npy: probabilidades reales, una capa/cabeza, sin dropout ni padding.
A = np.load("attention.npy")
n = A.shape[-1]
result = measure_gamma(
    A, queries=[n - 1], sink_tokens=4,
    d_min=16, d_max=min(512, n - 5),
)
print(result["gamma"], result["r2_log"])

Los números 4, 16 y 512 son elecciones ilustrativas, no constantes universales: requieren una secuencia suficientemente larga y un rango fijado antes de mirar el ajuste. El estimador rechaza rangos sin suficientes distancias y medias nulas; no introduce un ε artificial para esconderlas. Este es su paso central:

# q: posiciones de consulta declaradas; A: muestras × consulta × clave.
for d in range(d_min, d_max + 1):
    valid_q = q[q - d >= sink_tokens]
    if valid_q.size:
        values = A[:, valid_q, valid_q - d]
        distances.append(d)
        means.append(values.mean())  # media aritmética ANTES del logaritmo
        counts.append(values.size)

47.5 Los controles que lo hacen interpretable

R² es bondad de ajuste, no confianza probabilística. Un R² alto dice que una recta describe bien esa curva en esos ejes y ese intervalo; no demuestra una ley universal, no mide la incertidumbre de γ y no garantiza calidad de respuestas. Una curva casi plana puede hacer R² indefinido; el código devuelve None en ese caso.

Remuestrea textos completos con reemplazo y repite el pipeline para construir un intervalo bootstrap; no trates cada par de tokens como observación independiente. Si varios fragmentos proceden del mismo documento, remuestrea por documento. Con una sola muestra no obtienes incertidumbre entre textos. El intervalo tampoco incluye por sí solo el sesgo de corpus o del protocolo.

Inspecciona los residuos y repite con rangos vecinos declarados. Contrasta, sobre las mismas distancias y la misma escala de error, una exponencial y una potencia con corte; si añades parámetros, usa distancias o textos reservados y declara la selección. Un R² alto aislado no decide cuál describe mejor la cola. Publica también curvas que no aceptan un exponente único.

Tabla 47.1: Recibo mínimo de una medida de γ.
Entrega Para qué sirve
Modelo/revisión, corpus, semilla, tokenizer y backend Repetir la ejecución
Capa, cabeza, consultas, máscara, longitud y exclusiones Saber qué distribución se midió
Curva, número de pares, rango y residuos Detectar mezclas, huecos y fallos de forma
γ por cabeza/capa, intervalo y unidad de remuestreo Distinguir variación de un resumen agregado
Identificador de protocolo y código Comparar solo medidas compatibles

Del aviso al siguiente paso. En Resolver mi problema → Atención, pega uno o dos informes con γ y abre Ver detalles del protocolo. El panel enumera 19 condiciones conocidas en cuatro grupos: modelo/datos, muestreo, ejecución y agregación/ajuste. Marca lo ausente y lo que difiere de la referencia. Los campos personalizados cuentan, pero sus nombres y valores no se exportan.

Qué comprobar primero da prioridad a las contradicciones o límites de contexto, después a las diferencias entre protocolos y a los datos pendientes. Si todo está documentado y coincide, propone revisar la curva y repetir la medición. Recupera los ajustes de la ejecución real; no los inventes para hacer coincidir informes. Un campo documentado no demuestra que sea correcto ni valida la teoría. La demo opcional de esa ruta utiliza atención uniforme sintética para mostrar datos pendientes; no ejecuta un modelo. La guía permite volver al mismo formulario.

47.6 Compara con la predicción geométrica

Calcula γ_Padé con la misma longitud y la configuración efectiva de RoPE. Llama \(\delta=\gamma_{\rm observado}-\gamma_{\rm geométrico}\) a la diferencia: es una descripción del residuo, no una atribución causal automática al entrenamiento. Antes de interpretar δ, descarta diferencias de corpus, posición, máscara y ajuste. La descomposición de Capítulo 16 propone una explicación; el protocolo común permite ponerla a prueba. La incertidumbre de γ no convierte el error de la predicción en certeza.

47.7 Datos abiertos para reproducir (o refutar)

  • El atlas γ (79 medidas sobre 42 modelos únicos de 4 familias) y los experimentos within-model (θ-rescale, γ⊥sumidero) están publicados como datos abiertos junto al Paper I (Zenodo 20314038) — descargables, reproducibles, criticables.
  • Las medidas de decaimiento se publican también como el TAF Attention-Decay Dataset (CC-BY-4.0) en Hugging Face, bajo el identificador karlexmarin/taf-attention-decay; si el identificador hubiera cambiado, búscalo por su nombre en el buscador de datasets del Hub.
  • El panel de modelos de tafagent (23 modelos: config y predicciones, no medidas de atención) y el aparato formal de la herramienta están en abierto en github.com/karlesmarin/tafagent-registry y github.com/karlesmarin/lean-taf (pruebas formales).
Advertencia⚠ Qué comprueba este laboratorio

Un ajuste y sus controles evalúan la descripción \(A(d)\propto d^{-\gamma}\) bajo un protocolo. No validan por sí solos la ventana D_f, la calidad de salida, la extensión de contexto ni un mecanismo causal. Para esos pasos, vuelve al diseño de Sección 41.9.

Nota🧪 Pruébalo — tafagent

Desde un identificador o config.json, tafagent calcula predicciones de configuración y puede mostrar medidas previamente registradas; el navegador no ejecuta el modelo para medir atención. Las medidas propias requieren inferencia externa, por ejemplo el CLI de diagnóstico del proyecto, y su posterior consulta/importación según el formato admitido. El CLI y este ejemplo pueden usar distinta agregación: comprueba sus protocolos antes de comparar. R5 explica la herramienta.

47.8 Resumen

  • Declara el estimador: promediar pesos y promediar sus logaritmos son operaciones distintas.
  • Conserva las capas del dato: cabeza, capa, consulta, sumidero, recencia y cola.
  • R² no es un intervalo ni una garantía de calidad. Publica residuos, incertidumbre y protocolo.
  • Predicción y medida tienen distinta procedencia: un config.json no contiene atención ejecutada.

47.9 Ejercicios

  1. Dos medias. Comprueba el ejemplo 0,04 y 0,16. ¿Por qué ajustar pares individuales no reproduce necesariamente la pendiente de la curva media?
  2. Dos consultas. Mide última fila y todas las filas sobre las mismas matrices. ¿Qué parte del protocolo cambió, aunque el modelo sea idéntico?
  3. La unidad experimental. Tienes diez documentos, cada uno dividido en veinte fragmentos. ¿Qué remuestreas para no fingir doscientos documentos independientes?
  4. Un R² perfecto. Construye una cola sintética \(d^{-0{,}8}\). ¿Qué valida recuperarla con el código y qué no valida sobre un transformer real?

Soluciones: ?sec-soluciones-r4. Siguiente referencia (R5): el manual de tafagent.