Loading [MathJax]/jax/element/mml/optable/LetterlikeSymbols.js

211 votos

¿Qué significa convolución 1x1 en una red neuronal?

Actualmente estoy haciendo el Tutorial de Aprendizaje Profundo de Udacity. En la Lección 3, hablan sobre una convolución 1x1. Esta convolución 1x1 se utiliza en el Módulo Inception de Google. Me cuesta entender qué es una convolución 1x1.

También he visto esta publicación de Yann Lecun.

¿Podría alguien amablemente explicarme esto?

0 votos

También vea una pregunta relacionada.

1 votos

Aquí hay una publicación de blog sobre estos módulos que detalló sobre las convoluciones 1x1: hackathonprojects.wordpress.com/2016/09/25/…

2 votos

Para decirlo de forma sencilla, la idea principal es reducir el número de canales en el volumen 3D, acelerando así el cálculo.

186voto

Indie AI Puntos 48

Suponga que tengo una capa convolucional que produce un tensor de forma (N,F,H,W) donde:

  • N es el tamaño del lote
  • F es el número de filtros convolucionales
  • H,W son las dimensiones espaciales

Supongamos que la entrada se alimenta en una capa convolucional con filtros 1x1 de F1, relleno cero y paso 1. Entonces la salida de esta capa convolucional 1x1 tendrá forma (N,F1,H,W).

Por lo tanto, los filtros 1x1 pueden usarse para cambiar la dimensionalidad en el espacio de los filtros. Si F1>F entonces estamos aumentando la dimensionalidad, si F1<F estamos disminuyendo la dimensionalidad, en la dimensión de los filtros.

De hecho, en el artículo de Google Inception Going Deeper with Convolutions, declaran (la negrita es mía, no de los autores originales):

Uno de los grandes problemas con los módulos anteriores, al menos en esta forma ingenua, es que incluso un número modesto de convoluciones 5x5 puede ser prohibitivamente costoso encima de una capa convolucional con un gran número de filtros.

Esto nos lleva a la segunda idea de la arquitectura propuesta: aplicar judiciosamente reducciones de dimensiones y proyecciones donde los requisitos computacionales aumentarían demasiado de otra manera. Esto se basa en el éxito de las incrustaciones: incluso las incrustaciones de baja dimensión pueden contener mucha información sobre un parche de imagen relativamente grande...Las convoluciones 1x1 se utilizan para calcular reducciones antes de las costosas convoluciones 3x3 y 5x5. Además de utilizarse como reducciones, también incluyen el uso de activación lineal rectificada lo que las hace de doble uso.

Así que en la arquitectura Inception, usamos los filtros convolucionales 1x1 para reducir la dimensionalidad en la dimensión de los filtros. Como expliqué anteriormente, estas capas convolucionales 1x1 pueden usarse en general para cambiar la dimensionalidad del espacio de los filtros (ya sea aumentar o disminuir) y en la arquitectura Inception vemos lo efectivos que pueden ser estos filtros de 1x1 para la reducción de la dimensionalidad, explícitamente en el espacio de la dimensión de los filtros, no en el espacio de la dimensión espacial.

Tal vez haya otras interpretaciones de los filtros convolucionales 1x1, pero prefiero esta explicación, especialmente en el contexto de la arquitectura Google Inception.

5 votos

¿Es que la convolución 1x1 comprime la dimensión del filtro anterior a 1 antes de implementar la convolución 5x5?

4 votos

@LeonardLoo cada kernel 1x1 reduce la dimensión del filtro a 1, pero puedes tener varios kernels en una convolución 1x1, por lo que el número de "filtros" puede ser arbitrario de tu elección.

2 votos

Se muestra claramente en el texto citado: Esto lleva a la segunda idea de la arquitectura propuesta.... Al ignorar el primer párrafo del artículo citado La idea principal de la arquitectura Inception es..., esta respuesta proporciona una explicación parcial. En resumen, la primera razón, como se explica en Network In Network y Xception: Deep Learning with Depthwise Separable Convolutions, es que el módulo típico de Inception primero mira las correlaciones entre canales a través de un conjunto de convoluciones 1x1.

83voto

Free Debreuil Puntos 739

Una convolución 1x1 simplemente mapea un píxel de entrada con todos sus canales a un píxel de salida, sin mirar a su alrededor. A menudo se utiliza para reducir el número de canales de profundidad, ya que es muy lento multiplicar volúmenes con profundidades extremadamente grandes.

entrada (profundidad 256) -> convolución 1x1 (profundidad 64) -> convolución 4x4 (profundidad 256)

entrada (profundidad 256) -> convolución 4x4 (profundidad 256)

La última es aproximadamente ~3.7 veces más lenta.

Teóricamente, la red neural puede 'elegir' qué 'colores' de entrada mirar utilizando esto, en lugar de multiplicar todo a la fuerza bruta.

43 votos

Diría que un mapa de 1x1 no asigna simplemente un píxel de entrada a un píxel de salida, sino que colapsa todos los canales de píxel de entrada en un solo píxel. En tu ejemplo de la primera línea, hay 256 canales de entrada, y cada uno de los 64 núcleos de 1x1 colapsa los 256 canales de entrada a solo un "píxel" (número real). El resultado es que ahora tienes 64 canales en lugar de 256 con la misma dimensión espacial, lo que hace que la convolución de 4x4 sea computacionalmente más barata que en tu segundo ejemplo de línea.

0 votos

Buen punto, ¡actualizaré la publicación!

5 votos

¿De dónde sacaste que es 3.7 veces más lento?

37voto

Simon Alford Puntos 101

La razón principal por la que no entendí las convoluciones 1x1 es porque no entendía cómo funcionaban realmente las convoluciones any—el factor clave es cómo funciona el cálculo de una convolución de múltiples canales/filtros. Para entender esto, encontré útil también esta respuesta:

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

En particular, el Tipo 2.2 es la descripción correcta de una convolución allí.

Otra respuesta útil:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Esta respuesta explica cómo tienes un filtro separado para cada combinación de canal de entrada/salida. Después de calcular cada uno de estos, los resultados se suman en el eje del canal de entrada dejando con número de valores de canal de salida.

Aquí hay un video que encontré que me ayudó a entender cómo funciona una convolución 1x1.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Estas son las principales cosas que saqué de él:

  • La entrada a una convolución 1x1 suele ser convoluciones anteriores que tienen tamaño m x n. Pero si había f1 filtros en la última capa de convoluciones, estás obteniendo una matriz con forma (m,n,f1). Una convolución 1x1 es en realidad un vector de tamaño f1 que se convoluciona en toda la imagen, creando un filtro de salida de m x n. Si tienes f2 convoluciones 1x1, entonces la salida de todas las convoluciones 1x1 tiene un tamaño de (m,n,f2).
  • Así que una convolución 1x1, asumiendo que f2<f1, puede ser vista como la representación nuevamente de f1 filtros a través de f2 filtros. Permite a la red entrenarse en cómo reducir la dimensión de manera más eficiente.

5 votos

Ok, este es el único lugar hasta ahora que explicó correctamente que la convolución 1x1 es en realidad un producto punto con (m,n,f1)

12voto

complexnumbers Puntos 21

¡Voy a intentar explicarlo de forma más intuitiva y breve con ilustraciones!

¿Un convolución 1*1 (también conocida como red en la red)?

Supongamos que tu entrada es (nH, nW, ncprev). Puedes pensar en (1*1*ncprev) como una sola neurona (una red totalmente conectada) - es por eso que se llama red en la red - que toma (ncprev) números de la entrada, los multiplica por (1*1*ncprev), luego los suma, aplica ReLu y produce la salida (nH, nW), y si tienes múltiples filtros(nc), entonces la salida sería (nH, nW, nC).

Así que puedes usar una capa de pooling para reducir las dimensiones espaciales (nH, nW) y puedes usar una convolución 1*1 para reducir el ncprev (es decir, el número de canales) lo cual ahorra muchos cálculos. Por ejemplo:

imagen de descripción

Por lo tanto, una conclusión

  • Puedes usar una capa convolucional 1x1 para reducir nC pero no nH, nW.

  • Puedes usar una capa de pooling para reducir nH, nW, y nC.

En otras palabras,imagen de descripción

  • ¿Qué estás haciendo usando un filtro de CONV 1*1? Básicamente tomas pesos de tamaño "1*1*num_input_channel_of_featureMap" y convolucionas (elemento por elemento * seguido de +) este volumen sobre la imagen/featureMap de tamaño "W_H_num_input_channel_of_featureMap" y obtienes una salida de tamaño "W*H".

  • Ahora, puedes usar un número de "#filtros" de este tipo "1*1*num_input_channel_of_featureMap" y obtener el volumen "WH#filter" como salida final.

  • Más precisamente, estás multiplicando "1*1" de esos 32 pesos diferentes (volumen 1*1) con una sección en la misma posición en el feature map de entrada, seguido de ReLu y obtienes un solo número correspondiente generado, visto como un píxel de color verde.

  • CONV 1*1 ayuda a reducir el número de canales y ahorrar en cálculos en algunas redes (INCEPTIONS).

  • Pero, por supuesto, si deseas mantener el número de canales igual al del feature map de entrada, también está bien. Lo que hace CONV 1*1 es simplemente aplicar la no linealidad de ReLU a ello, lo que le permite aprender funciones complejas en RN.

2 votos

Una capa de agrupación solo reduce nH y nW, y no nC. En tu conclusión, mencionas incorrectamente.

4voto

user7285239 Puntos 1

En la terminología de Machine Learning, los datos a menudo tienen más dimensiones de las que se describen típicamente, por ejemplo, los datos de imagen 2D en realidad suelen ser 3D, con dimensiones:

  • w el ancho de la imagen
  • h la altura de la imagen
  • k (de tamaño 3) los canales RGB de la imagen

(en una imagen en escala de grises |k|=1).

enter image description here

Cuando se describen capas convolucionales 1×1, esto generalmente implica 1×1×k, donde k es el número de canales: es decir, el filtro reduce la dimensionalidad a través de los canales (por ejemplo, promediando el valor a través de los tres canales RGB separados).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X