Capas Convolutivas (Convolutional Layers)
La capa CONV es el componente básico de una red neuronal convolucional. Los parámetros de la capa CONV consisten en un conjunto de K filtros aprendibles (es decir, "núcleos"), donde cada filtro tiene un ancho y una altura, y casi siempre son cuadrados. Estos filtros son pequeños (en términos de sus dimensiones espaciales) pero se extienden por toda la profundidad del volumen.
La capa CONV es el componente básico de una red neuronal convolucional. Los parámetros de la capa CONV consisten en un conjunto de K filtros aprendibles (es decir, "núcleos"), donde cada filtro tiene un ancho y una altura, y casi siempre son cuadrados. Estos filtros son pequeños (en términos de sus dimensiones espaciales) pero se extienden por toda la profundidad del volumen.
Para las entradas a la CNN, la profundidad es el número de canales en la imagen (es decir, una profundidad de tres cuando se trabaja con imágenes RGB, una para cada canal). Para volúmenes más profundos en la red, la profundidad será el número de filtros aplicados en la capa anterior.
Para aclarar más este concepto, consideremos el paso hacia adelante de una CNN, donde convolucionamos cada uno de los filtros K a través del ancho y alto del volumen de entrada, tal como lo hicimos en la Sección 11.1.5 anterior. Más simplemente, podemos pensar en cada uno de nuestros núcleos K deslizándose a través de la región de entrada, calculando una multiplicación de elementos, sumando y luego almacenando el valor de salida en un mapa de activación bidimensional, como en la Figura 11.6.
Después de aplicar todos los filtros K al volumen de entrada, ahora tenemos K, mapas de activación bidimensionales. Luego, apilamos nuestros mapas de activación K a lo largo de la dimensión de profundidad de nuestra matriz para formar el volumen de salida final (Figura 11.7).
Cada entrada en el volumen de salida es, por lo tanto, una salida de una neurona que "mira" solo a una pequeña región de la entrada. De esta manera, la red "aprende" los filtros que se activan cuando ven un tipo específico de función en una ubicación espacial dada en el volumen de entrada. En las capas más bajas de la red, los filtros pueden activarse cuando ven regiones de borde o de esquina. Luego, en las capas más profundas de la red, los filtros pueden activarse en presencia de características de alto nivel, como partes de la cara, la pata de un perro, el capó de un automóvil, etc. Este concepto de activación se remonta a nuestra analogía de la red neuronal en el Capítulo 10: estas neuronas se están "excitando" y "activando" cuando ven un patrón particular en una imagen de entrada.
El concepto de convolucionar un pequeño filtro con un gran volumen de entrada (r) tiene un significado especial en las redes neuronales convolucionales, en concreto, la conectividad local y el campo receptivo de una neurona. Cuando se trabaja con imágenes, a menudo no es práctico conectar las neuronas en el volumen actual a todas las neuronas en el volumen anterior; simplemente hay demasiadas conexiones y demasiados pesos, lo que hace imposible entrenar redes profundas en imágenes con grandes dimensiones espaciales. En su lugar, cuando se utilizan CNNs, elegimos conectar cada neurona solo a una región local del volumen de entrada; llamamos al tamaño de esta región local "el campo receptivo" (o simplemente, la variable F) de la neurona.
Para aclarar este punto, volvamos a nuestro conjunto de datos CIFAR-10 donde el volumen de entrada tiene un tamaño de entrada de 32 × 32 × 3. Por lo tanto, cada imagen tiene un ancho de 32 píxeles, una altura de 32 píxeles y una profundidad de 3 (una para cada canal RGB). Si nuestro campo receptivo es de tamaño 3 × 3, entonces cada neurona en la capa CONV se conectará a una región local 3 × 3 de la imagen para un total de 3 × 3 × 3 = 27 pesos (recuerde, la profundidad de los filtros es tres porque se extienden a través de la profundidad completa de la imagen de entrada, en este caso, tres canales).
Ahora, supongamos que las dimensiones espaciales de nuestro volumen de entrada se han reducido a un tamaño más pequeño, pero nuestra profundidad ahora es más grande, debido a que utilizamos más filtros más profundos en la red, de modo que el tamaño del volumen ahora es de 16 × 16 × 94. Nuevamente, si asumimos un campo receptivo de tamaño 3 × 3, entonces cada neurona en la capa CONV tendrá un total de 3 × 3 × 94 = 846 conexiones al volumen de entrada. En pocas palabras, el campo receptivo F es el tamaño del filtro, produciendo un núcleo F × F que está convuelto con el volumen de entrada.
En este punto, hemos explicado la conectividad de las neuronas en el volumen de entrada, pero no la disposición o el tamaño del volumen de salida. Hay tres parámetros que controlan el tamaño de un volumen de salida: la profundidad (depth), la zancada/paso (stride) y el tamaño de relleno cero (zero-padding size), cada uno de los cuales revisaremos a continuación.
Depth
La profundidad de un volumen de salida controla el número de neuronas (i.e es decir, filtros) en la capa CONV que se conectan a una región local del volumen de entrada. Cada filtro produce un mapa de activación que se "activa" en presencia de bordes orientados o manchas o color. Para una capa CONV dada, la profundidad del mapa de activación será K, o simplemente el número de filtros que estamos aprendiendo en la capa actual. El conjunto de filtros que están "observando" la misma ubicación
(x, y) de la entrada se denomina columna de profundidad.
(x, y) de la entrada se denomina columna de profundidad.
Stride
Considere la Figura 11.1 anteriormente en este capítulo, donde describimos la operación de convolución como "deslizando" una pequeña matriz a través de una matriz grande, deteniéndonos en cada coordenada, calculando una multiplicación y suma de elementos, y luego almacenando la salida. Esta descripción es similar a una ventana deslizante (http://pyimg.co/0yizo) que se desliza de izquierda a derecha y de arriba a abajo a través de una imagen. En el contexto de la Sección 11.1.5 sobre la convolución anterior, solo dimos un paso de un píxel a cada parte superior. En el contexto de las CNN, se puede aplicar el mismo principio: para cada paso, creamos una nueva columna de profundidad alrededor de la región local de la imagen donde convertimos cada uno de los filtros K con la región y almacenamos la salida en un volumen 3D. Al crear nuestras capas CONV, normalmente utilizamos un tamaño de paso S de S = 1 o S = 2.
Los avances más pequeños conducirán a la superposición de campos receptivos y volúmenes de salida más grandes. A la inversa, los avances más grandes darán como resultado campos receptivos menos superpuestos y volúmenes de salida más pequeños. Para hacer que el concepto de paso convolucional sea más concreto, considere la Tabla 11.1, donde tenemos una imagen de entrada de 5 × 5 (izquierda) junto con un núcleo de Laplaciano de 3 × 3 (derecha). Usando S = 1, nuestro núcleo se desliza de izquierda a derecha y de arriba a abajo, un píxel a la vez, produciendo la siguiente salida (Figura 11.2, izquierda). Sin embargo, si tuviéramos que aplicar la misma operación, solo
esta vez con un paso de S = 2, saltamos dos píxeles a la vez (dos píxeles a lo largo del eje x y dos píxeles a lo largo del eje y), produciendo un volumen de salida más pequeño (derecha). Por lo tanto, podemos ver cómo se pueden usar las capas de convolución para reducir las dimensiones espaciales de los volúmenes de entrada simplemente cambiando el paso del núcleo. Como veremos más adelante en esta sección, las capas convolucionales y las capas de agrupación son los métodos principales para reducir el tamaño de la entrada espacial. La sección de capas de agrupación también proporcionará un ejemplo más visual de cómo varían los tamaños de paso afectarán el tamaño de salida.
Zero-padding
Como sabemos por la Sección 11.1.5, necesitamos "rellenar" los bordes de una imagen para conservar el tamaño de la imagen original al aplicar una convolución; lo mismo es cierto para los filtros dentro de una CNN. Usando el relleno cero, podemos "rellenar" nuestra entrada a lo largo de los bordes de modo que nuestro tamaño de volumen de salida coincida con nuestro tamaño de volumen de entrada. La cantidad de relleno que aplicamos está controlada por el parámetro P. Esta técnica es especialmente crítica cuando se empieza a mirar desde la arquitectura CNN y se aplican varios filtros CONV uno encima del otro. Para visualizar el relleno cero, nuevamente consulte la Tabla 11.1 donde aplicamos un kernel laplaciano de 3 × 3 a una imagen de entrada de 5 × 5 con un paso de S = 1. Podemos ver en la Tabla 11.3 (izquierda) cómo es más pequeño el volumen de salida (3 × 3) que el volumen de entrada (5 × 5) debido a la naturaleza de la operación de convolución.
Si, en cambio, configuramos P = 1, podemos rellenar nuestro volumen de entrada con ceros (centro) para crear un volumen de 7 × 7 y luego aplicar la operación de convolución, lo que lleva a un tamaño de volumen de salida que coincide con el tamaño del volumen de entrada original de 5 × 5. (Correcto).
Sin el relleno a cero, las dimensiones espaciales del volumen de entrada disminuirían demasiado rápido, y no podríamos entrenar redes profundas (ya que los volúmenes de entrada serían demasiado pequeños para aprender cualquier patrón útil).
Colocando todos los parámetros en conjunto, nosotras somos el tamaño del volumen del volumen de entrada (W, suponiendo que las imágenes de entrada son cuadradas, que casi siempre lo son), el tamaño del campo receptivo F, la zancada/(el paso) S y la cantidad de relleno de cero P. Para construir una capa CONV válida , tenemos que asegurarnos de que la siguiente ecuación es un número entero:
Si no es un número entero, entonces las zancadas/pasos se configuran incorrectamente y las neuronas no se pueden agrupar de manera que encajen en el volumen de entrada de forma simétrica.
Como ejemplo, considere la primera capa de la arquitectura AlexNet que ganó el desafío de clasificación de ImageNet 2012 y es enormemente responsable del auge actual del aprendizaje profundo aplicado a la clasificación de imágenes. Dentro de su papel, Krizhevsky et al. [94] documentaron su arquitectura CNN de acuerdo con la Figura 11.8.
Observe cómo la primera capa afirma que el tamaño de la imagen de entrada es de 224 × 224 píxeles. Sin embargo, esto posiblemente no sea correcto si aplicamos nuestra ecuación anterior con 11 × 11 filtros, un paso de cuatro y sin relleno:
Lo que ciertamente no es un número entero.
Para los lectores novatos que recién comienzan con el aprendizaje profundo y las CNN, este pequeño error en un artículo tan fundamental ha causado innumerables errores de confusión y frustración. Se desconoce por qué ocurrió este error tipográfico, pero es probable que Krizhevsky et al. Utilizó imágenes de entrada de 227 × 227, ya que:
Errores como estos son más comunes de lo que piensa, por lo que al implementar CNN desde publicaciones, asegúrese de verificar los parámetros usted mismo en lugar de simplemente suponer que los parámetros enumerados son correctos. Debido a la gran cantidad de parámetros en una CNN, es bastante fácil cometer un error tipográfico al documentar una arquitectura (yo mismo lo he hecho muchas veces).
Para resumir, la capa CONV de la misma forma elegante que Karpathy [121]
Capas de activacion Activation Layers
Después de cada capa CONV en una CNN, aplicamos una función de activación no lineal, como ReLU, ELU o cualquiera de las otras variantes Leaky ReLU que se mencionan en el Capítulo 10. Por lo general, las capas de activación se denominan RELU en los diagramas de red, ya que las activaciones ReLU son las más comunes. de uso común, también podemos simplemente indicar ACT; en cualquier caso, estamos dejando claro que se está aplicando una función de activación dentro de la arquitectura de la red.
Las capas de activación no son técnicamente "capas" (debido al hecho de que no se aprenden parámetros/pesos dentro de una capa de activación) y, a veces, se omiten de los diagramas de arquitectura de la red, ya que se supone que una activación sigue inmediatamente a una convolución.
En este caso, los autores de publicaciones mencionarán qué función de activación están utilizando después de cada capa CONV en algún lugar de su documento. Como ejemplo, considere la siguiente arquitectura de red: ENTRADA => CONV => RELU => FC.
Para hacer este diagrama más conciso, simplemente podríamos eliminar el componente RELU, ya que se supone que una activación siempre sigue una convolución: ENTRADA => CONV => FC. Personalmente no me gusta esto y elijo incluir explícitamente la capa de activación en un diagrama de red para aclarar cuándo y qué función de activación estoy aplicando en la red.
Una capa de activación acepta un volumen de entrada de tamaño
y luego aplica la función de activación dada (Figura 11.9). Dado que la función de activación se aplica de manera elemental, la salida de una capa de activación es siempre la misma que la dimensión de entrada
Capas de agrupación (Pooling Layers)
Hay dos métodos para reducir el tamaño de un volumen de entrada: las capas CONV con un paso (stride) > 1 (que ya hemos visto) y las capas POOL. Es común insertar capas de POOL entre consecutivas
Capas CONV en arquitecturas CNN: ENTRADA => CONV => RELU => POOL => CONV => RELU => POOL => FC La función principal de la capa POOL es reducir progresivamente el tamaño espacial (es decir, ancho y alto) del volumen de entrada. Hacer esto nos permite reducir la cantidad de parámetros y el cálculo en la red; la agrupación también nos ayuda a controlar el ajuste.
Las capas de la POOL operan en cada uno de los segmentos de profundidad de una entrada independientemente usando la función máxima o promedio. La agrupación máxima se realiza normalmente en el centro de la arquitectura CNN para reducir el tamaño espacial, mientras que la agrupación promedio se usa normalmente como la capa final de la red (por ejemplo, GoogLeNet, SqueezeNet, ResNet) donde deseamos evitar el uso de capas FC por completo. El tipo más común de capa POOL es la agrupación máxima, aunque esta tendencia está cambiando con la introducción de micro-arquitecturas más exóticas.
Normalmente usaremos un tamaño de grupo de 2 × 2, aunque las CNN más profundas que usan imágenes de entrada más grandes (> 200 píxeles) pueden usar un tamaño de grupo de 3 × 3 al principio de la arquitectura de red. También comúnmente establecemos el paso en S = 1 o S = 2. La Figura 11.10 (inspirada por Karpathy et al. [121]) sigue un ejemplo de aplicación de agrupación máxima con un tamaño de grupo de 2 × 2 y un paso de S = 1 Tenga en cuenta que por cada bloque de 2 × 2, mantenemos solo el valor más grande, realizamos un solo paso (como una ventana deslizante) y aplicamos la operación nuevamente, lo que produce un volumen de salida de 3 × 3.
Podemos disminuir aún más el tamaño de nuestro volumen de salida aumentando la paso (stride); aquí aplicamos S = 2 a la misma entrada (Figura 11.10, abajo). Por cada bloque de 2 × 2 en la entrada, mantenemos solo el valor más grande, luego damos un paso de dos píxeles y aplicamos la operación nuevamente. Esta combinación nos permite reducir el ancho y la altura en un factor de dos, descartando efectivamente el 75% de las activaciones de la capa anterior.
En la práctica, tendemos a ver dos tipos de variaciones máximas de agrupación:
- Tipo # 1: F = 3, S = 2 que se llama agrupación superpuesta y normalmente se aplica a imágenes / volúmenes de entrada con grandes dimensiones espaciales
- Tipo # 2: F = 2, S = 2 que se denomina agrupación no superpuesta. Este es el tipo más común de agrupación y se aplica a imágenes con dimensiones espaciales más pequeñas. Para las arquitecturas de red que aceptan imágenes de entrada más pequeñas (en el rango de 32 a 64 píxeles) también puede ver F = 2, S = 1 y x también.
To POOL or CONV?
En el artículo de 2014, Striving for Simplicity: The Convolutional Net, Springenberg et al. [122] recomienda descartar la capa de la POOL por completo y simplemente confiar en las capas de CONV con un paso más grande para manejar el muestreo de las dimensiones espaciales del volumen. Su trabajo demostró que este enfoque funciona muy bien en una variedad de conjuntos de datos, incluyendo CIFAR-10 (imágenes pequeñas, bajo número de clases) e ImageNet (imágenes de entrada grandes, 1,000 clases). Esta tendencia continúa con la arquitectura ResNet [96], que también utiliza capas CONV para reducir el muestreo.
Cada vez es más común no usar capas de POOL en el centro de la arquitectura de la red y solo usar la agrupación promedio al final de la red si se deben evitar las capas de FC. Quizás en el futuro no se acumulen capas en las redes neuronales convolucionales, pero mientras tanto, es importante que las estudiemos, aprendamos cómo funcionan y las aplicamos a nuestras propias arquitecturas.
Capas completamente conectadas (Fully-connected Layers)
Las neuronas en capas FC están completamente conectadas a todas las activaciones en la capa anterior, como lo es el estándar para redes neuronales feedforward que hemos analizado en el Capítulo 10. Capas FC siempre se colocan al final de la red (es decir, no aplicamos una capa CONV, luego una capa FC, seguida de otra capa CONV). Es común usar una o dos capas FC antes de aplicar el clasificador softmax, como lo demuestra la siguiente arquitectura (simplificada):
Aquí aplicamos dos capas totalmente conectadas antes de nuestro clasificador softmax (implícito) que computará nuestras probabilidades de salida final para cada clase.
Normalización de lotes (Batch Normalization)
Presentado por primera vez por Ioffe y Szgedy en su artículo de 2015, Normalización de lotes: acelerando el entrenamiento en red profundo mediante la reducción del cambio de covariante interno [123], las capas de normalización de lotes (o BN para abreviar), como su nombre indica, se utilizan para normalizar las activaciones de volumen de entrada dado antes de pasarlo a la siguiente capa en la red.
Si consideramos que x es nuestro mini-lote de activaciones, entonces podemos calcular el
normalizado a través de la siguiente ecuación:
Durante el entrenamiento, calculamos µβ y σβ sobre cada mini-batch β, donde:
Establecemos ε igual a un valor positivo pequeño como 1e-7 para evitar tomar la raíz cuadrada de cero. La aplicación de esta ecuación implica que las activaciones que salen de una capa de normalización de lotes tendrán una variación de media y unidad aproximadamente cero (es decir, centradas en cero).
En el momento de la prueba, reemplazamos los mini-batch µβ y σβ con promedios de ejecución de µβ y σβ calculados durante el proceso de entrenamiento. Esto garantiza que podamos pasar imágenes a través de nuestra red y aún así realizar predicciones precisas sin ser parcializadas por el µβ y el ββ del último lote final que pasa a través de la red en el momento del entrenamiento.
Se ha demostrado que la normalización de lotes es extremadamente efectiva para reducir el número de épocas que se necesitan para entrenar una red neuronal. La normalización de lotes también tiene el beneficio adicional de ayudar a "estabilizar" el entrenamiento, permitiendo una gran variedad de tasas de aprendizaje y de regularización. El uso de la normalización por lotes no alivia la necesidad de ajustar estos parámetros, por supuesto, pero hará su vida más fácil al hacer que la tasa de aprendizaje y la regularización sean menos volátiles y más sencillas de ajustar. También tenderá a notar una pérdida fi nal más baja y una curva de pérdida más estable cuando utilice la normalización por lotes en sus redes.
El mayor inconveniente de la normalización de lotes es que, de hecho, puede ralentizar el tiempo que lleva la pared para capacitar a su red (aunque necesitará menos épocas para obtener una precisión razonable) en 2-3 veces debido al cálculo de estadísticas por lote y normalización.
Dicho esto, recomiendo el uso de la normalización de lotes en casi todas las situaciones, ya que hace una diferencia significativa. Como veremos más adelante en este libro, aplicar la normalización de lotes a nuestras arquitecturas de red puede ayudarnos a evitar el exceso de ajuste y nos permite obtener una precisión de clasificación significativamente mayor en menos épocas en comparación con la misma arquitectura de red sin la normalización de lotes.
Entonces, ¿a dónde van las capas de normalización de lotes?
Probablemente haya notado en mi discusión sobre la normalización de lotes que he dejado exactamente en qué lugar de la arquitectura de red colocamos la capa de normalización de lotes Según el documento original de Ioffe y Szegedy [123], colocaron su normalización de lotes (BN) antes de la activación:
Sin embargo, esta visión de la normalización de lotes no tiene sentido desde un punto de vista estadístico. En este contexto, una capa BN está normalizando la distribución de características que salen de una capa CONV. Algunas de estas características pueden ser negativas, en las cuales se sujetarán (es decir, se establecerán a cero) mediante una función de activación no lineal como ReLU.
Si normalizamos antes de la activación, esencialmente estamos incluyendo los valores negativos dentro de la normalización. Nuestras características centradas en cero se pasan luego a través de la ReLU, donde eliminamos cualquier activación menor que cero (que incluye características que pueden no haber sido negativas antes de la normalización): este orden de capas anula completamente el propósito de aplicar la normalización de lotes en primer lugar. .
En cambio, si colocamos la normalización de lotes después de la ReLU, normalizaremos las características de valor positivo sin desviarlas estadísticamente con características que de otra manera no hubieran llegado a la siguiente capa CONV. De hecho, François Chollet, el creador y mantenedor de Keras, confirma este punto al afirmar que el BN debe venir después de la activación:
Colocar el BN después de la activación en una arquitectura de red se vería así:
Abandonar/Abandono (Dropout)
El último tipo de capa que vamos a discutir es el abandono. La deserción es en realidad una forma de regularización que tiene como objetivo ayudar a prevenir el exceso de ajuste al aumentar la precisión de las pruebas, quizás a expensas de la precisión del entrenamiento. Para cada mini-lote en nuestro conjunto de entrenamiento, las capas omitidas, con probabilidad p, desconectan aleatoriamente las entradas de la capa anterior a la siguiente capa en la arquitectura de la red.
La Figura 11.11 visualiza este concepto donde desconectamos aleatoriamente con probabilidad
p = 0.5 las conexiones entre dos capas FC para un mini lote dado. Nuevamente, observe cómo se corta la mitad de las conexiones para este mini lote. Una vez que se calculan los pases hacia adelante y hacia atrás para la minibatch, volvemos a conectar las conexiones perdidas y luego tomamos muestras de otro conjunto de conexiones para soltar.
La razón por la que aplicamos la deserción es reducir el exceso de ajuste al modificar explícitamente la arquitectura de la red en el momento de la capacitación. Las conexiones que se caen al azar aseguran que ningún nodo en la red sea responsable
de "activar" cuando se le presente un patrón determinado. En cambio, el abandono garantiza que haya varios nodos redundantes que se activarán cuando se presenten entradas similares, lo que a su vez ayuda a que nuestro modelo se generalice.
Es más común colocar capas abandonadas con p = 0.5 en-entre capas FC de una arquitectura donde se supone que la capa FC final es nuestro clasificador de softmax:
Sin embargo, como analizo en la Sección 11.3.2, también podemos aplicar el abandono con probabilidades más pequeñas (es decir, p = 0.10−0.25) en las capas anteriores de la red también (normalmente después de una operación de reducción de muestreo, ya sea a través de la agrupación máxima o la convolución) .
Arquitecturas comunes y patrones de entrenamiento (Common Architectures and Training Patterns)
Como hemos visto a lo largo de este capítulo, las redes neuronales convolucionales se componen de cuatro capas principales: CONV, POOL, RELU y FC. Tomar estas capas y apilarlas juntas en un patrón particular produce una arquitectura CNN.
Las capas CONV y FC (y BN) son las únicas capas de la red que realmente aprenden parámetros; las otras capas son simplemente responsables de realizar una operación determinada. Las capas de activación (ACT), como RELU y el abandono no son técnicamente capas, pero a menudo se incluyen en los diagramas de la arquitectura CNN para aclarar explícitamente el orden de operación. También adoptaremos la misma convención en esta sección.
Patrones de capa (Layer Patterns)
Por mucho, la forma más común de la arquitectura CNN es apilar algunas capas CONV y RELU, siguiéndolas con una operación POOL. Repetimos esta secuencia hasta que el ancho y la altura del volumen son pequeños, en cuyo punto aplicamos una o más capas FC. Por lo tanto, podemos derivar (we can drive) la arquitectura CNN más común utilizando el siguiente patrón [121]:
Aquí el operador * implica uno o más y el ? Indica una operación opcional. Las opciones comunes para cada reputación incluyen:
Reglas de juego (Rules of Thumb) ¿reglas de oro? google-translate
En esta sección, revisaré las reglas de oro comunes cuando construya sus propias CNN. Para empezar, las imágenes presentadas a la inputlayer deben ser cuadradas. El uso de entradas cuadradas nos permite aprovechar las bibliotecas de optimización de álgebra lineal. Los tamaños de capa de entrada comunes incluyen 32 × 32, 64×64, 96×96, 224×224, 227×227 y 229×229 (omitiendo el número de canales para conveniencia de notación).
En segundo lugar, la capa de entrada también debe ser divisible dos veces después de que se aplique la primera operación CONV. Puede hacer esto ajustando el tamaño de su filtro y el paso. La regla "divisible por dos" permite que las entradas espaciales en nuestra red se muestren convenientemente a la baja de la operación de la POOL de una manera eficiente.
En general, las capas CONV deben usar tamaños de filtro más pequeños, como 3 × 3 y 5 × 5. Los
filtros Tiny 1 × 1 se usan para aprender características locales, pero solo en sus arquitecturas de red más avanzadas. Los tamaños de filtro más grandes, como 7 × 7 y 11 × 11, se pueden usar como la primera capa CONV en la red (para reducir el tamaño de la entrada espacial, siempre que sus imágenes sean suficientemente mayores que > 200 × 200 píxeles); sin embargo, después de esta capa CONV inicial, el tamaño del filtro debería disminuir drásticamente, de lo contrario, reducirá las dimensiones espaciales de su volumen demasiado rápido.
También usará comúnmente un paso de S = 1 para las capas CONV, al menos para volúmenes de entrada espacial más pequeños (redes que aceptan volúmenes de entrada más grandes que usan un paso S> = 2 en la primera capa CONV). El uso de un paso de S = 1 permite que nuestras capas CONV aprendan los filtros mientras que la capa POOL es responsable de reducir el muestreo. Sin embargo, tenga en cuenta que no todas las arquitecturas de red siguen este patrón: algunas arquitecturas omiten la agrupación máxima y confían en el paso CONV para reducir el tamaño del volumen.
Mi preferencia personal es aplicar un relleno cero a mis capas CONV para asegurar que el tamaño de la dimensión de salida coincida con el tamaño de la dimensión de entrada; la única excepción a esta regla es si quiero reducir deliberadamente las dimensiones espaciales a través de la convolución. La aplicación de relleno cero al apilar varias capas CONV una encima de la otra también ha demostrado aumentar la precisión de la clasificación en la práctica. Como veremos más adelante en este libro, las bibliotecas como Keras pueden calcular automáticamente el relleno cero para usted, haciendo que sea aún más fácil construir arquitecturas CNN.
Una segunda recomendación personal es usar capas POOL (en lugar de capas CONV) para reducir las dimensiones espaciales de su entrada, al menos hasta que tenga más experiencia en la construcción de sus propias arquitecturas de CNN. Una vez que llegue a ese punto, debe comenzar a experimentar con el uso de capas CONV para reducir el tamaño de la entrada espacial y tratar de eliminar las capas de agrupación máximas de su arquitectura. Lo más común es que vea la combinación máxima aplicada sobre un tamaño de campo receptivo de 2 × 2 y un paso de S = 2. También puede ver un campo receptivo de 3 × 3 al principio de la arquitectura de red para ayudar a reducir el tamaño de la imagen. Es muy poco frecuente ver campos receptivos mayores de tres, ya que estas operaciones son muy destructivas para sus entradas.
La normalización de lotes es una operación costosa que puede duplicar o triplicar la cantidad de tiempo que se tarda en capacitar a su CNN; sin embargo, recomiendo usar BN en casi todas las situaciones. Si bien el BN en realidad ralentiza el tiempo de entrenamiento, también tiende a "estabilizar" el entrenamiento, lo que facilita el ajuste de otros hiperparámetros (hay algunas excepciones, por supuesto, detallo algunas de estas "arquitecturas de excepción" dentro del paquete ImageNet) .
Presentado por primera vez por Ioffe y Szgedy en su artículo de 2015, Normalización de lotes: acelerando el entrenamiento en red profundo mediante la reducción del cambio de covariante interno [123], las capas de normalización de lotes (o BN para abreviar), como su nombre indica, se utilizan para normalizar las activaciones de volumen de entrada dado antes de pasarlo a la siguiente capa en la red.
Si consideramos que x es nuestro mini-lote de activaciones, entonces podemos calcular el
normalizado a través de la siguiente ecuación:
Durante el entrenamiento, calculamos µβ y σβ sobre cada mini-batch β, donde:
Establecemos ε igual a un valor positivo pequeño como 1e-7 para evitar tomar la raíz cuadrada de cero. La aplicación de esta ecuación implica que las activaciones que salen de una capa de normalización de lotes tendrán una variación de media y unidad aproximadamente cero (es decir, centradas en cero).
En el momento de la prueba, reemplazamos los mini-batch µβ y σβ con promedios de ejecución de µβ y σβ calculados durante el proceso de entrenamiento. Esto garantiza que podamos pasar imágenes a través de nuestra red y aún así realizar predicciones precisas sin ser parcializadas por el µβ y el ββ del último lote final que pasa a través de la red en el momento del entrenamiento.
Se ha demostrado que la normalización de lotes es extremadamente efectiva para reducir el número de épocas que se necesitan para entrenar una red neuronal. La normalización de lotes también tiene el beneficio adicional de ayudar a "estabilizar" el entrenamiento, permitiendo una gran variedad de tasas de aprendizaje y de regularización. El uso de la normalización por lotes no alivia la necesidad de ajustar estos parámetros, por supuesto, pero hará su vida más fácil al hacer que la tasa de aprendizaje y la regularización sean menos volátiles y más sencillas de ajustar. También tenderá a notar una pérdida fi nal más baja y una curva de pérdida más estable cuando utilice la normalización por lotes en sus redes.
El mayor inconveniente de la normalización de lotes es que, de hecho, puede ralentizar el tiempo que lleva la pared para capacitar a su red (aunque necesitará menos épocas para obtener una precisión razonable) en 2-3 veces debido al cálculo de estadísticas por lote y normalización.
Dicho esto, recomiendo el uso de la normalización de lotes en casi todas las situaciones, ya que hace una diferencia significativa. Como veremos más adelante en este libro, aplicar la normalización de lotes a nuestras arquitecturas de red puede ayudarnos a evitar el exceso de ajuste y nos permite obtener una precisión de clasificación significativamente mayor en menos épocas en comparación con la misma arquitectura de red sin la normalización de lotes.
Entonces, ¿a dónde van las capas de normalización de lotes?
Probablemente haya notado en mi discusión sobre la normalización de lotes que he dejado exactamente en qué lugar de la arquitectura de red colocamos la capa de normalización de lotes Según el documento original de Ioffe y Szegedy [123], colocaron su normalización de lotes (BN) antes de la activación:
"Agregamos la transformada BN inmediatamente antes de la no linealidad, al normalizar x = Wu + b".Usando este esquema, una arquitectura de red que utiliza la normalización por lotes se vería así:
Sin embargo, esta visión de la normalización de lotes no tiene sentido desde un punto de vista estadístico. En este contexto, una capa BN está normalizando la distribución de características que salen de una capa CONV. Algunas de estas características pueden ser negativas, en las cuales se sujetarán (es decir, se establecerán a cero) mediante una función de activación no lineal como ReLU.
Si normalizamos antes de la activación, esencialmente estamos incluyendo los valores negativos dentro de la normalización. Nuestras características centradas en cero se pasan luego a través de la ReLU, donde eliminamos cualquier activación menor que cero (que incluye características que pueden no haber sido negativas antes de la normalización): este orden de capas anula completamente el propósito de aplicar la normalización de lotes en primer lugar. .
En cambio, si colocamos la normalización de lotes después de la ReLU, normalizaremos las características de valor positivo sin desviarlas estadísticamente con características que de otra manera no hubieran llegado a la siguiente capa CONV. De hecho, François Chollet, el creador y mantenedor de Keras, confirma este punto al afirmar que el BN debe venir después de la activación:
"Puedo garantizar que el código reciente escrito por Christian [Szegedy, del artículo de BN] se aplica antes que BN. Sin embargo, todavía es ocasionalmente un tema de debate". [124]No está claro por qué Ioffe y Szegedy sugirieron colocar la capa BN antes de la activación en su documento, pero experimentos adicionales [125] así como pruebas anecdóticas de otros investigadores de aprendizaje profundo [126] confirman que la colocación de la capa de normalización por lotes después de la activación no lineal produce Mayor precisión y menor pérdida en casi todas las situaciones.
Colocar el BN después de la activación en una arquitectura de red se vería así:
Puedo con fi rmar que en casi todos los experimentos que he realizado con CNN, la colocación de la BN después de la RELU produce una precisión ligeramente mayor y una menor pérdida. Dicho esto, tome nota de la palabra "casi": aquí se ha producido un pequeño número de situaciones en las que se colocó el BN antes de que la activación funcionara mejor, lo que implica que debería colocar el BN después de la activación, pero es posible que desee dedicar (a lo sumo) un experimento para colocar el BN antes de la activación y observar el resultados Después de ejecutar algunos de estos experimentos, rápidamente se dará cuenta de que BN después de la activación funciona mejor y hay parámetros más importantes en su red para sintonizar y obtener una mayor precisión de clasificación. Discuto esto con más detalle en la Sección 11.3.2 más adelante en este capítulo.
Abandonar/Abandono (Dropout)
El último tipo de capa que vamos a discutir es el abandono. La deserción es en realidad una forma de regularización que tiene como objetivo ayudar a prevenir el exceso de ajuste al aumentar la precisión de las pruebas, quizás a expensas de la precisión del entrenamiento. Para cada mini-lote en nuestro conjunto de entrenamiento, las capas omitidas, con probabilidad p, desconectan aleatoriamente las entradas de la capa anterior a la siguiente capa en la arquitectura de la red.
La Figura 11.11 visualiza este concepto donde desconectamos aleatoriamente con probabilidad
p = 0.5 las conexiones entre dos capas FC para un mini lote dado. Nuevamente, observe cómo se corta la mitad de las conexiones para este mini lote. Una vez que se calculan los pases hacia adelante y hacia atrás para la minibatch, volvemos a conectar las conexiones perdidas y luego tomamos muestras de otro conjunto de conexiones para soltar.
La razón por la que aplicamos la deserción es reducir el exceso de ajuste al modificar explícitamente la arquitectura de la red en el momento de la capacitación. Las conexiones que se caen al azar aseguran que ningún nodo en la red sea responsable
de "activar" cuando se le presente un patrón determinado. En cambio, el abandono garantiza que haya varios nodos redundantes que se activarán cuando se presenten entradas similares, lo que a su vez ayuda a que nuestro modelo se generalice.
Es más común colocar capas abandonadas con p = 0.5 en-entre capas FC de una arquitectura donde se supone que la capa FC final es nuestro clasificador de softmax:
Sin embargo, como analizo en la Sección 11.3.2, también podemos aplicar el abandono con probabilidades más pequeñas (es decir, p = 0.10−0.25) en las capas anteriores de la red también (normalmente después de una operación de reducción de muestreo, ya sea a través de la agrupación máxima o la convolución) .
Arquitecturas comunes y patrones de entrenamiento (Common Architectures and Training Patterns)
Como hemos visto a lo largo de este capítulo, las redes neuronales convolucionales se componen de cuatro capas principales: CONV, POOL, RELU y FC. Tomar estas capas y apilarlas juntas en un patrón particular produce una arquitectura CNN.
Las capas CONV y FC (y BN) son las únicas capas de la red que realmente aprenden parámetros; las otras capas son simplemente responsables de realizar una operación determinada. Las capas de activación (ACT), como RELU y el abandono no son técnicamente capas, pero a menudo se incluyen en los diagramas de la arquitectura CNN para aclarar explícitamente el orden de operación. También adoptaremos la misma convención en esta sección.
Patrones de capa (Layer Patterns)
Por mucho, la forma más común de la arquitectura CNN es apilar algunas capas CONV y RELU, siguiéndolas con una operación POOL. Repetimos esta secuencia hasta que el ancho y la altura del volumen son pequeños, en cuyo punto aplicamos una o más capas FC. Por lo tanto, podemos derivar (we can drive) la arquitectura CNN más común utilizando el siguiente patrón [121]:
Aquí el operador * implica uno o más y el ? Indica una operación opcional. Las opciones comunes para cada reputación incluyen:
- 0 <= N <= 3
- M >= 0
- 0 <= K <= 2
A continuación podemos ver algunos ejemplos de arquitecturas CNN que siguen este patrón:
Aquí hay un ejemplo de una CNN muy superficial con una sola capa CONV (N = M = K = 0) que revisaremos en el Capítulo 12:
A continuación se muestra un ejemplo de una arquitectura CNN similar a AlexNet [94] que tiene varios conjuntos de capas CONV => RELU => POOL, seguidos de capas FC:
Para arquitecturas de red, como VGGNet [95], apilaremos dos (o más) capas antes de cada capa de la POOL:
En general, aplicamos arquitecturas de red más profundas cuando (1) tenemos muchos datos de entrenamiento etiquetados y (2) el problema de clasificación es suficientemente desafiante. Apilar varias capas CONV antes de aplicar una capa POOL permite que las capas CONV desarrollen características más complejas antes de que se realice la operación de agrupación destructiva.
Como descubriremos en el paquete ImageNet de este libro, existen arquitecturas de red más "exóticas" que se desvían de estos patrones y, a su vez, han creado patrones propios. Algunas arquitecturas eliminan la operación POOL en forma absoluta, confiando en CONVERSIÓN en el modo de juego y en el volumen del volumen, luego, al final de la red, se aplica el agrupamiento promedio en lugar de las capas FC para obtener la entrada para los clasificadores de softmax.
Las arquitecturas de red como GoogLeNet, ResNet y SqueezeNet [96, 97, 127] son excelentes ejemplos de este patrón y demuestran cómo la eliminación de las capas de FC permite menos parámetros y un tiempo de entrenamiento más rápido.
Estos tipos de arquitecturas de red también "apilan" ("stack") y concatenan los filtros a través de la dimensión del canal: GoogLeNet aplica filtros de 1 × 1, 3 × 3 y 5 × 5 y luego los concatena a través de la dimensión del canal para aprender características de varios niveles. Nuevamente, estas arquitecturas se consideran más "exóticas" y se consideran técnicas avanzadas.
Si está interesado en estas arquitecturas CNN más avanzadas, consulte el paquete ImageNet; de lo contrario, querrás seguir con los patrones básicos de apilamiento de capas hasta que aprendas los fundamentos del aprendizaje profundo.
Reglas de juego (Rules of Thumb) ¿reglas de oro? google-translate
En esta sección, revisaré las reglas de oro comunes cuando construya sus propias CNN. Para empezar, las imágenes presentadas a la inputlayer deben ser cuadradas. El uso de entradas cuadradas nos permite aprovechar las bibliotecas de optimización de álgebra lineal. Los tamaños de capa de entrada comunes incluyen 32 × 32, 64×64, 96×96, 224×224, 227×227 y 229×229 (omitiendo el número de canales para conveniencia de notación).
En segundo lugar, la capa de entrada también debe ser divisible dos veces después de que se aplique la primera operación CONV. Puede hacer esto ajustando el tamaño de su filtro y el paso. La regla "divisible por dos" permite que las entradas espaciales en nuestra red se muestren convenientemente a la baja de la operación de la POOL de una manera eficiente.
En general, las capas CONV deben usar tamaños de filtro más pequeños, como 3 × 3 y 5 × 5. Los
filtros Tiny 1 × 1 se usan para aprender características locales, pero solo en sus arquitecturas de red más avanzadas. Los tamaños de filtro más grandes, como 7 × 7 y 11 × 11, se pueden usar como la primera capa CONV en la red (para reducir el tamaño de la entrada espacial, siempre que sus imágenes sean suficientemente mayores que > 200 × 200 píxeles); sin embargo, después de esta capa CONV inicial, el tamaño del filtro debería disminuir drásticamente, de lo contrario, reducirá las dimensiones espaciales de su volumen demasiado rápido.
También usará comúnmente un paso de S = 1 para las capas CONV, al menos para volúmenes de entrada espacial más pequeños (redes que aceptan volúmenes de entrada más grandes que usan un paso S> = 2 en la primera capa CONV). El uso de un paso de S = 1 permite que nuestras capas CONV aprendan los filtros mientras que la capa POOL es responsable de reducir el muestreo. Sin embargo, tenga en cuenta que no todas las arquitecturas de red siguen este patrón: algunas arquitecturas omiten la agrupación máxima y confían en el paso CONV para reducir el tamaño del volumen.
Mi preferencia personal es aplicar un relleno cero a mis capas CONV para asegurar que el tamaño de la dimensión de salida coincida con el tamaño de la dimensión de entrada; la única excepción a esta regla es si quiero reducir deliberadamente las dimensiones espaciales a través de la convolución. La aplicación de relleno cero al apilar varias capas CONV una encima de la otra también ha demostrado aumentar la precisión de la clasificación en la práctica. Como veremos más adelante en este libro, las bibliotecas como Keras pueden calcular automáticamente el relleno cero para usted, haciendo que sea aún más fácil construir arquitecturas CNN.
Una segunda recomendación personal es usar capas POOL (en lugar de capas CONV) para reducir las dimensiones espaciales de su entrada, al menos hasta que tenga más experiencia en la construcción de sus propias arquitecturas de CNN. Una vez que llegue a ese punto, debe comenzar a experimentar con el uso de capas CONV para reducir el tamaño de la entrada espacial y tratar de eliminar las capas de agrupación máximas de su arquitectura. Lo más común es que vea la combinación máxima aplicada sobre un tamaño de campo receptivo de 2 × 2 y un paso de S = 2. También puede ver un campo receptivo de 3 × 3 al principio de la arquitectura de red para ayudar a reducir el tamaño de la imagen. Es muy poco frecuente ver campos receptivos mayores de tres, ya que estas operaciones son muy destructivas para sus entradas.
La normalización de lotes es una operación costosa que puede duplicar o triplicar la cantidad de tiempo que se tarda en capacitar a su CNN; sin embargo, recomiendo usar BN en casi todas las situaciones. Si bien el BN en realidad ralentiza el tiempo de entrenamiento, también tiende a "estabilizar" el entrenamiento, lo que facilita el ajuste de otros hiperparámetros (hay algunas excepciones, por supuesto, detallo algunas de estas "arquitecturas de excepción" dentro del paquete ImageNet) .
También coloco la normalización de lotes después de la activación, ya que se ha convertido en un lugar común en la comunidad de aprendizaje profundo, aunque va en contra del documento original de Ioffe y Szegedy [123].
Al insertar BN en las arquitecturas de capas comunes anteriores, se convierten en:
No aplica la normalización por lotes antes del clasificador softmax, ya que en este punto asumimos que nuestra red ha aprendido sus características discriminatorias anteriormente en la arquitectura.
El abandono (DO) se suele aplicar entre capas FC con una probabilidad de abandono del 50%. Debería considerar aplicar el abandono en casi todas las arquitecturas que construya. Aunque no siempre se realiza, también me gusta incluir capas de deserción (con una probabilidad muy pequeña, 10-25%) entre las capas POOL y CONV. Debido a la conectividad local de las capas CONV, la deserción es menos efectiva aquí, pero a menudo me resulta útil cuando se lucha contra el ajuste.
Al tener en cuenta estas reglas básicas, podrá reducir sus dolores de cabeza al construir arquitecturas CNN, ya que sus capas CONV conservarán los tamaños de entrada, mientras que las capas POOL se encargarán de reducir las dimensiones espaciales de los volúmenes, lo que finalmente llevará a las capas FC y Las clasificaciones finales de salida.
Una vez que domine este método "tradicional" de construcción de redes neuronales convolucionales, debe comenzar a explorar las operaciones de agrupación máxima y utilizar solo las capas CONV para reducir las dimensiones espaciales, lo que eventualmente llevará a una agrupación promedio en lugar de una capa FC. Técnicas avanzadas de arquitectura están cubiertas dentro del paquete ImageNet.
¿Son las CNN invariantes a la traducción, rotación y escalado?
(¿Are CNNs Invariant to Translation, Rotation, and Scaling?)
Una pregunta común que me hacen es:
Figura 11.12: CNN en su conjunto aprende filtros que se encenderán cuando un patrón se presente en una orientación particular. A la izquierda, el dígito 9 ha sido girado≈10°. Esta rotación es similar al nodo tres, que ha aprendido cómo se ve el dígito 9 cuando se gira de esta manera. Este nodo tendrá una activación más alta que otros nodos, por lo que la operación de agrupación combinada lo detectará. En la noche, tenemos un segundo ejemplo, solo que esta vez el 9 ha sido rotado≈ − 45°, lo que hace que el primer nodo tenga la activación más alta (Figura fuertemente inspirada por Goodfellow et al. [10]).
Sin embargo, una CNN en su conjunto puede aprender filtros que se disparan cuando un patrón se presenta en una orientación particular. Por ejemplo, considere la Figura 11.12, adaptada e inspirada de Deep Learning por Goodfellow et al. [10].
Aquí vemos el dígito "9" (parte inferior) presentado a la CNN junto con un conjunto de filtros que la CNN ha aprendido (centro). Dado que hay un filtro dentro de la CNN que ha "aprendido" cómo se ve un "9", girado 10 grados, dispara y emite una fuerte activación. Esta gran activación se captura durante la etapa de agrupación y, en última instancia, se informa como la clasificación final.
Lo mismo es cierto para el segundo ejemplo (Figura 11.12, izquierda). Aquí vemos el "9" girado por −45 grados, y como hay un filtro en la CNN que ha aprendido cómo se ve un "9" cuando se gira por −45 grados, la neurona se activa y dispara. Nuevamente, estos mismos filtros no son invariantes de rotación, es solo que la CNN ha aprendido cómo se ve un “9” bajo las pequeñas rotaciones que existen en el conjunto de entrenamiento.
A menos que sus datos de entrenamiento incluyan dígitos girados en todo el espectro de 360 grados, su CNN no es realmente invariante en rotación (nuevamente, este punto se demuestra en el Capítulo 12 del Paquete de ImageNet).
Lo mismo puede decirse acerca de la escala - los filtros en sí mismos no son invariantes de escala, pero es muy probable que su CNN haya aprendido un conjunto de filtros que se disparan cuando existen patrones en diferentes situaciones. También podemos "ayudar" a nuestras CNN a ser invariantes en escala presentándoles nuestra imagen de ejemplo en el momento de las pruebas en diferentes escalas y cultivos, y luego promediando los resultados juntos (consulte el Capítulo 10 del Paquete de profesionales para obtener más detalles sobre el promedio de cultivos para aumentar la clasificación). exactitud).
Traduccion de la Invariancia: Sin embargo, es algo que un CNN sobresale en. Tenga en cuenta que un filtro se desliza de izquierda a derecha y de arriba a abajo a través de una entrada, y se activará cuando se encuentre con una región, una esquina o una mancha de color en particular como un borde. Durante la operación de agrupación, esta gran respuesta se encuentra y, por lo tanto, "supera" a todos sus vecinos al tener una activación más grande. Por lo tanto, las CNN se pueden ver como "no preocuparse" exactamente cuando se enciende una activación, simplemente que se dispara y, de esta manera, naturalmente manejamos la traducción dentro de una CNN.
Resumen
En este capítulo hicimos un recorrido por los conceptos de redes neuronales convolucionales (CNN). Comenzamos discutiendo qué son la convolución y la correlación cruzada y cómo los términos se usan indistintamente en la literatura de aprendizaje profundo.
Para entender la convolución a un nivel más íntimo, lo implementamos a mano usando Python y OpenCV. Sin embargo, las operaciones de procesamiento de imágenes tradicionales requieren que definamos a mano nuestros núcleos y son específicos para una tarea de procesamiento de imágenes determinada (por ejemplo, suavizado, detección de bordes, etc.). Usando el aprendizaje profundo, podemos aprender estos tipos de filtros que luego se apilan uno encima del otro para descubrir automáticamente conceptos de alto nivel. Llamamos a este apilamiento y aprendizaje de características de nivel superior basadas en entradas de nivel inferior la composición de redes neuronales convolucionales.
Las CNN se crean apilando una secuencia de capas donde cada capa es responsable de una tarea determinada. Las capas CONV aprenderán un conjunto de K fi ltros convolucionales, cada uno de los cuales es de tamaño F × F píxeles. Luego aplicamos capas de activación sobre las capas CONV para obtener una transformación no lineal. Las capas POOL ayudan a reducir las dimensiones espaciales del volumen de entrada a medida que fluye a través de la red. Una vez que el volumen de entrada es lo suficientemente pequeño, podemos aplicar capas FC, que son nuestras capas tradicionales de productos de puntos del Capítulo 12, y finalmente alimentar un clasificador de softmax para nuestras predicciones finales de salida.
Las capas de normalización de lotes se utilizan para estandarizar las entradas a un CONV o capa de activación al calcular la media y la desviación estándar a través de un mini-lote. Luego, se puede aplicar una capa de exclusión para desconectar aleatoriamente los nodos de una entrada dada a una salida, lo que ayuda a reducir el exceso de ajuste. Finalmente, terminamos el capítulo revisando las arquitecturas CNN comunes que puede usar para implementar sus propias redes. En nuestro próximo capítulo, implementaremos su primera CNN en Keras, ShallowNet, en base a los patrones de capas que mencionamos anteriormente. Los capítulos futuros analizarán arquitecturas de red más profundas, como la arquitectura de LeNet seminal [19] y las variantes de la arquitectura VGGNet [95].
Al insertar BN en las arquitecturas de capas comunes anteriores, se convierten en:
No aplica la normalización por lotes antes del clasificador softmax, ya que en este punto asumimos que nuestra red ha aprendido sus características discriminatorias anteriormente en la arquitectura.
El abandono (DO) se suele aplicar entre capas FC con una probabilidad de abandono del 50%. Debería considerar aplicar el abandono en casi todas las arquitecturas que construya. Aunque no siempre se realiza, también me gusta incluir capas de deserción (con una probabilidad muy pequeña, 10-25%) entre las capas POOL y CONV. Debido a la conectividad local de las capas CONV, la deserción es menos efectiva aquí, pero a menudo me resulta útil cuando se lucha contra el ajuste.
Al tener en cuenta estas reglas básicas, podrá reducir sus dolores de cabeza al construir arquitecturas CNN, ya que sus capas CONV conservarán los tamaños de entrada, mientras que las capas POOL se encargarán de reducir las dimensiones espaciales de los volúmenes, lo que finalmente llevará a las capas FC y Las clasificaciones finales de salida.
Una vez que domine este método "tradicional" de construcción de redes neuronales convolucionales, debe comenzar a explorar las operaciones de agrupación máxima y utilizar solo las capas CONV para reducir las dimensiones espaciales, lo que eventualmente llevará a una agrupación promedio en lugar de una capa FC. Técnicas avanzadas de arquitectura están cubiertas dentro del paquete ImageNet.
¿Son las CNN invariantes a la traducción, rotación y escalado?
(¿Are CNNs Invariant to Translation, Rotation, and Scaling?)
Una pregunta común que me hacen es:
“¿Las redes neuronales convolucionales son invariables a los cambios en la traslación, la rotación y la escala? ¿Es por eso que son tan poderosos clasificadores de imagen?"Para responder a esta pregunta, primero debemos discriminar entre los filtros individuales en la red junto con la red capacitada final. Los filtros individuales en una CNN no son invariables a los cambios en la forma en que se gira una imagen. Esto se demuestra en el Capítulo 12 de ImageNet Bundle, donde usamos las características extraídas de una CNN para determinar cómo se orienta una imagen.
Figura 11.12: CNN en su conjunto aprende filtros que se encenderán cuando un patrón se presente en una orientación particular. A la izquierda, el dígito 9 ha sido girado≈10°. Esta rotación es similar al nodo tres, que ha aprendido cómo se ve el dígito 9 cuando se gira de esta manera. Este nodo tendrá una activación más alta que otros nodos, por lo que la operación de agrupación combinada lo detectará. En la noche, tenemos un segundo ejemplo, solo que esta vez el 9 ha sido rotado≈ − 45°, lo que hace que el primer nodo tenga la activación más alta (Figura fuertemente inspirada por Goodfellow et al. [10]).
Sin embargo, una CNN en su conjunto puede aprender filtros que se disparan cuando un patrón se presenta en una orientación particular. Por ejemplo, considere la Figura 11.12, adaptada e inspirada de Deep Learning por Goodfellow et al. [10].
Aquí vemos el dígito "9" (parte inferior) presentado a la CNN junto con un conjunto de filtros que la CNN ha aprendido (centro). Dado que hay un filtro dentro de la CNN que ha "aprendido" cómo se ve un "9", girado 10 grados, dispara y emite una fuerte activación. Esta gran activación se captura durante la etapa de agrupación y, en última instancia, se informa como la clasificación final.
Lo mismo es cierto para el segundo ejemplo (Figura 11.12, izquierda). Aquí vemos el "9" girado por −45 grados, y como hay un filtro en la CNN que ha aprendido cómo se ve un "9" cuando se gira por −45 grados, la neurona se activa y dispara. Nuevamente, estos mismos filtros no son invariantes de rotación, es solo que la CNN ha aprendido cómo se ve un “9” bajo las pequeñas rotaciones que existen en el conjunto de entrenamiento.
A menos que sus datos de entrenamiento incluyan dígitos girados en todo el espectro de 360 grados, su CNN no es realmente invariante en rotación (nuevamente, este punto se demuestra en el Capítulo 12 del Paquete de ImageNet).
Lo mismo puede decirse acerca de la escala - los filtros en sí mismos no son invariantes de escala, pero es muy probable que su CNN haya aprendido un conjunto de filtros que se disparan cuando existen patrones en diferentes situaciones. También podemos "ayudar" a nuestras CNN a ser invariantes en escala presentándoles nuestra imagen de ejemplo en el momento de las pruebas en diferentes escalas y cultivos, y luego promediando los resultados juntos (consulte el Capítulo 10 del Paquete de profesionales para obtener más detalles sobre el promedio de cultivos para aumentar la clasificación). exactitud).
Traduccion de la Invariancia: Sin embargo, es algo que un CNN sobresale en. Tenga en cuenta que un filtro se desliza de izquierda a derecha y de arriba a abajo a través de una entrada, y se activará cuando se encuentre con una región, una esquina o una mancha de color en particular como un borde. Durante la operación de agrupación, esta gran respuesta se encuentra y, por lo tanto, "supera" a todos sus vecinos al tener una activación más grande. Por lo tanto, las CNN se pueden ver como "no preocuparse" exactamente cuando se enciende una activación, simplemente que se dispara y, de esta manera, naturalmente manejamos la traducción dentro de una CNN.
Resumen
En este capítulo hicimos un recorrido por los conceptos de redes neuronales convolucionales (CNN). Comenzamos discutiendo qué son la convolución y la correlación cruzada y cómo los términos se usan indistintamente en la literatura de aprendizaje profundo.
Para entender la convolución a un nivel más íntimo, lo implementamos a mano usando Python y OpenCV. Sin embargo, las operaciones de procesamiento de imágenes tradicionales requieren que definamos a mano nuestros núcleos y son específicos para una tarea de procesamiento de imágenes determinada (por ejemplo, suavizado, detección de bordes, etc.). Usando el aprendizaje profundo, podemos aprender estos tipos de filtros que luego se apilan uno encima del otro para descubrir automáticamente conceptos de alto nivel. Llamamos a este apilamiento y aprendizaje de características de nivel superior basadas en entradas de nivel inferior la composición de redes neuronales convolucionales.
Las CNN se crean apilando una secuencia de capas donde cada capa es responsable de una tarea determinada. Las capas CONV aprenderán un conjunto de K fi ltros convolucionales, cada uno de los cuales es de tamaño F × F píxeles. Luego aplicamos capas de activación sobre las capas CONV para obtener una transformación no lineal. Las capas POOL ayudan a reducir las dimensiones espaciales del volumen de entrada a medida que fluye a través de la red. Una vez que el volumen de entrada es lo suficientemente pequeño, podemos aplicar capas FC, que son nuestras capas tradicionales de productos de puntos del Capítulo 12, y finalmente alimentar un clasificador de softmax para nuestras predicciones finales de salida.
Las capas de normalización de lotes se utilizan para estandarizar las entradas a un CONV o capa de activación al calcular la media y la desviación estándar a través de un mini-lote. Luego, se puede aplicar una capa de exclusión para desconectar aleatoriamente los nodos de una entrada dada a una salida, lo que ayuda a reducir el exceso de ajuste. Finalmente, terminamos el capítulo revisando las arquitecturas CNN comunes que puede usar para implementar sus propias redes. En nuestro próximo capítulo, implementaremos su primera CNN en Keras, ShallowNet, en base a los patrones de capas que mencionamos anteriormente. Los capítulos futuros analizarán arquitecturas de red más profundas, como la arquitectura de LeNet seminal [19] y las variantes de la arquitectura VGGNet [95].
Comentarios
Publicar un comentario