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 du discriminateur. La partie du GAN qui entraîne le générateur comprend les éléments suivants:
- entrée aléatoire
- réseau générateur, qui transforme l'entrée aléatoire en instance de données
- un réseau discriminateur, qui classe les données générées
- sortie du discriminateur
- perte du générateur, qui pénalise le générateur pour ne pas avoir réussi à tromper le discriminateur
Figure 1: Rétropropagation lors de l'entraînement du générateur.
Saisie aléatoire
Les réseaux de neurones ont besoin d'une forme d'entrée. Normalement, nous saisissons des données avec lesquelles nous voulons effectuer une action, comme une instance que nous voulons classer ou sur laquelle nous voulons effectuer une prédiction. Mais que pouvons-nous utiliser comme entrée pour un réseau qui produit des instances de données entièrement nouvelles ?
Dans sa forme la plus élémentaire, un GAN utilise du bruit aléatoire comme entrée. Le générateur transforme ensuite ce bruit en sortie significative. En introduisant du bruit, nous pouvons amener le GAN à produire une grande variété de données, en échantillonnant à différents endroits de la distribution cible.
Les tests suggèrent que la distribution du bruit n'a pas beaucoup d'importance. Nous pouvons donc choisir quelque chose qui est facile à échantillonner, comme une distribution uniforme. Pour des raisons de commodité, l'espace à partir duquel le bruit est échantillonné est généralement de dimension inférieure à la dimensionnalité de l'espace de sortie.
Utiliser le discriminateur pour entraîner le générateur
Pour entraîner un réseau de neurones, nous modifions ses poids afin de réduire l'erreur ou la perte de sa sortie. Dans notre GAN, cependant, le générateur n'est pas directement connecté à la perte que nous essayons d'affecter. Le générateur alimente le réseau discriminateur, et le discriminateur produit la sortie que nous essayons d'influencer. La perte du générateur pénalise le générateur pour avoir produit un échantillon que le réseau de discrimination classe comme faux.
Ce morceau supplémentaire de réseau doit être inclus dans la rétropropagation. La rétropropagation ajuste chaque pondération dans la bonne direction en calculant son impact sur la sortie, c'est-à-dire comment la sortie changerait si vous modifiiez la pondération. Toutefois, l'impact d'un poids de générateur dépend de l'impact des poids de discriminants auxquels il est alimenté. La rétropropagation commence donc à la sortie et remonte à travers le discriminateur dans le générateur.
En même temps, nous ne voulons pas que le discriminateur change pendant l'entraînement du générateur. Essayer de toucher une cible en mouvement rendrait un problème difficile encore plus difficile pour le générateur.
Nous entraînons donc le générateur avec la procédure suivante:
- Échantillonner un bruit aléatoire
- Générer la sortie du générateur à partir d'un bruit aléatoire échantillonné.
- Obtenez la classification "Réel" ou "Faux" du discriminateur pour la sortie du générateur.
- Calculez la perte à partir de la classification du discriminateur.
- Effectuez une rétropropagation à la fois dans le discriminateur et le générateur pour obtenir des gradients.
- Utilisez les gradients pour ne modifier que les poids du générateur.
Il s'agit d'une itération de l'entraînement du générateur. Dans la section suivante, nous verrons comment jongler avec l'entraînement du générateur et du discriminateur.