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
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:
- Campione di rumore casuale.
- Produce l'output del generatore da rumore casuale campionato.
- Ottieni la classificazione del discriminatore "Reale" o "Falso" per l'output del generatore.
- Calcola la perdita dalla classificazione del discriminatore.
- Esegui la propagazione inversa sia attraverso il discriminatore sia attraverso il generatore per ottenere i gradienti.
- 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.