Les Réseaux Génératifs
Dans le vaste monde de l’intelligence artificielle, les réseaux génératifs ont révolutionné notre façon de créer. Imaginez une machine capable de peindre des tableaux, de composer de la musique, de concevoir des vêtements, ou même d’inventer de nouvelles saveurs de boissons. Les réseaux génératifs ouvrent une porte vers ces possibilités.
L’Essence des Réseaux Génératifs
À la base, un réseau génératif est une forme avancée d’apprentissage automatique qui s’efforce de reproduire des données. Contrairement aux modèles classiques qui apprennent à catégoriser ou à prédire, les réseaux génératifs apprennent à générer. Ils étudient en profondeur les données dont ils disposent, comprennent leurs nuances, leurs motifs et leurs structures, puis essaient de produire des données nouvelles mais similaires.
Dans cet article nous allons étudier un modèle génératif en profondeur et je vous partagerai le modèle et mes propres résultats. Mais avant de commencer quelques explications.
Qu’est-ce qu’un Réseau Génératif ?
Un réseau génératif est une sorte de réseau neuronal artificiel conçu pour créer de nouvelles données qui ressemblent à certaines données d’entrée. Prenons un exemple simple : si nous alimentons un réseau génératif avec des milliers d’images de fleurs de lotus, il peut « apprendre » les caractéristiques typiques d’une fleur de lotus et, à la fin, générer des images de fleurs de lotus qui n’ont jamais existé auparavant.
Les Réseaux Génératifs Adversariaux (GANs)
Avant de plonger dans le vif du sujet, il est essentiel de comprendre les GANs. Un GAN se compose de deux réseaux : le Générateur et le Discriminateur. Le générateur crée des images, tandis que le discriminateur essaie de distinguer les images générées des images réelles.
C’est une sorte de jeu entre un détective et un faussaire où le générateur tente de produire des faux toujours plus convaincants, et le discriminateur s’efforce de devenir meilleur détective.
Cette étape s’appelle, l’entrainement. Une fois que nous considérons l’entrainement terminé, il est temps d’observer les productions du générateur.
Les Limitations des GANs
Bien que les GANs soient puissants, ils ne sont pas parfaits. Ils peuvent être instables durant l’entrainement, produisant des résultats indésirables ou se concentrant trop sur certaines caractéristiques au détriment d’autres.
Lors de mes tests avec les GANs, les modèles s’effondrent régulièrement et ne génèrent plus que des images extrêmement saturés où alors souvent la même on dit qu’il rentre en « mode Collapse ». Heureusement il y a des solutions.
WGAN : Une Amélioration
Une première amélioration est de modifier le rôle du discriminateur, il devient critique.
Les GANs Wasserstein, ou WGANs, sont une solution à certains des problèmes des GANs traditionnels. Au lieu d’utiliser la probabilité que l’image soit réelle ou fausse comme mesure de performance, les WGANs mesurent la distance entre la distribution des images générées et celle des images réelles. Cette mesure est plus stable et offre des avantages en termes de convergence et de qualité de génération.
Le distance de Wasserstein: Au lieu d’utiliser la divergence de Jensen-Shannon (comme dans les GANs traditionnels) pour mesurer la différence entre les distributions réelles et générées, les WGANs utilisent la distance de Wasserstein (également appelée distance de transport optimal de premier ordre). Cette distance donne une mesure plus significative de la différence entre deux distributions, même lorsque les supports des deux distributions ne se chevauchent pas.
WGAN-GP : Une belle avancée pour les GANs
Le WGAN-GP ajoute une « Pénalité de Gradient » au WGAN. Cela garantit que le discriminateur (appelé critique dans le WGAN) reste « lisse » dans l’espace des images. Cette lissité est cruciale pour que le signal du discriminateur au générateur soit utile et stable. La pénalité de gradient empêche le discriminateur de devenir trop confiant, ce qui pourrait provoquer des instabilités.
La méthode de pénalisation du gradient pour les WGANs a été introduite dans le papier « Improved Training of Wasserstein GANs » par Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin et Aaron Courville. Ce papier a été publié en 2017.
A quoi ressemble mon réseau WGAN-GP
Je vais ajouter quelques éléments de contexte et des tailles techniques pour vous expliquer mes tests. Vous pouvez évidement les ignorer si ce n’est pas votre domaine.
Mon objectif est d’apprendre au générateur de produire des fleurs de lotus
Pour commencer, j’utilise un simple PC, sans GPU (Je ferai un article sur l’utilité des GPUs dans un prochain article). En raison de cette limitation, la taille du jeu données est très faible (68 images et non des millions) et la définition limitée.
Concernant le jeu de données, j’ai utilisé 68 images générées sur MidJourney. Bien-sur, elles ne sont pas réelles mais me suffisent dans le cadre de l’expérience.
Le programme est en Python, un des langages de prédilections pour les scientifiques de données. En particulier j’utilise la bibliothèque PyTorch pour cet exercice.
Le générateur est un réseau de neurones composés de 5 couches qui font de la transposition de convolutions (ou déconvolution par abus de langage).
Le réseau démarre en produisant un pixel, puis chacune des couches augmente la taille spatiale en réduisant le nombre de dimensions pour finir avec une image de 128*128 pixels. La fonction d’activation non linéaire utilisée sur les couches du réseau est ReLu: f(x)=max(0,x) . La dernière couche utilise la fonction Tanh.
La taille du noyau pour la déconvolution est de 4*4.
Le discriminateur est similaire mais il fait de la convolution. en d’autres terme il va réduire la taille spatiale des images de 128*128 pixels. L’image est aplatie et traitée par une couche entièrement connectée pour produire une valeur unique, qui indique si l’image est réelle ou générée.
Les résultats
Après deux bonnes nuits d’apprentissage, le réseau a réalisé près de 3000 epochs (Une epoch étant une série d’entrainements : il parcourt les données d’entrainement et génère des images qu’il évalue )
Voici les résultats obtenus aux différentes étapes de l’entrainement:
Par la suite, la progression est beaucoup moins rapide. Pour mon test, j’ai doublé le nombre d’images analysées par le discriminateur à cette étape. La qualité continue de s’améliorer et les images générées restent variées malgré le faible nombre d’images qui ont été présentées.
En conclusion
Maintenant, je vais laisser la machine s’entrainer afin d’obtenir de meilleurs résultats, on peu constater en effet que le réseau WGAN-GP continue d’apprendre et de s’approcher de l’objectif qui est de dessiner une fleur de lotus.
Pour de meilleurs résultats, il faudrait diversifier le jeu de données, 68 images, ce n’est vraiment pas suffisant. Enfin, l’utilisation d’une machine avec des GPU plutôt qu’un simple CPU serait un plus indéniable pour accélérer les calculs de façon conséquente.
Ici, je me suis consacré uniquement à la génération de fleurs de lotus en raisons des limitations matérielles mais les wgan-gp peuvent accomplir pleins d’autres taches comme le dé-bruitage d’une photo, la colorisation, la génération de visages etc…
Toutefois, ce genre d’outils soulèvent des questions éthiques concernant l’utilisation des œuvres utilisées pour l’apprentissage ou sur les droits des images générées. Pour en savoir plus, lisez l’article : L’Intelligence Artificielle Générative et les Défis du Droit d’Auteur
Comme toujours, si l’article vous a plu ou si vous avez des questions n’hésitez pas à laisser un commentaire pour que je puisse vous répondre ou améliorer l’article.