ResNet, abréviation de residual neural network (réseau neuronal résiduel), est une architecture d'apprentissage profond dans laquelle les couches apprennent des fonctions résiduelles par rapport à leurs entrées. Développée en 2015 pour la reconnaissance d'images, elle a remporté le concours ImageNet Large Scale Visual Recognition Challenge (ILSVRC) de cette année-là. La caractéristique déterminante de cette architecture est la connexion résiduelle, un motif qui ajoute l'entrée d'un sous-réseau à sa sortie, permettant ainsi l'entraînement de réseaux comportant des centaines de couches. Cette conception est devenue un élément fondamental des modèles modernes d'apprentissage profond, notamment les architectures de transformeurs et des systèmes comme AlphaGo Zero et AlphaFold.
La connexion résiduelle stabilise l'entraînement et la convergence des réseaux neuronaux profonds, en remédiant au problème du gradient vanishing qui limitait auparavant la profondeur des réseaux. Son influence dépasse largement la reconnaissance d'images, se retrouvant dans les réseaux neuronaux de divers domaines, des grands modèles de langage aux systèmes d'apprentissage par renforcement.
Mathématiques
L'idée centrale de ResNet est de reformuler l'objectif d'apprentissage. Dans un réseau multicouche, considérons un sous-réseau composé de couches empilées qui calcule une fonction \(H(x;\alpha)\), où \(x\) est l'entrée et \(\alpha\) les paramètres. Au lieu d'apprendre directement \(H\), l'apprentissage résiduel fait apprendre au sous-réseau la fonction \(F(x;\alpha) = H(x;\alpha) - x\). La sortie optimale \(H^\) est alors obtenue en apprenant le résidu \(H^ - x\), ce qui est souvent plus facile à optimiser.
L'addition de \(x\) est implémentée via une connexion de saut (skip connection) qui effectue une mapping d'identité, reliant directement l'entrée du sous-réseau à sa sortie. Cette connexion de saut est la « connexion résiduelle ». Un sous-réseau doté d'une telle connexion est appelé un bloc résiduel, et un réseau profond est construit en empilant de tels blocs.
Connexion résiduelle
Dans un bloc résiduel, la fonction \(F\) consiste typiquement en des multiplications matricielles entrecoupées de fonctions d'activation et d'opérations de normalisation, comme la normalisation par lots (batch normalization) ou la normalisation de couche (layer normalization). La connexion résiduelle \(x + F(x)\) permet aux gradients de circuler directement à travers le réseau lors de la rétropropagation, atténuant ainsi le problème de dégradation où les réseaux plus profonds deviennent plus difficiles à entraîner.
Le concept de connexions résiduelles a des précédents. Les réseaux à mémoire à long terme (LSTM), par exemple, possèdent une cellule de mémoire qui agit comme une connexion résiduelle : \(c_{t+1} = c_t + F(x_t)\), où \(c_t\) est l'état de la cellule et \(F\) traite l'entrée \(x_t\). Un LSTM avec une porte d'oubli fonctionne essentiellement comme un réseau autoroutier (highway network), une architecture connexe qui utilise également des connexions de saut contrôlées.
Pour stabiliser la variance des entrées de couches dans les réseaux très profonds, il est recommandé de mettre à l'échelle la connexion résiduelle par le nombre total de couches \(L\), en remplaçant \(x + f(x)\) par \(x/L + f(x)\). Cette normalisation aide à maintenir des magnitudes de signaux cohérentes sur des centaines de couches.
Connexion de projection
Lorsque la fonction \(F\) change la dimensionnalité de l'entrée, par exemple \(F : \mathbb{R}^n \to \mathbb{R}^m\) avec \(n \neq m\), l'addition \(F(x) + x\) n'est pas définie. Dans ce cas, on utilise une connexion de projection : \(y = F(x) + P(x)\), où \(P\) est typiquement une projection linéaire \(P(x) = Mx\) avec une matrice \(M\) de taille \(m \times n\). Cette matrice est entraînée par rétropropagation avec les autres paramètres du modèle, permettant au réseau de s'adapter à la nouvelle dimensionnalité.
Propagation du signal
L'introduction de mappings d'identité facilite la propagation du signal dans les deux sens, avant et arrière. Dans la passe avant, si la sortie du \(\ell\)-ième bloc résiduel est l'entrée du bloc \((\ell+1)\)-ième (en supposant qu'il n'y a pas d'activation entre les blocs), alors \(x_{\ell+1} = F(x_\ell) + x_\ell\). Cette récurrence permet à l'information de circuler directement à travers le réseau, préservant le signal d'entrée même si \(F\) produit de petites valeurs.
Dans la passe arrière, le gradient de la perte par rapport à l'entrée d'un bloc inclut un terme qui est le gradient par rapport à la sortie, transmis via le mapping d'identité. Cela garantit que les gradients ne disparaissent pas lorsqu'ils se propagent à travers de nombreuses couches, un facteur clé permettant l'entraînement de réseaux avec des centaines de couches.
Histoire et impact
Le motif de connexion résiduelle avait été utilisé dans des travaux antérieurs, mais la publication de ResNet en 2015 l'a popularisé pour les réseaux à action directe (feedforward). L'architecture a été développée par des chercheurs de Microsoft, notamment Kaiming He, Xiangyu Zhang, Shaoqing Ren et Jian Sun. Leur article, « Deep Residual Learning for Image Recognition », a démontré que des réseaux résiduels pouvaient être entraînés avec des profondeurs de 152 couches ou plus, atteignant des résultats de pointe sur le benchmark ImageNet.
Le succès de ResNet à l'ILSVRC 2015 a marqué un tournant dans l'apprentissage automatique. Il a montré que les réseaux très profonds étaient non seulement réalisables, mais aussi supérieurs en performance, ce qui a stimulé une vague de recherches sur les architectures profondes. La connexion résiduelle est devenue un composant standard dans de nombreux modèles ultérieurs, y compris les transformeurs utilisés dans le traitement du langage naturel, comme les modèles BERT et GPT, ainsi que dans des systèmes comme AlphaGo Zero, AlphaStar et AlphaFold.
Variantes et extensions
Plusieurs variantes de ResNet ont été développées pour améliorer les performances ou l'efficacité. La variante dite « pré-activation » déplace les fonctions d'activation avant les couches de poids, ce qui améliore la régularisation et permet des réseaux encore plus profonds. La variante « Wide ResNet » augmente le nombre de canaux dans chaque bloc, échangeant la profondeur contre la largeur pour obtenir de meilleures performances avec moins de couches. ResNeXt introduit une dimension de cardinalité, utilisant des branches parallèles au sein de chaque bloc pour augmenter la puissance de représentation sans augmenter la profondeur.
D'autres extensions incluent DenseNet, qui connecte chaque couche à toutes les couches suivantes dans un bloc, et ResNet avec profondeur stochastique, qui supprime aléatoirement des couches pendant l'entraînement pour régulariser le modèle. Ces variantes ont repoussé les limites de ce qui est possible avec l'apprentissage profond résiduel.
Applications
ResNet a été appliqué à un large éventail de tâches au-delà de la reconnaissance d'images, notamment la détection d'objets, la segmentation sémantique et l'analyse vidéo. Il est également utilisé en imagerie médicale, pour la conduite autonome et dans les systèmes de reconnaissance faciale. La polyvalence et la robustesse de l'architecture en ont fait un choix par défaut pour de nombreuses applications de vision par ordinateur.
De plus, le principe de la connexion résiduelle a été adopté dans d'autres domaines, comme le traitement du langage naturel et l'apprentissage par renforcement. Par exemple, les transformeurs s'appuient sur des connexions résiduelles pour entraîner des réseaux profonds pour la compréhension et la génération de langage, comme on le voit dans les modèles GPT d'OpenAI et les modèles d'Anthropic. L'influence de ResNet est ainsi omniprésente dans le domaine de l'intelligence artificielle.