¿Cómo derivar errores en la red neuronal con el algoritmo de retropropagación?


10

De este video de Andrew Ng alrededor de las 5:00

ingrese la descripción de la imagen aquí

¿Cómo se y ? De hecho, ¿qué significa ? se obtiene al comparar con y, no es posible tal comparación para la salida de una capa oculta, ¿verdad?δ3δ2δ3δ4


El enlace del video no funciona. Por favor, actualícelo o proporcione un enlace al curso. Gracias.
— MadHatter

Respuestas:


15

Voy a responder su pregunta sobre el , pero recuerde que su pregunta es una subpregunta de una pregunta más grande que es por qué:δi(l)

∇ij(l)=∑kθki(l+1)δk(l+1)∗(ai(l)(1−ai(l)))∗aj(l−1)

Recordatorio sobre los pasos en las redes neuronales:

  • Paso 1: propagación hacia adelante (cálculo de )ai(l)

  • Paso 2a: propagación hacia atrás: cálculo de los erroresδi(l)

  • Paso 2b: propagación hacia atrás: cálculo del gradiente de J ( ) utilizando los errores y ,∇ij(l)Θδyo(l+1)unayo(l)

  • Paso 3: descenso del gradiente: calcule el nuevo utilizando los gradientesθyoj(l)∇yoj(l)

En primer lugar, para entender lo que el sonδyo(l) , lo que representan y por qué Andrew GN que hablar de ellos , es necesario comprender lo que Andrew está haciendo realidad en ese pointand por qué hacemos todos estos cálculos: él es el cálculo de la gradiente de∇yoj(l)θyoj(l) para ser utilizado en el algoritmo de descenso de gradiente.

El gradiente se define como:

∇yoj(l)=∂C∂θyoj(l)

Como realmente no podemos resolver esta fórmula directamente, vamos a modificarla con DOS TRUCOS MÁGICOS para llegar a una fórmula que realmente podamos calcular. Esta fórmula utilizable final es:

∇yoj(l)=θ(l+1)Tδ(l+1).∗(unayo(l)(1-unayo(l)))∗unaj(l-1)

Para llegar a este resultado, el PRIMER TRUCO MÁGICO es que podemos escribir el gradiente de usando :∇ij(l)θij(l)δi(l)

∇ij(l)=δi(l)∗aj(l−1)
Con definido (solo para el índice L) como:δi(L)

δi(L)=∂C∂zi(l)

Y luego el SEGUNDO TRUCO MÁGICO usando la relación entre y , para definir los otros índices,δi(l)δi(l+1)

δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

Y como dije, finalmente podemos escribir una fórmula para la cual conocemos todos los términos:

∇ij(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))∗aj(l−1)

DEMOSTRACIÓN del PRIMER TRUCO MÁGICO: ∇ij(l)=δi(l)∗aj(l−1)

Definimos:

∇ij(l)=∂C∂θij(l)

La regla de cadena para dimensiones superiores (REALMENTE debería leer esta propiedad de la regla de cadena) nos permite escribir:

∇ij(l)=∑k∂C∂zk(l)∗∂zk(l)∂θij(l)

Sin embargo, como:

zk(l)=∑mθkm(l)∗am(l−1)

Entonces podemos escribir:

∂zk(l)∂θij(l)=∂∂θij(l)∑mθkm(l)∗am(l−1)

Debido a la linealidad de la diferenciación [(u + v) '= u' + v '], podemos escribir:

∂zk(l)∂θij(l)=∑m∂θkm(l)∂θij(l)∗am(l−1)

con:

ifk,m≠i,j,  ∂θkm(l)∂θij(l)∗am(l−1)=0

yoFk,metro=yo,j,  ∂θkmetro(l)∂θyoj(l)∗unametro(l-1)=∂θyoj(l)∂θyoj(l)∗unaj(l-1)=unaj(l-1)

Entonces para k = i (de lo contrario, es claramente igual a cero):

∂zyo(l)∂θyoj(l)=∂θyoj(l)∂θyoj(l)∗unaj(l-1)+∑metro≠j∂θyometro(l)∂θyoj(l)∗unaj(l-1)=unaj(l-1)+0 0

Finalmente, para k = i:

∂zyo(l)∂θyoj(l)=unaj(l-1)

Como resultado, podemos escribir nuestra primera expresión del gradiente :∇yoj(l)

∇yoj(l)=∂C∂zyo(l)∗∂zyo(l)∂θyoj(l)

Lo que es equivalente a:

∇yoj(l)=∂C∂zyo(l)∗unaj(l-1)

O:

∇yoj(l)=δyo(l)∗unaj(l-1)

DEMOSTRACIÓN DEL SEGUNDO TRUCO MÁGICO : o:δyo(l)=θ(l+1)Tδ(l+1).∗(unayo(l)(1-unayo(l)))

δ(l)=θ(l+1)Tδ(l+1).∗(una(l)(1-una(l)))

Recuerda que planteamos:

δ(l)=∂C∂z(l)   unanortere   δyo(l)=∂C∂zyo(l)

Nuevamente, la regla de la cadena para dimensiones superiores nos permite escribir:

δyo(l)=∑k∂C∂zk(l+1)∂zk(l+1)∂zyo(l)

Reemplazando por , tenemos:∂C∂zk(l+1)δk(l+1)

δyo(l)=∑kδk(l+1)∂zk(l+1)∂zyo(l)

Ahora, centrémonos en . Tenemos:∂zk(l+1)∂zyo(l)

zk(l+1)=∑jθkj(l+1)∗unaj(l)=∑jθkj(l+1)∗sol(zj(l))

Luego derivamos esta expresión con respecto a :zk(yo)

∂zk(l+1)∂zyo(l)=∂∑jθkj(l)∗sol(zj(l))∂zyo(l)

Debido a la linealidad de la derivación, podemos escribir:

∂zk(l+1)∂zyo(l)=∑jθkj(l)∗∂sol(zj(l))∂zyo(l)

Si j i, entonces≠∂θkj(l)∗sol(zj(l))∂zyo(l)=0 0

Como consecuencia:

∂zk(l+1)∂zyo(l)=θkyo(l)∗∂sol(zyo(l))∂zyo(l)

Y entonces:

δyo(l)=∑kδk(l+1)θkyo(l)∗∂sol(zyo(l))∂zyo(l)

Como g '(z) = g (z) (1-g (z)), tenemos:

δyo(l)=∑kδk(l+1)θkyo(l)∗sol(zyo(l))(1-sol(zyo(l))

Y como , tenemos:sol(zyo(l)=unayo(l)

δyo(l)=∑kδk(l+1)θkyo(l+1)∗unayo(l)(1-unayo(l))

Y finalmente, usando la notación vectorizada:

∇yoj(l)=[θ(l+1)Tδ(l+1)∗(unayo(l)(1-unayo(l)))]∗[unaj(l-1)]

1
Gracias por su respuesta. ¡Te he votado! ¿Podría por favor citar las fuentes que refirió para llegar a la respuesta ... :)
— Adithya Upadhya

@tmangin: Siguiendo la charla de Andrew Ng, tenemos es el error del nodo j en la capa l. ¿Cómo se obtuvo la definición de . δj(yo)δj(yo)=∂C∂Zj(l)
— phuong

@phuong En realidad, tengo razón al preguntar: solo el con el índice "l" más alto L se define como Mientras que los deltas con índices "l" más bajos se definen mediante la siguiente fórmula:
δyo(L)
δyo(L)=∂C∂zyo(l)
δyo(l)=θ(l+1)Tδ(l+1).∗(unayo(l)(1-unayo(l)))
— tmangin

3
Recomiendo leer la notación vectorial de backprop para calcular los gradientes.
— CKM

Su fórmula utilizable final no es la que tenía Andrew Ng, lo que hace que sea realmente frustrante seguir su prueba. Tenía ∇ (l) ij = θ (l) Tδ (l + 1). ∗ (a (l) i (1 − a (l) i)) ∗ a (l − 1) j, no θ (l + 1) Tδ (l + 1)
— Aziz Javed

0

Este cálculo ayuda. La única diferencia de este resultado con el resultado de Andrew se debe a la definición de theta. En la definición de Andrew, z (l + 1) = theta (l) * a (l). En este cálculo, z (l + 1) = theta (l + 1) * a (l). Entonces, en realidad no hay diferencia.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.