🧮 Computational Mathematics

Inicio · Parte 15 — Matemática de Deep Learning

306 — Computational graphs

deep-learning clase 6 de 20 4 horas demostración computational_graphs

Un nodo usado dos veces recibe la suma de los dos gradientes, no uno de ellos.

Fórmulas

cada operación es un nodo; cada dependencia, una arista
orden topológico inverso para el paso hacia atrás
nodo con k consumos: dL/dv = Σ de las k contribuciones

Desarrollo

Representar una expresión como grafo —nodos para las operaciones, aristas para las dependencias— convierte la derivación en un procedimiento mecánico. Cada tipo de nodo sabe derivar su operación local, y la regla de la cadena encadena esas derivadas locales a lo largo del grafo.

La regla que genera más errores al implementar autodiferenciación a mano es la acumulación. Si una variable se usa en varios sitios, su gradiente total es la suma de las contribuciones de todos sus consumos, no la última calculada. Sobrescribir en vez de sumar produce gradientes silenciosamente incorrectos, y el entrenamiento simplemente converge peor sin dar ningún error.

El ejemplo mínimo lo muestra: en y = x² + x, la variable x alimenta dos ramas. La derivada es 2x + 1, que es exactamente la suma de las dos contribuciones. Si solo se tomara una, el gradiente sería 2x o 1, y ambos son incorrectos.

Esa misma regla explica un detalle práctico de PyTorch que confunde al principio: optimizer.zero_grad() hace falta precisamente porque el framework acumula por diseño. Esa acumulación no es un fallo: es lo que permite simular lotes grandes sumando gradientes de varios lotes pequeños antes de actualizar.

Ejemplo trabajado

Dos expresiones con nodos reutilizados.

Expresión 1:  y = x² + x   en x = 2

  y = 4 + 2 = 6,0

  rama 1: d(x²)/dx = 2x = 4
  rama 2: d(x)/dx  = 1
  acumulado: dy/dx = 4 + 1 = 5,0

  comprobación analítica 2x + 1 = 5,0                ✓

  Si se sobrescribiera en vez de sumar, saldría 4 o 1.

Expresión 2:  e = (ab + a)·(ab)   en a = 3, b = 4

  el producto ab se usa dos veces:
  su gradiente acumula ambas contribuciones.

Qué calcula el laboratorio

El grafo de cómputo y la acumulación de gradientes en nodos reutilizados.

python classes/part-15-matematica-de-deep-learning/306-computational-graphs/lab.py
compmath run 306

Salidas del laboratorio (11)

Muestra de la ejecución real

{
  "expresion_1": "y = x² + x en x=2",
  "y": 6.0,
  "dy/dx": 5.0,
  "dy/dx_analitico_2x+1": 5.0,
  "acumulacion_correcta": true,
  "expresion_2": "e = (ab + a)·(ab) en a=3, b=4"
}

Errores comunes

Dónde se usa

Implementación de autodiferenciación, capas personalizadas, acumulación de gradientes para lotes grandes y depuración de frameworks.

Idea rectora de la parte

Backpropagation es la regla de la cadena aplicada en orden topológico inverso.

Error a evitar

Mezclar estadísticas de batch normalization entre entrenamiento e inferencia.

Conexión con IA

Toda arquitectura moderna, incluido el Transformer, se construye sobre estos bloques y sobre este mismo mecanismo de derivación.

Bibliografía de la clase

Archivos de la clase