Recientemente leí el comentario de Yan LeCuns sobre convoluciones 1x1 :
En las redes convolucionales, no existen las "capas completamente conectadas". Solo hay capas de convolución con núcleos de convolución 1x1 y una tabla de conexión completa.
Es un hecho que rara vez se entiende que ConvNets no necesita tener una entrada de tamaño fijo. Puede entrenarlos en entradas que producen un solo vector de salida (sin extensión espacial) y luego aplicarlos a imágenes más grandes. En lugar de un solo vector de salida, obtienes un mapa espacial de vectores de salida. Cada vector ve ventanas de entrada en diferentes ubicaciones en la entrada. En ese escenario, las "capas completamente conectadas" realmente actúan como convoluciones 1x1.
Me gustaría ver un ejemplo simple para esto.
Ejemplo
Suponga que tiene una red totalmente conectada. Tiene solo una capa de entrada y una capa de salida. La capa de entrada tiene 3 nodos, la capa de salida tiene 2 nodos. Esta red tiene parámetros. Para hacerlo aún más concreto, supongamos que tiene una función de activación ReLU en la capa de salida y la matriz de peso
Entonces la red es con .
¿Cómo debería verse la capa convolucional para ser la misma? ¿Qué quiere decir LeCun con "tabla de conexión completa"?
Supongo que para obtener una CNN equivalente, tendría que tener exactamente el mismo número de parámetros. El MLP de arriba tiene parámetros.
fuente
kernel = filter
, ¿estás de acuerdo? >> "Entonces, ¿la convolución 1x1 es solo sobre la salida, no sobre el núcleo? En absoluto. Una3x3
convolución puede tener una forma de salida arbitraria". De hecho, si se usa relleno ystride=1
luego eloutput shape = input shape
. >> "Pensé que si un núcleo de convolución tiene forma [1, 1, 3], ¿se podría decir que es una convolución 1x1x3?" No, nunca escuché a alguien hablar de3x3x512
convoluciones. Sin embargo, todos los filtros de convolución que he visto tienen una tercera dimensión espacial igual al número de mapas de características de la capa de entrada.Convolution Demo
curso Karpathies CS321n: cs231n.github.io/convolutional-networks/#conv . O en la API de tensorflow: tensorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d Se supone que los filtros tienen forma[filter_height, filter_width, in_channels, out_channels]
.Una capa completamente conectada (para el tamaño de entrada con canales y neuronas de salida) NO ES equivalente a una capa de convolución 1x1 sino a una capa de convolución x (es decir, un núcleo grande, del mismo tamaño que la entrada-no pad) con un número de filtros igual a la salida FC / capa oculta (es decir, filtros)n∗n i m n n m
Como solicitó, tiene el mismo número de parámetros que el FCN, es decir, (más sesgo):n∗n∗i∗m
FCN: (pesos por capa de entrada = entrada canales) (veces salida / ancho de capa oculta)n∗n∗i ∗ ∗m
CNN: (cada núcleo) (núcleo por canal de entrada) (número de filtros)n∗n ∗i ∗m
( Fuente )
fuente
El kernel equivalente simplemente tiene cualquier forma que tenga la entrada y calcula un producto de punto tensorial. (Uso la palabra "forma" ya que parece haber cierta confusión sobre "tamaño", que a menudo ignora la dimensión del canal / profundidad). No hay "deslizar el núcleo a través de la entrada", ya que el núcleo es tan grande como puede ser. Citando las notas del curso Stanford CS 231n :
Creo que "F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096" aquí significa que cada núcleo conv tiene forma 7x7x512, y hay 4096 filtros de este tipo.
La respuesta anterior mencionó que el último fc de AlexNet (que recibe la entrada con forma 1x1x4096 y calcula 1000 puntajes de clase) se implementa como "convolución 1x1". Para completar, cada uno de esos núcleos conv tiene forma 1x1x4096, y hay 1000 de ellos.
Le Cunn también explica esto en el documento de CNN , página 8, descripción de LeNet5:
fuente
Para cualquier usuario novato de PyTorch como yo, no confunda "capa completamente conectada" con una "capa lineal".
Una capa lineal y convoluciones 1x1 son lo mismo. Me llevó un tiempo comprender que no existe una "capa completamente conectada": es simplemente un aplanamiento de las dimensiones espaciales en un tensor gigante 1D. El aplanamiento hace que cada elemento en todas las ubicaciones espaciales se presente como un mapa de características / canal / dimensión separado (como quiera llamarlo). Por lo tanto, cuando aplicamos una capa lineal en un tensor aplanado , obtenemos una operación completamente conectada , que obviamente no es lo mismo que una convolución 1x1.
Una∑1j=0X[j]W0[j]+b[0] ∑1j=0X[j]W1[j]+b[1] ∑1j=0X[j]W2[j]+b[2]
1x1
convolución es simplemente una suma ponderada de mapas de características de entrada, en la pregunta de OP, 3. O [0] = . Del mismo modo, O [1] = y O [2] = .Las 3 ecuaciones anteriores se abren para convertirse en .O=W2×3X3×1+b2×1
Otras respuestas que afirman que una capa totalmente conectada es simplemente una capa de convolución válida
nxn
para una entrada de tamañonxn
es confusa (aunque correcta).fuente