Skip to content

English · Español

Fase 8 — Quizzes

Espejo legible de data/quizzes/phase-08-tensor-autograd.yaml. Centrado en los dos problemas nuevos de la fase: gradientes con broadcasting y derivadas de matmul/softmax-CE batcheado.

Fuente de verdad: data/quizzes/phase-08-tensor-autograd.yaml.


q-08-01 — Broadcasting en el backward

a + b con a.shape = (3,), b.shape = (4, 3). El gradiente upstream es (4, 3). ¿Cómo recibe a un gradiente de forma (shape) (3,)?

  1. Reshape (4, 3) a (3,) descartando el primer eje.
  2. Sumar el gradiente upstream a lo largo de los ejes de broadcasting (replicados) (aquí el eje 0) → (3,).
  3. Multiplicar por un one-hot del eje de broadcasting.
  4. NumPy lo gestiona automáticamente.
Respuesta **Opción 2.** El broadcasting en forward es replicación virtual a lo largo de ejes ausentes o de longitud 1. El gradiente respecto a `a` suma las contribuciones de cada copia replicada — así que el backward debe hacer `grad.sum(axis=...)` explícitamente. NumPy **no** lo hace por ti.

q-08-02 — Gradientes de matmul (multi-opción)

C = A @ B, A: (M, K), B: (K, N), upstream dC: (M, N).

  1. dA = dC @ B.T
  2. dB = A.T @ dC
  3. dA = B @ dC.T
  4. dB = dC @ A
  5. dA = dC * B.T (elementwise)
Respuesta **Opciones 1 y 2.** El gradiente de matmul es a su vez un matmul: `dA = dC B^T`, `dB = A^T dC`. Las formas (shapes) lo confirman.

q-08-03 — Gradiente de s = x.sum() (libre)

x.shape = (3, 5), ds = 1. ¿Qué vale dx?

Respuesta `dx` tiene forma (shape) `(3, 5)` y cada entrada vale `1` (es decir, `np.ones_like(x) * ds`). Razón: `∂s/∂x_ij = 1` para todo `(i, j)`.

q-08-04 — ¿Por qué diferencias centradas en gradcheck?

  1. Más baratas computacionalmente.
  2. Error de truncamiento O(ε²) (los términos de Taylor de orden par se cancelan) frente a O(ε) para diferencias hacia delante.
  3. Las diferencias hacia delante necesitan conocer la derivada en el borde.
  4. La central es la única opción diferenciable.
Respuesta **Opción 2.** La central cancela el término dominante `O(ε)`; obtienes ~8 dígitos buenos con ε ≈ 1e-4 frente a ~4 con la forward.

q-08-05 — Gradiente de softmax CE batcheado (libre)

z: (B, K), y: (B,). Indica dL/dz.

Respuesta `dL/dz = (p - one_hot(y, K)) / B` donde `p = softmax(z)`. Misma fórmula escalar `p - y`, solo que batcheada con el `/B` de la media sobre el batch.