Red neuronal profunda: propagación hacia atrás con ReLU


17

Tengo algunas dificultades para derivar la propagación hacia atrás con ReLU, e hice algo de trabajo, pero no estoy seguro de si estoy en el camino correcto.

Función de costo: 12(yy^)2, dondeyes el valor real, y Y es un valor predicho. También suponga quex> 0 siempre.y^x


1 capa ReLU, donde el peso en la primera capa es w1

ingrese la descripción de la imagen aquí

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 Layer ReLU, donde los pesos en la primera capa es w2 , y la segunda capa es w1 Y quería actualizar la primera capa w2

ingrese la descripción de la imagen aquí

dCdw2=dCdRdRdw2

dCw2=(yReLU(w1ReLU(w2x))(w1x)

Como ReLU(w1ReLU(w2x))=w1w2x


3 Layer ReLU, donde los pesos en la 1ra capa son , 2da capa w 2 y 3ra capa w 1w3w2w1

ingrese la descripción de la imagen aquí

dCdw3=dCdRdRdw3

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Dado que ReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

Dado que la regla de la cadena solo dura 2 derivadas, en comparación con un sigmoide, que podría ser tan largo como número de capas.n


Digamos que quería actualizar los 3 pesos de capa, donde w1 es la tercera capa, es la segunda capa, w 1 es la tercera capaw2w1

dCw1=(yReLU(w1x))(x)

dCw2=(yReLU(w1ReLU(w2x))(w1x)

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Si esta derivación es correcta, ¿cómo evita que desaparezca? En comparación con sigmoide, donde tenemos mucha multiplicación por 0.25 en la ecuación, mientras que ReLU no tiene ninguna multiplicación de valor constante. Si hay miles de capas, habría mucha multiplicación debido a los pesos, ¿entonces esto no causaría un gradiente de fuga o explosión?


@NeilSlater ¡Gracias por tu respuesta! ¿Puedes explicarme, no estoy seguro de lo que quisiste decir?
user1157751

Ah, creo que sé a qué te referías. Bueno, ¿la razón por la que planteé esta pregunta es que estoy seguro de que la derivación es correcta? ¿Busqué y no encontré un ejemplo de ReLU derivado completamente desde cero?
user1157751

Respuestas:


15

Definiciones de trabajo de la función ReLU y su derivada:

ReLU(x)={0,if x<0,x,otherwise.

ddxReLU(x)={0,if x<0,1,otherwise.

La derivada es la función de paso unitario . Esto ignora un problema en x=0 , donde el gradiente no está estrictamente definido, pero eso no es una preocupación práctica para las redes neuronales. Con la fórmula anterior, la derivada en 0 es 1, pero igualmente podría tratarse como 0 o 0,5 sin un impacto real en el rendimiento de la red neuronal.


Red simplificada

Con esas definiciones, echemos un vistazo a sus redes de ejemplo.

Está ejecutando regresión con la función de costo C=12(yy^)2. Ha definidoRcomo la salida de la neurona artificial, pero no ha definido un valor de entrada. Agregaré eso para completar: llámeloz, agregue un poco de indexación por capa, y prefiero minúsculas para los vectores y mayúsculas para las matrices, por lo quer(1)sale de la primera capa,z(1)para su entrada yW(0)para el peso que conecta la neurona a su entradax(en una red más grande, que podría conectarse a una conexión más profundarvalor en su lugar). También he ajustado el número de índice para la matriz de peso; por eso será más claro para la red más grande. Nota: estoy ignorando tener más de neurona en cada capa por ahora.

Mirando su simple red de 1 capa, 1 neurona, las ecuaciones de retroalimentación son:

z(1)=W(0)x

y^=r(1)=ReLU(z(1))

La derivada de la función de costo wrt una estimación de ejemplo es:

Cy^=Cr(1)=r(1)12(yr(1))2=12r(1)(y22yr(1)+(r(1))2)=r(1)y

Usando la regla de la cadena para la propagación hacia atrás al valor previo a la transformación ( z ):

Cz(1)=Cr(1)r(1)z(1)=(r(1)y)Step(z(1))=(ReLU(z(1))y)Step(z(1))

Este Cz(1) is an interim stage and critical part of backprop linking steps together. Derivations often skip this part because clever combinations of cost function and output layer mean that it is simplified. Here it is not.

To get the gradient with respect to the weight W(0), then it is another iteration of the chain rule:

CW(0)=Cz(1)z(1)W(0)=(ReLU(z(1))y)Step(z(1))x=(ReLU(W(0)x)y)Step(W(0)x)x

. . . because z(1)=W(0)x therefore z(1)W(0)=x

That is the full solution for your simplest network.

However, in a layered network, you also need to carry the same logic down to the next layer. Also, you typically have more than one neuron in a layer.


More general ReLU network

If we add in more generic terms, then we can work with two arbitrary layers. Call them Layer (k) indexed by i, and Layer (k+1) indexed by j. The weights are now a matrix. So our feed-forward equations look like this:

zj(k+1)=iWij(k)ri(k)

rj(k+1)=ReLU(zj(k+1))

In the output layer, then the initial gradient w.r.t. rjoutput is still rjoutputyj. However, ignore that for now, and look at the generic way to back propagate, assuming we have already found Crj(k+1) - just note that this is ultimately where we get the output cost function gradients from. Then there are 3 equations we can write out following the chain rule:

First we need to get to the neuron input before applying ReLU:

  1. Czj(k+1)=Crj(k+1)rj(k+1)zj(k+1)=Crj(k+1)Step(zj(k+1))

We also need to propagate the gradient to previous layers, which involves summing up all connected influences to each neuron:

  1. Cri(k)=jCzj(k+1)zj(k+1)ri(k)=jCzj(k+1)Wij(k)

And we need to connect this to the weights matrix in order to make adjustments later:

  1. CWij(k)=Czj(k+1)zj(k+1)Wij(k)=Czj(k+1)ri(k)

You can resolve these further (by substituting in previous values), or combine them (often steps 1 and 2 are combined to relate pre-transform gradients layer by layer). However the above is the most general form. You can also substitute the Step(zj(k+1)) in equation 1 for whatever the derivative function is of your current activation function - this is the only place where it affects the calculations.


Back to your questions:

If this derivation is correct, how does this prevent vanishing?

Your derivation was not correct. However, that does not completely address your concerns.

The difference between using sigmoid versus ReLU is just in the step function compared to e.g. sigmoid's y(1y), applied once per layer. As you can see from the generic layer-by-layer equations above, the gradient of the transfer function appears in one place only. The sigmoid's best case derivative adds a factor of 0.25 (when x=0,y=0.5), and it gets worse than that and saturates quickly to near zero derivative away from x=0. The ReLU's gradient is either 0 or 1, and in a healthy network will be 1 often enough to have less gradient loss during backpropagation. This is not guaranteed, but experiments show that ReLU has good performance in deep networks.

If there's thousands of layers, there would be a lot of multiplication due to weights, then wouldn't this cause vanishing or exploding gradient?

Yes this can have an impact too. This can be a problem regardless of transfer function choice. In some combinations, ReLU may help keep exploding gradients under control too, because it does not saturate (so large weight norms will tend to be poor direct solutions and an optimiser is unlikely to move towards them). However, this is not guaranteed.


Was a chain rule performed on dCdy^?
user1157751

@user1157751: No, Cy^=Cr(1) because y^=r(1). The cost function C is simple enough that you can take its derivative immediately. The only thing I haven't shown there is the expansion of the square - would you like me to add it?
Neil Slater

But C is 12(yy^)2, don't we need to perform chain rule so that we can perform the derivative on y^? dCdy^=dCdUdUdy^, where U=yy^. Apologize for asking really simple questions, my maths ability is probably causing trouble for you : (
user1157751

If you can make things simpler by expanding. Then please do expand the square.
user1157751

@user1157751: Yes you could use the chain rule in that way, and it would give the same answer as I show. I just expanded the square - I'll show it.
Neil Slater
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.