Demostración de propagación inversa
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$

Algoritmo de propagación inversa

El algoritmo de propagación inversa es fundamental para entrenar redes neurales grandes rápidamente. En este artículo, se explica cómo funciona el algoritmo.

Desplázate hacia abajo…

Red neural simple

A la derecha, se puede ver una red neural con una entrada, un nodo de resultado y dos capas ocultas de dos nodos cada una.

Los nodos en las capas adyacentes están conectadas con las ponderaciones \(w_{ij}\), que son los parámetros de la red.

Función de activación

Cada nodo tiene una entrada total de \(\color{input}x\), una función de activación de \(f(\color{input}x\color{black})\) y un resultado de \(\color{output}y\color{black}=f(\color{input}x\color{black})\). \(f(\color{input}x\color{black})\) debe ser una función no lineal; de lo contrario, la red neural solo podrá aprender modelos lineales.

Normalmente, la función de activación que se usa es la función sigmoide: \(f(\color{input}x\color{black}) = \frac{1}{1+e^{-\color{input}x}}\).

Función de error

El objetivo es aprender las ponderaciones de la red automáticamente a partir de los datos, de modo que el resultado predicho \(\color{output}y_{output}\) esté cerca del objetivo \(\color{output}y_{target}\) para todas las entradas de \(\color{input}x_{input}\).

Para calcular qué tan lejos estamos del objetivo, usamos la función de error \(E\). Normalmente, la función de error que se usa es \(E(\color{output}y_{output}\color{black},\color{output}y_{target}\color{black}) = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2 \).

Propagación hacia adelante

En principio, tomamos el ejemplo de entrada \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) y actualizamos la capa de entrada de la red.

Para mantener la consistencia, consideramos la entrada como cualquier otro nodo, pero sin una función de activación. Por lo tanto, el resultado es igual al de la entrada, es decir, \( \color{output}y_1 \color{black} = \color{input} x_{input} \).

Propagación hacia adelante

Ahora, actualizamos la primera capa oculta. Tomamos el resultado \(\color{output}y\) de los nodos en la capa anterior y usamos las ponderaciones para calcular la entrada \(\color{input}x\) de los nodos en la siguiente capa.
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

Propagación hacia adelante

Luego, actualizamos el resultado de los nodos en la primera capa oculta. Para hacerlo, usamos la función de activación: \( f(x) \).
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

Propagación hacia adelante

Con estas 2 fórmulas, propagamos para el resto de la red y obtenemos el resultado final de la red.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

Derivada de error

El algoritmo de propagación inversa decide cuánto se debe actualizar cada ponderación de la red después de comparar el resultado predicho con el deseado para un ejemplo en particular. Para hacerlo, debemos calcular los cambios en el error con respecto a cada ponderación \(\color{dweight}\frac{dE}{dw_{ij}}\).
Una vez que tenemos las derivadas de error, podemos actualizar las ponderaciones con una regla simple de actualización:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
donde \(\alpha\) es una constante positiva, referida como la tasa de aprendizaje, que debemos ajustar de forma empírica.

[Nota] La regla de actualización es muy simple: si el error se reduce cuando aumenta la ponderación (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), debes aumentar la ponderación; de lo contrario, si aumenta el error cuando aumenta la ponderación (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), debes reducir la ponderación.

Derivadas adicionales

Para procesar \(\color{dweight}\frac{dE}{dw_{ij}}\), como medida adicional almacenamos dos derivadas más para cada nodo: De qué manera cambia el error con:
  • la entrada total del nodo \(\color{dinput}\frac{dE}{dx}\)
  • el resultado del nodo \(\color{doutput}\frac{dE}{dy}\)

Propagación inversa

Comencemos con la propagación inversa de las derivadas de error. Como tenemos el resultado predicho de este ejemplo de entrada en particular, podemos calcular de qué manera el error cambia con ese resultado. Dada nuestra función de error \(E = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2\), tenemos:
$$ \color{doutput} \frac{\partial E}{\partial y_{output}} \color{black} = \color{output} y_{output} \color{black} - \color{output} y_{target}$$

Propagación inversa

Ahora que tenemos \(\color{doutput} \frac{dE}{dy}\), podemos obtener \(\color{dinput}\frac{dE}{dx}\) mediante la regla de la cadena.
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
donde \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) cuando \(f(\color{input}x\color{black})\) es la función de activación sigmoide.

Propagación inversa

Ni bien tengamos la derivada de error con respecto a la entrada total de un nodo, podemos obtener la derivada de error con respecto a las ponderaciones que se suman a ese nodo.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

Propagación inversa

Y, al usar la regla de la cadena, también podemos obtener \(\frac{dE}{dy}\) de la capa anterior. Hicimos un círculo completo.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Propagación inversa

Lo que resta hacer es repetir las tres fórmulas anteriores hasta que hayamos calculado todas las derivadas de error.

Fin

Calculando…