Variational Autoencoder (VAE) con Distribuzione Discreta utilizzando Gumbel Softmax

VAE con Distribuzione Discreta e Gumbel Softmax

Teoria e Implementazione in PyTorch

https://unsplash.com/photos/sbVu5zitZt0

Dato che questo articolo sarà esteso, fornirò al lettore un indice per una migliore navigazione:

  1. Introduzione
  2. Breve Introduzione ai Variational Autoencoder (VAE)
  3. Divergenza Kullback-Leibler (KL)
  4. Perdita VAE
  5. Trucco della Riparametrazione
  6. Estrazione da una distribuzione categorica e il Trucco di Gumbel-Max
  7. Implementazione

Introduzione

I modelli generativi sono diventati molto popolari al giorno d’oggi grazie alla loro capacità di generare campioni nuovi con variabilità intrinseca imparando e catturando la distribuzione di probabilità sottostante dei dati di addestramento. Possiamo identificare due famiglie prominenti di modelli generativi che sono le Generative Adversarial Networks (GAN), i Variational Autoencoder (VAE) e i modelli di Diffusione. In questo articolo, approfondiremo i VAE con un particolare focus sui VAE con spazio latente categorico.

Breve Introduzione ai Variational Autoencoder (VAE)

I Variational Autoencoder (VAE) sono un tipo di rete neurale profonda utilizzata nell’apprendimento automatico non supervisionato. Appartengono alla famiglia degli autoencoder, che sono reti neurali progettate per apprendere rappresentazioni efficienti dei dati comprimendoli e poi ricostruendoli.

L’idea principale alla base dei VAE è quella di apprendere una distribuzione di probabilità dei dati in uno spazio latente. Questo spazio latente è una rappresentazione a dimensione inferiore dei dati di input, in cui ogni punto corrisponde a un campione di dati particolare. Ad esempio, dato un vettore nello spazio latente di dimensione 3, possiamo pensare che la prima dimensione rappresenti la forma degli occhi, la seconda la quantità di barba e la terza l’abbronzatura sulla faccia di una foto generata di una persona.

I VAE hanno due componenti chiave:

  1. Encoder: La rete encoder prende in input i dati di input e li mappa ai parametri di una distribuzione di probabilità (di solito gaussiana) nello spazio latente. Invece di produrre direttamente un singolo punto nello spazio latente…