El gradiente de una capa densa se reduce a dos fórmulas, y ambas nacen de una misma matriz jacobiana. Cuando una capa calcula $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$, la derivada de la salida respecto a la entrada no es un número suelto, sino una matriz completa: el jacobiano. Entender esa matriz explica por qué el gradiente respecto a los pesos vale $\boldsymbol{\delta}\,\mathbf{x}^\top$ y por qué el que viaja hacia atrás vale $\mathbf{W}^\top \boldsymbol{\delta}$. Esta guía deriva ambos resultados con dimensiones concretas. La misma explicación está disponible en inglés.

Fórmula clave $\dfrac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$

Puntos clave

  • El jacobiano de una función vectorial recoge todas las derivadas parciales de cada salida respecto a cada entrada en una sola matriz.
  • Para una capa densa $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$, el jacobiano de $\mathbf{z}$ respecto a $\mathbf{x}$ es exactamente la matriz de pesos $\mathbf{W}$.
  • El gradiente de la pérdida respecto a los pesos es un producto externo: $\frac{\partial L}{\partial \mathbf{W}} = \boldsymbol{\delta}\,\mathbf{x}^\top$, con las mismas dimensiones que $\mathbf{W}$.
  • El gradiente respecto a la entrada es $\frac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$, y esa transpuesta es la que propaga el error a la capa anterior.
  • Si $\mathbf{W}$ es de $3 \times 4$, el gradiente $\boldsymbol{\delta}\,\mathbf{x}^\top$ también es de $3 \times 4$ y $\mathbf{W}^\top \boldsymbol{\delta}$ tiene 4 componentes: las dimensiones cuadran o hay un error.

La matriz jacobiana

Cuando una función recibe un vector y devuelve otro vector, su derivada deja de ser un número y se convierte en una matriz. Esa matriz es el jacobiano. Si una función transforma una entrada de $n$ componentes en una salida de $m$ componentes, su jacobiano es una tabla de $m \times n$ números, donde la fila $i$ y la columna $j$ guardan la derivada parcial de la salida $i$ respecto a la entrada $j$.

La idea es la extensión natural de la derivada parcial y el gradiente: en lugar de una sola salida, tenemos varias, y cada una aporta su propia fila de parciales. La Wikipedia[1] lo resume con precisión: el jacobiano es la mejor aproximación lineal de la función cerca de un punto. Como escriben Terence Parr y Jeremy Howard en su ensayo sobre cálculo matricial, «este documento intenta explicar todo el cálculo matricial que necesitas para entender el entrenamiento de las redes neuronales profundas».

El jacobiano de la parte lineal es constante: vale $\mathbf{W}$ sea cual sea el valor de $\mathbf{x}$. Eso lo distingue del jacobiano de una activación como la sigmoide, que sí cambia con la entrada.

Gradiente respecto a los pesos

Para entrenar necesitamos saber cómo cambia la pérdida $L$ al mover cada peso. Definimos primero el error de la capa, $\boldsymbol{\delta} = \frac{\partial L}{\partial \mathbf{z}}$, un vector con tantas componentes como salidas tenga $\mathbf{z}$. Ese $\boldsymbol{\delta}$ llega desde las capas siguientes por la regla de la cadena.

Como $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$, cada salida $zi$ depende del peso $W{ij}$ de forma sencilla: $\frac{\partial zi}{\partial W{ij}} = x_j$. Al aplicar la regla de la cadena y ordenar los términos, el gradiente completo es un producto externo:

$$\frac{\partial L}{\partial \mathbf{W}} = \boldsymbol{\delta}\,\mathbf{x}^\top$$

Aquí $\boldsymbol{\delta}$ es un vector columna y $\mathbf{x}^\top$ un vector fila, así que su producto reconstruye una matriz con la forma exacta de $\mathbf{W}$. Cada entrada dice cuánto contribuye ese peso al error, combinando la señal que entra por $\mathbf{x}$ con el error que sale por $\boldsymbol{\delta}$.

Gradiente respecto a la entrada

El segundo gradiente no ajusta esta capa, sino que reparte la culpa hacia atrás. Queremos $\frac{\partial L}{\partial \mathbf{x}}$, es decir, cuánto habría cambiado la pérdida si la entrada hubiera sido distinta. Ese valor es el $\boldsymbol{\delta}$ de la capa anterior.

Partimos del jacobiano de $\mathbf{z}$ respecto a $\mathbf{x}$. Dado que $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$, la parcial $\frac{\partial z_i}{\partial xj}$ es simplemente $W{ij}$, de modo que el jacobiano completo es la propia matriz $\mathbf{W}$. Al encadenar ese jacobiano con el error $\boldsymbol{\delta}$, la regla de la cadena para vectores multiplica por la transpuesta:

$$\frac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$$

Este es el resultado central del artículo, y también la fórmula que aparece en la imagen de portada. La misma multiplicación de matrices que estudiamos en multiplicación de matrices en redes neuronales reaparece aquí, ahora en la pasada hacia atrás.

Ver la derivación

Por la regla de la cadena, $\frac{\partial L}{\partial x_j} = \sum_i \frac{\partial L}{\partial z_i}\,\frac{\partial z_i}{\partial x_j} = \sum_i \delta_i\,W_{ij}$. Ese sumatorio sobre $i$ recorre la columna $j$ de $\mathbf{W}$, que es la fila $j$ de $\mathbf{W}^\top$; reunir las $n$ componentes en un vector da la forma matricial $\frac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$.

Por qué aparece la transpuesta de W

La pregunta natural es por qué en la pasada hacia delante usamos $\mathbf{W}$ y en la de atrás $\mathbf{W}^\top$. La razón es puramente dimensional y de orientación. En la propagación hacia delante, $\mathbf{W}$ toma un vector de entrada de $n$ componentes y produce $m$ salidas. En la propagación hacia atrás recorremos el camino inverso: partimos de un error con $m$ componentes y debemos devolver un vector con $n$ componentes, uno por cada entrada.

Solo una matriz de $n \times m$ puede transformar $m$ números en $n$, y esa matriz es $\mathbf{W}^\top$. Dicho de otro modo, la transpuesta invierte el papel de filas y columnas justo lo necesario para que el error fluya en sentido contrario. No es un truco: es lo que exige la regla de la cadena cuando el jacobiano de la capa es $\mathbf{W}$. Este mismo mecanismo es el corazón de la derivación matemática de la retropropagación.

Ejemplo con dimensiones

Pongamos números concretos. Supongamos una capa con $n = 4$ entradas y $m = 3$ salidas. Entonces $\mathbf{W}$ es una matriz de $3 \times 4$, con 12 pesos, el vector $\mathbf{x}$ tiene 4 componentes y $\mathbf{z}$ tiene 3. El sesgo $\mathbf{b}$ aporta otros 3 valores.

En la pasada hacia atrás, el error $\boldsymbol{\delta}$ tiene 3 componentes, una por cada salida. Comprobemos las dos fórmulas:

  • $\frac{\partial L}{\partial \mathbf{W}} = \boldsymbol{\delta}\,\mathbf{x}^\top$: un vector de 3 por un vector fila de 4 da una matriz de $3 \times 4$, idéntica a $\mathbf{W}$. Correcto.
  • $\frac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$: la transpuesta $\mathbf{W}^\top$ es de $4 \times 3$, y al multiplicar por $\boldsymbol{\delta}$ de 3 componentes obtenemos un vector de 4, uno por cada entrada. Correcto.

Cuadrar las dimensiones es la mejor comprobación rápida: si en algún paso las formas no encajan, hay un error de transpuesta o de orden en el producto. Con la tasa de aprendizaje $\eta$, la actualización final es $\mathbf{W} \leftarrow \mathbf{W}-\eta\,\frac{\partial L}{\partial \mathbf{W}}$, un paso del descenso de gradiente aplicado a las 12 componentes a la vez.

Preguntas frecuentes

¿Qué es exactamente el jacobiano de una capa densa?

Es la matriz de todas las derivadas parciales de la salida respecto a la entrada. Para $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$, ese jacobiano es la matriz de pesos $\mathbf{W}$, porque cada $\frac{\partial z_i}{\partial xj}$ vale precisamente $W{ij}$. Por eso la parte lineal de la capa tiene un jacobiano constante que no depende del valor de $\mathbf{x}$.

¿Por qué el gradiente de los pesos es un producto externo?

Porque combina dos vectores de sentidos opuestos: el error $\boldsymbol{\delta}$ que baja de las capas siguientes y la entrada $\mathbf{x}$ que subió en la pasada hacia delante. El producto $\boldsymbol{\delta}\,\mathbf{x}^\top$ cruza cada componente del error con cada componente de la entrada, y el resultado tiene exactamente la forma de $\mathbf{W}$, de modo que se puede restar peso a peso.

¿Cómo compruebo que no me equivoco con las transpuestas?

Verificando las dimensiones en cada paso. Si $\mathbf{W}$ es de $3 \times 4$, entonces $\mathbf{W}^\top \boldsymbol{\delta}$ debe dar un vector de 4 y $\boldsymbol{\delta}\,\mathbf{x}^\top$ una matriz de $3 \times 4$. Cuando las formas no coinciden, casi siempre falta una transpuesta o el producto está en el orden equivocado.

Conclusión

El gradiente de una capa densa se sostiene sobre una sola idea: el jacobiano de $\mathbf{z} = \mathbf{W}\mathbf{x}+\mathbf{b}$ respecto a la entrada es la matriz $\mathbf{W}$. De ahí se derivan las dos fórmulas que mueven el entrenamiento, $\frac{\partial L}{\partial \mathbf{W}} = \boldsymbol{\delta}\,\mathbf{x}^\top$ para ajustar los pesos y $\frac{\partial L}{\partial \mathbf{x}} = \mathbf{W}^\top \boldsymbol{\delta}$ para propagar el error. El siguiente paso natural es ver estas piezas en cadena dentro del mapa de las matemáticas de las redes neuronales.

Fuentes

  1. Wikipedia
  2. Deep Learning (Goodfellow, Bengio y Courville)
  3. The Matrix Calculus You Need For Deep Learning (Parr y Howard)
  4. Backpropagation through a fully-connected layer (Eli Bendersky)

Ruta: Entrenamiento: descenso de gradiente y retropropagación