Generator

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.

Schemat sieci generatywnej antagonistycznej Pośrodku diagramu znajduje się pole o nazwie „discriminator”. Z lewej strony do tego pola wpływają 2 gałęzie.  Gałąź górna zaczyna się w lewym górnym rogu diagramu od pola „Zdjęcia ze świata rzeczywistego”. Strzałka z cylindra prowadzi do pudełka z etykietą „Sample”. Strzałka z pola „Sample” (Próbka) prowadzi do pola „Discriminator” (Dyskryminator). Gałąź dolna prowadzi do pola „Dyskryminator”, które zaczyna się od pola „Wejście losowe”. Strzałka prowadzi z pola „Losowe dane wejściowe” do pola „Generator”. Strzałka prowadzi z pola „Generator” do drugiego pola „Przykład”. Strzałka prowadzi z pola „Próbka” do pola „Dyskryptory”. Po prawej stronie pola „Discriminator” znajdują się 2 strzałki prowadzące do 2 pól po prawej stronie diagramu. Jedna strzałka prowadzi do pola o nazwie „Utrata dyskryminacyjna”. Druga strzałka prowadzi do pola o nazwie „Utrata generatora”. Wokół pola „Losowy wejściowy” oraz pól „Generator”, „Próbka” (na dole), „Dyskryminator”, „Prawdziwy” i „Fałszywy” oraz pola „Generator” (strata) narysowano żółte pole z strzałką skierowaną w lewo i słowem „Backpropagation”. Ma to wskazywać, że propagacja wsteczna działa na części systemu ujętej w żółte pole.

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:

  1. losowy szum;
  2. wygenerować dane wyjściowe generatora na podstawie próbkowanego losowego szumu;
  3. Uzyskaj klasyfikację „Real” lub „Fake” dla danych wyjściowych generatora.
  4. Oblicz straty z klasyfikacji dyskryminacyjnej.
  5. Przeprowadź propagację wsteczną przez dyskryminator i generator, aby uzyskać gradienty.
  6. 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.