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 wij, que son los parámetros de red.
Función de activación
Cada nodo tiene una entrada total x, una función de activación f(x)y una salida y=f(x).
f(x) 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(x)=11+e−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 youtput
se acerque al objetivo ytarget de todas las entradas xinput.
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(youtput,ytarget)=12(youtput−ytarget)2.
Propagación hacia adelante
Para comenzar, tomamos un ejemplo de entrada (xinput,ytarget) 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, y1=xinput.
Propagación hacia adelante
Ahora, actualizamos la primera capa oculta. Tomamos el resultado y de los nodos de la capa anterior y usamos las ponderaciones para calcular la entrada x de los nodos de la siguiente capa.
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).
Propagación hacia adelante
Con estas 2 fórmulas, propagamos el resto de la red y obtenemos el resultado final de esta.
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 dEdwij.
Una vez que tenemos las derivadas de error, podemos actualizar las ponderaciones con una regla de actualización simple:
donde α 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 (dEdwij<0), aumenta el peso; de lo contrario, si el error aumenta cuando el peso aumenta (dEdwij>0), entonces, disminuye el peso.
Derivadas adicionales
Para ayudar a calcular dEdwij, también almacenamos para cada nodo dos derivadas más: cómo cambia el error con:
- la entrada total del nodo dEdx y
- el resultado del nodo dEdy
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=12(youtput−ytarget)2 tenemos lo siguiente:
Propagación inversa
Ahora que ya dEdy podemos usar dEdx la regla de la cadena.
donde ddxf(x)=f(x)(1−f(x)) cuando f(x) 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.
Propagación inversa
Y si usamos la regla de la cadena, también podemos obtener dEdy de la capa anterior. Hicimos un círculo completo.
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.