¿Cómo calculo el término delta de una capa convolucional, dados los términos delta y los pesos de la capa convolucional anterior?

10

Estoy tratando de entrenar una red neuronal artificial con dos capas convolucionales (c1, c2) y dos capas ocultas (c1, c2). Estoy usando el enfoque estándar de retropropagación. En el paso hacia atrás calculo el término de error de una capa (delta) en función del error de la capa anterior, los pesos de la capa anterior y el gradiente de la activación con respecto a la función de activación de la capa actual. Más específicamente, el delta de la capa l se ve así:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

Puedo calcular el gradiente de c2, que se conecta en una capa regular. Simplemente multiplico los pesos de h1 con su delta. Luego vuelvo a dar forma a esa matriz en la forma de la salida de c2, la multiplico con el gradiente de la función de activación y listo.

Ahora tengo el término delta de c2, que es una matriz de tamaño 4D (featureMapSize, featureMapSize, filterNum, patternNum). Además, tengo los pesos de c2, que son una matriz de tamaño 3D (filterSize, filterSize, filterNum).

Con estos dos términos y el gradiente de la activación de c1 quiero calcular el delta de c1.

Larga historia corta:

Dado el término delta de una capa convolucional previa y los pesos de esa capa, ¿cómo calculo el término delta de una capa convolucional?

cdwoelk
fuente

Respuestas:

6

Primero obtengo el error para una capa convolucional a continuación para simplificar una matriz (entrada) unidimensional que se puede transferir fácilmente a una multidimensional y luego:

Suponemos aquí que el de longitud N son las entradas de la l - 1 conv-ésimo. capa, m es el tamaño del núcleo de los pesos w que denota cada peso por w i y la salida es x l . Por lo tanto, podemos escribir (tenga en cuenta la suma de cero): x l i = m - 1 a = 0 w a y l - 1 a + i donde y l iyl1Nl1mwwixl

xil=a=0m1waya+il1
y f la función de activación (por ejemplo sigmoidal). Con esto a mano, ahora podemos considerar alguna función de error E y la función de error en la capa convolucional (la de su capa anterior) dada porE /y l i . Ahora queremos averiguar la dependencia del error en uno de los pesos en las capas anteriores: Eyil=f(xil)fEE/yil donde tenemos la suma sobre todas las expresiones en las que seproducewa, que sonN-m. Tenga en cuenta también que sabemos que el último término surge del hecho de quex l i
Ewa=a=0NmExilxilwa=a=0NmEwayi+al1

waNm que puedes ver en la primera ecuación. Para calcular el gradiente necesitamos conocer el primer término, que puede calcularse mediante: Exilwa=yi+al1
donde nuevamente el primer término es el error en la capa anterioryfla función de activación no lineal.
Exil=Eyilyilxil=Eyilxilf(xil)
f

Teniendo todas las entidades necesarias, ahora podemos calcular el error y propagarlo de manera eficiente a la capa preciosa:

δal1=Eyil1=a=0m1Exialxialyil1=a=0m1Exialwaflipped
xilyil1flippedT

Por lo tanto, puede calcular el error en la siguiente capa por (ahora en notación vectorial):

δl=(wl)Tδl+1f(xl)

δl=upsample((wl)Tδl+1)f(xl)
upsample

¡Por favor siéntase libre de agregarme o corregirme!

Para referencias ver:

http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

y para una implementación de C ++ (sin necesidad de instalar): https://github.com/nyanp/tiny-cnn#supported-networks

LeoW.
fuente