Recherche et développement
07/10/2019

DeepFakes et autres générations... Que se cache-t-il derrière les GANs, le prochain game-changer de l’IA ?


Temps de lecture : 14 minutes
Quantmetry.com : DeepFakes et autres générations... Que se cache-t-il derrière les GANs, le prochain game-changer de l’IA ?

Alors que les applications Zao et FaceApp font l’actualité et suscitent des débats, permettant au choix de s’intégrer dans Game of Thrones à l’aide d’ une seule photo, ou de transformer à l’envie son visage, de nombreux autres cas d’usages impliquant des modèles génératifs se développent.

 

On peut citer notamment :

  • la génération de médicaments, où les modèles génératifs couplés à l’apprentissage par renforcement permettent d’accélérer massivement la synthèse de nouvelles molécules.
  • la génération de nouveaux visuels dans le e-commerce : générer une tenue avec un nouveau mannequin, de nouvelles poses, voire un jour décliner à l’infini les possibilités.
  • la génération de données médicales synthétiques (ex : Choi et al, 2018) : dans les secteurs à données sensibles, la recherche est prolifique sur les méthodologies permettant de créer des données synthétiques, intéressantes d’un point de vue d’une modélisation Machine Learning. On pense au secteur de la santé, mais également aux entreprises qui ne peuvent historiser les données réelles mais souhaitent historiser des données synthétiques utilisables pour entraîner des modèles (ex : publication de la société Amadeus, Mottini et al. 2018). 
  • l’adaptation de domaine visuel : on peut par exemple générer un visuel d’une ville en été, en adaptant à un autre domaine (la même ville mais en hiver, ou encore passer une vidéo tournée de jour en vision de nuit).

Mais d’où vient cette multiplication de succès? 

Réponse courte : des Generative Adversarial Networks (GANs) !

Mais remettons un peu de contexte… Cet article a justement pour objectif d’expliciter les origines de cette méthode, détailler son fonctionnement, ainsi que certaines de ses actualités.

Un modèle… génératif? 

Tandis que le Deep Learning s’illustre depuis plusieurs années par ses performances sur les modèles discriminants (i.e apprendre une représentation complexe entre des données d’entrées de type pixels, mots, sons etc., et des classes ou des valeurs continues), les modèles génératifs profonds étaient jusqu’à récemment encore peu convaincants. Il s’agit d’une classe de modèles non supervisés ayant pour objectif, à partir de données d’entraînement, de générer de nouveaux échantillons provenant de la même distribution. En l’occurrence, on veut générer à partir d’une distribution p_{model} qui soit la plus proche possible de la distribution initiale p_{data}.

Ce problème d’estimation de densité est au coeur de l’apprentissage non supervisé, et s’appréhende de deux façons :

  • estimation explicite de densité : on veut explicitement définir p_{model}
  • estimation implicite : on veut générer à partir d’une p_{model} ​ de qualité, sans l’expliciter

Goodfellow propose la nomenclature de modèles génératifs suivante :

 

Depuis 2014, et la publication de Generative Adversarial Networks par Goodfellow et al. (plus de 11.000 citations tout de même..), ces méthodologies se sont relancées, avec en particulier l’émergence des réseaux antagonistes génératifs, ou GANs. Il est à noter que les  Variational Autoencoders (VAEs) connaissent également un engouement sur certains cas d’application.

 

Les GANs sont un cadre d’estimation de modèle génératif. Il s’agit d’une façon d’entraîner des réseaux de neurones à représenter implicitement la distribution qui a permis de générer un certain jeu de données. On peut alors générer de nouveaux échantillons, plus ou moins réalistes selon le niveau de qualité du modèle (on peut dès à présent ouvrir la réflexion sur la façon de qualifier et quantifier cette qualité et ce réalisme !). De façon plus générale, ils permettent d’apprendre une représentation des données de façon non supervisée, qui peut également être utilisée de façon semi supervisée (amélioration de classifieurs sur données asymétriques par exemple par génération de données à labels minoritaires).

 

Plus précisément, deux réseaux sont entraînés simultanément en concurrence : un générateur G  (responsable de la génération de données, par exemples des images) et un discriminateur D (dans le cadre général, c’est un classifieur quantifiant la probabilité qu’une donnée provienne des données d’origine).

 

G n’a pas accès aux données d’origine, sa seule façon d’apprendre est via les interactions avec le discriminateur. D a accès aux données d’origine, ainsi que les données dites synthétiques. L’objectif de D est de maximiser la probabilité d’assigner le bon label (réel = 1, synthétique = 0) aux données qui lui sont fournies, réelles et synthétiques. On voit donc qu’on se place dans le cadre classique de la maximisation d’accuracy d’un classifieur. L’objectif de G est quand à lui de maximiser le nombre de données synthétiques labellisées « 1 » par D, donc de tromper D.

Ce cadre correspond à un jeu minimax à deux joueurs, pour lequel une unique solution, un équilibre de Nash, existe sous certaines conditions.

 

Le “vanilla GAN”, ou GAN d’origine 

Les GANs permettent une grande flexibilité de définitions de fonction objectif et plus généralement d’architecture.

Le générateur des GANs d’origine, ou vanilla GANs minimise théoriquement la divergence Jensen-Shannon entre données réelles et synthétiques, mais de nombreuses reformulations et extensions sont possibles, permettant d’élargir le cadre initial à des données avec discontinuités par exemple (catégorielles etc). Il est en pratique très courant d’adapter le problème d’optimisation avec des critères alternatifs par rapport aux décisions de D

 

Schéma de fonctionnement des vanilla GANs :

Notations :

  • p_{data} ​ : la distribution des données réelles data
  • p_{z} : une distribution connue qu’on pourra échantillonner de façon à obtenir un bruit aléatoire z utilisé comme entrant de notre réseau (usuellement gaussien ou uniforme).
  • G: z \rightarrow x tel que si z \sim p_z , alors x \sim p_d. G = G(z,\theta_g) un réseau de neurones de paramètres g .
  • D: x \rightarrow y \in (0,1)  y est la probabilité estimée que x provienne de p_{data}​​. D = D(x,\theta_d)un réseau de neurones de paramètres d .

On entraîne D pour maximiser la probabilité d’assigner un label correctement (que ce soit pour un exemple du dataset ou venant de G ) . En parallèle, on entraîne G pour minimiser log(1-D(G(z)))  c’est-à-dire que l’on souhaite que D(G(z))  soit le plus proche de 1 (donc que le discriminant se “trompe” et classifie notre exemple comme venant du dataset). 

 

On obtient alors la fonction objectif suivante :

\min_{G} \max_{D} V(D,G) = E_{x\sim p_{data}(x)}[log(D(x))]+E_{z\sim p_z(z)}[log(1-D(G((z)))]

 

On va alors alterner entre :

      1. une montée de gradient pour D :

\max_{\theta_d} [E_{x\sim p_{data}(x)}log(D_{\theta_d}(x))+E_{z\sim p_z(z)}log(1-D_{\theta_d}(G_{\theta_g}((z)))]

      2. une descente de gradient pour G  :

\min_{\theta_g} [E_{z\sim p_z(z)}log(1-D_{\theta_d}(G_{\theta_g