Skip to content

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^T
  • x_i @ E
  • E @ x_i^T
  • E[i, :].sum()

x_i @ E selecciona la fila i-ésima porque el one-hot tiene un 1 solo en el índice i. Por eso nn.Embedding se 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) = 128 significa 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.T con 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 V filas
  • Exactamente B filas
  • Exactamente d filas
  • 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 IndexedSlices o actualizaciones scatter.