¿Qué se ‘propaga’ durante la retropropagación?

Habrá personas que le dirán que los errores de la red se propagan durante la propagación inversa. Si bien esto es cierto en cierta medida, personalmente creo que pensar en la propagación hacia atrás de esa manera es engañoso y no arroja luz sobre la comprensión del algoritmo, así como muchas de sus generalizaciones. Así que daré la forma en que lo pienso.

La retropropagación es una implementación de la regla de la cadena en el cálculo de múltiples variables. Su propósito es calcular el gradiente de una función compuesta (potencialmente muy complicada) con respecto a sus parámetros. Lo hace aplicando la regla de la cadena a cada uno de sus cálculos intermedios, en un orden apropiado.

Aquí está la configuración general. Deje que [math] f_i: \ mathbb {R} ^ {I_i} \ to \ mathbb {R} ^ {O_i} [/ math] con [math] i = 1, 2, …, n [/ math] sea una secuencia de funciones, donde [math] f_i = f_i (g_i) [/ math] con [math] g_i [/ ​​math] es un subconjunto de [math] \ {1, 2, …, i-1 \} [/ math] . También requerimos que [math] O_n = 1 [/ math], para que la salida final de la secuencia sea un escalar. Digamos también que estas funciones [math] f_i [/ ​​math] dependen de un vector de parámetros [math] \ theta [/ math]. La retropropagación intenta calcular el gradiente [math] \ nabla_ \ theta f_n [/ math]. Lo hace aplicando esta forma de regla de cadena

[matemáticas] \ frac {\ partial f_i} {\ partial \ theta} = \ sum_ {i \ in g_j} \ frac {\ partial f_j} {\ partial f_i} \ cdot \ frac {\ partial f_i} {\ partial \ theta} [/ matemáticas]

Ahora el término [math] \ frac {\ partial f_i} {\ partial \ theta} [/ math] puede calcularse directamente mirando [math] f_i [/ ​​math]. Sin embargo, [math] \ frac {\ partial f_j} {\ partial f_i} [/ math] para todo [math] j [/ math] debe calcularse primero. La propiedad requerida de que [math] g_i [/ ​​math] es un subconjunto de [math] \ {1, 2, …, i-1 \} [/ math] garantiza que siempre es así, siempre que realice el cálculos anteriores en el orden descendente de [matemáticas] i [/ matemáticas].

Ese es el algoritmo de propagación hacia atrás (generalizado). Se utiliza en el diseño de muchos marcos computacionales basados ​​en gráficos para el aprendizaje profundo, así como el aprendizaje automático más genérico, cuyos ejemplos incluyen, entre otros, Tensorflow, Theano y Torch.

Básicamente, la señal de error se propaga hacia atrás. Al calcular la derivada de pesos dentro de un sistema de aprendizaje automático, al igual que en el cálculo, es más fácil y rápido usar la regla de la cadena. Es decir, comienza donde es más fácil calcular los derivados y luego trabaja hacia donde es más difícil.

Los derivados son muy fáciles de calcular en la capa de salida, pero se vuelven más difíciles desde la capa de salida hacia la capa de entrada. Por lo tanto, una vez que se calculan las derivadas en la salida, simplemente se pueden usar para la capa justo antes y así sucesivamente. El hecho de que el algoritmo se mueva hacia atrás le da el nombre de propagación hacia atrás.

Por lo tanto, los errores o derivados se propagan hacia atrás para que sea más fácil calcular todos los derivados de la función de costo con los pesos en un sistema de aprendizaje automático.

Espero que esto ayude.

Cada red neuronal (convolución o de otro tipo) tiene alguna medida de precisión o, por el contrario, el error. La idea general es cambiar los pesos de una red neuronal con respecto a este error, para minimizar el error general de entrenamiento.

Para minimizar el error, en el descenso de gradiente estocástico, la idea principal es mover los pesos en la dirección negativa del gradiente del error con los pesos. Eso es exactamente lo que se propaga hacia atrás a las capas anteriores, el gradiente de error. Creo que Brando Miranda dio una gran respuesta sobre cómo calcularlo.

Para una red convolucional, puede escribir matemáticamente la propagación hacia atrás en forma de convoluciones. Estoy seguro de que puede encontrar detalles en otro lugar.

La idea no es muy complicada. Cuando toma la derivada del error con respecto a un parámetro, obtiene la regla de la cadena. Tiene la regla de la cadena debido a las composiciones de función (en este caso especial de una red neuronal). Entonces calcula las derivadas de la pérdida desde la capa de pérdida hasta la primera capa y “propaga” esta pérdida para calcular la nueva pérdida.

Si quieres ser preciso, usualmente calculas la pérdida con respecto a una activación presináptica (la entrada a la no linealidad) y eso es lo que realmente se “vuelve a propagar”. Las ecuaciones son las siguientes: que V sea la función de pérdida. Entonces, la cantidad que se propaga es:

[matemática] \ frac {\ parcial V (w)} {\ parcial s ^ {(l)} _ j} = \ delta ^ {(l)} _ j [/ matemática]

Explícitamente, vuelve a propagarse al calcularlo “recursivamente” (entre comillas porque puede convertirlo en iterativo si lo desea):

[matemáticas] \ delta ^ {(l)} _ j = \ sum ^ {D ^ {(l + 1)}} _ {k ‘= 1} \ frac {\ partial V (w)} {\ partial s ^ { (l + 1)} _ {k ‘}} \ frac {\ partial s ^ {(l + 1)} _ {k’}} {\ partial a ^ {(l)} _ j} \ frac {\ partial a ^ {(l)}} {\ parcial s ^ {(l)} _ j} = \ sum ^ {D ^ {(l + 1)}} _ {k ‘= 1} \ delta ^ {(l + 1) } _ {k ‘} {W} ^ {(l + 1)} _ {j, k’} \ theta ‘(s ^ {(l)} _ j) [/ math]

donde s es la activación presináptica y a es el valor de la función de activación. Tenga en cuenta que el delta [math] \ delta ^ {(l)} _ j [/ math] se expresa en términos de otros deltas … hasta la capa de pérdida (el caso base de backprop). Esto solo muestra cómo backprop sigue reutilizando sus cálculos y los desliza hacia abajo (es decir, backpropagates) a la capa más cercana a la capa de entrada.

El error. Es decir, la diferencia (al cuadrado) entre la salida real y la salida deseada (entrenamiento).

Y si puede calcular el gradiente de este error (a través de la diferenciación), puede mover (los pesos) en una dirección para minimizar el error.

El problema con todos los algoritmos de descenso de gradiente es que existe un alto peligro de establecerse en un mínimo local, es decir, una solución aceptable, pero no óptima.

More Interesting

¿Cuál es una buena idea para un proyecto de inteligencia artificial?

¿Cuáles son los buenos sitios web y foros de inteligencia artificial?

¿Cómo funcionan los filtros Prisma?

¿Cuáles son varias cosas que deben considerarse al elegir un algoritmo de aprendizaje automático como SVM, redes neuronales, árboles de decisión, etc.?

¿Cuál es la tasa de aprendizaje en las redes neuronales?

¿Podrían los chatbots no ponerse al día?

¿Es la era de la inteligencia artificial la culminación de la era de la razón, o la IA es una de las consecuencias de la era de la razón?

¿Cuál es la mejor estrategia para aprender el aprendizaje automático desde cero?

En el aprendizaje automático, ¿cómo puedo juzgar si algo, como una secuencia, es predecible?

¿Cuáles son algunos temas comunes que deben enseñarse en un curso de inteligencia artificial, pero que se omiten en la mayoría de los cursos de IA?

¿Es la inteligencia artificial para la batalla algo bueno o malo?

¿Es posible que la CIA, la NSA o cualquier otra agencia de inteligencia / seguridad de todo el mundo estén haciendo una investigación clasificada de inteligencia artificial y el resto del mundo no lo sepa?

Agentes conversacionales (chatbots): quiero crear un bot de chat personalizado para usar con software de casa inteligente, pero no desde cero. ¿Cuál es el mejor método para hacer esto?

¿Dónde puedo encontrar un corpus grande de mensajes suicidas / no suicidas etiquetados para entrenar una red neuronal para reconocer las tendencias suicidas?

¿Cuál de los temas entre Big Data, Machine Learning e Inteligencia Artificial tendrá un futuro prometedor?