Der Generatorteil eines GAN lernt, gefälschte Daten zu erstellen, indem er Feedback vom Diskriminator einbezieht. Es lernt, den Discriminator dazu zu bringen, seine Ausgabe als echt zu klassifizieren.
Das Training des Generators erfordert eine engere Integration zwischen dem Generator und dem Discriminator als das Training des Discriminators. Der Teil des GAN, der den Generator trainiert, umfasst:
- Zufallseingabe
- Generatornetzwerk, das die zufällige Eingabe in eine Dateninstanz umwandelt
- Discriminator-Netzwerk, das die generierten Daten klassifiziert
- Diskriminatorausgang
- Generatorverlust, der den Generator dafür bestraft, dass er den Discriminator nicht täuschen konnte
Abbildung 1: Backpropagation beim Generatortraining
Zufallseingabe
Neurale Netze benötigen eine Art von Eingabe. Normalerweise geben wir Daten ein, mit denen wir etwas tun möchten, z. B. eine Instanz, die wir klassifizieren oder für die wir eine Vorhersage treffen möchten. Aber was verwenden wir als Eingabe für ein Netzwerk, das völlig neue Dateninstanzen ausgibt?
In seiner einfachsten Form nimmt ein GAN zufälligen Rauschen als Eingabe. Der Generator wandelt diesen Rausch dann in eine sinnvolle Ausgabe um. Durch die Einführung von Rauschen können wir den GAN dazu bringen, eine Vielzahl von Daten zu generieren, indem an verschiedenen Stellen in der Zielverteilung Stichproben genommen werden.
Tests deuten darauf hin, dass die Verteilung des Rauschens nicht so wichtig ist. Wir können also etwas auswählen, aus dem sich leicht Stichproben ziehen lassen, z. B. eine gleichmäßige Verteilung. Der Raum, aus dem das Rauschen abgetastet wird, hat aus praktischen Gründen in der Regel eine kleinere Dimension als der Ausgaberaum.
Discriminator zum Trainieren des Generators verwenden
Um ein neuronales Netz zu trainieren, ändern wir die Gewichte des Netzes, um den Fehler oder Verlust der Ausgabe zu reduzieren. In unserem GAN ist der Generator jedoch nicht direkt mit dem Verlust verbunden, den wir beeinflussen möchten. Der Generator speist das Diskriminator-Netzwerk und der Diskriminator erzeugt die Ausgabe, auf die wir Einfluss nehmen möchten. Mit dem Generatorverlust wird der Generator dafür bestraft, dass er ein Beispiel erstellt, das vom Diskriminatornetzwerk als Fälschung eingestuft wird.
Dieser zusätzliche Teil des Netzwerks muss in die Backpropagation einbezogen werden. Bei der Backpropagation wird jedes Gewicht in die richtige Richtung angepasst, indem die Auswirkungen des Gewichts auf die Ausgabe berechnet werden – also wie sich die Ausgabe ändern würde, wenn Sie das Gewicht ändern. Die Auswirkungen eines Generatorgewichts hängen jedoch von den Auswirkungen der Discriminatorgewichte ab, in die es eingespeist wird. Die Rückwärtsausbreitung beginnt also an der Ausgabe und fließt über den Discriminator zurück in den Generator.
Gleichzeitig soll sich der Discriminator während des Generatortrainings nicht ändern. Der Versuch, ein sich bewegendes Ziel zu treffen, würde ein schwieriges Problem für den Generator noch schwieriger machen.
Wir trainieren den Generator daher mit dem folgenden Verfahren:
- Zufallsrauschen erfassen
- Generatorausgang aus gesampletem Zufallsrauschen erzeugen.
- Klassifizierung „Echt“ oder „Fake“ für den Generatorausgang vom Diskriminator abrufen
- Verlust aus der Discriminator-Klassifizierung berechnen
- Backpropagation sowohl durch den Diskriminator als auch durch den Generator, um Gradienten zu erhalten.
- Mithilfe von Farbverläufen können Sie nur die Generatorgewichte ändern.
Dies ist eine Iteration des Generatortrainings. Im nächsten Abschnitt sehen wir uns an, wie Sie das Training sowohl des Generators als auch des Discriminators koordinieren.