English · Español
Lab 01 — Barrido de temperatura¶
🇪🇸 La temperatura aplana o agudiza la softmax. Aquí lo medimos: para una distribución de logits del Mini-GPT, barre τ y grafica la entropía. Debe ser monotónicamente no-decreciente. Si no lo es, hay un bug.
Objetivo¶
Implementar la estrategia de muestreo (sampling) Temperature(τ) y producir una verificación empírica de la propiedad de monotonicidad de la entropía derivada en theory/01-temperature.md.
Setup¶
Greedydel lab 00.- Checkpoint del Mini-GPT entrenado.
- Un prompt de referencia:
"Tomorrow she"(tercera persona del singular, futuro — interesante porque el modelo tiene varias continuaciones plausibles).
Tareas¶
- Implementa
Temperature(tau)ensrc/minimodel/sampling.py:
@dataclass(frozen=True)
class Temperature:
tau: float
def __call__(self, logits, rng):
assert self.tau > 0, "temperature must be positive"
scaled = logits / self.tau
probs = softmax(scaled) # use log-sum-exp from Phase 05
return int(rng.choice(len(probs), p=probs))
Usa la softmax numéricamente estable (np.exp(z - z.max()) / sum) de la Fase 05.
- Caso borde:
tau → 0. Decide cómo manejarlo. Opciones: - Lanzar excepción (prohibir).
- Tratar como greedy (
tau == 0→ argmax, sin rng). - Limitar a un epsilon pequeño (p. ej.,
tau = max(tau, 1e-6)).
Documenta tu elección en el docstring. El lab usa tau ∈ {0.5, 0.7, 1.0, 1.5, 2.0} — ninguno toca cero.
- Barre τ sobre un vector de logits. No uses el Mini-GPT todavía — usa un vector sintético de 8 logits
z = [3.0, 2.0, 1.0, 0.5, 0.0, -0.5, -1.0, -2.0]. Para cadaτ ∈ {0.1, 0.3, 0.5, 0.7, 1.0, 1.5, 2.0, 5.0, 10.0}: - Calcula
q = softmax(z / τ). - Calcula
H(q) = -Σ q_i log q_i(usalog2para entropía en bits). - Grafica
(τ, H(q)).
Comprueba: la curva resultante es monótona no-decreciente en τ (usa np.all(np.diff(H) >= -1e-9); el -1e-9 da cuenta del ruido de punto flotante).
- Ahora usa el Mini-GPT. Para el prompt
"Tomorrow she": - Obtén los logits del primer paso (un forward).
- Repite el barrido sobre esos logits.
- Grafica.
-
Compara con el caso sintético. La curva del modelo real empezará más baja (los logits reales suelen tener un pico agudo) y subirá de forma suave.
-
Verificación empírica de diversidad. Para cada
τ ∈ {0.5, 1.0, 2.0}, extrae 100 muestras (con seeds distintas) de longitud 1 de la distribución del primer paso del Mini-GPT. Cuenta el número de tokens únicos: τ = 0.5: se esperan 1-3 tokens únicos.τ = 1.0: se esperan 5-15 tokens únicos.τ = 2.0: se esperan 20+ tokens únicos.
Grafica (τ, num_unique_tokens) como diagrama de barras.
Mediciones¶
Guarda en experiments/<date>-phase-21-temp-sweep/:
entropy_curve_synthetic.png—(τ, H)sobre los logits sintéticos.entropy_curve_model.png—(τ, H)sobre los logits del primer paso del Mini-GPT.unique_tokens_by_tau.png— diagrama de barras de la tarea 5.manifest.json— seeds, versiones, valores exactos deτ.
Aceptación¶
Temperature(tau)es determinístico bajo seed fija (rng.choiceconsume el estado del rng de forma predecible).- Las curvas de entropía son monótonas no-decrecientes con tolerancia
1e-9. - El recuento de tokens únicos crece estrictamente con
τen este prompt (o débilmente, con como mucho una igualdad).
Trampas¶
- Calcular
softmax(z) ** (1/τ)en lugar desoftmax(z / τ). Son distribuciones distintas; la teoría del archivo 01 tiene la prueba. Que el lab pase silenciosamente mientras se calcula lo incorrecto es exactamente el bug que queremos atrapar — añade un unit test explícito que compruebe que tu implementación coincide consoftmax(z / τ)(no con la forma de potenciación post-softmax). - Castear (o no) la salida de
rng.choiceaint.rng.choice(n, p=p)devuelve unnumpy.int64; si tu código de tokenizer espera unintde Python, castéalo. - Log de cero. Si
q_i = 0exactamente,q_i log q_ies0 · -inf = nanen IEEE. Usanp.where(q > 0, q * np.log2(q), 0.0)para la entropía. - Elegir el prompt de referencia equivocado. Si eliges un prompt donde el Mini-GPT está extremadamente confiado (p. ej., el modelo ha sobreajustado y da
q_{top} = 0.999), todas las temperaturas se parecerán hasta queτ > 5. Elige un prompt donde el modelo tenga incertidumbre visible.
Siguiente: 02-top-k-and-top-p.md