¿Cuáles son los beneficios de convertir una capa totalmente conectada en una red neuronal profunda a una capa convolucional equivalente?

Le permiten tratar la red neuronal convolucional como un filtro gigante. Luego puede aplicar espacialmente la red neuronal como una convolución a imágenes más grandes que el tamaño original de la imagen de entrenamiento, obteniendo una salida espacialmente densa.

Supongamos que entrena una red neuronal (con alguna función de pérdida) con una capa convolucional (3 x 3, zancada de 2), una capa de agrupación (3 x 3, zancada de 2) y una capa completamente conectada con 10 unidades, usando 25 x 25 imágenes. Tenga en cuenta que el tamaño del campo receptivo de cada unidad de agrupación máxima es de 7 x 7, por lo que la salida de agrupación es de 5 x 5. Puede convertir la capa totalmente conectada a un conjunto de 10 filtros convolucionales de 5 x 5 (zancadas de unidad). Si hace eso, toda la red se puede tratar como un filtro con un tamaño de campo receptivo de 35 x 35 y una zancada de 4. Luego puede tomar esa red y aplicarla a una imagen de 50 x 50, y obtendría un 3 x Salida de 3 x 10 espacialmente densa.

Hay varios usos:

  1. Desea tomar un modelo previamente entrenado como AlexNet / Caffenet y usarlo para imágenes de más de 227 x 227.
  2. Desea realizar un entrenamiento / inferencia en forma de parche (entrenar / correr la red en diferentes parches en la imagen) de manera más eficiente. Alimentar toda la imagen en una red completamente convolucional (FCN) y leer lo que desea saber de la salida espacialmente densa es más eficiente que cortar cada parche por separado y alimentarlos uno por uno en una red normal.

La técnica se utilizó en 2015 para lograr resultados de vanguardia en la segmentación semántica [1]. En ese documento, lo usaron porque desea predicciones por píxel, por lo que es ventajoso tener una salida espacialmente densa.

Notas al pie

[1] [1411.4038] Redes totalmente convolucionales para la segmentación semántica

Imagine que entrenó a la red neuronal de clasificación utilizando imágenes de tamaño 100 × 100. Después de aplicar una serie de convoluciones y agrupaciones, su ‘imagen’ se ha convertido en un tamaño de 5 × 5 (excluyamos la profundidad por el momento). Esta ‘imagen’ se conecta con 100 unidades completamente conectadas, y finalmente esas unidades se conectan con 10 unidades de salida. Esta es la forma estándar de hacer CNN.

Ahora, qué pasaría si durante el tiempo de inferencia tuviera una imagen de tamaño 200 × 200. Lo pones en la red y, después de todas las convoluciones y agrupaciones, la imagen tiene un tamaño de 10 × 10. Intenta conectarlo con las capas completamente conectadas, y vaya, los tamaños no coinciden. Por lo general, la solución más fácil es recortar cada imagen en 100 × 100 al principio.

Pero por alguna razón, no quieres hacer eso. Tal vez tus imágenes son mucho más grandes, que recortarlas hace que no se vean tan bien. Entonces hay múltiples soluciones a su problema:

  1. Considere todos los parches 100 * 100 en su imagen. Hay 10201 de ellos. Aliméntelos a su CNN, obtenga un puntaje para cada uno de ellos, promedie los resultados para el puntaje final. Esto funciona, pero es extremadamente lento. En lugar de clasificar una imagen, está clasificando imágenes 10201. ¿Cuál es la imagen de entrada es más grande (digamos 1000 * 1000)? Luego tiene 811801 posibles parches y debe clasificarlos todos. ¿Ves el problema?
  2. Convierta todas las capas completamente conectadas en capas convolucionales. En nuestro ejemplo, esto se puede hacer en lugar de utilizar las primeras capas completamente conectadas de tamaño 100, aplicando 100 filtros convolucionales de tamaño 5 × 5. La salida de eso será una ‘imagen’ de tamaño 1x1x100. Luego, para la siguiente capa, en lugar de conectarla completamente, aplica 10 filtros de tamaño 1 × 1, obteniendo una salida de tamaño 1x1x10. Entonces, el resultado final es el mismo que si hubiera usado capas completamente conectadas, y el número de parámetros es el mismo.

A continuación (2), qué sucede si durante la inferencia, tiene una imagen de tamaño 100 × 100. Obtiene exactamente los mismos resultados, como lo hizo antes. Ahora, imagine el segundo caso, cuando tenía una imagen de tamaño 200 × 200. Después de aplicar las circunvoluciones y la agrupación, su imagen se ha transformado en 10 × 10. Ahora, aplica sobre ella, la primera capa convolucional nueva, y obtiene una salida de 6 x 6 x 100 (sin relleno aquí, por lo que solo hay posibilidades de 6 × 6 para convolucionar un mapa de características de 10 × 10). Después de esto, aplica el segundo filtro nuevo y obtiene una salida de 6x6x10. Entonces, en lugar de tener 10 puntajes, tiene 6x6x10 puntajes. Los promedias en 10 puntajes y obtienes el resultado final. Y lo bueno es que este enfoque es totalmente escalable y funciona para cualquier forma de entrada (siempre que sea al menos tan grande como las imágenes en las que entrenó la red).

Además, este enfoque se puede utilizar (con algunas modificaciones) para clasificar parches de imágenes. Cada uno de esos puntajes de 6 × 6 se basó totalmente en solo parches locales de imágenes, y sus puntajes fueron para esos parches. De esta manera, puede clasificar cada parche de la imagen aproximadamente al mismo tiempo que necesita clasificar toda la imagen. Yendo un poco más loco (usando convoluciones transpuestas), en realidad puedes clasificar cada píxel en tu imagen usando este enfoque.

No está exactamente relacionado, pero también es posible deshacerse de la agrupación. La forma de hacerlo es simplemente eliminando capas de agrupación con convoluciones con zancada 2. Si aplica funciones de activación, esto puede interpretarse como aprender la agrupación, en lugar de arreglarla.

Quizás la pregunta no sea muy clara porque es muy poco probable que la capa convolucional sea equivalente a la capa completamente conectada.

Una ventaja de reemplazar una capa totalmente conectada con una capa convolucional es que el número de parámetros para ajustar se reduce debido al hecho de que los pesos se comparten en una capa convolucional.

Esto significa un aprendizaje más rápido y robusto. Además, la agrupación máxima se puede usar justo después de una capa convolucional para reducir la dimensionalidad de la capa.

Esto significa una mayor robustez de las distorsiones en los estímulos de entrada y un mejor rendimiento general.

EDITAR: La pregunta es clara ahora, me parece que esto es para procesar imágenes grandes de manera eficiente. La salida de los DNN con las capas FC es siempre una clase 1x1x, esto significaría que si se procesa una imagen de entrada grande, entonces el DNN completo tendría que escanearse sobre la imagen grande, esto no es eficiente ya que hay muchas operaciones repetidas , por lo tanto, si las capas FC se convierten en sus capas Conv equivalentes, entonces solo un solo pase hacia adelante es suficiente. Esto produce un volumen nxmxclasses como salida.

Espero que esto ayude.

La respuesta de Matthew es bastante correcta. Sin embargo, no creo que puedan ser equivalentes cuando se produce el aprendizaje. Después de todo, cuando ocurre el aprendizaje, la capa convolucional tendrá pesos vinculados, mientras que la capa completamente conectada no tendrá nada de eso. Entonces no puedo ver cómo pueden ser equivalentes.

Si es equivalente, obviamente no hay beneficio. No serían equivalentes si se comportan de manera diferente.