(1) Comprensión del algoritmo de retropropagación (Back-Propagation)

Este artículo se refiere al Capítulo 6 6.5 Propagación hacia atrás y otras diferenciaciones de deeplearningbook.org

Algoritmos

El algoritmo de retropropagación se divide en dos partes, la primera parte trata sobre la comprensión conceptual y la segunda parte usa RNN para una derivación simple.

El primero es este artículo  (1) Comprensión del algoritmo de propagación hacia atrás (propagación hacia atrás)

El segundo enlace (2) Derivación detallada del algoritmo de retropropagación de RNN

Comencemos ahora ~

Primero, aclare para qué se usa el algoritmo de retropropagación: encuentre el gradiente.

1. Propagación directa Propagación directa

" Algoritmo de retropropagación ", en el que  la palabra "reversa" tal como su nombre lo indica, primero hay un proceso hacia adelante y luego hay un reverso. Entonces, antes de que pueda comprender la propagación hacia atrás , primero debe averiguar la propagación hacia adelante . Se dibuja un diagrama de flujo simple de la siguiente manera: (PÉRDIDA en la figura es un valor real).

  

En la figura anterior, la ruta de propagación hacia adelante es desde la entrada hasta LOSS, y la ruta de propagación hacia atrás es desde LOSS hasta los parámetros (porque solo necesitamos el gradiente de los parámetros para encontrar el gradiente).

Hay dos diferencias entre avance y retroceso, una es que la dirección es opuesta y la otra es que el contenido del cálculo es diferente, ambos tienen lo mismo, es decir, paso a paso hacia adelante/hacia atrás. La retropropagación para encontrar el gradiente es encontrarlo paso a paso, no en un solo paso.

2. ¿Por qué usar el algoritmo de retropropagación para encontrar el gradiente?

En primer lugar, podemos usar el método numérico para obtener el gradiente (según la definición de la derivada para resolver el gradiente), pero hay una desventaja, es decir, cuando hay muchos parámetros, consume mucho tiempo y lento. Este método excluye.

Además, habrá una expresión funcional completa desde la entrada hasta LOSS, y la expresión derivada del parámetro puede derivarse directamente de acuerdo con esta expresión funcional y luego sustituirse en el cálculo numérico para obtener la derivada. Hay dos formas de derivar la expresión derivada del parámetro, una es simplificar y derivar directamente, y la otra es derivar en cadena.

Supongamos  y=g(x) y  z=f(g(x))=f(y)=h(x) , encontramos la derivada de z con respecto a x:

Derivada directa: \frac{\mathrm{d} z}{\mathrm{d} x}={h}'(x)     (Fórmula 1)

Derivación de cadena: \frac{\mathrm{d} z}{\mathrm{d} x}=\frac{\mathrm{d} z}{\mathrm{d} y}\frac{\mathrm{d} y}{\mathrm {d} x}={f}'(y){g}'(x)={f}'(g(x)){g}'(x)    (Fórmula 2)

Para el método de derivación directa, en la fórmula 1, primero se debe obtener la función h, es decir, para simplificar f(g(x)), cuando hay muchas funciones anidadas o las funciones son complejas, la simplificación será más complicada, y la simplificación La expresión que obtuvo Jane también es difícil de ser lo suficientemente simple como para derivarla fácilmente, y siento que no hay necesidad de dar un paso adicional. Este método excluye.

Por lo tanto, ahora solo discutiremos la fórmula 2, que es usar el método de derivación en cadena. Sin embargo, en las aplicaciones prácticas, implicará la cuestión de si guardar los resultados del cálculo intermedio durante el proceso de propagación directa. La diferencia entre los dos está marcada como se muestra en la siguiente figura:

El 1 directo en la figura no guarda el resultado intermedio y durante el proceso, por lo que {f}'(y)es necesario calcular y primero en el cálculo inverso. Es decir, debe calcularse  durante el proceso de propagación hacia adelante g(x)y luego calcularse  , y la memoria ocupada por y se libera después f(y)del cálculo . f(y)Cuando calcule el gradiente a la inversa, calculeg(x) , luego calcule{f}'(y) , luego calcule{g}'(x) . Entonces g(x)se calcula dos veces.

El avance 2 en la figura guarda el resultado intermedio y durante el proceso, por lo que no se calculará cuando se calcule el gradiente en la dirección inversa g(x). Es decir, debe calcularse  durante el proceso de propagación directa g(x)y luego calcular f(y) y guardar los datos de y. Al calcular el gradiente a la inversa, debe calcularse{f}'(y) y luego calcularse{g}'(x) . De esta manera, g(x)solo se cuenta una vez. 

Cuantas más funciones intermedias como la función g, más funciones se recalculan. Por ejemplo, para una función z=f(g(a(b(x))))=f(y)=f(g(v))=f(g(a(w))), la expresión derivada es la siguiente:

\frac{\mathrm{d} z}{\mathrm{d} x}=\frac{\mathrm{d} z}{\mathrm{d} y}\frac{\mathrm{d} y}{\mathrm {d} v}\frac{\mathrm{d} v}{\mathrm{d} w}\frac{\mathrm{d} w}{\mathrm{d} x}={f}'(g(a (b(x)))){g}'(a(b(x))){a}'(b(x)){b}'(x)

 Si el resultado intermedio no se guarda en la dirección hacia adelante, se debe calcularb(x) , y luego el cálculoun(w) es seguido por la liberación de w para ocupar la memoria, y luego el cálculo esg(v) seguido por la liberación de v para ocupar la memoria. memoria, y luego el cálculo esf(y) seguido por la liberación de y para ocupar la memoria. Al calcular el gradiente en reversa , calcule , , , , calcule , , , calcule , calculeb(x) ( un(w)los g(v)resultados {f}'(y)intermedios nob(x)  se un(w)guardan {g}'(v)durante elb(x) cálculo {a}'(w)inverso  en este momento). Podemos calcular que debe calcularse 3 veces durante la retropropagación , 2 veces y 1. De hecho, estos se han calculado durante la propagación hacia adelante. Si guarda , solo necesita calcular , durante la retropropagación .{b}'(x)b(x)un(w)g(v)b(x)un(w)g(v){f}'(y){g}'(v){a}'(w){b}'(x)

Pero el costo de guardar datos intermedios es el consumo de recursos de memoria. Los recursos computacionales se consumen sin almacenar datos intermedios.

El algoritmo de retropropagación es un algoritmo de gradiente que guarda datos intermedios y utiliza la derivación en cadena.Es un algoritmo que intercambia espacio por tiempo.

3. Gráfico de cálculo

Como se mencionó anteriormente, si los resultados intermedios se almacenan en el cálculo directo, entonces en el cálculo inverso, solo necesita preguntar  {f}'(y), {g}'(v),  y eso es todo. ¿Hay algún orden para estos {a}'(w)? {b}'(x)Hay. Nuestras fórmulas anteriores tienen que ver con encontrar el gradiente del resultado final z a la variable inferior x. De hecho, en el aprendizaje profundo, la capa intermedia tiene muchos parámetros, y los parámetros de cada capa son diferentes. Lo que queremos es el gradiente de z a la capa intermedia. El gradiente del parámetro, luego debemos calcularlo primero cuando retropropagamos {f}'(y), luego {g}'(v), luego {a}'(w), y luego {b}'(x), en este orden, podemos calcular el gradiente de cada variable en la capa intermedia. Explique a continuación.

Como se mencionó anteriormente, la propagación hacia atrás se calcula paso a paso como la propagación hacia adelante, y este paso se refleja en la secuencia de cálculo , que involucra gráficos de cálculo.

Tomemos\frac{\mathrm{d} z}{\mathrm{d} x}=\frac{\mathrm{d} z}{\mathrm{d} y}\frac{\mathrm{d} y}{\mathrm {d} v}\frac{\mathrm{d} v}{\mathrm{d} w}\frac{\mathrm{d} w}{\mathrm{d} x}={f}'(g(a (b(x)))){g}'(a(b(x))){a}'(b(x)){b}'(x) esta fórmula como ejemplo.

El gráfico de cálculo utiliza variables como nodos y operaciones como aristas. Podemos dibujar el gráfico de cálculo de la fórmula anterior:

 Luego, el orden de cálculo del gradiente durante la retropropagación es el siguiente:

 Primero calcule \frac{\mathrm{d} z}{\mathrm{d} y}y guarde, luego calcule \frac{\mathrm{d} y}{\mathrm{d} v} y luego multiplique con el \frac{\mathrm{d} z}{\mathrm{d} y}valor guardado, calcule \frac{\mathrm{d} z}{\mathrm{d} v}y guarde;

Luego calcule \frac{\mathrm{d} v}{\mathrm{d} w}, y luego multiplíquelo con el guardado \frac{\mathrm{d} z}{\mathrm{d} v}, calcúlelo \frac{\mathrm{d} z}{\mathrm{d} w}y guárdelo;

Luego calcule \frac{\mathrm{d} w}{\mathrm{d} x}y luego multiplíquelo con el guardado \frac{\mathrm{d} z}{\mathrm{d} w}, calcúlelo \frac{\mathrm{d} z}{\mathrm{d} x}y guárdelo.

Es decir, al calcular de atrás hacia adelante, se puede calcular el gradiente de z (PÉRDIDA) para cada variable en el medio.

Cuatro Resumen

En resumen, el algoritmo de retropropagación es un algoritmo que intercambia espacio por tiempo y utiliza la derivación de cadenas para encontrar el gradiente paso a paso desde atrás hacia adelante.

Este es el final de la comprensión general del algoritmo de retropropagación. Si hay algo mal, corríjame ~

Supongo que te gusta

Origin blog.csdn.net/qq_32103261/article/details/120285686
Recomendado
Clasificación