Un bloque de cuello de botella es un bloque residual especializado utilizado en redes neuronales profundas, particularmente en la arquitectura ResNet. Fue introducido en 2015 por investigadores de Microsoft Research (incluyendo a Kaiming He, Xiangyu Zhang, Shaoqing Ren y Jian Sun) para el reconocimiento de imágenes, y la red resultante ganó el desafío ImageNet Large Scale Visual Recognition Challenge (ILSVRC) de ese año. El bloque está diseñado para reducir el costo computacional mientras mantiene el poder representativo, lo que hace posible entrenar redes muy profundas con cientos de capas.
El bloque de cuello de botella es un refinamiento del bloque residual estándar. En un bloque residual estándar, la función \(F(x)\) es típicamente una pila de dos o tres capas convolucionales. El bloque de cuello de botella reemplaza esto con una pila de tres capas: una convolución 1x1 que reduce la dimensión de canales, una convolución 3x3 que opera sobre la dimensión reducida, y otra convolución 1x1 que restaura la dimensión de canales original. Este diseño reduce el número de parámetros y operaciones de punto flotante (FLOPs) en comparación con usar dos convoluciones 3x3 directamente, mientras preserva la capacidad de aprender características complejas.
Arquitectura
Un bloque de cuello de botella consta de tres capas convolucionales. La primera capa es una convolución 1x1 que reduce el número de canales por un factor (típicamente 4). Por ejemplo, si la entrada tiene 256 canales, la primera convolución 1x1 la reduce a 64 canales. La segunda capa es una convolución 3x3 que opera sobre estos 64 canales, realizando extracción de características espaciales. La tercera capa es otra convolución 1x1 que aumenta el número de canales de vuelta a 256. La entrada al bloque se suma a la salida mediante una conexión residual, que es un mapeo de identidad que evita las capas convolucionales.
La conexión residual se define como \(y = F(x) + x\), donde \(F(x)\) es la salida de la pila de tres capas. Esta suma es posible porque la entrada y la salida tienen las mismas dimensiones. Si las dimensiones de entrada y salida difieren (por ejemplo, cuando el bloque cambia el número de canales), se usa una conexión de proyección: \(y = F(x) + P(x)\), donde \(P(x)\) es típicamente una convolución 1x1 con un paso de 2 para igualar las dimensiones espaciales.
El bloque de cuello de botella se usa en ResNet-50, ResNet-101 y ResNet-152, que son variantes más profundas de la ResNet-34 original. En estas redes, el bloque de cuello de botella reemplaza los bloques residuales de dos capas utilizados en versiones menos profundas. La reducción en cómputo permite que la red tenga más capas sin un aumento proporcional en el tiempo de entrenamiento o el uso de memoria.
Motivación
La motivación principal para el bloque de cuello de botella es la eficiencia computacional. En un bloque residual estándar con dos convoluciones 3x3, el número de parámetros para un número de canales de entrada dado \(C\) es \(2 \times 9 \times C^2 = 18C^2\). En un bloque de cuello de botella, el número de parámetros es \(1 \times 1 \times C \times (C/4) + 3 \times 3 \times (C/4) \times (C/4) + 1 \times 1 \times (C/4) \times C = C^2/4 + 9C^2/16 + C^2/4 = (8/16 + 9/16)C^2 = 17C^2/16\), que es aproximadamente 1.06C^2, o alrededor del 6% de los parámetros del bloque estándar. Esta reducción es significativa para números de canales grandes.
El diseño de cuello de botella también ayuda con la estabilidad del entrenamiento. Al reducir el número de parámetros, el bloque reduce el riesgo de sobreajuste y permite redes más profundas. La conexión residual, que es un componente clave del bloque, ayuda a mitigar el problema del gradiente que desaparece, permitiendo el entrenamiento efectivo de redes con cientos de capas.
Relación con las Redes Residuales
El bloque de cuello de botella es una implementación específica del concepto de bloque residual. La conexión residual fue introducida en el artículo original de ResNet, que mostró que agregar mapeos de identidad a las capas de una red permite el entrenamiento de redes muy profundas. El bloque de cuello de botella es una optimización de esta idea, haciendo práctico entrenar redes con 50, 101 o 152 capas.
En una red residual, las capas aprenden funciones residuales con referencia a las entradas de las capas. El bloque de cuello de botella sigue este principio: las tres capas convolucionales aprenden un residual \(F(x)\), y la salida es \(F(x) + x\). Esto permite que la red aprenda mapeos de identidad si es necesario, lo cual es beneficioso para la optimización.
El éxito del bloque de cuello de botella en ResNet influyó en muchas arquitecturas posteriores. Por ejemplo, U-Net usa conexiones residuales en su estructura de codificador-decodificador, y los modelos Transformer usan conexiones residuales en sus capas de atención y de avance. El concepto de cuello de botella también se ha adaptado en otros dominios, como modelos de lenguaje grandes y modelos de IA generativa.
Eficiencia Computacional
La eficiencia computacional del bloque de cuello de botella se mide en términos de FLOPs (operaciones de punto flotante). Para un tensor de entrada de tamaño \(H \times W \times C\), un bloque residual estándar con dos convoluciones 3x3 requiere aproximadamente \(2 \times 9 \times C^2 \times H \times W\) FLOPs. Un bloque de cuello de botella con un factor de reducción de 4 requiere aproximadamente \(1 \times 1 \times C \times (C/4) \times H \times W + 3 \times 3 \times (C/4) \times (C/4) \times H \times W + 1 \times 1 \times (C/4) \times C \times H \times W = (C^2/4 + 9C^2/16 + C^2/4) \times H \times W = (17C^2/16) \times H \times W\). Esto es alrededor del 6% de los FLOPs del bloque estándar.
Esta reducción es particularmente importante para entrenar en hardware con memoria o cómputo limitado, como instancias de AWS o TPUs de Google Cloud. También permite una inferencia más rápida, lo cual es crítico para aplicaciones en tiempo real como los autos autónomos de Waymo o Tesla Autopilot.
Variantes y Mejoras
Se han propuesto varias variantes del bloque de cuello de botella. Una variante común es el cuello de botella de pre-activación, donde la normalización por lotes y las funciones de activación se aplican antes de las convoluciones en lugar de después. Se demostró que esto mejora el entrenamiento y la regularización en trabajos posteriores.
Otra variante es el cuello de botella invertido, utilizado en modelos como MobileNetV2. En este diseño, la convolución 1x1 primero expande la dimensión de canales, luego una convolución 3x3 de profundidad opera sobre la dimensión expandida, y otra convolución 1x1 la reduce de vuelta. Esto es opuesto al cuello de botella estándar, pero es más eficiente para dispositivos móviles y embebidos.
En normalización por lotes y normalización de capas, el bloque de cuello de botella a menudo incluye capas de normalización entre convoluciones. La conexión residual ayuda a estabilizar la varianza de las entradas de las capas, y algunos trabajos sugieren escalar la conexión residual por \(1/L\), donde \(L\) es el número total de capas residuales, para estabilizar aún más el entrenamiento.
Aplicaciones
El bloque de cuello de botella se usa en muchos modelos de última generación. En visión por computadora, es el bloque de construcción central de ResNet, que se usa ampliamente para clasificación de imágenes, detección de objetos y segmentación. Por ejemplo, Intuitive Surgical usa aprendizaje profundo para análisis de imágenes médicas, y Fermata usa visión por computadora para agricultura.
En procesamiento de lenguaje natural, las conexiones residuales se usan en modelos Transformer, que son la base de modelos de lenguaje grandes como GPT de OpenAI y Claude de Anthropic. Aunque estos modelos no usan convoluciones 1x1, el concepto de conexión residual se toma prestado de ResNet.
En aprendizaje por refuerzo, la arquitectura ResNet con bloques de cuello de botella se ha utilizado en sistemas como AlphaGo Zero y AlphaStar de DeepMind, que usan redes residuales para procesar estados de tablero o pantallas de juego.
Impacto en el Aprendizaje Profundo
El bloque de cuello de botella ha tenido un impacto significativo en el campo del aprendizaje profundo. Al permitir el entrenamiento de redes muy profundas, contribuyó al rápido progreso en el reconocimiento de imágenes y otras tareas. La idea de usar convoluciones 1x1 para reducir el cómputo ha sido adoptada en muchas arquitecturas posteriores, incluyendo U-Net y varios modelos generativos.
La conexión residual, que es un componente clave del bloque de cuello de botella, se ha convertido en un motivo estándar en el diseño de redes neuronales. Se usa en modelos Transformer, modelos de lenguaje grandes y muchas otras arquitecturas. El bloque de cuello de botella es un ejemplo principal de cómo las innovaciones arquitectónicas pueden llevar a mejoras significativas en rendimiento y eficiencia.