¿Cómo funciona el aprendizaje residual profundo?

La red Deep Residual Learning es una red muy intrigante que fue desarrollada por investigadores de Microsoft Research. Los resultados son bastante impresionantes ya que recibió el primer lugar en la clasificación de imágenes ILSVRC 2015. La red que usaron tenía 152 capas, una impresionante 8 veces más profunda que una red VGG comparable. Esta es una instantánea del documento: http://arxiv.org/pdf/1512.03385v… que compara su red con una red de convolución VGG de construcción similar:

Sin embargo, la afirmación de Jurgen Schmidhuber es que es lo mismo que un LSTM sin puertas. (ver: Microsoft gana ImageNet 2015 a través de Feedforward LSTM sin puertas). Lo que parece exacto si observa cómo se ve un nodo LSTM:

En otras palabras, las entradas de una capa inferior se ponen a disposición de un nodo en una capa superior. La diferencia, por supuesto, es que la Red residual de Microsoft cuando se aplica a las tareas de clasificación de imágenes emplea capas de procesamiento de convolución en su construcción. El grupo de investigación de Schmidhuber ha publicado los resultados de “Highway Networks”: http://arxiv.org/pdf/1507.06228v… con profundidades de hasta 100 capas.

Sin embargo, a pesar de las similitudes entre LSTM y Highway Networks con Residual Network, los resultados son bastante impresionantes, ya que muestra resultados de vanguardia para una red neuronal muy profunda de 152 capas. Un artículo reciente del Instituto de Ciencias Weizmann http://arxiv.org/pdf/1512.03965…. tiene una prueba matemática que revela la utilidad de tener redes más profundas que la de redes más anchas. La implicación de estos tres resultados es que el progreso futuro de Deep Learning conducirá al desarrollo de redes aún más profundas.

GoogleNet de Google tiene 22 capas, esto se publicó a fines de 2014. Dos generaciones más tarde, Google mencionó su red Inception 7 que tenía más de 50 capas.

En todas las redes de Residual, Carretera e Inicio, notará que las mismas entradas viajan a través de caminos y diferentes números de capas.

La tendencia es bastante clara. Las redes neuronales más profundas no solo son más precisas, sino que además requieren menos pesos.

Actualización : Dos artículos recientes han demostrado que (1) las redes residuales son equivalentes a RNN y (2) las redes residuales actúan más como conjuntos en varias capas.

Tratemos de construir una red neuronal impulsada por dos principios:

1) Modularidad: queremos crear una red pequeña que podamos repetir para aumentar la profundidad de la red. En otras palabras, construiremos una red más profunda simplemente repitiendo este módulo, es decir, la red más pequeña. Este módulo será una cuestión de investigación, pero nuestro objetivo es agregar profundidad a la red simplemente repitiendo este módulo.

2) Aprendizaje residual: supongamos que tiene una red hasta una profundidad de N capas. Solo desea agregar una nueva capa si obtiene algo adicional al agregar esa capa.

Una manera de garantizar que esta nueva capa (N + 1) aprenda algo nuevo sobre su red es también proporcionar la entrada ( x ) sin ninguna transformación a la salida de la capa (N + 1) . Esto esencialmente conduce a la nueva capa a aprender algo diferente de lo que la entrada ya ha codificado. La otra ventaja es que tales conexiones ayudan a manejar el problema del gradiente de fuga en redes muy profundas.

Dada suficiente memoria, nada impide que las personas agreguen más capas a su red neuronal. Pero quedan dos preguntas: 1) ¿Agregar capas adicionales nos ayudará a resolver nuestro problema? 2) ¿Podemos seguir capacitando a la red de manera efectiva? Al usar los dos principios anteriores, ahora se pueden construir redes de cualquier profundidad y tener la expectativa de que la profundidad adicional realmente lo ayude a aprender algo nuevo sobre los datos.


[1512.03385] Aprendizaje residual profundo para el reconocimiento de imágenes

MSRA: aprendizaje residual profundo

De acuerdo con mi intuición de https://arxiv.org/pdf/1512.03385

el residual [1] se ha definido como I (x) = H (x) – F (x)

donde I (x) es un mapeo de identidad que es I (x) = x, H (x) el mapeo deseado, F (x) el mapeo de las capas de red donde se puede lograr de acuerdo con sus entradas.

H (x) = F (x) + I (x) es nuestro objetivo y solo F (x) cambia cada vez asumiendo que H (x) e I (x) son constantes.

En lugar de aprender F (x) en una red profunda simple que puede tener problemas de degradación, es útil que el modelo dé resultados precisos. I (x) agrega las deficiencias en F (x) en cada conexión de omisión si es menor que H (x) y la absorción de todos los errores en F (x) es mayor que H (x).

Por lo tanto, no hay ningún daño en profundizar su red porque eventualmente su mapeo sería la mejor posible.

Por favor, siéntase libre de corregirme. Sigue aprendiendo en el aprendizaje profundo.

Notas al pie

[1] Residual (análisis numérico) – Wikipedia

Entiendo que el aprendizaje residual significa que cada capa subsiguiente en una red neuronal profunda solo es responsable de, en efecto, ajustar la salida de una capa anterior simplemente agregando un “residual” aprendido a la entrada. Esto difiere de un enfoque más tradicional en el que cada capa tenía que generar todo el resultado deseado.

Un bloque de construcción residual, como lo describen Kaiming He, Xiangyu Zhang, Shaoqing Ren y Jian Sun, se ve así:

Lo que sucede es que la capa [matemática] F (x) + x [/ matemática] está agregando, por elementos, la entrada [matemática] x [/ matemática] a la [matemática] F (x) [/ matemática] capa. Aquí, [matemática] F (x) [/ matemática] es el residuo.

La afirmación del documento es que estos son más fáciles de optimizar y más precisos, al menos en los conjuntos de datos probados.

Fuente: [1512.03385] Aprendizaje residual profundo para el reconocimiento de imágenes

De acuerdo con Skylar Payne y Dan Sack.

Es difícil saber la profundidad deseada de una red profunda. Si las capas son demasiado profundas, es difícil propagar los errores correctamente. Si las capas son demasiado estrechas, es posible que no aprendamos suficiente poder de representación.

Sin embargo, en una red residual profunda, es seguro entrenar capas muy profundas para obtener suficiente poder de aprendizaje sin preocuparse demasiado por el problema de degradación, porque en el peor de los casos, los bloques en esas “capas innecesarias” pueden aprender a ser una identidad mapeo y no dañar el rendimiento. Esto se logra al resolver los pesos de conducción de las capas ReLu cerca de ceros, por lo que solo la conexión de acceso directo está activa y actúa como un mapeo de identidad. Aunque no se ha demostrado teóricamente, ajustar los pesos cercanos a los ceros podría ser una tarea más fácil para el solucionador que ajustar los pesos a una representación efectiva de una vez.

Los autores observan empíricamente (Fig. 7) que ResNet tiene una magnitud menor de respuestas de capa en promedio que las redes simples, lo que sugiere que muchos bloques solo están aprendiendo poca información incremental.

Para concluir, la idea central de ResNet es proporcionar una conexión de acceso directo entre capas, lo que hace que sea seguro entrenar redes muy profundas para obtener el máximo poder de representación sin preocuparse por el problema de degradación, es decir, las dificultades de aprendizaje introducidas por las capas profundas.

Toda mi respuesta se basa en la observación empírica y la intuición. Me gustaría saber más teorías detrás de ResNet.

Como saben, usamos ANN para aproximar algunos mapeos [matemática] H (x) [/ matemática]. La idea detrás es encontrar no un mapeo arbitrario [matemática] H (x) [/ matemática] sino una que tenga alguna forma específica de residual (diferencia) [matemática] H (x) – x. [/ Matemática] Realmente queremos saber cómo cambió la entrada en lugar de la salida en sí.

Hasta donde sé, no tiene ninguna explicación matemática por qué esto funciona mejor, pero existe la intuición / hipótesis de que el mapeo residual es fácil de optimizar. Por ejemplo, si sucediera que [math] H (x) [/ math] se supone que es un mapeo de identidad, podría ser fácil ajustarlo.

Me parece que el problema es que es difícil encontrar el ancho óptimo de las capas. Claro, sabemos que profundizar es mejor, pero, si nuestras capas son demasiado anchas, aprendemos información extraña que agrega ruido a nuestro modelo. Si nuestras capas son demasiado estrechas, las capas posteriores pueden no tener mucho de qué aprender. Necesitamos que nuestras capas tengan exactamente el tamaño correcto para extraer la información que necesitan. Esta es la razón por la cual los mecanismos de atención en LSTM funcionan tan bien: permiten que la red regrese a un momento anterior para recoger información que de otro modo podría haberse olvidado.

Siento que las redes residuales son una forma de resolver este problema, ya que siguen volviendo a introducir la entrada. Hace que sea más difícil “perder” (por falta de una palabra mejor) su entrada.

Lo que no entiendo es que las redes residuales parecen restringir la transformación de un bloque para que sea equivalente a un sesgo (restringido). Supongo que con capas convolucionales y dependiendo del tamaño / cantidad de convoluciones y el tamaño de la imagen, puede obtener un sesgo barato (en términos de número de parámetros) a través de convoluciones. Pero, ¿podría esta técnica aplicarse en redes totalmente conectadas? Me imagino que en ese punto, reemplazar el bloque con un vector de sesgo sin restricciones funcionaría mucho mejor (menos parámetros pero con más estados únicos).

Supongo que funciona bien porque el sesgo al que se puede reducir este bloque está restringido a ser una versión filtrada de la imagen esencialmente (tiene una no linealidad además de eso, pero no pensemos demasiado en eso). Digamos que aprende un detector de bordes, por ejemplo. Al agregarlo nuevamente, ha acentuado las características de la imagen que los filtros aprendieron a ser importantes. Ahora los bloques posteriores pueden aprender filtros que tienen en cuenta tanto la imagen como los bordes (con suerte) fácilmente. Sin embargo, al agregarlo de nuevo de esa manera, la señal de la imagen se ha confundido (¿podría ser necesario aprender otro detector de bordes?).

Tengo la sospecha de que estas restricciones están haciendo que cada capa / bloque aprenda menos que una red simple, pero al tener un número abrumador de ellas, la red puede aprender mejor en general.