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 esencial para entrenar redes neuronales grandes con rapidez. En este artículo, se explica cómo funciona el algoritmo.

Desplázate hacia abajo...

Red neuronal simple

A la derecha, verás una red neuronal con una entrada, un nodo de salida y dos capas ocultas de dos nodos cada una.

Los nodos en las capas vecinas están conectados con pesos \(w_{ij}\), que son los parámetros de red.

Función de activación

Cada nodo tiene una entrada total \(\color{input}x\), una función de activación \(f(\color{input}x\color{black})\)y una salida \(\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 neuronal solo podrá aprender modelos lineales.

Una función de activación de uso común es la función sigmoidea: \(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 manera que el resultado previsto \(\color{output}y_{output}\) se acerque al objetivo \(\color{output}y_{target}\) de todas las entradas \(\color{input}x_{input}\).

Para medir qué tan lejos estamos del objetivo, usamos una función de error \(E\). Una función de error de uso frecuente 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

Para comenzar, tomamos un 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 mayor coherencia, consideramos que la entrada es como cualquier otro nodo, pero sin una función de activación, por lo que su resultado es igual a su 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 de la capa anterior y usamos las ponderaciones para calcular la entrada \(\color{input}x\) de los nodos de 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 ello, 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 el resto de la red y obtenemos el resultado final de esta.
$$ \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 actualizar cada peso de la red después de comparar el resultado predicho con el deseado para un ejemplo en particular. Para ello, debemos calcular cómo cambia el error con respecto a cada peso \(\color{dweight}\frac{dE}{dw_{ij}}\).
Una vez que tenemos las derivadas de error, podemos actualizar las ponderaciones con una regla de actualización simple:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
donde \(\alpha\) es una constante positiva, conocida como tasa de aprendizaje, que debemos ajustar de forma empírica.

[Nota] La regla de actualización es muy simple: si el error disminuye cuando el peso aumenta (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), aumenta el peso; de lo contrario, si el error aumenta cuando el peso aumenta (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), entonces, disminuye el peso.

Derivadas adicionales

Para ayudar a calcular \(\color{dweight}\frac{dE}{dw_{ij}}\), también almacenamos para cada nodo dos derivadas más: cómo cambia el error con:
  • la entrada total del nodo \(\color{dinput}\frac{dE}{dx}\) y
  • el resultado del nodo \(\color{doutput}\frac{dE}{dy}\)

Propagación inversa

Comencemos a propagar de forma inversa las derivadas de error. Dado que tenemos el resultado predicho de este ejemplo de entrada en particular, podemos calcular cómo cambia el error 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 lo siguiente:
$$ \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 ya \(\color{doutput} \frac{dE}{dy}\) podemos usar \(\color{dinput}\frac{dE}{dx}\) 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 sigmoidea.

Propagación inversa

En cuanto 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 entran en 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 si usamos 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

Todo lo que queda por hacer es repetir las tres fórmulas anteriores hasta que hayamos calculado todas las derivadas de error.

El final.

Calculando...