Lección 6

El grafo computacional

Cuando calculamos L = (a × b) + a, los números intermedios no desaparecen. Se guardan en un grafo. Ese grafo es lo que luego permite propagar los gradientes.

1. La receta de cocina con dependencias

Para hacer una torta necesitas: mezclar harina + huevos, batir mantequilla + azúcar, y luego unir ambas mezclas. Si alguien te pregunta "¿qué pasa si uso menos harina?", tienes que rastrear el efecto: menos harina → mezcla más líquida → torta más densa → tiempo de horneado diferente.

Cada paso depende de los anteriores. Si tuvieras el mapa de todas esas dependencias, podrías responder sistemáticamente cualquier pregunta del tipo "¿qué cambia si cambio X?".

🍰 El grafo computacional es ese mapa de dependencias, pero para cálculos matemáticos. Cada número del cálculo es un nodo. Las operaciones que conectan números son las aristas. Una vez que tienes el grafo, puedes preguntarte: "si cambio a, ¿cuánto cambia L?"

2. Un grafo concreto: L = (a × b) + a

Vamos a construir el grafo de este cálculo paso a paso, con a = 2 y b = 3.

✍️ Construyendo el grafo paso a paso
Tenemos dos inputs: a = 2, b = 3

Paso 1: Calculamos c = a × b
  c = 2 × 3 = 6
  → Nodo 'c' aparece en el grafo
  → Sus "padres" son a y b (vienen de esos dos nodos)
  → La operación que lo creó: multiplicación (×)

Paso 2: Calculamos L = c + a
  L = 6 + 2 = 8
  → Nodo 'L' aparece en el grafo
  → Sus "padres" son c y a
  → La operación que lo creó: suma (+)

El grafo resultante:
  a ──┬──→ [×] ──→ c ──→ [+] ──→ L
  b ──┘              │            ↑
  a ─────────────────┘────────────┘
      ↑
  Nota: 'a' aparece dos veces en el grafo
  (entra a la multiplicación Y a la suma)
      
Grafo visual · L = (a × b) + a, forward pass
Grafo computacional de L = (a × b) + a con valores a=2, b=3 Nodos circulares para a, b, c y L. Aristas con etiqueta de operación. Valores mostrados en cada nodo. a 2 b 3 × c = a×b 6 + L 8 a también llega directo a (+)

El nodo 'a' participa en dos operaciones: la multiplicación con b, y la suma con c. Esto es importante para el backpropagation.

3. ¿Por qué guardar el grafo?

La pregunta que nos interesa es: "Si cambio a en 0.01, ¿cuánto cambia L?" Eso es exactamente lo que necesitamos para actualizar los pesos.

Sin el grafo, tendríamos que recalcular todo desde cero para cada pequeño cambio. Con el grafo, podemos ir hacia atrás usando las derivadas de cada operación, que son mucho más simples de calcular.

🔑 Forward pass: calculamos de izquierda a derecha (de inputs a L), guardando todos los valores intermedios.
Backward pass: vamos de derecha a izquierda (de L a los inputs), propagando gradientes usando el grafo. Esto es exactamente lo que hace la clase Value en la siguiente lección.

🎮 Pruébalo: grafo interactivo

Mueve los sliders para cambiar a y b. El grafo se actualiza en tiempo real mostrando cómo cambia cada nodo.

2.0
3.0

4. Lo que aprendiste

En esta lección:
  • Un grafo computacional es el mapa de dependencias de un cálculo: nodos = valores, aristas = operaciones.
  • El forward pass construye el grafo de izquierda a derecha, calculando y guardando cada valor intermedio.
  • El backward pass usa ese grafo para propagar gradientes de derecha a izquierda.
  • Si un nodo aparece varias veces en el grafo (como 'a' en L = a×b + a), sus gradientes se acumulan.