The Generator

La parte del generatore di una GAN impara a creare dati falsi incorporando il feedback del discriminatore. Impara a fare in modo che il discriminatore classifichi il suo output come reale.

L'addestramento del generatore richiede un'integrazione più stretta tra il generatore e il discriminatore rispetto all'addestramento del discriminatore. La parte della GAN che addestra il generatore include:

  • input casuale
  • la rete del generatore, che trasforma l'input casuale in un'istanza di dati
  • rete di discriminatori, che classifica i dati generati
  • output del discriminatore
  • la perdita del generatore, che penalizza il generatore per non aver ingannato il discriminatore

Un diagramma di una rete generative adversarial. Al centro del
          diagramma è presente una casella etichettata "discriminatore". Due rami confluiscono in questa
          casella da sinistra.  Il ramo superiore inizia nell'angolo in alto a sinistra del
          diagramma con una casella etichettata "Immagini reali". Da questo cilindro parte una freccia che indica una casella etichettata "Sample" (Esempio). Una freccia dalla casella
          etichettata "Sample" (Esempio) si collega alla casella "Discriminator" (Discriminatore). Il ramo inferiore
          viene inviato alla casella "Discriminatore" che inizia con una casella etichettata come "Input
          casuale". Una freccia dalla casella "Input casuale" a una casella etichettata
          'Generatore'. Una freccia dalla casella "Generatore" a una seconda
          'Sample". Una freccia dalla casella "Sample" alla
          'Discriminator box. Sul lato destro della casella "Discriminatore", due
          frecce portano a due
          caselle sul lato destro del diagramma. Una freccia indica una casella
          etichettata "Perdita del discriminatore". L'altra freccia indica una casella etichettata
          'Perdita generatore'. Un riquadro giallo etichettato con una freccia rivolta verso sinistra e la parola "Backpropagation" è disegnato attorno al riquadro "Input casuale", al riquadro "Generatore", al riquadro "Sample" in basso, al riquadro "Discriminatore", al riquadro etichettato con "Reale" e "Falso" e al riquadro "Perdita del generatore" per indicare che la retropropagazione opera sulla parte del sistema racchiusa nel riquadro giallo.

Figura 1: retropropagazione nell'addestramento del generatore.

Input casuale

Le reti neurali richiedono una qualche forma di input. In genere inseriamo i dati con cui vogliamo fare qualcosa, ad esempio un'istanza che vogliamo classificare o per la quale vogliamo fare una previsione. Ma cosa utilizziamo come input per una rete che genera istanze di dati completamente nuove?

Nella sua forma più semplice, un GAN prende come input rumore casuale. Il generatore poi trasforma questo rumore in un output significativo. Introducendo del rumore, possiamo convincere la GAN a produrre un'ampia varietà di dati, campionando da punti diversi della distribuzione target.

Gli esperimenti suggeriscono che la distribuzione del rumore non è molto importante, quindi possiamo scegliere qualcosa da cui è facile campionare, ad esempio una distribuzione uniforme. Per comodità, lo spazio da cui viene campionato il rumore è in genere di dimensioni inferiori rispetto alla dimensionalità dello spazio di output.

Utilizzare il discriminatore per addestrare il generatore

Per addestrare una rete neurale, modifichiamo i pesi della rete per ridurre l'errore o la perdita della sua uscita. Nella nostra GAN, però, il generatore non è collegato direttamente alla perdita che stiamo cercando di modificare. Il generatore viene inserito nella rete del discriminatore e il discriminatore produce l'output che stiamo cercando di modificare. La perdita del generatore penalizza il generatore per aver prodotto un campione che la rete del discriminatore classifica come falso.

Questo frammento aggiuntivo di rete deve essere incluso nella retropropagazione. La retropropagazione modifica ogni peso nella direzione corretta calcolandone l'impatto sull'output, ovvero come cambierebbe l'output se modifichi il peso. Tuttavia, l'impatto del peso di un generatore dipende dall'impatto dei pesi del discriminatore a cui viene alimentato. Pertanto, la propagazione a ritroso inizia all'uscita e torna indietro attraverso il discriminatore nel generatore.

Allo stesso tempo, non vogliamo che il discriminatore vari durante l'addestramento del generatore. Cercare di colpire un bersaglio in movimento renderebbe un problema difficile ancora più difficile per il generatore.

Addestra quindi il generatore con la seguente procedura:

  1. Campione di rumore casuale.
  2. Produce l'output del generatore da rumore casuale campionato.
  3. Ottieni la classificazione del discriminatore "Reale" o "Falso" per l'output del generatore.
  4. Calcola la perdita dalla classificazione del discriminatore.
  5. Esegui la propagazione inversa sia attraverso il discriminatore sia attraverso il generatore per ottenere i gradienti.
  6. Utilizza i gradienti per modificare solo i pesi del generatore.

Questa è un'iterazione dell'addestramento del generatore. Nella sezione successiva vedremo come gestire l'addestramento sia del generatore che del discriminatore.