English · Español
Fase 13 — Quiz (espejo legible)¶
🇪🇸 Espejo legible del canónico
data/quizzes/phase-13-embeddings.yaml.
Fuente: data/quizzes/phase-13-embeddings.yaml.
q-13-01 — Identidad lookup-es-matmul (single)¶
Dada una tabla de embeddings E de forma (V, d) y un vector one-hot x_i (longitud V), ¿qué expresión es igual a E[i]?
x_i @ E^Tx_i @ E✓E @ x_i^TE[i, :].sum()
x_i @ Eselecciona la fila i-ésima porque el one-hot tiene un 1 solo en el índicei. Por esonn.Embeddingse implementa como un gather (correcto y eficiente).
q-13-02 — ¿Por qué tied embeddings? (multi)¶
- Reduce a la mitad el número de parámetros de esas dos capas ✓
- Mejora empíricamente la perplejidad en ~5% (Press & Wolf 2017) ✓
- Permite cambiar a una embedding preentrenada sin reentrenar la cabeza LM
- Fuerza a que los tamaños de vocabulario de entrada y salida coincidan ✓
Atar reduce parámetros a la mitad, mejora la perplejidad según Press & Wolf 2017, y fuerza
V_in == V_out(esta es la razón por la que los breaks ocurren durante refactors).
q-13-03 — Rango efectivo: ¿cuándo es sano? (free)¶
Se espera que contenga: collapse.
r_eff = 22 << min(V, d) = 128significa que la embedding ha colapsado. La mayoría de tokens ocupan un subespacio diminuto, perjudicando la expresividad. Weight decay 0,1 es el arreglo estándar.
q-13-04 — Encuentra el bug: shape mismatch con tied embeddings (single)¶
Un refactor cambia el vocabulario del tokenizer de 512 a 256 pero el módulo Embedding sigue teniendo vocab_size=512. La cabeza LM está atada. ¿Qué forma tienen los logits sobre una entrada (B=4, T=8)?
(4, 8, 256)(4, 8, 512)✓(4, 8, 128)(4, 8)
El matmul usa
embedding.weight.Tcon forma(d, 512), produciendo logits(B, T, 512). La entropía cruzada espera 256; el shape mismatch crashea la ejecución.
q-13-05 — Dispersión del gradiente de embedding (single)¶
En entrenamiento CBOW con batch size B y un one-hot por ejemplo (sin repeticiones), ¿cuántas filas de E reciben gradiente no cero por paso backward?
- Las
Vfilas - Exactamente
Bfilas ✓ - Exactamente
dfilas - Exactamente 1 fila
Cada ejemplo toca solo la fila de su token embebido. Esta dispersión es la razón por la que los frameworks maduros almacenan los gradientes de embedding como
IndexedSliceso actualizaciones scatter.