Skip to content

English · Español

Fase 2 — Cuestionarios

🇪🇸 Espejo legible de data/quizzes/phase-02-numerical-representation.yaml. Pensado para que el aprendiz se equivoque al menos en uno: las trampas vienen de ideas que "parecen razonables".

Fuente de verdad: data/quizzes/phase-02-numerical-representation.yaml.


q-02-01 — ¿Por qué funciona el truco -max del softmax?

  1. Porque exp(x - m) ≤ exp(0) = 1 para todo x ≤ m, así que las exponenciales nunca desbordan; el factor común exp(-m) en numerador y denominador se cancela exactamente.
  2. Porque exp es cóncava, así que restar el máximo la linealiza.
  3. Porque el softmax es invariante por traslación solo en esperanza.
  4. Porque el redondeo IEEE 754 redondea hacia el máximo, haciendo la diferencia despreciable.
Respuesta **Opción 1.** Las dos mitades importan: la identidad algebraica (cancelación de `exp(-m)`) y la cota numérica (`exp(x - m) ≤ 1`).

q-02-02 — fp16 vs bf16 (opción múltiple)

  1. fp16 tiene 10 bits de mantisa y 5 bits de exponente; bf16 tiene 7 bits de mantisa y 8 bits de exponente.
  2. bf16 tiene el mismo rango de exponente que fp32, así que el comportamiento de overflow/underflow se parece mucho al de fp32.
  3. fp16 tiene mejor precisión por número que bf16 (menor error relativo para valores dentro del rango).
  4. bf16 se diseñó principalmente para inferencia en GPU de consumo, fp16 para entrenamiento.
  5. Convertir un peso fp32 a bf16 siempre pierde información; convertirlo a fp16 a veces lo preserva exactamente.
Respuesta **Opciones 1, 2, 3.** bf16 vino de Google Brain para estabilidad de *entrenamiento* (el exponente ancho coincide con fp32). Ambos formatos pierden información frente a fp32 excepto cuando el valor ya cabe.

q-02-03 — Cancelación catastrófica (libre)

Calcula 1.0000001 - 1.0 en fp32. ¿Cuántos dígitos decimales significativos tiene el resultado? Nombra el fenómeno.

Respuesta Alrededor de **un** dígito bueno. Ambas entradas tienen ~7 dígitos de precisión fp32, pero los 6 dígitos principales se cancelan, promoviendo el error de redondeo de cola a la posición principal. Esto es **cancelación catastrófica**. Reescribe el algoritmo para evitar restar números casi iguales.

q-02-04 — ¿Cuándo no basta con el truco -max? (libre)

Respuesta El truco estabiliza el forward del softmax, pero el `log(p)` posterior de probabilidades pequeñas sigue cayendo por underflow. Solución: nunca materializar `p`; calcular `log_softmax(x) = x - logsumexp(x)` directamente. Este es el patrón fusionado `cross-entropy-from-logits`.

q-02-05 — Suma de Kahan

  1. Ordenar las entradas en orden descendente antes de sumar.
  2. Suma compensada de Kahan (rastrear el error acumulado en un segundo acumulador).
  3. Convertir a fp64, sumar, convertir de vuelta.
  4. Usar SIMD para la reducción.
Respuesta **Opción 2.** Kahan usa una única variable de compensación extra para recuperar los bits de orden bajo descartados en cada suma, dando error `O(ε)` en lugar de `O(Nε)`.