-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path06-gan_description.tex
111 lines (78 loc) · 14 KB
/
06-gan_description.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
\chapter{Generative Adversarial Networks - Partie théorique}
Après avoir appris à manipuler correctement les réseaux perceptrons simples, nous nous sommes intéressés à la structure de \textbf{Generative Adversarial Networks}, qui a constitué le cœur du projet, et son enjeu majeur.
La naissance du GAN se place dans un contexte de recherche de moyens innovants et efficaces de génération de données arbitraires. Dans l'ère de l'information, les données constituent une ressource fondamentale, et la capacité d'en générer facilement de nouvelles représente un pan entier de la recherche, si ce n'est plusieurs. Le GAN sont une solution à base de réseaux à apprentissage semi-supervisés, dont l'objectif est de générer des données arbitraires en extrapolant à partir de données initialement fournies.
Dans ce chapitre, nous décrirons qualitativement le fonctionnement attendu des GANs et leur théorie, puis nous détaillerons les aspects plus techniques et mathématiques du problème.
\section{Description du fonctionnement des \textit{Generative Adversarial Networks}}
Le GAN est une structure qui fait intervenir deux réseaux placés en compétition, qui vont s'émuler mutuellement afin d'atteindre un optimum, ceci en partant de rien. Les GAN représentent un domaine de recherche qui s'est ouvert en 2014 avec la publication d'un article de Ian Goodfellow \cite{goodfellow_generative_2014}.
En 2014,l'équipe de Ian Goodfellow publie dans NIPS un article intitulé \textbf{Generative Adversarial Nets}, dans lequel il décrit une nouvelle structure censée répondre au problème de génération de donnée. Cette structure est fondée sur l'entraînement simultané de deux réseaux neuronaux en compétition, respectivement nommés \textbf{Générateur} et \textbf{Discriminateur}.
\subsection{GAN - Idée générale}
Pour commencer, on souhaite obtenir un réseau qui soit capable de générer sur commande des données
\begin{itemize}
\item Pertinentes par rapport aux contraintes qu'on lui impose (exemple : on souhaite pouvoir obtenir un réseau qui dessine spécifiquement des moutons, et non un réseau qui dessine n'importe quoi comme bon lui semble)
\item Variées, c'est à dire que les données générées sont différentes deux a deux
\item Réalistes, voire indiscernables de données réelles aux yeux d'un humain \\
\end{itemize}
En résumé on souhaite construire un réseau (nommé dans toute la suite \textbf{Générateur}) qui modélise une projection d'un ensemble d'entrée vers l'ensemble des données réalistes et pertinentes vis-à-vis des contraintes imposées, et dont l'image ne soit pas réduite à un point de cet ensemble.
Résumée de cette façon, la tâche semble extraordinairement ardue, c'est pourquoi la structure fait appel à un second réseau (nommé \textbf{Discriminateur} dans toute la suite). En effet, la difficulté principale liée aux réseaux de neurones est l'apprentissage. Dans ce cas en particulier, la difficulté majeure est de caractériser ce qu'est une donnée de synthèse \"pertinente et réaliste, voire indiscernable d'une donnée réelle\"; car s'il est très facile de distinguer à l’œil une image de mouton de n'importe quoi d'autre, il est extrêmement difficile de construire un critère mathématique permettant de distinguer les images de mouton des autres. Or c'est ce critère dont nous avons besoin pour faire apprendre correctement à notre \textbf{Générateur}.
Cependant, nous avons vus avec les perceptrons et la base de données MNIST qu'il était parfaitement possible d'obtenir un réseau de neurones modélisant avec une grande précision des critères visuels, que l'on serait bien incapables d'exprimer mathématiquement. Il est par exemple impossible d'écrire analytiquement ce qu'est un chiffre manuscrit, mais il est possible de générer un réseau de neurones qui sache discriminer les chiffres manuscrits des autres images. Ainsi, en déléguant à un second réseau la responsabilité de modéliser le critère selon lequel nous voulons que nos données soient générées (exemple: on ne veut générer que des images de mouton, on va faire apprendre au \textbf{Discriminateur} à différencier un mouton de toutes les autres images possibles), on résout le (premier) problème majeur qui se pose.
\subsection{Des réseaux en compétition}
Le GAN va donc faire intervenir deux réseaux, dont l'un sert seulement à rendre possible l'apprentissage de l'autre. Le \textbf{Discriminateur} a pour unique rôle de modéliser le critère que l'on souhaite utiliser; son apprentissage se fait donc de la même manière que tout ce qui a été fait jusqu'ici, en apprentissage supervisé. C'est un réseau dont l'entrée est de la dimension des données que l'on souhaite construire, et dont la sortie est un réel entre 0 et 1, caractérisant la certitude du réseau que l'entrée qui lui été donnée est une donnée réelle ou non. Plus précisément, pour une entrée donnée, plus la sortie est proche de 1, plus le \textbf{Discriminateur} est convaincu que l'entrée est une donnée réelle, et non de synthèse. Son objectif est donc de sortir 1 pour toute entrée réelle, et 0 pour toute donnée de synthèse.
Le \textbf{Générateur} de son côté est le réseau qui doit générer des données synthétiques suffisamment convaincantes pour que le \textbf{Discriminateur} ne puisse les différencier des données réelles. Sa sortie est donc naturellement de la dimension des données qu'on souhaite construire. L'entrée du \textbf{Générateur} est un bruit (blanc) à partir duquel le réseau doit construire une donnée convaincante. Le \textbf{Générateur} est donc un réseau qui réalise une projection de l'ensemble d'entrée vers l'ensemble des données \"suffisamment convaincantes pour tromper un humain\". Passer un bruit en entrée permet d'obtenir des sorties variées. On comprend cependant que, le réseau réalisant un calcul déterministe, la dimension de la sorties est nécessairement inférieure à la dimension de l'entrée. Pour être certain d'obtenir un ensemble de sortie aussi grand que possible, on s'assurera toujours d'avoir un ensemble d'entrée de dimension suffisamment grande. \\
\begin{example} Cas des images de mouton
On souhaite obtenir un réseau qui génère des images $28 \times 28$ de moutons, suffisamment réalistes pour ne pouvoir être distinguées de réelles photos de moutons. On souhaite également observer de la variation dans ces images (avoir plein de moutons différents).
L'ensemble de sortie du \textbf{Générateur} est donc un ensemble inclus dans l'ensemble des images $28 \times 28$ et qui contient toutes les images que le \textbf{Générateur} considère comme étant des moutons réalistes. Pour être certain que l'ensemble d'entrée soit de dimension au moins aussi importante que l'ensemble de sortie, on mettra en entrée du réseau un bruit blanc de dimension $28 \times 28$. On est certain de cette façon que la taille de l'ensemble d'entrée n'impose pas de restriction sur les sorties. \\
\end{example}
\begin{example} Génération du chiffre 8
On peut schématiser de la manière suivante un réseau générateur entraîné à générer des 8.
\begin{figure}[h]
\begin{center}
\includegraphics[width=0.7\textwidth]{images/Colloque/GAN/generateur.png}\caption{Génération du chiffre 8 par un générateur $100\times 400\times 784$}
\end{center}
\end{figure}
\end{example}
\section{Discriminateur et Générateur}
\subsection{Notations}
\label{notations}
On note $\theta^{(D)}$ et $\theta^{(G)}$ les paramètres des réseaux, représentant les valeurs de la matrice de poids et de biais de chacun des réseaux.
On dispose de deux fonctions de coûts, notées $J^{(D)}(\theta^{(D)}, \theta^{(G)})$ et $J^{(G)}(\theta^{(D)}, \theta^{(G)})$, représentant respectivement les fonctions de coûts du Discriminateur et du Générateur. Dans leur notation, on montre bien que chacune d'elle dépendent des paramètres de chacun des deux réseaux. En effet, le Discriminateur apprend à discerner les fausses images issues du générateur des vrais images, tandis que le générateur apprend grâce aux indications fournies par le Discriminateur.
On note $z$ l'entrée du générateur (du bruit blanc multidimensionnel), $x$ une image réelle (issue d'une banque d'image), $G(z)$ la sortie du générateur (une image générée) et enfin $D(x)$ et $D(G(z))$ la sortie du discriminateur comportant en entrée respectivement une image réel et une image générée (le score donné respectivement à une image réelle et à une image générée. $x$ est alors une variable d'observation tandis que $z$ est une variable \textit{indirecte}.
$D$ et $G$ représentent alors des fonctions (différentiables) de paramètres $\theta^{(D)}$ et $\theta^{(G)}$. On appellera dans toute la suite \textbf{$D(x)$ et $D(G(z))$ les scores du discriminateur et du générateur}. On considérera souvent, à des intervalles d'apprentissages données, le score cumulé, appelé plus simplement score, défini comme la norme euclidienne d'un nombre donné de scores d'images (par exemple 20 images).\\
\begin{remark}(Bruit)
On notera que le bruit n'est pas nécessairement présent uniquement sur la première couche, il peut être présent quel que soit la couche. Il a été implémenté avec succès (voir \textit{NoisyLayer} dans \cite{barrios_gan_2018}), et utilisé avec succès par le groupe Salamandre \cite{bouvier_dyvoire_dessine-moi_2018}.
\end{remark}
\subsection{Théorie des jeux et équilibre de Nash}
\subsubsection{$D(G(z)) = D(x) = \frac{1}{2}$ : un premier critère d'optimalité}
Comme toute fonction de coût, le discriminateur cherchera au cours de l'apprentissage à réduire la fonction de coût $J^{(D)}(\theta^{(D)}, \theta^{(G)})$, en n'ayant de contrôle que sur $\theta^{(D)}$. De même, le générateur cherchera à réduire la fonction de coût $J^{(G)}(\theta^{(D)}, \theta^{(G)})$, en n'ayant de contrôle que sur $\theta^{(G)}$.
La solution à ce problème peut se traduire en théorie des jeux. On obtient alors un équilibre de Nash. On s'attend alors à ce que $D(G(z)) = D(x) = \frac{1}{2}$.
\subsection{Les différentes distributions statistiques impliquées}
Les distributions que l'on considère sont $p_{data}$, $p_{model}$ et $p_{G}$. $p_{G}$ correspond à la distribution représentée par le générateur, tandis que $p_{model}$ est la distribution vers lequel on souhaiterait tendre. Néanmoins, cette distribution $p_{model}$ est inatteignable car l'ensemble de la base d'apprentissage ne représente qu'une approximation de celle-ci, que nous noterons $p_{data}$. On cherche donc, par l'apprentissage semi-supervisé, à faire tendre $p_{G}$ vers $p_{data}$. \\
\begin{remark}
On pourrait introduire de plus une 4ème distribution $p_{D}$, qui correspondrait à l'interprétation du discriminateur de $p_{data}$. Ainsi, plus précisément, on chercherait au cours de l'apprentissage à faire tendre $p_{G}$ vers $p_{D}$ et $p_{D}$ vers $p_{data}$. On a affiché cette distribution dans les graphiques relatifs au GAN 1D (en bleu) (section \ref{gan1D}). Néanmoins, $p_{D}$ se construit simultanément (voir section \ref{subsect:Appr}) à partir de $p_{G}$ et $p_{data}$, ce qui rend la réflexion peu aisée. On s'en tiendra donc à $p_{G}$ et $p_{data}$.
\end{remark}
\section{Les fonctions de coût, l'apprentissage}
\subsection{Les différentes fonctions de coût}
\paragraph{Discriminateur}
Le discriminateur n'a, dans le cas du GAN classique, qu'une fonction de coût qui soit utilisée : \\
\begin{center}
$J^{(D)}(\theta^{(D)}, \theta^{(G)}) = -\frac{1}{2}\mathbb{E}_{x~p_{data}}\log{D(x)}-\frac{1}{2}\mathbb{E}_{z}\log{(1-D(G(z)))}$
\end{center}
\vspace{8pt}
$-\frac{1}{2}\mathbb{E}_{x~p_{data}}\log{D(x)}$ correspond à la capacité de D à reconnaître les vraies images, tandis que $-\frac{1}{2}\mathbb{E}_{z}\log{(1-D(G(z)))}$ correspond à la capacité de D à reconnaître les résultats de G.
\begin{remark}
Dans l'implémentation, par équivalence de développement limité, nous avons cherché à minimiser $-\log{(D(G(z))}$ plutôt que $\log(1-D(G(z))$.
\end{remark}
\paragraph{Générateur}
Différentes fonctions de coût peuvent être utilisées pour le Générateur. Nous avons implémenté le MinMax, l'heuristique non saturante et le maximum de vraisemblance (aussi appelée KL-Divergence). La définition mathématique de chacune peut être trouvée dans \cite{goodfellow_nips_2016}.
\subsection{Apprentissage par récompense ou par punition ?}
\label{subsect:Appr}
La figure \ref{type-appr-GAN} illustre les 3 apprentissages successifs possibles pour le GAN. Habituellement, les 2 apprentissages du discriminateur se font un pour un, et on joue sur le rapport entre le nombre de d'apprentissages du générateur et celui du générateur (voir \textit{nbGenTeach} et \textit{nbDisTeach} dans le fichier de configuration \cite{barrios_gan_2018}).
\begin{figure}[!h]
\begin{center}
\includegraphics[width=1\textwidth]{images/Colloque/GAN/apprentissage.png}
\caption{Les 3 types d'apprentissages successifs appliqués au GAN}
\label{type-appr-GAN}
\end{center}
\end{figure}
\subsection{Quand un réseau prend le pas sur l'autre}
Lorsque le rapport d'apprentissage est mal paramétré, on assiste à une déroute de l'un ou l'autre des réseaux, et la génération de contenu est alors non-fonctionnelle. En effet, si le discriminateur est trop performant, il indiquera à chaque apprentissage du générateur que l'image est une fausse image; le générateur n'aura alors aucune indication de la \"direction\" vers laquelle s'orienter, l'apprentissage ne lui procure aucune information si ce n'est que la distribution $p_{G}$ ne colle pas parfaitement à $p_{data}$; le générateur ne peut donc pas s'améliorer.
A contrario, un générateur beaucoup plus performant que le discriminateur d'un point de vue fonction d'erreur (ce qui est beaucoup plus rare et moins problématique) est plus difficile à interpréter; cela indique que le discriminateur n'a pas assez appris et qu'il sur-apprendra par la suite. Dans les 2 cas, on observe un apprentissage moins efficace.