Estaba leyendo el libro de Yoshua Bengio sobre aprendizaje profundo y dice en la página 224:
Las redes convolucionales son simplemente redes neuronales que usan la convolución en lugar de la multiplicación matricial general en al menos una de sus capas.
sin embargo, no estaba 100% seguro de cómo "reemplazar la multiplicación de matrices por convolución" en un sentido matemáticamente preciso.
Lo que realmente me interesa es definir esto para los vectores de entrada en 1D (como en ), por lo que no tendré entrada como imágenes e intentaré evitar la convolución en 2D.
Entonces, por ejemplo, en las redes neuronales "normales", las operaciones y el patrón de la sala de alimentación se pueden expresar de manera concisa como en las notas de Andrew Ng:
donde es el vector calculado antes de pasarlo por la no linealidad . La no linealidad actúa pero la entrada en el vector y es la salida / activación de unidades ocultas para la capa en cuestión.
Este cálculo es claro para mí porque la multiplicación de matrices está claramente definida para mí, sin embargo, el simple reemplazo de la multiplicación de matrices por convolución me parece poco claro. es decir
Quiero asegurarme de entender la ecuación anterior matemáticamente con precisión.
El primer problema que tengo con solo reemplazar la multiplicación de matrices con convolución es que, por lo general, uno identifica una fila de con un producto de puntos. Entonces, uno sabe claramente cómo todo relaciona con los pesos y eso se asigna a un vector de la dimensión como lo indica . Sin embargo, cuando uno lo reemplaza por convoluciones, no me queda claro qué fila o pesos corresponden a qué entradas en . Ni siquiera es claro para mí que tenga sentido representar los pesos como una matriz, de hecho (proporcionaré un ejemplo para explicar ese punto más adelante)
En el caso en que la entrada y las salidas están todas en 1D, ¿se calcula la convolución de acuerdo con su definición y luego se pasa por una singularidad?
Por ejemplo, si tuviéramos el siguiente vector como entrada:
y tuvimos los siguientes pesos (tal vez lo aprendimos con backprop):
entonces la convolución es:
¿sería correcto simplemente pasar la no linealidad a través de eso y tratar el resultado como la capa / representación oculta (supongamos que no hay agrupación por el momento)? es decir, de la siguiente manera:
(el tutorial de Stanford UDLF creo que recorta los bordes donde los convov de convolución con 0 por alguna razón, ¿necesitamos recortar eso?)
¿Es así como debería funcionar? ¿Al menos para un vector de entrada en 1D? ¿El no es un vector?
Incluso dibujé una red neuronal de cómo se supone que debe verse esto, creo:
fuente
xcorr(x, y) = conv(x, fliplr(y))
. The NN community tends to say convolution when they are actually doing a cross-correlation, but it's pretty similar.