Skip to content

English · Español

01 — Qué instrumentar: los siete paneles

Siete paneles, no más. Cada uno responde a una pregunta concreta sobre la salud del entrenamiento. Menos paneles = ciegos a fallos. Más paneles = ruido + overhead.


El dashboard tiene siete paneles. Cada uno responde a una pregunta específica. Añadir un octavo panel significa que has justificado otra pregunta que merece responderse en cada paso de entrenamiento. Quitar uno significa que has decidido que no necesitas su respuesta. Ambas decisiones son revisables, pero en el momento de escribir esto, siete es lo correcto.

Panel 1: curvas de pérdida (train + val)

Pregunta: ¿Está aprendiendo el modelo?

Eje X: paso de entrenamiento (lineal). Eje Y: pérdida (escala log — los primeros pasos abarcan un orden de magnitud). Dos líneas: train (cada log_every pasos), val (cada val_every pasos, interpolada como pasos para graficar). Anotación: baseline de n-gramas de la Fase 14 como línea horizontal discontinua en el eje val.

Firmas: - Sana: ambas curvas bajan monotónicamente, train ligeramente por debajo de val, ambas por debajo del baseline al final. - Bug #2 (sin warmup): la curva de train tiene un spike a 8-10 en los primeros 100 pasos, luego baja. - Bug #3 (máscara rota): la curva de train baja por debajo del baseline en menos de 200 pasos; la curva de val plana o apenas se mueve. - Overfitting: las curvas de train y val divergen después de cierto paso \(t^*\), train sigue bajando, val se aplana o sube.

Panel 2: schedule del LR

Pregunta: ¿Se ejecutaron de verdad el warmup y el decay cosinusoidal?

Eje X: paso. Eje Y: learning rate (escala lineal).

Por qué existe: el bug silencioso de entrenamiento más común es un scheduler mal cableado y el modelo entrenando a un LR fijo durante toda la ejecución. El panel del schedule del LR hace imposible no verlo — un scheduler equivocado muestra una línea plana donde debería estar la cosenoidal.

Firmas: - Sana: rampa lineal de 0 a lr_max durante warmup_steps, luego decay cosinusoidal suave hasta lr_min en total_steps. - Bug #2 (sin warmup): la línea está plana en lr_max desde el paso 0. - total_steps equivocado: la cosenoidal llega a su mínimo antes de que termine el entrenamiento, y los últimos N pasos corren a lr_min (desperdiciados).

Panel 3: historial de la norma del gradiente

Pregunta: ¿Están bien comportados los gradientes?

Eje X: paso. Eje Y: \(\|g\|_2\) global (escala log). Anotación: umbral de clipping c como línea horizontal.

Firmas: - Sana: \(\|g\|_2\) empieza en ~5-10, baja a ~0.1-1.0 a lo largo del entrenamiento, se mantiene por debajo del umbral de clip la mayor parte del tiempo, con spikes ocasionales cerca de c (el clipping se engancha). - Bug #1 (bad init): \(\|g\|_2\) explota a \(10^3\)+ en pocos pasos, luego NaN. - Una ejecución sin ningún enganche del clipping: el umbral de clip está demasiado alto (inútil) o la patología ya suprimió los gradientes.

Panel 4: magnitudes de activación por capa

Pregunta: ¿Están equilibradas las activaciones a lo largo de la profundidad?

Eje X: paso (sub-muestreado). Eje Y: magnitud media por capa. Líneas: una por capa (embed_out, block_0_out, block_1_out, final_ln_out) — n_layers = 2 fijado por la Fase 17.

Firmas: - Sana: las magnitudes de todas las capas están dentro de ~3× unas de otras (el residual stream es aproximadamente constante en escala; eso es lo que impone el LayerNorm). - Bug #1 (bad init): las magnitudes de las capas profundas crecen exponencialmente con la profundidad. Visible en el paso 0 (antes de entrenar). - Una "capa muerta": su magnitud está cerca de cero desde el principio (bug de init específico a esa capa).

Panel 5: normas espectrales de los pesos por capa

Pregunta: ¿Están creciendo patológicamente las matrices de pesos?

Eje X: paso. Eje Y: norma espectral \(\sigma_1(W)\) por capa (escala log). Líneas: una por matriz principal (atención QKV, FFN up, FFN down, proyección de salida).

Firmas: - Sana: las normas espectrales suben poco a poco durante el entrenamiento, nunca más de ~2× el valor inicial. - Bug #1 (bad init): las normas espectrales empiezan ~100× más altas de lo esperado. - Weight decay ausente: las normas espectrales crecen sin cota; el modelo hace overfitting vía magnitud de parámetros.

Panel 6: neuronas muertas / cabezas muertas a lo largo del tiempo

Pregunta: ¿Está usando el modelo su capacidad completa?

Eje X: paso. Eje Y: conteo de neuronas muertas (o cabezas de atención muertas).

Definiciones: - Neurona muerta: una unidad oculta del FFN donde |activation| < ε en >99% del batch. - Cabeza muerta: una cabeza de atención donde H(softmax(QK^T/√d)) está por debajo de log 2 (es decir, la atención está concentrada en una sola key) en >99% de las queries.

Firmas: - Sana: unas pocas neuronas muertas (5-10% de las unidades ocultas del FFN) es normal; el conteo de cabezas muertas suele ser 0 en un modelo diminuto bien entrenado. - Bug #1 (bad init): casi todas las neuronas saturadas o muertas desde el paso 0. - Una cabeza "atascada": permanece muerta desde el paso 0 hasta el final; la cabeza está desaprovechada.

Panel 7: descomposición de la pérdida por clase de verbo (el panel §A13)

Pregunta: ¿Está aprendiendo el modelo el patrón regular o memorizando formas individuales?

Eje X: paso. Eje Y: pérdida (escala log). Dos líneas: - loss_regular: pérdida media sobre ejemplos cuyo verbo es uno de los 12 regulares (work, play, walk, talk, listen, watch, study, finish, start, look, want, like). - loss_irregular: pérdida media sobre ejemplos cuyo verbo es uno de los 8 irregulares (be, have, do, go, come, see, eat, write).

Firmas: - Sana: loss_regular baja más rápido (la regla regular -ed es una única abstracción compartida); loss_irregular se queda ~10-30% por detrás en el espacio de pérdida; la brecha se estabiliza hacia el paso ~1500. - Memorización: las dos curvas están enredadas — ninguna lidera, ninguna queda atrás. El modelo trata cada forma independientemente. - Bug #3 (máscara rota): ambas curvas bajan a casi cero irrazonablemente rápido, porque el modelo está viendo el token futuro. La brecha entre ellas es casi cero, no porque el modelo aprendiera el patrón sino porque no le hace falta — simplemente copia.

Este panel es el más específico del tema §A13. Sin él, el dashboard funciona para cualquier LM; con él, el dashboard es informativo de manera única para este corpus.

Lo que deliberadamente NO instrumentamos

  • Estadísticas de gradiente por tensor más allá de la norma global. Almacenar normas por tensor en cada paso son ~25 KB/paso para el Mini-GPT de 2 capas; sobre 8000 pasos, eso son 200 MB. La vista por capa del Panel 4 + la vista global del Panel 3 cubren el 95% de las necesidades de diagnóstico.
  • Histogramas de pesos. Útiles para algunos bugs, pero: (a) ruidosos al graficarlos en cada paso, (b) el coste en espacio de pantalla es alto, © el panel de norma espectral pilla la mayoría de los bugs de patología de pesos.
  • Sondeo del paisaje de la pérdida. Requeriría evaluar la pérdida en muchas perturbaciones de parámetros por paso — 10-100× el coste. Fuera del alcance de la Fase 19.
  • Gráficos de sensibilidad de hiperparámetros. Territorio de sweep — Fase 28.

El orden de lectura del dashboard

Cuando abras un dashboard de una ejecución fallida, escanea en este orden:

  1. Panel 1: ¿Bajó la pérdida? Si no → mira el panel 2 (LR), luego el panel 3 (gradientes).
  2. Panel 3: ¿Explotaron/se desvanecieron los gradientes? Si sí → bug #1 (bad init) o patología numérica.
  3. Panel 2: ¿Se ejecutó el schedule del LR? Si no → bug #2 (sin warmup).
  4. Panel 1, train vs val: ¿Val seguía a train? Si train baja pero val está plana → bug #3 (máscara rota) o fuga de datos.
  5. Panel 4-6: ¿Están equilibradas y vivas las capas? Si la capa 1 está muerta mientras la 0 está bien → problema de init o de escala de inicialización.
  6. Panel 7: ¿Aprendió el modelo el patrón regular? Si la pérdida irregular colapsa más rápido que la regular → fuga de datos.

Este orden saca a flote los tres breaks diseñados en tres paneles distintos: Panel 3 (bug #1), Panel 2 (bug #2), Panel 1+7 (bug #3). Memoriza este orden; los tres diagnósticos del laboratorio dependen de él.

Problemas de práctica

  1. El dashboard muestra una línea de LR plana en lr_max desde el paso 0. ¿Qué bug? ¿Qué panel te lo dijo?
  2. Las curvas de pérdida de train y val bajan al unísono hasta el paso 3000, luego val se aplana mientras train sigue bajando. ¿Bug o feature?
  3. El panel regular-vs-irregular muestra ambas curvas colapsando a casi cero hacia el paso 200, sin brecha. ¿Qué bug?
  4. El Panel 4 muestra las activaciones de la capa 1 30× mayores que las de la capa 0 hacia el paso 100. ¿Qué pasa y qué panel lo confirma?

Resumen en un párrafo

El dashboard tiene siete paneles: curvas de pérdida, schedule del LR, historial de norma de gradiente, activaciones por capa, normas espectrales de pesos por capa, conteo de neuronas muertas y la descomposición de pérdida regular-vs-irregular específica de §A13. Cada panel saca a flote una clase de bug; los bugs de la Fase 19 (bad init, sin warmup, máscara rota) se manifiestan cada uno en un panel distinto y son diagnosticables solo desde el dashboard. El séptimo panel es el que convierte este dashboard de un depurador genérico de LM en una herramienta del currículo de gramática verbal. Mantén el conteo de paneles en siete — añadir más = ruido y overhead.

Lo que esta sección NO cubre

  • La matemática de cada métrica (criterio de neurona muerta del panel 6, norma espectral del panel 5, descomposición por clase del panel 7). Eso es theory/02-dashboard-metrics.md.
  • El mecanismo de cada bug diseñado. Eso es theory/03-three-failure-modes.md.
  • La implementación de los hooks. Lab 00.

Siguiente: theory/02-dashboard-metrics.md.