La esencia matemática de la retropropagación

En este capítulo se calculará manualmente todo el proceso de retropropagación de una red neuronal de dos capas.

Retropropagación = aplicación sistemática de la regla de la cadena en el gráfico de cálculo.


Análisis de conceptos

Gráfico de cálculo: propagación hacia adelante y hacia atrás

Una red simple de dos capas: entrada x → capa oculta (ReLU) → salida → pérdida MSE.

x
z₁=w₁x+b₁
a₁=ReLU(z₁)
z₂=w₂a₁+b₂
ŷ
L=(ŷ-y)²

La propagación hacia adelante calcula la salida de izquierda a derecha. La retropropagaciónde derecha a izquierdacalcula el gradiente de cada parámetro respecto a la pérdida.

Calcular manualmente un ejemplo completo

Sean x=2, y=4 (etiqueta real), parámetros w₁=0.5, b₁=0, w₂=1, b₂=0.

Propagación hacia adelante

PasosCálculoValor
z₁ = w₁x + b₁0.5×2 + 01.0
a₁ = ReLU(z₁)max(0, 1.0)1.0
ŷ = w₂a₁ + b₂1×1.0 + 01.0
L = (ŷ - y)²(1-4)²9.0

Retropropagación (regla de la cadena)

Gradiente de la pérdida respecto a ŷ:\( \frac{\partial L}{\partial \hat{y}} = 2(\hat{y}-y) = 2(1-4) = -6 \)

Gradiente de ŷ respecto a w₂ → L respecto a w₂:\( \frac{\partial \hat{y}}{\partial w_2} = a_1 = 1.0 \),\( \frac{\partial L}{\partial w_2} = (-6) \times 1.0 = -6 \)

Gradiente de L respecto a a₁ (continuar propagando hacia adelante):\( \frac{\partial L}{\partial a_1} = \frac{\partial L}{\partial \hat{y}} \cdot w_2 = -6 \times 1 = -6 \)

A través de ReLU:\( \frac{\partial a_1}{\partial z_1} = 1 \) (porque z₁=1>0), \( \frac{\partial L}{\partial z_1} = -6 \)

L respecto a w₁:\( \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial z_1} \cdot x = -6 \times 2 = -12 \)

Resumir gradientes y actualizar

ParámetrosGradienteActualización (lr=0.1)
w₁-120.5 + 1.2 = 1.7
b₁-60 + 0.6 = 0.6
w₂-61 + 0.6 = 1.6
b₂-60 + 0.6 = 0.6

Los gradientes son todos negativos: esto indica que la predicción actual es demasiado pequeña (1 < 4), todos los parámetros deben aumentar.

El gradiente de w₁ (-12) es mayor que el de w₂ (-6): porque w₁ está más lejos de la pérdida, la ruta de propagación en cadena es más larga y se multiplica por x=2.


Verificación en Python

Ejemplo

import torch

x = torch.tensor([2.0])
y = torch.tensor([4.0])
w1 = torch.tensor([0.5], requires_grad=True)
b1 = torch.tensor([0.0], requires_grad=True)
w2 = torch.tensor([1.0], requires_grad=True)
b2 = torch.tensor([0.0], requires_grad=True)

# Adelante
a1 = torch.relu(w1 * x + b1)
y_pred = w2 * a1 + b2
loss = (y_pred - y) ** 2
loss.backward()

print(=== EJEMPLO PyTorch validación ===)
print(f∂L/∂w1 = {w1.grad.item():.1f} (cálculo manual: -12))
print(f∂L/∂b1 = {b1.grad.item():.1f} (cálculo manual: -6))
print(f∂L/∂w2 = {w2.grad.item():.1f} (cálculo manual: -6))
print(f"∂L/∂b2 = {b2.grad.item():.1f} (cálculo manual: -6)")

# Un paso de descenso de gradiente
lr = 0.1
with torch.no_grad():
    w1 -= lr * w1.grad; b1 -= lr * b1.grad
    w2 -= lr * w2.grad; b2 -= lr * b2.grad
    new_loss = ((w2 * torch.relu(w1*x+b1) + b2 - y)**2).item()

print(f"\nPérdida original: {loss.item():.1f} → Nueva pérdida: {new_loss:.2f}")
print(f"¡La pérdida disminuyó!")
=== EJEMPLO PyTorch 验证 ===
∂L/∂w1 = -12.0  (手算: -12)
∂L/∂b1 = -6.0  (手算: -6)
∂L/∂w2 = -6.0  (手算: -6)
∂L/∂b2 = -6.0  (手算: -6)
原损失: 9.0 → 新损失: 1.03
损失减小了!

Retropropagación = la confluencia de tres líneas

Álgebra lineal

Propagación hacia adelante = operaciones matriciales

z = Wx + b

Cálculo

Retropropagación = regla de la cadena

∂L/∂w = ∂L/∂z · ∂z/∂w

Optimización

Actualización de parámetros = descenso de gradiente

θ = θ - η∇J

Probabilidad y teoría de la información

Diseño de pérdida = MLE + entropía cruzada

L = -log P(y|x)

La retropropagación esencialmente hace tres cosas: hacia adelante usa operaciones matriciales para calcular la salida, hacia atrás usa la regla de la cadena para calcular los gradientes, y una vez obtenidos los gradientes, usa el descenso de gradiente para actualizar los parámetros.

La probabilidad, la estadística y la teoría de la información proporcionan la base teórica para la elección de la función de pérdida.


Otras extensiones