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?