Generative Adversarial Networks (GANs) - Comment gérer les problèmes communs des réseaux antagonistes génératifs

machine learningdeep learningGANAIWGANmode collapsevanishing gradientnon-convergencegenerative adversarial networks
Hind Chenini - 30/03/2022 à 10:02:510 commentaire

Solutions aux problèmes majeurs d'apprentissage des GANs


Photo par Neil Thomas sur Unsplash


Les réseaux antagonistes génératifs (GANs) font partie du domaine innovant des algorithmes d'apprentissage profonds, qui est le domaine de la modélisation générative. Pour en apprendre davantage, je vous invite à lire ce post : Quand la machine devient créative avec les GANs, où vous trouverez plus d'informations sur leur origine, architecture, processus et domaines d'application.


La naissance des GANs a fait l'objet de larges applications et ces algorithmes continuent de progresser. Cependant l'entrainement de ces modèles est soumis à divers types de défaillance communs, comme le mode collapse, la non-convergence et le vanishing gradient. Généralement, les recherches tendent vers le design de différentes architectures, ou le fine-tuning des paramètres, - comme on a vu dans les bonnes pratiques ici - pour atteindre une meilleure performance des GANs. Mais pour adresser particulièrement ces problèmes majeurs, qui demeurent des domaines de recherche très active, des solutions ont été proposées. Bien qu'aucun de ces problèmes n'ait pu être complètement résolu, ces solutions présentent des tentatives de résolution qui permettent de les éviter ou de mieux les gérer. Dans cet article, nous allons les découvrir ensemble.



1.  Mode collapse


Ce problème est observé quand le générateur produira toujours les mêmes sorties ou des variations faibles de celles-ci. Ce qui signifie que le modèle n'apprend qu'une partie de la distribution et reste coincé dans un sous-espace limité. Par exemple, dans le cas des données MNIST qui sont des images de dix modes principaux du chiffre "0" à "9", le mode collapse est aperçu quand le générateur ne génère qu'un ensemble d'images du même chiffre, et qui peut basculer d'un mode à un autre sans pouvoir générer un ensemble d'images contenant les 10 chiffres.



Exemple du mode collapse. Image modifiée source



1.1.  Comment identifier un mode collapse ?


C'est surtout dans le cas des modèles conditionnels où l'on souhaite obtenir un résultat bien défini, on a pas de mesures qui permettent de vérifier le bon moment pour arrêter l'apprentissage du model. Donc, le problème majeur c'est de ne pas pouvoir contrôler le sur-apprentissage de ces modèles. Soit on se retrouve avec un modèle qui a sur-appris, soit un modèle qui n'a pas encore capturé la majorité des différentes caractéristiques.


1.2.  Solutions


1.2.1.  Inception score


Il existe des mesures pour tenter de gérer ce problème comme le Inception score proposé par Tim Salimans et al. en 2016 dans leur article Improved Techniques for Training GANs. Ce score permet d'évaluer la qualité des images générées. Néanmoins, ce dernier nécessite que les données soient labélisées et d'une taille assez large.


Le score est calculé à partir de deux critères :



  • La diversité des échantillons générés : pour vérifier une distribution marginale des différentes catégories.


                         Une intégrale marginale p(y|x = G(z)) dz avec une entropie élevée



  • La qualité de ces derniers : pour vérifier que chaque image ressemble distinctivement à une présentation plutôt nette que floue. Ou autrement dit, l'image est fortement classifiée dans une classe -avec une probabilité plus représentative- par rapport aux autres classes.


                         Une distribution conditionnelle des classes p(y|x) avec une entropie basse



Ce qui permettra de vérifier si le GAN génère de nombreuses images distinctes différentes quand le score est élevé.


Avec de nombreuses images générées par le modèle, pour chaque image générée, la probabilité de son appartenance à chaque classe est calculée. Ensuite, l'entropie est calculée par la somme des probabilités multipliées par le log des probabilités.


Ces deux éléments sont ensuite réduits en Inception score par le calcul de l'exponentielle de la divergence de Kullback-Leibler (KL) entre les distributions de probabilité marginale et conditionnelle. La divergence KL est une mesure de similarité entre deux distributions de probabilité.


L'optimisation directe de l'Inception score, permettra la génération des exemples diversifiés, et ainsi une certaine gestion du problème du mode collapse.




1.2.2.  La normalisation par lot


Utilisée au niveau des couches profondes pour avoir une moyenne nulle et une variance de 1, elle permet la stabilisation de l'apprentissage du modèle. Cela permet de gérer les difficultés dues à une mauvaise initialisation. Pourtant, il est conseillé de ne pas utiliser la normalisation au niveau de la couche de sortie du générateur ainsi que la première couche du discriminateur.


1.2.3.  La distance Wasserstein comme fonction loss


Comme présenté plus bas dans le problème de la non-convergence, Wasserstein loss permet au discriminateur d'apprendre à rejeter les éléments générés sur lesquels le générateur se stabilise. Et ainsi, permettre au générateur d'essayer des nouvelles propositions pour se diversifier.



1.2.4.  Les GANs déroulés


Cette méthode proposée par Luke Mets et al. dans l'article Unrolled generative adversarial networks, se repose sur l'utilisation d'une fonction "loss" pour la mise-à-jour du générateur qui n'inclut pas seulement la classification du discriminateur actuel, mais aussi la sortie des versions des discriminateurs futurs.


Un cas du mode collapse d'un GAN standard et le résultat obtenu par la solution des GANs déroulés. source


Par le déroulement de l'entrainement du discriminateur en k étapes, le générateur aura l'opportunité de prévoir comment le discriminateur peut s'optimiser ( essayer à mieux approximer la maximisation de la fonction d'optimisation du discriminateur). Puis, le générateur sera mis à jour par la rétropropagation du "loss" du discriminateur calculé à l'étape k. À chaque étape, le discriminateur est optimisé par un modèle différent mais il est seulement mis à jour par le "loss" de la première étape.

Cela permet de voir comment le discriminateur va agir face à un changement du générateur, sans impacter l'état du discriminateur actuel, ce qui aide à réduire la tendance du générateur à encourager l'effondrement du mode, et ainsi lui permettre de moduler davantage la distribution originelle.


2.  Non-convergence


Le processus d'apprentissage des GANs peut devenir lent et instable à cause de la complexité de leur entrainement. Même si le discriminateur et le générateur sont entrainés simultanément pour arriver à un équilibre appelé équilibre de Nash dans un mode de jeu à deux joueurs antagonistes, chaque "loss" des deux modèles est ajusté indépendamment. Ce coût est calculé selon une approche minimax, où l'un essaye de maximiser ses gains et l'autre contrebalance pour les minimiser. Parfois, les deux modèles arrivent finalement à atteindre cet équilibre, mais dans d'autres scénarios cette mise-à-jour des gradients simultanée les déstabilise, et dans ce cas, les paramètres oscillent et les modèles ne convergent jamais.



Exemple de simulation du problème de non-convergence suite à une approche minimax. source




2.1.   Comment identifier l'échec de convergence ?


Le problème de l'échec de convergence peut être vérifié par l'observation des indices suivants :


  • Le "loss" du discriminateur décroît rapidement à une valeur proche du zéro dès les premières itérations d'apprentissage.


  • Le "loss" du générateur décroît vers le zéro ou continue de décroitre pendant l'apprentissage.


  • Le générateur produit continuellement des exemples non significatifs d'une qualité minime que le discriminateur identifie facilement. Il faut savoir que si le résultat du générateur change suffisamment peu à peu, le discriminateur converge dans ce cas, même si les changements sont minimes. Donc, en plus d'assurer la convergence, la performance peut aussi s'améliorer tant que le discriminateur doit avant tout apprendre les nouvelles caractéristiques avant de les transférer au générateur. source


2.2.  Solutions


En pratique, les GANs ont souvent tendance à osciller.

       

  Le plus gros problème auquel sont confrontés les GANs que les chercheurs devraient essayer de résoudre

est la question de la non-convergence. —Ian Goodfellow NIPS 2016 Tutorial: Generative Adversarial Networks —2017


Mais pour tenter de gérer ce problème, il est conseillé de suivre les suggestions suivantes: 


2.2.1.  La distance Wasserstein comme fonction loss


Dans le cas d'un GAN Wasserstein, le discriminateur n'est plus le classifieur qui contrôle l'authenticité des images d'entrée par une estimation probabiliste. Au lieu de cela, il est entrainé à atteindre une distance minimale entre la distribution des images d'entraînement et celle des exemples générés.

L'intégration de cette fonction dans un modèle GAN apporte au discriminateur la possibilité d'attribuer à l'entrée un score qui permet de dire combien elle est plus ou moins authentique. À la différence du discriminateur qui classifie en vrai ou faux avec une probabilité entre zéro et un, ce score d'un WGAN peut être aussi grand que possible. Le concept est de maximiser le score pour les vrais exemples et de le minimiser pour ceux produits par le générateur.

L'intégration de cette fonction dans un modèle GAN se base sur un ensemble de changement du schéma sans trop changer le design au niveau de l'architecture générale des GANs, d'où l'appellation Wasserstein GAN (WGAN). Les WGANs s'implémentent comme suite :


  • La fonction loss Wasserstein : Le rôle du discriminateur est de maximiser la fonction suivante D(x) - D(G(z)) qui consiste à maximiser la différence entre sa sortie pour les vraies données et celle pour les données générées. Le rôle du générateur est de maximiser la fonction D(G(z)) afin de maximiser la sortie du discriminateur pour les données qu'il génère, et ainsi minimiser leur distance avec les vraies données.


  • La coupure des poids du discriminateur : Théoriquement l'efficacité du WGAN exige que les poids du discriminateur soient tronqués afin qu'ils restent sur un espace restreint de 1-Lipschitz.


  • WGAN-GP : Pour un WGAN très profond la contrainte Lipschitz peut causer un contre-effet. Pour cette raison, une alternative de la coupure des poids est proposée par Ishaan Gulrajani et al. dans l'article Improved Training of Wasserstein GANs afin d'assurer un apprentissage fluide. Les auteurs proposent une approche qui consiste à calculer une pénalité de gradient (GP), qui sera ajoutée au "loss" du discriminateur, pour maintenir une norme de ses gradients proche de 1. Pour cette configuration, les auteurs conseillent de remplacer la normalisation par lot par la normalisation par couche qui consiste à estimer la normalisation d'une entrée sans introduire aucune dépendance entre les cas d'apprentissage.


Si vous voulez l'intégrer à votre code, vous trouverez par là une implémentation simple des étapes d'entrainement d'un WGAN ainsi que celle d'un WGAN-GP.

Bien que WGAN prenne en charge la stabilité du modèle, sa vitesse d'entraînement est très lente. Aussi, dans l'article Which Training Methods for GANs do actually Converge? les auteurs, trouvent que les WGANs ne convergent pas toujours, et conseillent l'utilisation du bruit d'instance ou bien les pénalités de gradient.



2.2.2. Le bruit d'instance


Proposée par Casper Kaae Sønderby, cette méthode consiste à ajouter du bruit - gaussien ou autre - directement aux données d'entrée du discriminateur. Les travaux ont montré que cette méthode permet d'atteindre la convergence et cela grâce à son impact radical sur le gradient du discriminateur ce qui permet la convergence de l'apprentissage du modèle.


Les travaux de Lars Mescheder et al. présentés dans l'article Which Training Methods for GANs do actually Converge?, suggèrent que l'ajout du bruit d'instance gaussien avec une déviation standard proche de la déviation standard du discriminateur, rend l'apprentissage de l'algorithme convergent.


 Le problème d'optimisation se comporte mieux lorsque nous sélectionnons σ = σcritical : dans ce cas, nous pouvons même atteindre la convergence quadratique. Which Training Methods for GANs do actually Converge?—2018




2.2.3.  0-GP


Les mêmes travaux de Mescheder et al. ont montré que la pénalité de gradient centrée sur zéro (0-GP), appliquée sur les vrais et/ou les faux exemples, permet à un modèle GAN de converger. L'idée est que lorsque la probabilité des éléments générés égale à celle des vrais éléments, le gradient du discriminateur des données générées doit être égal à zéro afin que le générateur ne soit pas modifié lors de sa mise-à-jour par cette valeur du gradient. En d'autres termes, si la valeur du gradient du discriminateur est différente de zéro, le générateur oscille autour de l'équilibre de Nash.



3.  Vanishing gradient


Cela arrive quand le discriminateur est trop fort à détecter les faux exemples générés par le générateur. Ce qui cause l'échec de l'entrainement du générateur qui est perçu au niveau de la disparition du gradient. Donc, dans le cas des GANs, ce n'est pas souhaitable d'avoir une fonction de perte de discriminateur qui tend vers zéro, car cela fait penser que le discriminateur fait parfaitement son travail alors que la rétropropagation est si minime que ça ralentit l'apprentissage du générateur et ne permet pas à l'ensemble du modèle GAN de s'améliorer.


3.1.  Comment identifier le problème du Vanishing gradient ?


Voici quelques signes qui permettent de détecter la disparition du gradient :


  • Au niveau de la distribution des poids, si les valeurs des poids approchent régulièrement vers zéro pendant l'apprentissage alors c'est le cas.


  • Le modèle apprend lentement ou même stagne dès les toutes premières itérations. Ce qui signifie que tout apprentissage supplémentaire ne permettra pas l'amélioration du modèle.



3.2.  Solutions


Plusieurs solutions ont été présentées pour ce problème parmi lesquels figure la plus fréquemment utilisée :


3.2.1.  La fonction d'activation ReLU (Unité Linéaire Rectifiée)


La fonction d'activation ReLU associée à la normalisation par lot a été proposée ici pour résoudre le problème du vanishing gradient. Elle est mieux appropriée pour les réseaux de neurones de convolution profonds, grâce à son efficacité à adresser ce problème par rapport aux fonctions d'activation limitée comme l'activation à tangente hyperbolique (tanh) ou la fonction sigmoïde. ReLU est une fonction d'activation qui permet d'éviter la saturation et de ressortir un gradient plus grand et constant. Dans le cas des GANs, elle est utilisée au niveau des couches du générateur à l'exception de la couche de sortie qui est activée par une tanh. Et pour le discriminateur la fonction LeakyReLU est préférée.

            

            


Quelques références


Alec Radford, Luke Metz, Soumith Chintala, UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS, 2016


Martin Arjovsky,  Léon Bottou, TOWARDS PRINCIPLED METHODS FOR TRAINING GENERATIVE ADVERSARIAL NETWORKS, 2017


Luke Metz, Ben Poole, David Pfau, Jascha Sohl-Dickstein, UNROLLED GENERATIVE ADVERSARIAL NETWORKS, 2017


Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, Aaron Courville, Improved Training of Wasserstein GANs, 2017


Lars Mescheder, Andreas Geiger, Sebastian Nowozin, Which Training Methods for GANs do actually Converge?, 2018


Lilian Weng, From GAN to WGAN, 2019


Haiyang Chen, Challenges and Corresponding Solutions of Generative Adversarial Networks (GANs): A Survey Study, 2021


Instance Noise : A trick for stabilising GAN training


Commentaires :

Aucun commentaires pour le moment


Laissez un commentaire :

Réalisé par
Expaceo