# Red neuronal residual

Una red neuronal residual (también conocida como red residual, ResNet) es un modelo de aprendizaje profundo en el que las capas de pesos aprenden funciones residuales con referencia a las entradas de las capas. Una red residual es una red con conexiones de salto que realizan mapeos de identidad, fusionadas con las salidas de las capas por adición. Se comporta como una Highway Network (Autopista de la información) cuyas puertas se abren mediante pesos de sesgo fuertemente positivo. Esto permite que los modelos de aprendizaje profundo con decenas o cientos de capas se entrenen fácilmente y se aproximen a una mayor precisión al profundizar. Las conexiones de salto de identidad, a menudo denominadas "conexiones residuales", también se utilizan en las redes LSTM (memoria a corto-largo plazo) de 1997, los modelos de transformador (por ejemplo, BERT, modelos GPT como ChatGPT), el sistema AlphaGo Zero, el sistema AlphaStar y el sistema AlphaFold.
Las redes residuales fueron desarrolladas por Kaiming He, Xiangyu Zhang, Shaoqing Ren y Jian Sun, que ganaron el concurso ImageNet 2015.

## Formulación
### Antecedentes

El modelo AlexNet desarrollado en 2012 para ImageNet era una red neuronal convolucional de 8 capas. Las redes neuronales desarrolladas en 2014 por el Visual Geometry Group (VGG) de la Universidad de Oxford se aproximaron a una profundidad de 19 capas apilando capas convolucionales de 3 en 3. Pero apilar más capas provocó una rápida reducción de la precisión del entrenamiento, lo que se conoce como el problema de la "degradación".
Una red más profunda no debería producir una mayor pérdida de entrenamiento que su homóloga menos profunda, si esta red más profunda puede construirse mediante su homóloga menos profunda apilada con capas adicionales. Si las capas adicionales pueden establecerse como mapeos de identidad, la red más profunda representaría la misma función que la homóloga menos profunda. La hipótesis es que el optimizador no es capaz de aproximarse a los mapeos de identidad para las capas parametrizadas.

### Aprendizaje residual

En un modelo de red neuronal multicapa, considere una subred con un número determinado (por ejemplo, 2 o 3) de capas apiladas. Denotemos la función subyacente realizada por esta subred como H(x){\textstyle H(x)}, donde x{\textstyle x} es la entrada a esta subred. La idea de "aprendizaje residual" re-parametriza esta subred y deja que las capas de parámetros representen una función residual F(x):=H(x)−x{\textstyle F(x):=H(x)-x}. El resultado y{\textstyle y} de esta subred se representa como:${\begin{aligned}y&=F(x)+x\end{aligned}}$
Este es también el principio de la computación celular LSTM de 1997 y$_{t+1}$=F(x$_t$)+x$_t${\textstyle y_{t+1}=F(x_{t})+x_{t}}, que se convierte en y=F(x)+x{\textstyle y=F(x)+x} durante la retropropagación en el tiempo.
La función F(x){\textstyle F(x)} suele representarse mediante multiplicación de matrices entrelazada con la función de activación y operaciones de normalización (por ejemplo, normalización por lotes o normalización por capas).
Esta subred se denomina "bloque residual". Una red residual profunda se construye apilando una serie de bloques residuales.
El funcionamiento de " + x{\textstyle +\ x}" en " y=F(x)+x{\textstyle y=F(x)+x}" se aborda mediante una conexión de salto que realiza el mapeo de identidad y conecta la entrada de un bloque residual con su salida. Esta conexión suele denominarse "conexión residual" en trabajos posteriores.

### Propagación de la señal

La introducción de mapeos de identidad facilita la propagación de la señal tanto en los trayectos hacia delante como hacia atrás.

#### Propagación hacia delante

Si la salida del bloque residual ℓ{\textstyle \ell }-ésimo es la entrada al bloque residual (ℓ+1){\textstyle (\ell +1)}-ésimo (es decir, suponiendo que no hay función de activación entre bloques), tenemos:
${\begin{aligned}x_{\ell +1}&=F(x_{\ell })+x_{\ell }\end{aligned}}$
Aplicando esta formulación de forma recursiva, por ejemplo:
${\begin{aligned}x_{\ell +2}=F(x_{\ell +1})+x_{\ell +1}=F(x_{\ell +1})+F(x_{\ell })+x_{\ell }\end{aligned}}$, tenemos:
Donde L{\textstyle L} es el índice de cualquier bloque residual posterior (por ejemplo, el último bloque) y ℓ{\textstyle \ell } es el índice de cualquier bloque anterior. Esta formulación sugiere que siempre hay una señal que se envía directamente desde un bloque menos profundo ℓ{\textstyle \ell } a un bloque más profundo L{\textstyle L}.

#### Propagación hacia atrás

La formulación del aprendizaje residual ofrece la ventaja añadida de resolver en cierta medida el problema del gradiente de fuga. Sin embargo, es crucial reconocer que el problema del gradiente de fuga no es la causa principal del problema de degradación, puesto que ya se ha abordado mediante el uso de capas de normalización. Tomando la derivada con respecto a x$_ℓ${\textstyle x_{\ell }}de acuerdo con la propagación hacia adelante anterior, tenemos:
Aquí E{\textstyle {\mathcal {E}}} es la función de pérdida que debe minimizarse.
Esta formulación sugiere que el cálculo del gradiente de una capa menos profunda ∂E/∂x$_ℓ$ {\textstyle {\frac {\partial {\mathcal {E}}}{\partial x_{\ell }}}} siempre tiene un término ∂E/∂x$_L$ {\textstyle {\frac {\partial {\mathcal {E}}}{\partial x_{L}}}} que se añade directamente. Aunque los gradientes del F(x$_i$){\textstyle F(x_{i})} son pequeños, el gradiente total ∂E/∂x$_ℓ$ {\textstyle {\frac {\partial {\mathcal {E}}}{\partial x_{\ell }}}} no desaparece gracias al término añadido ∂E/∂x$_L$ {\textstyle {\frac {\partial {\mathcal {E}}}{\partial x_{L}}}}.

## Variantes de bloques residuales
### Bloque básico

Un bloque básico es el bloque de construcción más simple estudiado en la ResNet original. Este bloque consta de dos capas convolucionales secuenciales de 3x3 y una conexión residual. Las dimensiones de entrada y salida de ambas capas son iguales.

### Bloque cuello de botella

Un bloque cuello de botella consta de tres capas convolucionales secuenciales y una conexión residual. La primera capa de este bloque es una convolución 1x1 para reducir la dimensión, por ejemplo, a 1/4 de la dimensión de entrada; la segunda capa realiza una convolución 3x3; la última capa es otra convolución 1x1 para restaurar la dimensión. Los modelos de ResNet-50, ResNet-101 y ResNet-152 se basan todos en bloques de cuello de botella.

### Bloque de preactivación

El bloque residual de preactivación aplica las funciones de activación (por ejemplo, no linealidad y normalización) antes de aplicar la función residual F{\textstyle F}. Formalmente, el cálculo de un bloque residual de preactivación puede escribirse como:
Donde ϕ{\textstyle \phi } puede ser cualquier operación de activación no lineal (por ejemplo, ReLU) o de normalización (por ejemplo, LayerNorm). Este diseño reduce el número de mapeos no identitarios entre bloques residuales. Este diseño se utilizó para entrenar modelos con 200 a más de 1000 capas.
Desde GPT-2, los bloques transformadores se han implementado dominantemente como bloques de pre-activación. Esto se denomina a menudo "prenormalización" en la literatura de los modelos transformador.

### Bloque transformador

Un bloque transformador es una pila de dos bloques residuales. Cada bloque residual tiene una conexión residual.
El primer bloque residual es un bloque de atención multicabeza, que realiza un cálculo de (auto)atención seguido de una proyección lineal.
El segundo bloque residual es un bloque de perceptrón multicapa (MLP) feed-forward (alimentación anticipada). Este bloque es análogo a un bloque de cuello de botella "inverso": tiene una capa de proyección lineal (que equivale a una convolución 1x1 en el contexto de las redes neuronales convolucionales) que aumenta la dimensión, y otra proyección lineal que reduce la dimensión.
Un bloque transformador tiene una profundidad de 4 capas (proyecciones lineales). El modelo GPT-3 tiene 96 Bloques transformadores (en la literatura sobre transformadores, un bloque de transformador se denomina a menudo "Transformer Layer" (capa de transformador)). Este modelo tiene una profundidad de unas 400 capas de proyección, incluidas 96x4 capas en bloques transformadores y algunas capas adicionales para la incrustación de entrada y la predicción de salida.
Los modelos transformador muy profundos no pueden entrenarse con éxito sin conexiones residuales.

## Trabajos relacionados

En el libro escrito por Frank Rosenblatt, publicado en 1961, se presentaba un modelo de perceptrón multicapa (MLP) de tres capas con conexiones de salto (Capítulo 15, p313 en). El modelo se denominaba "sistema de acoplamiento cruzado", y las conexiones de salto eran formas de conexiones de acoplamiento cruzado.
En dos libros publicados en 1994 y 1996, se presentaron las conexiones "skip-layer" (salto de capa) en los modelos MLP feed-forward: "La definición general [de MLP] permite más de una capa oculta, y también permite conexiones skip-layer desde la entrada a la salida" (p261 en, p144 en), "... lo que permite a las unidades no lineales perturbar una forma funcional lineal" (p262 en). Esta descripción sugiere que el MLP no lineal funciona como una función residual (perturbación) añadida a una función lineal.
Sepp Hochreiter analizó el problema del gradiente evanescente en 1991 y le atribuyó la razón por la que el aprendizaje profundo no funcionaba bien. Para superar este problema, las redes neuronales recurrentes de memoria a largo plazo (LSTM) tenían conexiones de salto o conexiones residuales con un peso de 1,0 en cada celda LSTM (llamado carrusel de error constante) para calcular y$_{t+1}$=F(x$_t$)+x$_t${\textstyle y_{t+1}=F(x_{t})+x_{t}}.Durante la retropropagación a través del tiempo, esto se convierte en la fórmula residual antes mencionada y=F(x)+x{\textstyle y=F(x)+x} para redes neuronales feedforward. Esto permite entrenar redes neuronales recurrentes muy profundas con un intervalo de tiempo t muy largo. Una versión posterior de LSTM publicada en 2000 modula las conexiones LSTM de identidad mediante las llamadas puertas de olvido, de forma que sus pesos no están fijados a 1,0, sino que pueden aprenderse. En los experimentos, las puertas de olvido se inicializaron con pesos de sesgo positivo, por lo que se abrieron, abordando el problema del gradiente de fuga.
La red Highway Network de mayo de 2015 aplica estos principios a las redes neuronales feedforward. Se dice que es "la primera red feedforward muy profunda con cientos de capas". Es como una LSTM con puertas de olvido desplegadas en el tiempo, mientras que las redes residuales posteriores no tienen puertas de olvido equivalentes y son como la LSTM original desplegada. Si las conexiones de salto en las ighway network son "sin puertas", o si sus puertas se mantienen abiertas (activación 1,0) a través de fuertes pesos de sesgo positivo, se convierten en las conexiones de salto de identidad en las redes residuales.
El artículo original Highway Network no sólo introdujo el principio básico de las redes feedforward muy profundas, sino que también incluyó resultados experimentales con redes de 20, 50 y 100 capas, y mencionó experimentos en curso con hasta 900 capas. Las redes con 50 o 100 capas presentaron un error de entrenamiento menor que sus homólogas de red simple, pero no menor que su homóloga de 20 capas (en el conjunto de datos MNIST, Figura 1 en). No se observó ninguna mejora en la precisión de las pruebas con redes de más de 19 capas (en el conjunto de datos CIFAR-10; Tabla 1 en). Sin embargo, el artículo de ResNet aportó pruebas experimentales sólidas de las ventajas de profundizar más de 20 capas. Argumentaba que el mapeo de identidad sin modulación es crucial y mencionaba que la modulación en la conexión de salto puede llevar a señales de fuga en la propagación hacia delante y hacia atrás (Sección 3 en). Esta es también la razón por la que las puertas de olvido de la LSTM de 2000 se abrieron inicialmente mediante pesos de sesgo positivo: mientras las puertas estén abiertas, se comporta como la LSTM de 1997. Del mismo modo, una Highway Net cuyas puertas se abren mediante pesos de sesgo fuertemente positivos se comporta como una ResNet. Las conexiones de salto utilizadas en las redes neuronales modernas (por ejemplo, Transformadores) son dominantemente mapeos de identidad.
Las DenseNets de 2016 se diseñaron como redes neuronales profundas que intentan conectar cada capa con todas las demás. DenseNets abordó este objetivo mediante el uso de mapeos de identidad como conexiones de salto. A diferencia de las ResNets, las DenseNets fusionan la salida de la capa con conexiones de salto por concatenación, no por adición.
Las redes neuronales con Profundidad Estocástica fueron posibles gracias a las arquitecturas de red residual. Este procedimiento de entrenamiento deja caer aleatoriamente un subconjunto de capas y permite que la señal se propague a través de la conexión de salto de identidad. También conocido como "DropPath", se trata de un método de regularización eficaz para entrenar modelos grandes y profundos, como el Vision Transformer (ViT).

## Relación biológica

En el artículo original sobre las redes residuales no se afirmaba que estuvieran inspiradas en sistemas biológicos. Pero investigaciones posteriores han relacionado las redes residuales con algoritmos biológicamente plausibles.
Un estudio publicado en Science en 2023 reveló el conectoma completo del cerebro de un insecto (de una larva de mosca de la fruta). Este estudio descubrió "atajos multicapa" a los que se asemejan las conexiones de salto de las redes neuronales artificiales, incluidas las ResNets.