Generator w GAN uczy się tworzyć fałszywe dane, uwzględniając informacje zwrotne od dyskryminatora. Uczy się, aby dyskryminator sklasyfikował jego dane wyjściowe jako prawdziwe.
Trenowanie generatora wymaga ściślejszej integracji między generatorem a dyskryminatorem niż trenowanie dyskryminatora. Część GAN, która szkoli generator, obejmuje:
- losowe dane wejściowe
- sieć generatora, która przekształca losowe dane wejściowe w przypadek danych
- sieć dyskryminacyjna, która klasyfikuje wygenerowane dane
- dane wyjściowe wyróżnika
- generator loss, która penalizuje generatora za nieudaną próbę oszukania dyskryminatora.
Rysunek 1. Propagacja wsteczna w treningu generatora.
Losowe dane wejściowe
Sieci neuronowe potrzebują danych wejściowych. Zwykle podajemy dane, z którymi chcemy coś zrobić, np. instancję, którą chcemy sklasyfikować lub na podstawie której chcemy dokonać prognozy. Ale czego używamy jako danych wejściowych dla sieci, która generuje zupełnie nowe instancje danych?
W najprostszej postaci GAN przyjmuje jako dane wejściowe losowy szum. Następnie generator przekształca ten szum w sensowne dane wyjściowe. Dzięki wprowadzeniu szumu możemy sprawić, że GAN będzie generować zróżnicowane dane, pobierając je z różnych miejsc w rozkładzie docelowym.
Eksperymenty wskazują, że rozkład szumu nie ma większego znaczenia, więc możemy wybrać coś, z czego łatwo jest pobrać próbki, np. rozkład izotropowy. Dla wygody przestrzeń, z której pobierany jest szum, ma zwykle mniejszą wymiarność niż wymiar wyjściowy.
Używanie generatora do trenowania generatora
Aby trenować sieć neuronową, zmieniamy jej wagi, aby zmniejszyć błąd lub stratę na wyjściu. W naszym GAN generator nie jest jednak bezpośrednio połączony z funkcja utraty informacji, na którą próbujemy wpływać. Generator przekazuje dane do sieci dyskryminacyjnej, a dyskryminator generuje dane wyjściowe, na które chcemy wpływać. Strata generatora penalizuje generator za wygenerowanie próbki, którą sieć dyskryminatora zaklasyfikuje jako fałszywą.
Ten dodatkowy fragment sieci musi być uwzględniony w backpropagation. Wsteczna propagacja dostosowuje każdy współczynnik w odpowiednim kierunku, obliczając jego wpływ na wyjście – jak zmieni się wyjście, jeśli zmienisz współczynnik. Jednak wpływ wagi generatora zależy od wpływu wag dyskryminatora, do których jest ona dodawana. Współczynnik ten zaczyna się od wyjścia i przepływa z powrotem przez dyskryminator do generatora.
Jednocześnie nie chcemy, aby dyskryminator zmieniał się podczas treningu generatora. Próba trafienia w ruchomy cel uczyniłaby problem jeszcze trudniejszym dla generatora.
Dlatego trenujemy generator, wykonując te czynności:
- losowy szum;
- wygenerować dane wyjściowe generatora na podstawie próbkowanego losowego szumu;
- Uzyskaj klasyfikację „Real” lub „Fake” dla danych wyjściowych generatora.
- Oblicz straty z klasyfikacji dyskryminacyjnej.
- Przeprowadź propagację wsteczną przez dyskryminator i generator, aby uzyskać gradienty.
- Użyj gradientów, aby zmienić tylko wagi generatora.
To jest jedna iteracja treningu generatora. W następnej sekcji zobaczysz, jak zarządzać trenowaniem generatora i dyskryminatora.