Comprendre les liens résiduelles
Avant la découverte des réseaux à liens résiduels, l'entraînement de réseaux de neurones profonds était très difficile car les gradients avaient du mal à se propager à travers toutes les couches pour modifier les poids du réseau. Parmi les problèmes d’apprentissage dans les réseaux profonds se trouve l'évanescence du gradient.
Une partie, d’un petit peu, d’un fragment, d’un reste, d’un soupçon, d’une miette, d’un chouilla, …
Lorsque l'on entraîne un réseau de neurones à plusieurs couches, l'algorithme de rétropropagation de l'erreur progresse vers les couches inférieures, ce qui rend les gradients de plus en plus petits. Cela signifie que la mise à jour des poids des connexions de la couche inférieure par descente de gradient est très faible, ce qui peut empêcher une convergence efficace de l'entraînement.
Un début de solution structurelle a été mise en place dans le modèle GoogLeNet en 2014. Elle consiste à ajouter, en plusieurs points du modèle, des têtes de sorties pour réinjecter des gradients entre les couches.
Comment entraîner des réseaux profonds ?
Les liens résiduels, également appelés connexions résiduelles, ont été introduits dans le réseau ResNet (Residual Network) en 2015, dans l'article "Deep Residual Learning for Image Recognition" par Kaiming He, Xiangyu Zhang, Shaoqing Ren et Jian Sun.
Voici la représentation d'un lien ResNet tel qu’il est représenté dans le papier de 2015.
De fait, nous ne cherchons pas à faire converger la fonction Y = f( X ) mais Y = f( X ) + X
À première vue, nous ne comprenons pas pourquoi ajouter l'entrée du réseau avec sa sortie fonctionne. Cela semble illogique. Pourquoi cela marche ?
Un peu de math ( sans le formalisme )
La raison du fonctionnement du lien résiduel se cache derrière le calcul des gradients. Le gradient est obtenu en accumulant toutes les dérivées partielles calculées pour chaque poids du réseau. Sans entrer dans les détails, il se trouve que la dérivée partielle agit de la manière suivante :
La multiplication divise le gradient.
L'addition distribue le gradient.
Les couches de convolutions sont principalement constituées de multiplications et elles participent grandement à la disparition du gradient. Avec une opération d’addition, les liens résiduels contournent les convolutions et préservent la dynamique des gradients.
C'est presque magique !
Oui. Presque car les liens résiduels apportent leurs lots de contraintes structurelles. En effet, pour pouvoir ajouter le tenseur d'entrée avec le tenseur de sortie d’une couche, il faut avoir la même dimension en amont et en aval.
Impossible, donc, d’avoir des opérations de pooling ou de changer le nombre de couches dans un bloc avec un lien résiduel. L'opération d’addition est contraignante sur les dimensions. Il est possible d’utiliser l'opération de concaténation qui est plus souple (comme dans U-Net) mais c’est au détriment du combinatoire des couches suivantes.
La solution est donc d'intercaler, a chaque réduction de dimension, des couches de convolutions entre les blocs resnet.
Conclusion
Les liens résiduels sont des chemins privilégiés d’irrigations des gradients. Ils sont présents dans la grande majorité des architectures comme DenseNet, EfficientNet, ConvNext, LSTM ou même les transformers.
Merci de votre attention (Is all you need !).
Aucun commentaire:
Enregistrer un commentaire