[Aprendizaje automático] P18 Propagación hacia atrás (derivadas, cálculo, regla de la cadena, propagación hacia adelante, proceso de propagación hacia atrás, redes neuronales)

retropropagación

La propagación hacia atrás (backpropagation) es un algoritmo para entrenar redes neuronales, su función es calcular la influencia de cada parámetro en la red neuronal sobre la función de pérdida, con el fin de actualizar los parámetros y hacer que los resultados de predicción de la red neuronal sean más precisos. .

Específicamente, el algoritmo de retropropagación primero calcula el resultado de la predicción de la red neuronal a través de la propagación directa y lo compara con el resultado real para obtener el valor de la función de pérdida . Luego, el algoritmo de retropropagación calcula el efecto de cada parámetro en la función de pérdida, es decir, el gradiente del parámetro. Estos gradientes pueden decirnos que bajo el valor del parámetro actual, mover el parámetro en la dirección opuesta del gradiente puede reducir el valor de la función de pérdida. Finalmente, a través de algoritmos de optimización como el gradiente descendente , se pueden actualizar los parámetros en la red neuronal para que el valor de la función de pérdida disminuya gradualmente hasta alcanzar el valor mínimo.

Lo anterior implica dos fórmulas principales:

  • Fórmula de la función de pérdida:
    J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( fw , b ( x ( i ) ) − y ( i ) ) J(w,b) = \frac 1 {2m} \sum _{i=0} ^{m-1} (f_{w,b}(x^{(i)})-y^{(i)})J ( w ,segundo )=2 metros1yo = 0metro 1( fw , b( X( yo ) )y( yo ) )

  • 梯度下降公式:
    { wj = wj − α ∂ J ( w , segundo ) ∂ wjb = segundo − α ∂ J ( w , segundo ) ∂ segundo \begin{casos} w_j = w_j - \alpha \frac {\parcial J( w,b)} {\parcial w_j}\\ \\ b = b - \alpha \frac {\parcial J(w,b)} {\parcial b} \end{casos} wj=wjawjJ ( w , b )b=basegundoJ ( w , b )
    其中
    { ∂ J ( w , segundo ) ∂ wj = 1 metro ∑ yo = 0 metro − 1 ( fw , segundo ( X ( yo ) ) − y ( yo ) ) xj ( yo ) ∂ J ( w , segundo ) ∂ segundo = 1 metro ∑ yo = 0 metro − 1 ( fw , segundo ( X ( yo ) ) − y ( yo ) ) \begin{cases} \frac {\parcial J(w,b)} {\parcial w_j} = \ fracción 1 metro \sum _{i=0} ^{m-1} (f_{w,b}(x^{(i)})-y^{(i)})x_j^{(i)}\ \ \\ \frac {\parcial J(w,b)} {\parcial b} = \frac 1 m \sum _{i=0} ^{m-1} (f_{w,b}(x^{ (i)})-y^{(i)}) \end{casos} wjJ ( w , b )=metro1yo = 0metro 1( fw , b( X( yo ) )y( yo ) )xj( yo )segundoJ ( w , b )=metro1yo = 0metro 1( fw , b( X( yo ) )y( yo ) )

El papel del algoritmo de retropropagación es realizar el aprendizaje automático de la red neuronal. A través del algoritmo de retropropagación, la red neuronal puede aprender las características de los datos de una gran cantidad de muestras de entrenamiento y expresar estas características como parámetros en la red neuronal . Estos parámetros se pueden predecir en nuevas muestras de datos y se pueden actualizar a través del algoritmo de retropropagación en el aprendizaje supervisado para mejorar gradualmente la precisión de la predicción de la red neuronal.

resumen:

El propósito de la retropropagación es realizar el aprendizaje automático de las redes neuronales.

En todo el proceso de optimización de los parámetros del modelo, primero obtenemos el valor predicho a través de la propagación directa, calculamos el valor de pérdida a través de la fórmula de la función de pérdida y calculamos la contribución de cada neurona a la función de pérdida a través del algoritmo de propagación hacia atrás, y luego invertimos estos contribuciones se propaga de nuevo a cada neurona en la red, determinando así el gradiente de cada neurona. Luego, los parámetros de la red neuronal se pueden actualizar utilizando el algoritmo de descenso de gradiente u otros algoritmos de optimización para minimizar la función de pérdida. Este proceso consiste en calcular el gradiente a través de la retropropagación y luego usar el algoritmo de optimización para actualizar los parámetros del modelo.


Matemáticas en retropropagación

Backpropagation utiliza muchos conocimientos matemáticos, los más importantes son el cálculo de derivadas y la regla de la cadena en cálculo:

Derivados con python

mi. gramo. 1 p. ej. 1mi . g .1

∂ J ( w ) ∂ w \frac {\parcial J(w)}{\parcial w}wJ ( w )J ( w ) = w 2 J(w) = w^2J ( w )=w2

from sympy import symbols, diff

J, w = symbols('J,w')
J = w ** 2
dj_dw = diff(J,w)
print(dj_dw)

resultado:

inserte la descripción de la imagen aquí


mi. gramo. 2 eg2mi . g .2

∂ J ( w ) ∂ w \frac {\parcial J(w)}{\parcial w}wJ ( w )J ( w ) = 1 w J(w) = \frac 1 wJ ( w )=w1

from sympy import symbols, diff

J, w = symbols('J,w')
J = 1/w
dj_dw = diff(J,w)
print(dj_dw)

resultado:

inserte la descripción de la imagen aquí


mi. gramo. 3 eg3mi . g.3 _

∂ J ( w ) ∂ w \frac {\parcial J(w)}{\parcial w}wJ ( w )J ( w ) = 1 w 2 J(w) = \frac 1 {w^2}J ( w )=w21

from sympy import symbols, diff

J, w = symbols('J,w')
J = 1/w**2
dj_dw = diff(J,w)
print(dj_dw)

resultado:

inserte la descripción de la imagen aquí


cadena de reglas

Supongamos que tenemos una función f ( x ) f(x)f ( x ),即f ( x ) = h ( g ( x ) ) f(x) = h(g(x))f ( x )=h ( g ( x )) donde:

  • g ( x ) = 2 x + 3 g(x) = 2x + 3gramo ( x )=2x _+3
  • h ( y ) = y 3 + 5 yh(y) = y^3 + 5yh ( y )=y3+5 años

Ahora queremos calcular f ( x ) f(x)f ( x ) sobrexxDerivada de x , es decir, dfdx \frac {df} {dx}d xd.f.

De acuerdo con la regla de la cadena, hay:

dfdx = dfdg ∗ dgdx \frac {df} {dx} = \frac {df} {dg} * \frac {dg} {dx}d xd.f.=d gd.f.d xd g

donde, dfdg \frac {df} {dg}d gd.f.significa fff sobreggderivada de g , dgdx \frac {dg} {dx}d xd gsignifica ggg sobrexxDerivada de x .

  • Primero calcule dfdg \frac{df}{dg}d gd.f.. Dado que f ( x ) = h ( g ( x ) ) f(x) = h(g(x))f ( x )=h ( g ( x ) ) , entonces:
    dfdg = h ′ ( g ( x ) ) = 3 ∗ g ( x ) 2 + 5 \frac {df} {dg} = h'(g(x)) = 3* g(x)^2 + 5d gd.f.=h (g(x))=3gramo ( x )2+5

  • Razón g ( x ) = 2 x + 3 g(x) = 2x+3gramo ( x )=2x _+3
    dfdg = 3 ∗ ( 2 x + 3 ) 2 + 5 \frac {df} {dg} = 3*(2x + 3)^2 + 5d gd.f.=3( 2x _+3 )2+5

  • Luego calcula dgdx \frac{dg}{dx}d xd g. Como g ( x ) = 2 x + 3 g(x) = 2x + 3gramo ( x )=2x _+3 , entonces
    dgdx = 2 \frac{dg}{dx} = 2d xd g=2

  • De acuerdo con la regla de la cadena, tenemos:
    dfdx = dfdg ∗ dgdx = ( 3 ( 2 x + 3 ) 2 + 5 ) ∗ 2 = 6 ( 2 x + 3 ) 2 + 10 \frac {df}{dx} = \ fracción {df}{dg} * \frac {dg} {dx} = (3(2x + 3)^2 + 5) * 2 = 6(2x+3)^2+10d xd.f.=d gd.f.d xd g=( 3 ( 2 x+3 )2+5 )2=6 ( 2x _+3 )2+10
    Por lo tanto,f ( x ) f(x)f ( x ) sobrexxLa derivada de x es 6 ( 2 x + 3 ) 2 + 10 6(2x+3)^2+106 ( 2x _+3 )2+10 _


Flujo de procesamiento de red neuronal simple para comprender la retropropagación

Redes neuronales y propagación directa

inserte la descripción de la imagen aquí

Arriba se muestra una red neuronal simple, asumiendo que usamos ReLU como la función de activación,

Podemos usar la propagación hacia adelante para derivar el valor de la función de pérdida

Supongamos que los parámetros iniciales se establecen en:

  • w [ 1 ] = 2 , segundo [ 1 ] = 0 w^{[1]}=2, segundo^{[1]} = 0w[ 1 ]=2 ,b[ 1 ]=0
  • w [ 2 ] = 3 , b [ 2 ] = 1 w^{[2]}=3, b^{[2]}=1w[ 2 ]=3 ,b[ 2 ]=1

Suponga que los valores iniciales de la capa de entrada se establecen en:

  • X = 1 X = 1X=1
  • y = 5 y = 5 y=5

Según la fórmula de cálculo de la red neuronal, existen:

a [ 1 ] = gramo ( w [ 1 ] x + segundo [ 1 ] ) = gramo ( 2 ∗ 1 + 0 ) = 2 a^{[1]} = g(w^{[1]}x + segundo^ {[1]})=g(2*1 + 0)=2a[ 1 ]=g ( w[ 1 ] x+b[ 1 ] )=gramo ( 21+0 )=2 un [ 2 ] = gramo ( w [ 2 ] un [ 1 ] + segundo [ 2 ] ) = gramo ( 3 ∗ 2 + 1 ) = 7 un^{[2]} = g(w^{[2]} a^{[1]} + b^{[2]})=g(3*2+1)=7a[ 2 ]=g ( w[ 2 ] un[ 1 ]+b[ 2 ] )=gramo ( 32+1 )=7

Del valor real y = 5 y = 5y=5 y valor predichoa [ 2 ] = 7 a^{[2]}=7a[ 2 ]=7 , obtenga la función de pérdida:
J ( w , b ) = 1 2 ( a [ 2 ] − y ) 2 = 1 2 ( 7 − 5 ) 2 = 2 J(w,b) = \frac 1 2 (a^ { [2]}-y)^2=\frac 1 2 (7-5)^2=2J ( w ,segundo )=21( un[ 2 ]y )2=21( 75 )2=2

Podemos descomponer el proceso de propagación hacia adelante anterior en los siguientes pasos

inserte la descripción de la imagen aquí
En este punto, haga una pausa por un momento y piense cuál es nuestro próximo paso en las redes neuronales.

Retropropagación, actualizar parámetros, de modo que el valor predicho a [ 2 ] = 7 a^{[2]}=7a[ 2 ]=7 está más cerca del valor realy = 5 y=5y=5


Redes neuronales y retropropagación

神经网络 反向传播 梯度下降 链式法则

La parte de propagación hacia adelante se completó arriba, y usaremos el método de propagación hacia atrás para calcular el gradiente de cada parámetro, y luego usaremos el método de descenso de gradiente para actualizar los parámetros.

De hecho, en este punto, creo que los lectores recordarán estas dos fórmulas:

  • 计算梯度的公式:
    { ∂ J ( w , segundo ) ∂ wj = 1 metro ∑ yo = 0 metro − 1 ( fw , segundo ( X ( yo ) ) − y ( yo ) ) xj ( yo ) ∂ J ( w , segundo ) ∂ segundo = 1 metro ∑ yo = 0 metro − 1 ( fw , segundo ( X ( yo ) ) − y ( yo ) ) \begin{casos} \frac {\parcial {J(w,b)}} { \parcial {w_j}} = \frac 1 m \sum _{i=0} ^{m-1} (f_{w,b}(x^{(i)})-y^{(i)}) x_j^{(i)}\\ \\ \frac {\parcial {J(w,b)}} {\parcial {b}} = \frac 1 m \sum _{i=0} ^{m-1 } (f_{w,b}(x^{(i)})-y^{(i)}) \end{casos} wjJ ( w , b )=metro1yo = 0metro 1( fw , b( X( yo ) )y( yo ) )xj( yo )segundoJ ( w , b )=metro1yo = 0metro 1( fw , b( X( yo ) )y( yo ) )

  • 更新参数公式:
    { wj = wj − α ∂ J ( w , segundo ) ∂ wjb = segundo − α ∂ J ( w , segundo ) ∂ segundo \begin{casos} w_j = w_j - \alpha \frac {\parcial {J (w,b)}} {\parcial w_j}\\ \\ b = b - \alpha \frac {\parcial {J(w,b)}} {\parcial b} \end{casos} wj=wjawjJ ( w , b )b=basegundoJ ( w , b )

Los lectores también saben:

  • El propósito del descenso de gradiente es minimizar la función de pérdida;
  • En cada paso de iteración, primero calculamos el gradiente de la función de pérdida con respecto a cada parámetro y luego ajustamos el valor del parámetro según la dirección y la magnitud del gradiente para que el valor de la función de pérdida disminuya. Este proceso continuará iterando hasta que se alcance una condición de parada predeterminada;
  • Backpropagation actualiza los parámetros de la red neuronal;
  • ¿Qué es la regla de la cadena;

Pero, ¿cómo te sientes siempre? En cuanto al dibujo:

inserte la descripción de la imagen aquí

De hecho, falta una frase muy importante:

  • Parámetros de actualización de descenso de gradiente, solo actualizamos directamente los parámetros de la capa de salida, y los parámetros de la capa oculta, actualizamos "indirectamente" a través de la regla de la cadena

En este caso, tenemos una capa oculta (y solo una red neuronal en la capa oculta) y una capa de salida (solo una red neuronal en la capa de salida), a saber:

Para los parámetros de la capa de salida w [ 2 ] , b [ 2 ] w^{[2]}, b^{[2]}w[ 2 ] ,bUna actualización de [ 2 ] , actualizamos directamente a través del descenso de gradiente:

  • Calcula el gradiente:
    { ∂ J ∂ w [ 2 ] = ( 7 − 5 ) ∗ 7 = 14 ∂ J ∂ b [ 2 ] = 7 − 5 = 2 \begin{cases} \frac {\partial {J}} { \ parcial {w^{[2]}}} = (7-5)*7=14\\ \\ \frac {\parcial {J}} {\parcial {b^{[2]}}} = 7 - 5=2 \end{casos} w[ 2 ] J=( 75 )7=14segundo[ 2 ] J=75=2
  • Parámetro del parámetro:
    { w [ 2 ] = w [ 2 ] − α ∂ J ( w , segundo ) ∂ w [ 2 ] = 3 − 14 ∗ α segundo [ 2 ] = segundo [ 2 ] − α ∂ J ( w , b ) ∂ b [ 2 ] = 1 − 2 ∗ α \begin{cases} w^{[2]} = w^{[2]} - \alpha \frac {\parcial {J(w,b)}} { \parcial w^{[2]}} = 3-14*\alpha\\ \\ b^{[2]} = b^{[2]} - \alpha \frac {\parcial {J(w, b )}} {\b parcial^{[2]}} = 1-2*\alpha \end{casos} w[ 2 ]=w[ 2 ]aw[ 2 ]J ( w , b )=314ab[ 2 ]=b[ 2 ]asegundo[ 2 ]J ( w , b )=12a

Los pasos anteriores son para actualizar los parámetros de la capa de salida w [ 2 ] w^{[2]} a través del método de descenso de gradientew[ 2 ] yb[ 2 ] b^{[2]}b[ 2 ] pasos;

Y para los parámetros de la capa oculta w [ 1 ] , b [ 1 ] w^{[1]}, b^{[1]}w[ 1 ] ,bUna actualización de [ 1 ] , necesitamos pasar gradientes de cálculo indirecto a través de la regla de la cadena, luego actualizar:

  • 间接计算梯度:
    { ∂ J ∂ w [ 1 ] = ∂ J ∂ un [ 2 ] ∂ un [ 2 ] ∂ un [ 1 ] ∂ un [ 1 ] ∂ w [ 1 ] ∂ J ∂ segundo [ 1 ] = ∂ J ∂ un [ 2 ] ∂ un [ 2 ] ∂ un [ 1 ] ∂ un [ 1 ] ∂ segundo [ 1 ] \begin{casos} \frac {\parcial {J}} {\parcial {w^{[1]} }} = \frac {\parcial J} {\parcial a^{[2]}} \frac {\parcial a^{[2]}} {\parcial a^{[1]}} \frac {\parcial a^{[1]}} {\parcial w^{[1]}}\\ \\ \frac {\parcial {J}} {\parcial {b^{[1]}}} = \frac {\ parcial J} {\parcial a^{[2]}} \frac {\parcial a^{[2]}} {\parcial a^{[1]}} \frac {\parcial a^{[1]} } {\b parcial^{[1]}} \end{casos} w[ 1 ] J=un[ 2 ] Jun[ 1 ]un[ 2 ]w[ 1 ]un[ 1 ]segundo[ 1 ] J=un[ 2 ] Jun[ 1 ]un[ 2 ]segundo[ 1 ]un[ 1 ]

  • 由:
    J = 1 2 ( a [ 2 ] − y ) 2 J = \frac 1 2 (a^{[2]}-y)^2\\j=21( un[ 2 ]y )2a [ 2 ] = g ( w [ 2 ] a [ 1 ] + b [ 2 ] ) a^{[2]} = g(w^{[2]}a^{[1]}+b^{[ 2]})\\a[ 2 ]=g ( w[ 2 ] un[ 1 ]+b[ 2 ] )g ( z ) = max ( 0 , z ) ( R e LU ) g(z) = max(0,z)(ReLU)\\g ( z )=máx ( 0 , _z ) ( R e LU )a [ 1 ] = g ( w [ 1 ] x + b [ 1 ] ) a^{[1]} = g(w^{[1]}x+b^{[1]})a[ 1 ]=g ( w[ 1 ] x+b[ 1 ] )

  • 所以:
    ∂ J ∂ una [ 2 ] = una [ 2 ] − y \frac {\parcial J} {\parcial a^{[2]}} = a^{[2]}-yun[ 2 ] J=a[ 2 ]y ∂ un [ 2 ] ∂ un [ 1 ] = w [ 2 ] \frac {\parcial a^{[2]}} {\parcial a^{[1]}} = w^{[2]}un[ 1 ]un[ 2 ]=w[ 2 ] ∂ un [ 1 ] ∂ w [ 1 ] = x \frac {\parcial a^{[1]}} {\parcial w^{[1]}} = xw[ 1 ]un[ 1 ]=x ∂ un [ 1 ] ∂ segundo [ 1 ] = 1 \frac {\parcial a^{[1]}} {\parcial b^{[1]}} = 1segundo[ 1 ]un[ 1 ]=1

  • 即:
    ∂ J ∂ w [ 1 ] = ∂ J ∂ un [ 2 ] ∂ un [ 2 ] ∂ un [ 1 ] ∂ un [ 1 ] ∂ w [ 1 ] = ( un [ 2 ] − y ) ∗ w [ 2 ] ∗ x = ( 7 − 5 ) ∗ 3 ∗ 1 = 6 \frac {\parcial {J}} {\parcial {w^{[1]}}} = \frac {\parcial J} {\parcial a^ {[2]}} \frac {\parcial a^{[2]}} {\parcial a^{[1]}} \frac {\parcial a^{[1]}} {\parcial w^{[ 1]}} = (a^{[2]}-y)*w^{[2]}*x = (7-5)*3*1=6w[ 1 ] J=un[ 2 ] Jun[ 1 ]un[ 2 ]w[ 1 ]un[ 1 ]=( un[ 2 ]y )w[ 2 ]X=( 75 )31=6 ∂ J ∂ segundo [ 1 ] = ∂ J ∂ un [ 2 ] ∂ un [ 2 ] ∂ un [ 1 ] ∂ un [ 1 ] ∂ segundo [ 1 ] = ( un [ 2 ] − y ) ∗ w [ 2 ] ∗ 1 = ( 7 − 5 ) ∗ 3 ∗ 1 = 6 \frac {\parcial {J}} {\parcial {b^{[1]}}} = \frac {\parcial J} {\parcial a^{ [2]}} \frac {\parcial a^{[2]}} {\parcial a^{[1]}} \frac {\parcial a^{[1]}} {\parcial b^{[1 ]}} = (a^{[2]}-y)*w^{[2]}*1 = (7-5)*3*1=6segundo[ 1 ] J=un[ 2 ] Jun[ 1 ]un[ 2 ]segundo[ 1 ]un[ 1 ]=( un[ 2 ]y )w[ 2 ]1=( 75 )31=6

  • modificar el valor del parámetro:
    { w [ 1 ] = w [ 1 ] − α ∂ J ( w , segundo ) ∂ w [ 1 ] = 2 − 6 ∗ α segundo [ 1 ] = segundo [ 1 ] − α ∂ J ( w , b ) ∂ b [ 2 ] = 0 − 6 ∗ α \begin{cases} w^{[1]} = w^{[1]} - \alpha \frac {\parcial {J(w,b)}} {\parcial w^{[1]}} = 2-6*\alpha\\ \\ b^{[1]} = b^{[1]} - \alpha \frac {\parcial {J(w, b)}} {\b parcial^{[2]}} = 0-6*\alpha \end{casos} w[ 1 ]=w[ 1 ]aw[ 1 ]J ( w , b )=26ab[ 1 ]=b[ 1 ]asegundo[ 2 ]J ( w , b )=06a

El proceso anterior consiste en actualizar el parámetro w [ 1 ] w^{[1]} a través de la regla de la cadena y el método de descenso de gradientew[ 1 ] con parámetrob [ 1 ] b^{[1]}bel valor de [ 1 ] ;

Supongo que te gusta

Origin blog.csdn.net/weixin_43098506/article/details/130186330
Recomendado
Clasificación