La partie générateur d'un GAN apprend à créer de fausses données en intégrant les commentaires du discriminateur. Il apprend à faire en sorte que le discriminateur classe sa sortie comme réelle.
L'entraînement du générateur nécessite une intégration plus étroite entre le générateur et le discriminateur que l'entraînement discriminateur. La partie du GAN qui entraîne le générateur inclut les éléments suivants:
- saisie aléatoire
- générateur, qui transforme l'entrée aléatoire en instance de données
- réseau discriminateur qui classe les données générées
- résultat du discriminateur
- la perte du générateur, qui pénalise le générateur pour avoir échoué à tromper le discriminateur ;
Figure 1: Rétropropagation de l'entraînement du générateur
Saisie aléatoire
Les réseaux de neurones nécessitent une forme d'entrée. Normalement, nous saisissons les données avec lesquelles nous voulons effectuer une action, comme une instance sur laquelle nous souhaitons classer ou faire une prédiction. Mais que utilisons-nous comme entrée pour un réseau qui génère des instances de données entièrement nouvelles ?
Dans sa forme la plus basique, un GAN prend un bruit aléatoire comme entrée. Le générateur transforme ensuite ce bruit en une sortie significative. En introduisant du bruit, nous pouvons demander au GAN de produire une grande variété de données, à partir d'échantillons de différents endroits de la distribution cible.
Les tests suggèrent que la répartition du bruit n'a pas d'importance. Nous pouvons donc choisir un élément facile à échantillonner, comme une distribution uniforme. Pour plus de commodité, l'espace à partir duquel le bruit est échantillonné est généralement de dimension inférieure à celle de l'espace de sortie.
Utiliser le discriminateur pour former le générateur
Pour entraîner un réseau de neurones, nous modifions sa pondération afin de réduire l'erreur ou la perte de son résultat. Toutefois, dans notre GAN, le générateur n'est pas directement connecté à la perte que nous essayons d'affecter. Le générateur alimente le réseau du discriminateur, et le discriminateur produit le résultat que nous essayons d'affecter. La perte du générateur pénalise le générateur pour la production d'un échantillon que le réseau discriminateur classe comme faux.
Ce bloc de réseau supplémentaire doit être inclus dans la rétropropagation. La rétropropagation ajuste chaque pondération dans la bonne direction en calculant l'impact des pondérations sur la sortie, c'est-à-dire la manière dont la sortie serait modifiée si vous modifiiez la pondération. Cependant, l'impact d'une pondération de générateur dépend de l'impact des pondérations du discriminateur qui l'alimentent. Ainsi, la rétropropagation commence à la sortie et retransmet le discriminateur dans le générateur.
En même temps, nous ne souhaitons pas que le discriminateur change lors de l'entraînement du générateur. Essayer d'atteindre une cible en mouvement rendrait le problème encore plus difficile pour le générateur.
Nous allons donc entraîner le générateur de la manière suivante:
- Exemple de bruit aléatoire
- Génère une sortie de générateur à partir du bruit aléatoire échantillonné.
- Obtenez une classification "réelle" ou "fausse" du discriminateur pour la sortie du générateur.
- Calculer la perte à partir de la classification des discriminateurs
- Effectuez une rétropropagation via le discriminateur et le générateur pour obtenir des gradients.
- Utilisez les gradients pour modifier uniquement les pondérations du générateur.
Il s'agit d'une itération de l'entraînement de générateur. Dans la section suivante, nous verrons comment jongler avec le générateur et le discriminateur.