Goodfellow - Convolutional Networks

Las redes convolucionales (LeCun, 1989), también conocidas como redes neuronales convolucionales, o CNN, son un tipo especializado de red neuronal para procesar datos que tiene una topología similar a una cuadrícula conocida. Los ejemplos incluyen datos de series de tiempo, que se pueden considerar como una cuadrícula 1-D tomando muestras a intervalos de tiempo regulares, y datos de imágenes, que se pueden considerar como una cuadrícula 2D de píxeles. Las redes convolucionales han tenido un éxito extraordinario en aplicaciones prácticas. El nombre "red neuronal convolucional" indica que la red emplea una operación matemática llamada convolución. La convolución es un tipo especializado de operación lineal. Las redes convolucionales son simplemente redes neuronales que utilizan la convolución en lugar de la multiplicación general de matrices en al menos una de sus capas.

En este capítulo, primero describimos qué es la convolución. A continuación, explicamos la motivación detrás del uso de la convolución en una red neuronal. Luego describimos una operación llamada agrupación, que emplean casi todas las redes convolucionales. Por lo general, la operación utilizada en una red neuronal convolucional no corresponde precisamente a la definición de convolución que se usa en otros campos, como la ingeniería o las matemáticas puras. Describimos varias variantes de la función de convolución que se utilizan ampliamente en la práctica para redes neuronales. También mostramos cómo se puede aplicar la convolución a muchos tipos de datos, con diferentes números de dimensiones. Luego discutimos los medios para hacer más eficiente la convolución. Las redes convolucionales se destacan como un ejemplo de principios neurocientíficos que influyen en el aprendizaje profundo. Discutimos estos principios neurocientíficos, luego concluimos con comentarios sobre el papel que han desempeñado las redes convolucionales en la historia del aprendizaje profundo. Un tema que este capítulo no trata es cómo elegir la arquitectura de su red de trabajo.

El objetivo de este capítulo es describir los tipos de herramientas que ofrecen las redes convolucionales, mientras que el capítulo 11 describe las pautas generales para elegir qué herramientas usar en qué circunstancias. La investigación en arquitecturas de redes convolucionales avanza tan rápidamente que cada pocas semanas o meses se anuncia una nueva y mejor arquitectura para una marca de referencia determinada, lo que hace que sea poco práctico describir la mejor arquitectura en la impresión. No obstante, las mejores arquitecturas han estado compuestas de los bloques de construcción descritos aquí.

The Convolution Operation

En su forma más general, la convolución es una operación en dos funciones de un argumento de valor real. Para motivar la definición de convolución, comenzamos con ejemplos de dos funciones que podríamos usar.
Supongamos que estamos rastreando la ubicación de una nave espacial con un sensor láser. Nuestro sensor láser proporciona una única salida x(t), la posición de la nave espacial en el momento. Tanto el valor real de x como el real, es decir, podemos obtener una lectura diferente del sensor láser en cualquier momento en el tiempo.

Ahora supongamos que nuestro sensor láser es algo ruidoso. Para obtener una estimación menos ruidosa de la posición de la nave espacial, nos gustaría promediar varias mediciones. Por supuesto, las mediciones más recientes son más relevantes, por lo que desearemos que sea un promedio ponderado que otorgue más peso a las mediciones recientes. Cando esto con una función de ponderación (a), la edad de una medida. Si aplicamos dicha operación de promedio ponderado en cada momento, obtenemos una nueva función que proporciona una estimación suavizada de la posición de la nave espacial:

Esta operación se llama convolución. La operación de convolución normalmente se denota con un asterisco:
En nuestro ejemplo, debemos ser una función de densidad de probabilidad válida, o la salida no será un promedio ponderado. Además, debemos ser 0 para todos los argumentos negativos, o se verá en el futuro, lo que presumiblemente está más allá de nuestras capacidades. Sin embargo, estas limitaciones son particulares de nuestro ejemplo. En general, la convolución se define para cualquier función para la cual se define la integral anterior y se puede usar para otros fines además de tomar promedios ponderados.

En la terminología de red convolucional, el primer argumento (en este ejemplo, la función x) de la convolución a menudo se conoce como la entrada, y el segundo argumento (en este ejemplo, la función w) como el núcleo. La salida se refiere a veces como el mapa de características. 

En nuestro ejemplo, la idea de un sensor láser que pueda proporcionar mediciones en cada instante no es realista. Generalmente, cuando trabajamos con datos en una computadora, el tiempo se discretizará y nuestro sensor proporcionará datos a intervalos regulares. En nuestro ejemplo, podría ser más realista suponer que nuestro láser proporciona una medición una vez por segundo. El índice de tiempo t puede tomar solo valores enteros. Si ahora asumimos que x y w se definieron solo en un entero, podemos definir la convolución discreta:



En las aplicaciones de aprendizaje automático, la entrada suele ser una matriz multidimensional de datos, y el núcleo suele ser una matriz multidimensional de parámetros que son adaptados por el algoritmo de aprendizaje. Nos referiremos a estas matrices multidimensionales como tensores. Debido a que cada elemento de la entrada y el kernel se deben almacenar explícitamente por separado, generalmente asumimos que estas funciones son cero en todas partes, pero en el conjunto finito de puntos para los cuales almacenamos los valores. Esto significa que, en la práctica, podemos implementar la suma infinita como una suma sobre un número finito de elementos del arreglo.

Por último, a menudo utilizamos convoluciones en más de un eje a la vez. Por ejemplo, si usamos una imagen bidimensional. Como entrada, probablemente también queramos usar un kernel bidimensional K:

La convolución es conmutativa, lo que significa que podemos escribir de manera equivalente.


Por lo general, la última fórmula es más sencilla de implementar en una biblioteca de aprendizaje automático, porque hay menos variación en el rango de valores válidos de m y n.

La propiedad conmutativa de la convolución surge porque hemos cambiado el kernel con respecto a la entrada, en el sentido de que a medida que aumenta, el índice en la entrada aumenta, pero el índice en el kernel disminuye. La única razón para hacer funcionar el kernel es para obtener la propiedad conmutativa. Si bien la propiedad conmutativa es útil para escribir pruebas, no suele ser una propiedad importante de una implementación de red neuronal. En cambio, muchas bibliotecas de redes neuronales implementan una función relacionada llamada correlación cruzada, que es lo mismo que la convolución pero sin mover el núcleo:


Muchas bibliotecas de aprendizaje automático implementan la correlación cruzada, pero lo llaman convolución. En este texto seguimos esta convención de llamar convolución a ambas operaciones y especificamos si queremos desplazar "flipping" el kernel o no en contextos donde el kernel se desplaza, sea relevante. En el contexto del aprendizaje automático, el algoritmo de aprendizaje aprenderá los valores apropiados del kernel en el lugar apropiado, por lo que un algoritmo basado en convolución con el desplazamiento del kernel aprenderá un kernel que se mueva con relación al kernel aprendido por un algoritmo sin el flipping. También es raro que la convolución se use sola en el aprendizaje automático; en su lugar, la convolución se utiliza simultáneamente con otras funciones, y la combinación de estas funciones no se conmuta independientemente de si la operación de convolución salta o no de su núcleo.

Consulte la fi gura 9.1 para ver un ejemplo de convolución (sin desplazamiento del núcleo) aplicado a un tensor 2-D.

La convolución discreta se puede ver como una multiplicación por una matriz, pero la matriz de temas tiene varias entradas limitadas para que sean iguales a otras entradas. Por ejemplo, para una convolución discreta univariada, cada fila de la matriz está restringida para ser igual a la fila anterior desplazada por un elemento. Esto se conoce como una matriz de Toeplitz. En dos dimensiones, una matriz de doble circuito de circulación corresponde a la convolución. Además de estas restricciones de que varios elementos sean iguales entre sí, la convolución generalmente corresponde a una matriz muy dispersa (una matriz cuyas entradas son en su mayoría iguales a cero). Esto se debe a que el kernel suele ser mucho más pequeño que la imagen de entrada. Cualquier algoritmo de red neuronal que trabaje con la multiplicación de matrices y no dependa de propiedades específicas de la estructura matricial debería funcionar con convolución, sin requerir ningún cambio adicional en la red neuronal. Las redes neuronales convolucionales típicas sí hacen uso de otras especializaciones para tratar con grandes insumos de manera eficiente, pero no son estrictamente necesarias desde una perspectiva teórica.

Motivación 
Convolution aprovecha tres ideas importantes que pueden ayudar a mejorar un sistema de aprendizaje automático: interacciones dispersas, intercambio de parámetros y equivalencia



Figura 9.1: Un ejemplo de convolución 2-D sin cambio de núcleo. Restringimos la salida a solo posiciones donde el kernel se encuentra completamente dentro de la imagen, llamada convolución "válida" en algunos contextos. Dibujamos cuadros con flechas para indicar cómo se forma el elemento superior izquierdo del tensor de salida aplicando el núcleo a la región superior izquierda correspondiente del tensor de entrada.

representaciones: Además, la convolución proporciona un medio para trabajar con entradas de tamaño variable. Ahora describimos cada una de estas ideas a su vez.

Las capas de redes neuronales tradicionales utilizan la multiplicación de matrices por una matriz de parámetros con un parámetro separado que describe la interacción entre cada unidad de entrada y cada unidad de salida. Esto significa que cada unidad de salida interactúa con cada unidad de entrada. Sin embargo, las redes convolucionales típicamente tienen interacciones dispersas (también conocidas como conectividad dispersa o pesos dispersos). Esto se logra haciendo que el kernel sea más pequeño que la entrada. Por ejemplo, al procesar una imagen, la imagen de entrada puede tener miles o millones de píxeles, pero podemos detectar características pequeñas y significativas, como bordes con núcleos que ocupan solo decenas o cientos de píxeles. Esto significa que debemos almacenar menos parámetros, lo que reduce los requisitos de memoria de la zona de modos y mejora su eficiencia estadística. También significa que calcular la salida requiere menos operaciones. Estas mejoras en la eficiencia suelen ser bastante grandes. Si hay m entradas y n salidas, entonces la multiplicación de matrices requiere m × n parámetros, y los algoritmos utilizados en la práctica tienen tiempo de ejecución O (m × n) (por ejemplo). Si limitamos el número de conexiones que cada salida puede tener tok, entonces el enfoque escasamente conectado requiere solo los parámetros kx y el tiempo de ejecución O (kxn). Para muchas aplicaciones prácticas, es posible obtener un buen rendimiento en la tarea de aprendizaje automático, manteniendo k varios órdenes de magnitud más pequeños que m. Para demostraciones gráficas de conectividad dispersa, vea la fi gura 9.2 y la fi gura 9.3. En una red convolucional profunda, las unidades en las capas más profundas pueden interactuar indirectamente con una porción más grande de la entrada, como se muestra en la figura 9.4. Esto permite que la red describa de manera eficiente las interacciones complicadas entre muchas variables mediante la construcción de dichas interacciones a partir de bloques de construcción simples que describen solo interacciones dispersas.

El uso compartido de parámetros (Parameter sharing) se refiere al uso del mismo parámetro para más de una función en un modelo. En una red neuronal tradicional, cada elemento de la matriz de peso.


Figura 9.2: Conectividad dispersa, vista desde abajo. Resaltamos una unidad de entrada, x3, y resaltamos las unidades s de salida que son afectadas por esta unidad. (Arriba) Cuando s está formado por convolución con un núcleo de ancho 3, solo tres salidas están afectadas por x. (Abajo) Cuando s está formado por la multiplicación de matrices, la conectividad ya no es escasa, por lo que todas las salidas están afectadas por x3


Figura 9.3: Conectividad dispersa, vista desde arriba. Resaltamos una unidad de salida, s3, y resaltamos las unidades de entrada en x la medida en que afectan a esta unidad. Estas unidades se conocen como los campos receptivos de s3. (Superior) Cuando se forma por convolución con un núcleo de ancho 3, solo tres entradas afectan s3. (Abajo) Cuando s está formado por la multiplicación de matrices, la conectividad ya no es escasa, por lo que todas las entradas afectan a s3.


Figura 9.4: El campo receptivo de las unidades en las capas más profundas de una red convolucional es más grande que el campo receptivo de las unidades en las capas poco profundas. Este efecto aumenta si la red incluye características arquitectónicas como convolución por pasos (figura 9.12) o agrupación (sección 9.3). Esto significa que aunque las conexiones directas en una red convolucional son muy dispersas, las unidades en las capas más profundas se pueden conectar indirectamente a toda o la mayor parte de la imagen de entrada.

se usa exactamente una vez al calcular la salida de una capa. Se multiplica por un elemento de la entrada y luego nunca se vuelve a visitar. Como sinónimo de uso compartido de parámetros, se puede decir que una red aceleró los pesos, porque el valor del peso aplicado a una entrada está vinculado al valor de un peso aplicado en otro lugar. En una red neuronal convolucional, cada miembro del núcleo se utiliza en cada posición de la entrada (excepto quizás algunos de los píxeles del límite, dependiendo de las decisiones de diseño con respecto al límite). El uso compartido de parámetros utilizado por la operación de convolución significa que, en lugar de aprender un conjunto separado de parámetros para cada ubicación, solo aprendemos un conjunto. Esto no afecta al tiempo de ejecución de la propagación hacia adelante, todavía es O (k × n), pero reduce aún más los requisitos de almacenamiento de los parámetros de los parámetros del modelo. Recordemos que, por lo general, hay varios órdenes de magnitud menor que m. Los pedidos en general son aproximadamente del mismo tamaño, k es practicamente insignificantes en comparación con m × n. Por lo tanto, la convolución es dramáticamente más eficiente que la multiplicación de matrices densas en términos de los requisitos de memoria y la eficiencia estadística. Para obtener una descripción gráfica de cómo funciona el uso compartido de parámetros, consulte la figura 9.5.

Como ejemplo de estos dos primeros principios en acción, la fi gura 9.6 muestra cómo la escasa conectividad y el uso compartido de parámetros pueden mejorar dramáticamente la



La eficiencia de una función lineal para detectar bordes en una imagen.
En el caso de la convolución, la forma particular de compartir parámetros hace que la capa tenga una propiedad que se debe cancelar por conversión. Decir que una función es equivariante significa que si la entrada cambia, la salida cambia de la misma manera. Específicamente, una functionf (x) es equivalente a una functiongiff (g (x)) = g (f (x)). En el caso de la convolución, si permitimos que cualquier función que traduzca la entrada, es decir, la desplace, la función de convolución es equivalente a g. Por ejemplo, vamos a ser una función que da brillo a la imagen en coordenadas enteras. Sea g una función que asigna una función de imagen a otra función de imagen, de modo que I '= g (I) es la función de imagen con I' (x, y) = I (x −1, y). Esto desplaza cada píxel de una unidad a la derecha. Si aplicamos esta transformación a I, luego aplicamos convolución, el resultado será el mismo que si aplicáramos convolución a I.

Luego aplicó la transformación g a la salida. Cuando se procesan datos de series de tiempo, esto significa que la convolución produce una especie de línea de tiempo que se muestra cuando aparecen diferentes características en la entrada. Si movemos un evento más tarde en el tiempo en la entrada, la misma representación exacta aparecerá en la salida, justo después. De manera similar con las imágenes, la convolución crea un mapa 2-D donde aparecen ciertas características en la entrada. Si movemos el objeto en la entrada, su representación moverá la misma cantidad en la salida. Esto es útil cuando sabemos que alguna función de un pequeño número de píxeles vecinos es útil cuando se aplica a múltiples ubicaciones de entrada. Por ejemplo, cuando se procesan imágenes, es útil detectar bordes en la primera capa de una red convolucional. Los mismos bordes aparecen más o menos en todas partes de la imagen, por lo que es práctico compartir parámetros en toda la imagen. En algunos casos, es posible que no deseemos compartir parámetros en toda la imagen. Por ejemplo, si estamos procesando imágenes que se recortan para centrarse en la cara de un individuo, es probable que queramos extraer diferentes características en diferentes ubicaciones: la parte de la red que procesa la cara a la cara necesita buscar cejas, mientras que la parte del procesamiento de la red, la parte inferior de la cara debe buscar un mentón.

La convolución no es naturalmente equivalente a algunas otras transformaciones, como los cambios en la escala o la rotación de una imagen. Otros mecanismos son necesarios para manejar este tipo de transformaciones.

Finalmente, algunos tipos de datos no pueden ser procesados por redes neuronales definidas por la multiplicación de matrices con una matriz de forma fija. La convolución permite el procesamiento de algunos de estos tipos de datos. Discutimos esto más a fondo en la sección 9.7

Pooling 


Una capa típica de una red convolucional consta de tres etapas (ver figura 9.7). En la primera etapa, la capa realiza varias convoluciones en paralelo para producir un conjunto de activaciones lineales. En la segunda etapa, cada activación lineal se ejecuta a través de una función de activación no lineal, como la función de activación lineal rectificada. Esta etapa a veces se denomina etapa detectora. En la tercera etapa, usamos una función de un pooling para modificar aún más la salida de la capa. 
Una función de agrupación reemplaza la salida de la red en una ubicación determinada con un resumen estadístico de las salidas cercanas. Por ejemplo, la operación de agrupación máxima (Zhouand Chellappa, 1988) informa la salida máxima dentro de un vecindario rectangular. Otras funciones populares de agrupación incluyen el promedio de un vecindario rectangular, la norma L2 de un vecindario rectangular o un promedio ponderado basado en la distancia desde el píxel central.


Figura 9.7: Los componentes de una capa de red neuronal convolucional típica. Hay dos conjuntos de terminología de uso común para describir estas capas. (Izquierda) En esta terminología, la red convolucional se ve como un pequeño número de capas relativamente complejas, con cada capa con muchas "etapas". En esta terminología, hay un mapeo uno a uno entre los tensores del kernel y las capas de red. En este libro generalmente utilizamos esta terminología. (Derecha) En esta terminología, la red convolucional se ve como un número mayor de capas simples; Cada paso del procesamiento se considera como una capa por derecho propio. Esto significa que no todas las "capas" tienen parámetros. 

En todos los casos, la agrupación ayuda a hacer que la representación sea aproximadamente variable a pequeñas traducciones de la entrada. La invarianza a la traducción significa que si traducimos la entrada en una cantidad pequeña, los valores de la mayoría de las salidas agrupadas no cambian. Consulte la figura 9.8 para ver un ejemplo de cómo funciona esto. La invarianza a la traducción local puede ser una propiedad útil si nos importa más si hay alguna característica presente que exactamente dónde está. Por ejemplo, al determinar si una imagen contiene una cara, no necesitamos conocer la ubicación de los ojos con una precisión de píxel, solo necesitamos saber que hay un ojo en el lado izquierdo de la cara y un ojo en el lado derecho de la cara. En otros contextos, es más importante preservar la ubicación de una característica. Por ejemplo, si queremos encontrar una esquina definida.


Figura 9.8: La agrupación máxima introduce la invariancia. (Arriba) Una vista de la mitad de la salida de una capa convolucional. La fila inferior muestra salidas de la no linealidad. La fila superior muestra los resultados de la agrupación máxima, con un paso de un píxel entre las regiones de agrupación y un ancho de región de agrupación de tres píxeles. (Parte inferior) Una vista de la misma red, después de que la entrada se haya desplazado a la derecha en un píxel. Todos los valores en la fila inferior han cambiado, pero solo la mitad de los valores en la fila superior han cambiado, debido a que las unidades de agrupación máxima son sensibles solo al valor máximo en el vecindario, no a su ubicación exacta.

por la combinación de dos bordes en una orientación específica, debemos preservar la ubicación de los bordes lo suficientemente bien como para probar si se encuentran. El uso de la agrupación puede verse como una adición infinitamente fuerte antes de que la función que aprende la capa debe ser invariante para pequeñas traducciones. Cuando este es un supuesto correcto, puede mejorar en gran medida la eficiencia estadística de la red. El almacenamiento en regiones espaciales produce invarianza a la traducción, pero si agrupamos las salidas de las convoluciones parametrizadas por separado, las características pueden aprender a qué transformaciones se vuelven invariantes ( ver figura 9.9). 

Debido a que la agrupación resume las respuestas en un vecindario completo, es posible usar menos unidades de agrupación que las unidades de detección, al informar las estadísticas de resumen para agrupar las regiones separadas por píxeles y no por un píxel. Ver la figura 9.10 para un ejemplo. Esto mejora la eficiencia computacional de la red porque la siguiente capa tiene aproximadamente menos entradas que procesar. Cuando 


el número de parámetros en la siguiente capa es una función de su tamaño de entrada (por ejemplo, cuando la siguiente capa está completamente conectada y se basa en la multiplicación de matrices), esta reducción en el tamaño de entrada también puede resultar en una mejor eficiencia estadística y requisitos de memoria reducidos para almacenar parámetros.
Para muchas tareas, la agrupación es esencial para manejar entradas de diferentes tamaños. Por ejemplo, si queremos clasificar imágenes de tamaño variable, la entrada al clasi fi catador debe tener un tamaño fijo. Esto generalmente se logra variando el tamaño del conjunto de an entre regiones de agrupación de modo que la capa de clasificación siempre reciba el mismo número de estadísticas de resumen independientemente del tamaño de entrada. Por ejemplo, la capa de agrupación fi nal de la red se puede definir para generar cuatro conjuntos de estadísticas de resumen, una para cada cuadrante de una imagen, independientemente del tamaño de la imagen.

Algunos trabajos teóricos proporcionan orientación sobre qué tipos de agrupación se deben utilizar en diversas situaciones (Boureau et al., 2010). También es posible agrupar las características de forma dinámica, por ejemplo, ejecutando un algoritmo de agrupación en ubicaciones de características interesantes (Boureau et al., 2011). Este enfoque produce un conjunto diferente de regiones de agrupamiento para cada imagen. Otro enfoque es aprender una estructura de agrupación única que luego se aplica a todas las imágenes (Jia et al., 2012) 

La puesta en común puede complicar algunos tipos de arquitecturas de redes neuronales que utilizan información descendente, como las máquinas de Boltzmann y los autocodificadores. Estos temas se discuten más a fondo cuando presentamos estos tipos de redes en la parte III. El almacenamiento en máquinas de Boltzmann convolucionales se presenta en la sección 20.6. Las operaciones de tipo inverso en las unidades de agrupación necesarias en algunas redes diferenciadas se cubren en la sección 20.10.6. 

En la figura 9.11 se muestran algunos ejemplos de arquitecturas de redes convolucionales completas para la clasificación mediante convolución y agrupación. 


Comentarios