Skip to content

English · Español

Phase 09 — Quiz (espejo legible)

🇪🇸 Espejo legible del fichero canónico data/quizzes/phase-09-mlp-modules.yaml. El portal (Phase 41) consume el YAML; este .md es para repaso rápido fuera del portal. No edites aquí — edita el YAML y este archivo es regenerable.

Source: data/quizzes/phase-09-mlp-modules.yaml. Schema en src/miniportal/BLUEPRINT.md §1.


q-09-01 — ¿Por qué la clase Module registra los Parameters explícitamente? (single)

En la clase Module que construiste, ¿por qué hay que registrar _parameters explícitamente en lugar de depender de la introspección de __dict__?

  • Porque el __dict__ de Python era no ordenado antes de 3.7
  • Para permitir módulos anidados y semántica de movimiento a dispositivo perezosa
  • Porque los objetos Parameter no tienen __hash__
  • Es una convención de PyTorch copiada por familiaridad

El registro explícito permite que un Module padre recorra a sus hijos de forma determinista, de modo que .parameters() y .to(device) funcionen sin sorpresas en tiempo de ejecución. PyTorch tomó la misma decisión por la misma razón.


q-09-02 — ¿Qué inicializaciones se usan habitualmente para los pesos ocultos de un MLP? (multi)

Selecciona cada esquema de inicialización que sea apropiado como default para las capas lineales ocultas de un MLP con activación ReLU.

  • Ceros para cada peso
  • Kaiming (He) normal
  • Kaiming (He) uniforme
  • Constante 1.0 para cada peso

Kaiming normal/uniforme preservan la varianza de activación bajo ReLU. Las inicializaciones todo-ceros o todo-unos rompen la simetría o saturan la red en el step 1.


q-09-03 — ¿Qué suele alternar Module.train(False)? (free)

En una frase, ¿qué cambia llamar a module.train(False) (modo eval) en módulos como Dropout y BatchNorm?

Se espera que contenga: eval, dropout.

El modo eval desactiva el dropout estocástico y conmuta BatchNorm para usar las estadísticas running, de modo que la inferencia es determinista.


q-09-04 — Shape del backward para el gradiente del peso de Linear (single)

En un Linear(in=23, out=16) cuyo forward es Z = X @ W.T + b con X.shape == (4, 23), ¿qué shape tiene el gradiente del peso ∇_W L?

  • (4, 23)
  • (16, 23)
  • (23, 16)
  • (16, 4)

∇_W = (∇_Z)^T @ X tiene shape (16, 4) @ (4, 23) = (16, 23) — exactamente la shape de W. La teoría §04 de la Phase 9 avisa de que en shapes cuadradas el bug ∇_W = ∇_Z @ X^T también cuadra.


q-09-05 — Encuentra el bug: dos Linears sin activación (free)

Un learner escribe Sequential(Linear(23, 16), Linear(16, 5)) para el clasificador de tiempos verbales de §A13. La accuracy de validación es aceptable pero el modelo generaliza ligeramente peor que un gemelo equipado con GELU. ¿Qué propiedad del mapeo compuesto explica esto?

Se espera que contenga: linear.

La composición de dos mapeos afines es afín — el stack colapsa a un único mapeo lineal de rango ≤ 5. La tarea de §A13 es linealmente separable, así que la accuracy sobrevive, pero se pierde la capacidad de ajustar acuerdos sutiles. Cross-link: break/00-break-gelu-as-identity.md.