Skip to content

English · Español

00 — Por qué una fase de cálculo antes de cualquier autograd

🇪🇸 La intuición central: backprop no es magia, es la regla de la cadena aplicada a un grafo de operaciones. Los optimizadores son descenso de gradiente con memoria. Fase 4 deriva ambos a mano para que Fase 7 (autograd) sea una implementación obvia, no una caja negra.


La mentira que cuentan los libros de texto

"Las redes neuronales se entrenan con retropropagación (backpropagation), un algoritmo eficiente para calcular gradientes."

No es incorrecto. Tampoco es lo que necesitas saber. Las afirmaciones reales son:

  1. La retropropagación es solo la regla de la cadena (chain rule) aplicada a un grafo de operaciones. Es una sola frase y está completa. El "algoritmo" es la contabilidad: almacenar valores intermedios durante el pase hacia adelante, luego recorrer el grafo al revés para componer derivadas.
  2. Cada actualización de gradiente en aprendizaje profundo (deep learning) es weights ← weights - η ∇loss + (memoria de actualizaciones previas). Las variantes — momentum, Adam, AdamW — difieren solo en cómo se ve esa "memoria".

Hasta que sepas derivar ∂ CE/∂x (el gradiente de cross-entropy respecto a los logits de softmax) en una página en blanco, el "entrenamiento" sigue siendo misterioso. Hasta que sepas derivar Adam a partir de "primer momento + segundo momento + corrección de sesgo", sus hiperparámetros son números arbitrarios que copias de un paper. La Fase 4 arregla ambas cosas.

La tesis de la Fase 4

La Fase 4 entrena dos hábitos:

(1) Cada vez que veas una nueva función de pérdida o una nueva capa, escribe su gradiente a mano antes de leer el código autograd de nadie.

(2) Cada vez que veas un nuevo optimizador, reconoce qué combinación de "momentos + correcciones" es.

El primer hábito te protege de "copié la pérdida de un tutorial; tiene que estar bien". El segundo te protege de "Adam no funciona; déjame probar el optimizador del siguiente paper". Ambos hábitos componen a lo largo del currículo.

Qué dice realmente "la regla de la cadena" (avance)

Caso de una variable (todos lo recuerdan):

\[ (f \circ g)'(x) = f'(g(x)) \cdot g'(x) \]

Caso multivariable (la versión que usa backprop):

\[ J_{f \circ g}(x) = J_f(g(x)) \cdot J_g(x) \]

donde J_h denota la matriz Jacobiana de h. El producto es multiplicación de matrices.

Para una red de cinco capas y = L_5(L_4(L_3(L_2(L_1(x))))), el gradiente de la pérdida respecto a la entrada es:

\[ \nabla_x \ell = J_{L_1}^T \cdot J_{L_2}^T \cdot J_{L_3}^T \cdot J_{L_4}^T \cdot J_{L_5}^T \cdot \nabla_y \ell \]

Un producto de cinco Jacobianas. Eso es todo. La "magia" de backprop es hacer este producto de derecha a izquierda (así empiezas con un vector y mantienes productos matriz-vector en lugar de productos matriz-matriz completos), y almacenar las activaciones intermedias del pase hacia adelante para que las Jacobianas se puedan evaluar en los puntos correctos.

Cuando implementes autograd en la Fase 7, esto es literalmente lo que vas a programar. Sin sorpresas.

Qué es realmente "la jerarquía de optimizadores" (avance)

Optimizador Actualización (por parámetro)
GD θ ← θ - η g
SGD igual, con g = gradiente estocástico
Momentum v ← β v + g; θ ← θ - η v
Nesterov momentum con un paso de anticipación
AdaGrad s ← s + g²; θ ← θ - η g / sqrt(s + ε)
RMSProp s ← β s + (1-β) g²; θ ← θ - η g / sqrt(s + ε)
Adam momentum + RMSProp + corrección de sesgo
AdamW Adam + weight decay desacoplado

Lee de arriba a abajo: cada fila añade un componente a la fila anterior. Adam no es un optimizador complicado; es "Momentum sobre el primer momento + RMSProp sobre el segundo momento + corrección de sesgo cuando el paso es pequeño".

No deberías memorizar la tabla. Deberías derivarla: "Quiero llevar una media móvil del gradiente → Momentum. También quiero escalar por la magnitud reciente → dividir por sqrt de la media móvil del gradiente al cuadrado → RMSProp. Quiero ambos → Adam. En el paso 1, las medias móviles están sesgadas hacia cero → dividir por 1 - β^t → corrección de sesgo. Quiero weight decay → o añadir λθ al gradiente (Adam-con-L2, roto) o restar ηλθ de θ directamente (AdamW, correcto)."

Cuando puedas producir la tabla derivándola en una dirección, la Fase 4 está hecha.

Por qué esto importa específicamente para IA

Cinco afirmaciones que deberían tener sentido después de la Fase 4 pero probablemente ahora parezcan jerga:

  1. "Adam es el default" porque adapta la tasa de aprendizaje por parámetro. La Hessiana de la pérdida de una red neuronal es anisotrópica (el argumento del número de condición de la Fase 3). El 1/sqrt(v̂) de Adam es una aproximación a un precondicionador diagonal — escala el paso de cada parámetro por una estimación de la entrada de la Hessiana de ese parámetro.
  2. AdamW supera a Adam en la práctica porque el weight decay desacoplado no interactúa con la estimación del segundo momento. (La Fase 28 — fine-tuning — usará AdamW por defecto.)
  3. Las programaciones de tasa de aprendizaje en coseno son estándar porque superan a una LR constante en la práctica. El "por qué" — el decaimiento más lento al final coincide con la estructura de ruido del entrenamiento tardío — es intuición a nivel folklore, pero la programación en sí es mecánica.
  4. El warmup ayuda porque los gradientes iniciales están dominados por el ruido de inicialización. Una LR grande amplifica este ruido; el warmup deja que la superficie de pérdida de la red "se asiente" antes de dar pasos grandes. La Fase 11 (inicialización) volverá a esto.
  5. El gradient clipping es un hack que funciona. Recortar ||g|| a una norma máxima antes del paso del optimizador previene catástrofes de gradiente explosivo (sobre todo en RNNs/LSTMs; menos crítico para transformers). La Fase 16 (bucle de entrenamiento) lo incluirá.

Cada una de esas afirmaciones es un argumento de cálculo + optimización. La Fase 4 las hace todas derivables.

El camino por la Fase 4

  • Teoría 01 sienta el vocabulario — derivada, parcial, gradiente, Jacobiana, Hessiana.
  • Teoría 02 es el motor — regla de la cadena de una y varias variables, derivación del gradiente de softmax + cross-entropy. Lee esto dos veces.
  • Teoría 03 deriva la jerarquía de optimizadores a partir de "¿a qué memoria tiene acceso cada paso?".
  • Teoría 04 cubre las programaciones de LR y el argumento del warmup.
  • Lab 00 te hace derivar ∂ softmax/∂x y ∂ CE/∂x en papel, luego verificar numéricamente.
  • Lab 01 te hace calcular una Jacobiana analíticamente y mediante diferencias finitas (avance de la estrategia de testing de la Fase 7).
  • Lab 02 es el lab de animación — competir optimizadores, verlos tener éxito y fallar.
  • Lab 03 es la visualización de programaciones de LR.

Detente aquí si

Estás tentado a saltarte la Fase 4 porque "ya he usado Adam". No lo hagas. El test no es "¿puedes llamar a torch.optim.Adam?". El test es: ¿puedes derivar ∂ CE/∂x y la actualización de Adam en una página en blanco, en cinco minutos, sin notas? Si todavía no puedes, la Fase 4 es para ti.


Siguiente: theory/01-derivatives-gradients-jacobians.md.