Modèles génératifs profonds

Un modèle génératif est un moyen puissant d’apprendre tout type de distribution de données en utilisant l’apprentissage non supervisé et il a obtenu un énorme succès en quelques années. Tous les types de modèles génératifs visent à apprendre la vraie distribution des données de l’ensemble d’apprentissage afin de générer de nouveaux points de données avec certaines variations. Mais il n’est pas toujours possible d’apprendre la distribution exacte de nos données, que ce soit implicitement ou explicitement, et nous essayons donc de modéliser une distribution qui soit aussi similaire que possible à la distribution réelle des données. Pour cela, nous pouvons exploiter la puissance des réseaux neuronaux pour apprendre une fonction qui peut approcher la distribution du modèle de la vraie distribution.

Deux des approches les plus couramment utilisées et efficaces sont les autoencodeurs variationnels (VAE) et les réseaux adversariaux génératifs (GAN). Le VAE vise à maximiser la borne inférieure de la log-vraisemblance des données et le GAN vise à atteindre un équilibre entre le générateur et le discriminateur. Dans ce blogpost, je vais expliquer le fonctionnement des VAE et des GAN et l’intuition qui les sous-tend.

Autoencodeur variationnel

Je suppose que le lecteur est déjà familier avec le fonctionnement d’un autoencodeur vanille. Nous savons que nous pouvons utiliser un autoencodeur pour coder une image d’entrée vers une représentation de dimension beaucoup plus petite qui peut stocker des informations latentes sur la distribution des données d’entrée. Mais dans un auto-codeur classique, le vecteur codé ne peut être mis en correspondance avec l’entrée correspondante qu’en utilisant un décodeur. Il ne peut certainement pas être utilisé pour générer des images similaires avec une certaine variabilité.

Pour y parvenir, le modèle doit apprendre la distribution de probabilité des données d’entraînement. VAE est l’une des approches les plus populaires pour apprendre la distribution compliquée des données telles que les images en utilisant des réseaux neuronaux de manière non supervisée. Il s’agit d’un modèle graphique probabiliste ancré dans l’inférence bayésienne, c’est-à-dire que le modèle vise à apprendre la distribution de probabilité sous-jacente des données de formation afin de pouvoir facilement échantillonner de nouvelles données à partir de cette distribution apprise. L’idée est d’apprendre une représentation latente de faible dimension des données d’apprentissage appelées variables latentes (variables qui ne sont pas directement observées mais plutôt déduites par le biais d’un modèle mathématique) que nous supposons avoir généré nos données d’apprentissage réelles. Ces variables latentes peuvent stocker des informations utiles sur le type de sortie que le modèle doit générer. La distribution de probabilité des variables latentes z est désignée par P(z). Une distribution gaussienne est choisie comme préalable pour apprendre la distribution P(z) afin de pouvoir facilement échantillonner de nouveaux points de données pendant le temps d’inférence.

Maintenant, l’objectif principal est de modéliser les données avec certains paramètres qui maximisent la vraisemblance des données d’entraînement X. En bref, nous supposons qu’un vecteur latent de faible dimension a généré nos données x (x ∈ X) et nous pouvons mapper ce vecteur latent aux données x en utilisant une fonction déterministe f(z;θ) paramétrée par thêta que nous devons évaluer (voir fig. 1). Sous ce processus génératif, notre objectif est de maximiser la probabilité de chaque donnée dans X qui est donnée comme,

Pө(X) = ∫Pө(X, z)dz = ∫Pө(X|z)Pө(z)dz (1)

Ici, f(z ;θ)a été remplacé par une distribution Pө(X|z).

Fig. 1. Vecteur latent mis en correspondance avec la distribution des données à l’aide du paramètre ө

L’intuition derrière cette estimation par maximum de vraisemblance est que si le modèle peut générer des échantillons d’entraînement à partir de ces variables latentes, alors il peut également générer des échantillons similaires avec quelques variations. En d’autres termes, si nous échantillonnons un grand nombre de variables latentes à partir de P(z) et générons x à partir de ces variables, le x généré devrait correspondre à la distribution des données Pdata(x). Nous devons maintenant répondre à deux questions. Comment capturer la distribution des variables latentes et comment intégrer l’équation 1 sur toutes les dimensions de z ?

De toute évidence, c’est une tâche fastidieuse de spécifier manuellement les informations pertinentes que nous aimerions encoder dans le vecteur latent pour générer l’image de sortie. Nous nous appuyons plutôt sur les réseaux neuronaux pour calculer z juste avec une hypothèse que ce vecteur latent peut être bien approximé comme une distribution normale afin d’échantillonner facilement au moment de l’inférence. Si nous avons une distribution normale de z dans un espace à n dimensions, alors il est toujours possible de générer n’importe quel type de distribution en utilisant une fonction suffisamment compliquée et l’inverse de cette fonction peut être utilisé pour apprendre les variables latentes elles-mêmes.

Dans l’équation 1, l’intégration est portée sur toutes les dimensions de z et est donc intraitable. Cependant, il peut être calculé en utilisant des méthodes d’intégration de Monte-Carlo qui est quelque chose de pas facile à mettre en œuvre. Nous suivons donc une autre approche pour maximiser approximativement Pө(X) dans l’équation 1. L’idée du VAE est de déduire P(z) en utilisant P(z|X) que nous ne connaissons pas. Nous déduisons P(z|X) à l’aide d’une méthode appelée inférence variationnelle, qui est en fait un problème d’optimisation en statistique bayésienne. Nous modélisons d’abord P(z|X) à l’aide d’une distribution plus simple Q(z|X) qui est facile à trouver et nous essayons de minimiser la différence entre P(z|X) et Q(z|X) à l’aide de l’approche métrique de la divergence KL, afin que notre hypothèse soit proche de la vraie distribution. Ceci est suivi d’un grand nombre d’équations mathématiques que je ne vais pas expliquer ici mais que vous pouvez trouver dans l’article original. Mais je dois dire que ces équations ne sont pas très difficiles à comprendre une fois que vous avez l’intuition derrière le VAE.

La fonction objective finale du VAE est :-

L’équation ci-dessus a une très belle interprétation. Le terme Q(z|X) est essentiellement notre filet encodeur, z est notre représentation codée des données x(x ∈ X) et P(X|z) est notre filet décodeur. Ainsi, dans l’équation ci-dessus, notre objectif est de maximiser la log-vraisemblance de notre distribution de données sous une certaine erreur donnée par D_KL. On peut facilement voir que le VAE essaie de minimiser la limite inférieure de log(P(X)) puisque P(z|X) n’est pas traçable mais que le terme de divergence de KL est >=0. Cela revient à maximiser E et à minimiser D_KL. Nous savons que la maximisation de E est une estimation par maximum de vraisemblance et qu’elle est modélisée par un réseau de décodeurs. Comme je l’ai dit précédemment, nous voulons que notre représentation latente soit proche de la gaussienne et nous supposons donc que P(z) est N(0, 1). En suivant cette hypothèse, Q(z|X) devrait également être proche de cette distribution. Si nous supposons qu’il s’agit d’une gaussienne avec les paramètres μ(X) et Ʃ(X), l’erreur due à la différence entre ces deux distributions, c’est à dire, P(z) et Q(z|X) donnée par la divergence KL résulte en une solution de forme fermée donnée ci-dessous.

Considérant que nous optimisons la borne variationnelle inférieure, notre fonction d’optimisation est :

log(P(X|z)). – D_KL, où la solution de la seconde est montrée ci-dessus.

Donc, notre fonction de perte contiendra deux termes. Le premier est la perte de reconstruction de l’entrée vers la sortie et la seconde perte est le terme de divergence KL. Maintenant, nous pouvons former le réseau en utilisant l’algorithme de rétropropagation. Mais il y a un problème et c’est que le premier terme ne dépend pas seulement des paramètres de P mais aussi des paramètres de Q mais cette dépendance n’apparaît pas dans l’équation ci-dessus. Alors comment faire pour que la rétro-propagation se fasse à travers la couche où nous échantillonnons z au hasard à partir de la distribution Q(z|X) ou N pour que P puisse décoder. Les gradients ne peuvent pas passer par des nœuds aléatoires. Nous utilisons l’astuce de reparamétrisation (voir fig) pour rendre le réseau différentiable. Nous échantillonnons de N(μ(X), Σ(X)) en échantillonnant d’abord ε ∼ N(0, I), puis en calculant z=μ(X) + Σ1/2(X)∗ε.

Cela a été très joliment montré dans la figure 2 ? . Il faut noter que l’étape de feedforward est identique pour ces deux réseaux (gauche & droite) mais les gradients ne peuvent que se rétropropager à travers le réseau droit.

Fig.2. Astuce de reparamétrage utilisée pour la rétropropagation à travers les nœuds aléatoires

Au moment de l’inférence, nous pouvons simplement échantillonner z à partir de N(0, 1) et l’alimenter au réseau décodeur pour générer un nouveau point de données. Puisque nous optimisons la borne variationnelle inférieure, la qualité de l’image générée est un peu faible par rapport aux techniques de pointe comme les réseaux adversariaux génératifs.

La meilleure chose de VAE est qu’il apprend à la fois le modèle génératif et un modèle d’inférence. Bien que les VAE et les GAN soient tous deux des approches très intéressantes pour apprendre la distribution sous-jacente des données à l’aide de l’apprentissage non supervisé, les GAN donnent de meilleurs résultats que les VAE. Dans le VAE, nous optimisons la borne variationnelle inférieure alors que dans le GAN, cette hypothèse n’existe pas. En fait, les GAN ne traitent pas d’estimation explicite de la densité de probabilité. L’échec du VAE à générer des images nettes implique que le modèle n’est pas capable d’apprendre la vraie distribution postérieure. Les VAE et les GAN diffèrent principalement dans la manière de s’entraîner. Plongeons maintenant dans les Generative Adversarial Networks.

Generative Adversarial Networks

Yann LeCun dit que l’entraînement adversarial est la chose la plus cool depuis le pain tranché. En voyant la popularité des Generative Adversarial Networks et la qualité des résultats qu’ils produisent, je pense que la plupart d’entre nous seraient d’accord avec lui. L’entraînement contradictoire a complètement changé la façon dont nous apprenons aux réseaux neuronaux à effectuer une tâche spécifique. Les réseaux adversariaux génératifs ne fonctionnent pas avec une estimation de densité explicite comme les autoencodeurs variationnels. Ils reposent plutôt sur une approche de théorie des jeux dont l’objectif est de trouver un équilibre de Nash entre les deux réseaux, le générateur et le discriminateur. L’idée est d’échantillonner à partir d’une distribution simple comme la gaussienne, puis d’apprendre à transformer ce bruit en distribution de données en utilisant des approximateurs de fonctions universelles comme les réseaux neuronaux.

Ceci est réalisé par un entraînement contradictoire de ces deux réseaux. Un modèle générateur G apprend à capturer la distribution des données et un modèle discriminateur D estime la probabilité qu’un échantillon provienne de la distribution des données plutôt que de la distribution du modèle. Fondamentalement, la tâche du générateur est de générer des images d’apparence naturelle et la tâche du discriminateur est de décider si l’image est fausse ou réelle. On peut considérer ce jeu comme un jeu mini-maximum à deux joueurs où les performances des deux réseaux s’améliorent avec le temps. Dans ce jeu, le générateur essaie de tromper le discriminateur en générant des images réelles autant que possible et le générateur essaie de ne pas se laisser tromper par le discriminateur en améliorant sa capacité de discrimination. L’image ci-dessous montre l’architecture de base du GAN.

Fig.3. Bloc de construction du réseau adversarial génératif

Nous définissons une antériorité sur les variables de bruit d’entrée P(z), puis le générateur le fait correspondre à la distribution des données en utilisant une fonction différentiable complexe avec des paramètres өg. En plus de cela, nous avons un autre réseau appelé Discriminator qui prend l’entrée x et utilise une autre fonction différentiable avec des paramètres өd pour produire une valeur scalaire unique indiquant la probabilité que x provienne de la vraie distribution de données Pdata(x). La fonction objective du GAN est définie comme suit

Dans l’équation ci-dessus, si l’entrée du discriminateur provient de la vraie distribution de données, alors D(x) doit sortir 1 pour maximiser la fonction objective ci-dessus par rapport à D, alors que si l’image a été traitée par le discriminateur, elle doit sortir 1.t D, tandis que si l’image a été générée par le générateur, D(G(z)) doit produire 1 pour minimiser la fonction objectif par rapport à G. Ce dernier point implique essentiellement que G doit générer des images réalistes qui peuvent tromper D. Nous maximisons la fonction ci-dessus par rapport aux paramètres du discriminateur en utilisant l’ascension par gradient et minimisons la même chose par rapport aux paramètres du générateur en utilisant l’ascension par gradient. Mais il y a un problème pour optimiser l’objectif du générateur. Au début du jeu, lorsque le générateur n’a rien appris, le gradient est généralement très faible et lorsqu’il se comporte très bien, les gradients sont très élevés (voir Fig. 4). Mais nous voulons le comportement inverse. Nous maximisons donc E plutôt que de minimiser E

Fig.4. Coût pour le générateur en fonction de la réponse du discriminateur sur l’image générée

Le processus d’entraînement consiste à appliquer simultanément la descente de gradient stochastique sur le discriminateur et le générateur. Pendant l’apprentissage, nous alternons entre k étapes d’optimisation de D et une étape d’optimisation de G sur le mini-lot. Le processus d’apprentissage s’arrête lorsque le discriminateur est incapable de distinguer ρg et ρdata c’est-à-dire D(x, өd) = ½ ou lorsque ρg = ρdata.

Un des premiers modèles sur le GAN employant un réseau de neurones convolutif était DCGAN qui signifie Deep Convolutional Generative Adversarial Networks. Ce réseau prend en entrée 100 nombres aléatoires tirés d’une distribution uniforme et produit une image de la forme souhaitée. Le réseau se compose de nombreuses couches convolutionnelles, déconvolutionnelles et entièrement connectées. Le réseau utilise de nombreuses couches déconvolutionnelles pour transformer le bruit d’entrée en l’image de sortie souhaitée. La normalisation par lots est utilisée pour stabiliser l’apprentissage du réseau. L’activation ReLU est utilisée dans le générateur pour toutes les couches à l’exception de la couche de sortie qui utilise la couche tanh et le Leaky ReLU est utilisé pour toutes les couches du discriminateur. Ce réseau a été entraîné en utilisant la descente de gradient stochastique en mini-batch et l’optimiseur Adam a été utilisé pour accélérer l’entraînement avec des hyperparamètres accordés. Les résultats de l’article sont assez intéressants. Les auteurs ont montré que les générateurs ont des propriétés arithmétiques vectorielles intéressantes en utilisant lesquelles nous pouvons manipuler les images de la manière que nous voulons.

Fig.5. Générateur de DCGAN

Fig.6. Discriminateur de DCGAN

Une des variantes les plus utilisées des GANs est le GAN conditionnel qui est construit en ajoutant simplement le vecteur conditionnel avec le vecteur de bruit (voir Fig. 7). Avant le cGAN, nous générions des images de manière aléatoire à partir d’échantillons aléatoires de bruit z. Que faire si nous voulons générer une image avec certaines caractéristiques souhaitées. Existe-t-il un moyen de fournir de toute façon cette information supplémentaire au modèle sur le type d’image que nous voulons générer ? La réponse est oui et le GAN conditionnel est le moyen de le faire. En conditionnant le modèle à des informations supplémentaires qui sont fournies à la fois au générateur et au discriminateur, il est possible de diriger le processus de génération de données. Les GAN conditionnels sont utilisés dans une variété de tâches telles que la génération de texte en image, la traduction d’image en image, le marquage automatique d’images, etc. Une structure unifiée des deux réseaux a été montrée dans le diagramme ci-dessous.

Fig. 7. Un exemple de base de cGAN avec y comme vecteur de conditionnement

Un des aspects cool des GANs est qu’ils peuvent être entraînés même avec de petites données d’entraînement. En effet, les résultats des GAN sont prometteurs mais la procédure d’entraînement n’est pas triviale, en particulier la définition des hyperparamètres du réseau. De plus, les GANs sont difficiles à optimiser car ils ne convergent pas facilement. Il existe bien sûr quelques trucs et astuces pour améliorer les GAN, mais ils ne sont pas toujours utiles. Vous pouvez trouver certaines de ces astuces ici. De plus, nous n’avons pas de critères pour l’évaluation quantitative des résultats, sauf pour vérifier si les images générées sont perceptivement réalistes ou non.

Conclusion

Les modèles d’apprentissage profond atteignent réellement des performances de niveau humain dans l’apprentissage supervisé mais il n’en est pas de même pour l’apprentissage non supervisé. Néanmoins, les scientifiques du deep learning travaillent dur pour améliorer les performances des modèles non supervisés. Dans ce billet de blog, nous avons vu comment deux des plus célèbres cadres d’apprentissage non supervisé des modèles génératifs fonctionnent réellement. Nous avons appris à connaître les problèmes des autoencodeurs variationnels et pourquoi les réseaux adverbiaux sont meilleurs pour produire des images réalistes. Mais il existe des problèmes avec les GAN, comme la stabilisation de leur formation, qui est encore un domaine de recherche actif. Cependant, les GAN sont vraiment puissants et sont actuellement utilisés dans une variété de tâches telles que la génération d’images (voir cette vidéo) et de vidéos de haute qualité, la traduction de texte en images, l’amélioration d’images, la reconstruction de modèles 3D d’objets à partir d’images, la génération de musique, la découverte de médicaments contre le cancer, etc. En outre, de nombreux chercheurs en apprentissage profond travaillent également à unifier ces deux modèles et à en tirer le meilleur. Au vu du taux d’avancement croissant de l’apprentissage profond, je pense que les GAN ouvriront de nombreuses portes fermées de l’intelligence artificielle, comme l’apprentissage semi-supervisé et l’apprentissage par renforcement. Au cours des prochaines années, les modèles génératifs seront très utiles pour la conception graphique, la conception d’interfaces utilisateur attrayantes, etc. Il sera peut-être également possible de générer des textes en langage naturel à l’aide de réseaux adversariaux génératifs.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.