Inicio · Parte 15 — Matemática de Deep Learning
forward: z = Wx + b, a = σ(z)
backward: dL/dW = dL/dz · xᵀ
con cross-entropy y sigmoide: dL/dz = a − y
Backpropagation no es un algoritmo aparte: es la regla de la cadena de la clase 147 aplicada sistemáticamente al grafo de la red, recorriendo los nodos en orden topológico inverso. Su valor es de eficiencia, no de concepto: calcula todos los gradientes en una sola pasada hacia atrás.
El procedimiento tiene dos fases. En el paso hacia adelante se calculan las salidas capa a capa y se guardan los valores intermedios, que harán falta después; ese almacenamiento es la razón de que la memoria de entrenamiento crezca con la profundidad. En el paso hacia atrás se propaga la derivada de la pérdida desde la salida hasta los parámetros.
Hay una simplificación algebraica que conviene ver una vez con detalle. Al combinar entropía cruzada con sigmoide en la salida, el gradiente respecto de la preactivación se reduce a a − y: la derivada de la sigmoide se cancela exactamente contra el denominador de la pérdida. Esa cancelación es la que evita los gradientes saturados de la clase 286, y es la razón técnica de emparejar esas dos funciones.
Recorrer los números a mano una vez, como hace este ejemplo, vale más que leer la demostración diez veces. Después conviene no volver a implementarlo: la autodiferenciación de la clase 319 hace exactamente esto sin errores de signo ni de transposición.
Backpropagation completo sobre una red 2-2-1.
entrada: (0,5 ; −1,2) objetivo: 1,0
FORWARD
z1 = (1,09 ; 0,01)
a1 = (0,796878 ; 0,01) tras la activación
z2 = 0,524127
a2 = 0,628xxx salida sigmoide
BACKWARD
dL/da2 = −1,592072
dL/dz2 = a2 − y = −0,371888 ← la sigmoide se canceló
dL/dW2 = dL/dz2 · a1ᵀ
= (−0,296349 ; −0,003719)
El segundo peso recibe un gradiente 80 veces menor
porque su activación a1 vale solo 0,01.
Backpropagation paso a paso sobre una red 2-2-1.
python classes/part-15-matematica-de-deep-learning/305-backpropagation-paso-a-paso/lab.py
compmath run 305
entradaobjetivoforwarddL/da2dL/dz2_simplificadodL/dW2dL/db2dL/dz1dL/dW1gradiente_numerico_W1[0][0]gradiente_analitico_W1[0][0]coincidenorden{
"entrada": [
0.5,
-1.2
],
"objetivo": 1.0,
"forward": {
"z1": [
1.09,
0.01
],
"a1": [
0.796878,
0.01
],
"z2": 0.524127,
"a2": 0.628112,
"perdida": 0.465036
},
"dL/da2": -1.592072,
"dL/dz2_simplificado": -0.371888,
"dL/dW2": [
-0.296349,
-0.003719
]
}
Entrenamiento de cualquier red, comprensión de los frameworks, depuración de gradientes y diseño de capas personalizadas.
Toda arquitectura moderna, incluido el Transformer, se construye sobre estos bloques y sobre este mismo mecanismo de derivación.
10.1038/323533a0 verificado en Crossref (2026-08-19).