[Pytorch] Registro de aprendizaje (3) Propagación hacia atrás

La retropropagación es un algoritmo muy importante en las redes neuronales, que puede realizar la propagación de gradientes en el gráfico. Como se muestra en la Figura 1 es la red neuronal más simple, ω es el peso existente en el modelo, que es el objetivo que queremos entrenar. y es la salida final, * es donde se realiza el cálculo. Durante el entrenamiento, el peso de ω en realidad se actualiza. Al actualizar, se calcula \omega = \omega-\alpha\frac{\pérdida parcial}{\partial \omega}. Nuestro objetivo es minimizar el valor de pérdida .

Figura 1 La red neuronal más simple

 La fórmula completa para el descenso de gradiente incluye una derivada parcial y la parte derivada se deriva \frac{\pérdida parcial}{\partial \omega}=2x_n(x_n\omega-y_n). Para modelos simples podemos utilizar el método analítico anterior para hacerlo, pero para modelos complejos ya no podemos hacerlo.

Figura 2 Modelo complejo

Como se muestra en la Figura 2, cada círculo tiene su propio ω y la cantidad de pesos es muy grande. Hay 6 elementos en la capa oculta h1 en la segunda columna, por lo que h1 pertenece a un vector de seis dimensiones y x es un vector de cinco dimensiones como entrada. Si desea obtener h en la forma h=ωx, debe realizar una multiplicación de matrices. Por la forma de la matriz, sabemos que ω debe ser una matriz de 6×5 con un total de 30 pesos diferentes. De la misma manera, hay 7 elementos en la tercera capa, y hay 6 × 7 = 42 de sus ω, y hay cientos de ellos en total, lo cual es muchísimo. Es casi imposible escribir fórmulas analíticas una por una.

Por lo tanto, necesitamos un algoritmo que trate la red compleja como un gráfico, permita que el gradiente se propague en el gráfico y finalmente calcule el gradiente de acuerdo con la regla de la cadena, este algoritmo se llama algoritmo de retropropagación.

Por ejemplo, hay una red neuronal de dos capas \sombrero{y}=W_2(W_1\cdot X+b_1)+b_2. La entrada X primero se multiplica por W1 en +b y se obtiene una salida de capa interna. Luego multiplíquelo con el W2 exterior y súmelo a b2 para obtener el resultado final de y. Este es un proceso de cálculo de gráficos. Diferentes cuadros verdes (módulos de cálculo) utilizan diferentes métodos al calcular las derivadas parciales locales.

Para una red neuronal multicapa, es inapropiado si solo este es el caso , porque y se puede expandir y simplificar y, finalmente, no importa cuántas capas de red neuronal sea, se puede expandir a la forma y = WX. +b (como se muestra en la Figura 3). Para resolver este problema, aplicamos una función de transformación no lineal a la salida de cada capa. Por ejemplo, para las tres salidas de la primera capa, reemplazamos x1 x2 x3 respectivamente 1+e^{-x}, y este resultado se sustituye en la siguiente capa, y así sucesivamente.

Figura 3 Fusión de redes neuronales multicapa

Figura 4 Retroalimentación hacia atrás desde z hacia adelante


A continuación se explicará cómo implementar la retroalimentación de datos en Pytorch. En primer lugar, el tipo de datos básico en pytorch es el tipo Tensor y todos los valores de datos deben almacenarse en Tensor. Tensor puede almacenar vectores, matrices, escalares, etc. El tensor contiene dos partes, datos y grad, que se utilizan para almacenar el valor de ω en sí y la derivada de la función de pérdida a ω respectivamente. Al construir un modelo, en realidad estás construyendo un gráfico computacional .

Resumen: Los pasos del algoritmo de retropropagación, el primer paso es calcular la pérdida, el segundo paso es hacerlo hacia atrás, el tercer paso es hacerlo, el cuarto paso es borrar el graduado \omega = \omega-\alpha\frac{\pérdida parcial}{\partial \omega}y el ciclo de capa es suficiente.

Supongo que te gusta

Origin blog.csdn.net/m0_55080712/article/details/122837290
Recomendado
Clasificación