Recientemente leí Redes totalmente convolucionales para la segmentación semántica por Jonathan Long, Evan Shelhamer, Trevor Darrell. No entiendo qué hacen las "capas deconvolucionales" / cómo funcionan.
La parte relevante es
3.3. El muestreo ascendente es una convolución hacia atrás
Otra forma de conectar salidas gruesas a píxeles densos es la interpolación. Por ejemplo, la interpolación bilineal simple calcula cada salida de las cuatro entradas más cercanas mediante un mapa lineal que depende solo de las posiciones relativas de las celdas de entrada y salida.
En cierto sentido, el muestreo ascendente con factor es una convolución con un paso de entrada fraccional de 1 / f. Siempre que sea integral, una forma natural de muestreo ascendente es, por lo tanto, convolución hacia atrás (a veces llamada deconvolución) con un paso de salida de . Tal operación es trivial de implementar, ya que simplemente invierte los pasos de convolución hacia adelante y hacia atrás.
Por lo tanto, el muestreo ascendente se realiza dentro de la red para el aprendizaje de extremo a extremo mediante retropropagación a partir de la pérdida de píxeles.
Tenga en cuenta que el filtro de deconvolución en una capa de este tipo no necesita ser reparado (p. Ej., Al muestreo ascendente bilineal), pero puede ser aprendido. Una pila de capas de desconvolución y funciones de activación pueden incluso aprender un muestreo ascendente no lineal.
En nuestros experimentos, encontramos que el muestreo en la red es rápido y efectivo para aprender predicciones densas. Nuestra mejor arquitectura de segmentación utiliza estas capas para aprender a muestrear para una predicción refinada en la Sección 4.2.
No creo haber entendido realmente cómo se entrenan las capas convolucionales.
Lo que creo que he entendido es que las capas convolucionales con un tamaño de núcleo aprenden filtros de tamaño k × k . La salida de una capa convolucional con el tamaño del núcleo k , zancada s ∈ N y n filtros es de dimensión dim Input. Sin embargo, no sé cómo funciona el aprendizaje de capas convolucionales. (Entiendo cómo los MLP simples aprenden con el descenso de gradiente, si eso ayuda).
Entonces, si mi comprensión de las capas convolucionales es correcta, no tengo idea de cómo se puede revertir esto.
¿Alguien podría ayudarme a comprender las capas deconvolucionales?
fuente
Respuestas:
La capa de desconvolución es un nombre muy desafortunado y debería llamarse una capa convolucional transpuesta .
Visualmente, para una convolución transpuesta con paso uno y sin relleno, simplemente rellenamos la entrada original (entradas azules) con ceros (entradas blancas) (Figura 1).
En el caso del paso dos y el relleno, la convolución transpuesta se vería así (Figura 2):
Puede encontrar más (excelentes) visualizaciones de aritmética convolucional aquí .
fuente
Creo que una forma de obtener una intuición de nivel realmente básica detrás de la convolución es que estás deslizando filtros K, que puedes considerar como plantillas K, sobre la imagen de entrada y producen activaciones K, cada una representando un grado de coincidencia con una plantilla particular . La operación inversa de eso sería tomar activaciones de K y expandirlas en una preimagen de la operación de convolución. La explicación intuitiva de la operación inversa es, por lo tanto, más o menos, la reconstrucción de imágenes dadas las plantillas (filtros) y las activaciones (el grado de coincidencia para cada plantilla) y, por lo tanto, en el nivel intuitivo básico, queremos volar cada activación por la máscara de la plantilla. y sumarlos.
Otra forma de abordar la comprensión de deconv sería examinar la implementación de la capa de deconvolución en Caffe, consulte los siguientes bits de código relevantes:
Puede ver que está implementado en Caffe exactamente como backprop para una capa convolucional hacia adelante regular (para mí fue más obvio después de comparar la implementación de backprop en cuDNN conv layer vs ConvolutionLayer :: Backward_gpu implementado usando GEMM). Entonces, si trabaja a través de cómo se realiza la propagación hacia atrás para una convolución regular, comprenderá lo que sucede a nivel de cálculo mecánico. La forma en que funciona este cálculo coincide con la intuición descrita en el primer párrafo de esta propaganda.
Para responder a su otra pregunta dentro de su primera pregunta, hay dos diferencias principales entre la retropropagación MLP (capa totalmente conectada) y las redes convolucionales:
1) la influencia de los pesos está localizada, así que primero descubra cómo hacer backprop para, digamos, un filtro 3x3 convolucionado con un área pequeña de 3x3 de una imagen de entrada, mapeando a un solo punto en la imagen resultante.
2) los pesos de los filtros convolucionales se comparten para la invariancia espacial. Lo que esto significa en la práctica es que en el paso hacia adelante, el mismo filtro 3x3 con los mismos pesos se arrastra a través de toda la imagen con los mismos pesos para el cálculo hacia adelante para producir la imagen de salida (para ese filtro en particular). Lo que esto significa para backprop es que los gradientes de backprop para cada punto de la imagen de origen se suman en todo el rango que arrastramos ese filtro durante el paso hacia adelante. Tenga en cuenta que también hay diferentes gradientes de pérdida wrt x, w y sesgo ya que dLoss / dx necesita propagarse hacia atrás, y dLoss / dw es la forma en que actualizamos los pesos. w y sesgo son entradas independientes en el DAG de cálculo (no hay entradas anteriores), por lo que no hay necesidad de hacer propagación hacia atrás en ellas.
fuente
Matemáticas paso a paso que explican cómo la convolución de transposición hace un muestreo ascendente 2x con un filtro 3x3 y un paso de 2:
El fragmento de TensorFlow más simple para validar las matemáticas:
fuente
Las notas que acompañan a la clase CS231n de Stanford CS : Redes neuronales convolucionales para el reconocimiento visual, por Andrej Karpathy , hacen un excelente trabajo al explicar las redes neuronales convolucionales.
Leer este documento debería darle una idea aproximada sobre:
Estas diapositivas son excelentes para las redes deconvolucionales.
fuente
Acabo de encontrar un gran artículo del sitio web de Theaon sobre este tema [1]:
Entonces, en términos simples, una "convolución transpuesta" es una operación matemática que utiliza matrices (al igual que la convolución), pero es más eficiente que la operación de convolución normal en el caso en el que desea volver de los valores convolucionados al original (dirección opuesta). Por esta razón, en las implementaciones se prefiere la convolución cuando se calcula la dirección opuesta (es decir, para evitar muchas multiplicaciones 0 innecesarias causadas por la matriz dispersa que resulta del relleno de la entrada).
Image ---> convolution ---> Result
Result ---> transposed convolution ---> "originalish Image"
A veces guarda algunos valores a lo largo de la ruta de convolución y reutiliza esa información cuando "regresa":
Result ---> transposed convolution ---> Image
Esa es probablemente la razón por la que erróneamente se llama "deconvolución". Sin embargo, tiene algo que ver con la transposición matricial de la convolución (C ^ T), de ahí el nombre más apropiado "convolución transpuesta".
Por lo tanto, tiene mucho sentido cuando se considera el costo informático. Pagaría mucho más por Amazon gpus si no utilizara la convolución transpuesta.
Lea y vea las animaciones aquí cuidadosamente: http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed
Alguna otra lectura relevante:
También soy nuevo en esto y agradecería cualquier comentario o corrección.
[1] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html
[2] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic
[3] https://en.wikipedia.org/wiki/Matched_filter
fuente
Podríamos usar PCA por analogía.
Cuando se usa conv, el paso hacia adelante es extraer los coeficientes de los componentes principales de la imagen de entrada, y el paso hacia atrás (que actualiza la entrada) es usar (el gradiente de) los coeficientes para reconstruir una nueva imagen de entrada, de modo que La nueva imagen de entrada tiene coeficientes de PC que coinciden mejor con los coeficientes deseados.
Cuando se usa deconv, el pase hacia adelante y el pase hacia atrás se invierten. El pase hacia adelante intenta reconstruir una imagen a partir de los coeficientes de la PC, y el pase hacia atrás actualiza los coeficientes de la PC dados (el gradiente de) la imagen.
El pase hacia adelante deconv hace exactamente el cálculo de gradiente conv en este post: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
Es por eso que en la implementación caffe de deconv (consulte la respuesta de Andrei Pokrovsky), el pase deconv forward llama a backward_cpu_gemm (), y el pase hacia atrás llama a forward_cpu_gemm ().
fuente
Además de la respuesta de David Dao: también es posible pensar al revés. En lugar de centrarse en qué píxeles de entrada (de baja resolución) se utilizan para producir un único píxel de salida, también puede centrarse en qué píxeles de entrada individuales contribuyen a qué región de píxeles de salida.
Esto se hace en esta publicación de destilación , que incluye una serie de visualizaciones muy intuitivas e interactivas. Una ventaja de pensar en esta dirección es que explicar los artefactos del tablero de ajedrez se vuelve fácil.
fuente
Convoluciones desde una perspectiva DSP
Llego un poco tarde a esto, pero todavía me gustaría compartir mi perspectiva y mis ideas. Mi formación es física teórica y procesamiento de señales digitales. En particular, estudié las wavelets y las convoluciones están casi en mi columna vertebral;)
La forma en que la gente de la comunidad de aprendizaje profundo habla sobre las circunvoluciones también me resultaba confusa. Desde mi perspectiva, lo que parece faltar es una separación adecuada de las preocupaciones. Explicaré las convoluciones de aprendizaje profundo usando algunas herramientas DSP.
Descargo de responsabilidad
Mis explicaciones serán un poco onduladas y no matemáticamente rigurosas para transmitir los puntos principales.
Definiciones
y
Convoluciones de aprendizaje profundo por partes
Como se puede ver, es la operación transpuesta, por lo tanto, el nombre.
Conexión al muestreo ascendente vecino más cercano
es decir, podemos reemplazar un muestreador ascendente repetido con factor 2 y una convolución con un núcleo de tamaño 3 por una convolución transpuesta con un tamaño de núcleo 4. Esta convolución transpuesta tiene la misma "capacidad de interpolación" pero podría aprender mejores interpolaciones de coincidencia.
Conclusiones y observaciones finales
Espero poder aclarar algunas convoluciones comunes que se encuentran en el aprendizaje profundo un poco separándolas en las operaciones fundamentales.
No cubrí la agrupación aquí. Pero esto es solo un muestreador no lineal y también puede tratarse dentro de esta notación.
fuente
Tuve muchos problemas para comprender qué sucedió exactamente en el documento hasta que encontré esta publicación de blog: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -with-tensorflow-and-tf-slim /
Aquí hay un resumen de cómo entiendo lo que está sucediendo en un muestreo superior 2x:
Información de papel
Ejemplo simple
fuente
El siguiente artículo analiza las capas deconvolucionales, tanto desde el punto de vista arquitectónico como de capacitación. Redes desconvolucionales
fuente