VAE: autoencoder che immaginano

Un autoencoder classico sa solo ricostruire ciò che ha visto. Il variational autoencoder impara invece uno spazio latente continuo e campionabile, da cui si possono generare esempi mai esistiti.

Prendete un autoencoder addestrato su migliaia di volti, ignorate l’encoder e date in pasto al decoder un vettore inventato, scelto a caso. Vi aspettereste un volto nuovo. Quasi sempre, invece, otterrete una poltiglia grigia. Il motivo è che lo spazio latente di un autoencoder classico è come una città senza urbanistica: le case — i punti che corrispondono a dati reali — sono sparse qua e là, separate da terreni vaghi dove il decoder non è mai stato e non sa cosa costruire. Il variational autoencoder, proposto da Diederik Kingma e Max Welling nel 2013, nasce per risolvere esattamente questo problema: trasformare quella periferia caotica in un quartiere continuo, dove ogni indirizzo corrisponde a qualcosa di sensato.

L’ELBO, il trucco della riparametrizzazione e i due termini del costo sono derivati nel libro.

Leggi «Il salto probabilistico: l’ELBO e la riparametrizzazione» nel libro →

Dal punto alla nuvola

La differenza concettuale tra autoencoder e VAE sta in una sola mossa. L’encoder classico mappa ogni input su un punto preciso dello spazio latente. L’encoder di un VAE mappa invece ogni input su una distribuzione di probabilità: non «questa immagine è il punto (2.3, -1.1)» ma «questa immagine sta da qualche parte in questa zona, con centro qui e questa incertezza». In pratica l’encoder produce due vettori: una media μ e una deviazione standard σ, che insieme descrivono una gaussiana.

Durante l’addestramento, il punto da dare al decoder viene campionato da quella gaussiana: ogni volta un punto leggermente diverso, sempre nella stessa zona. È come insegnare a qualcuno un indirizzo dicendogli «il quartiere è questo» invece di fargli memorizzare le coordinate GPS al millimetro: la conoscenza che ne risulta è più elastica, e copre anche le vie intorno.

Il secondo ingrediente: tenere le nuvole insieme

Campionare non basta. Se l’unico obiettivo restasse la ricostruzione, la rete barerebbe: stringerebbe ogni gaussiana fino a farla diventare quasi un punto (σ minuscola) e allontanerebbe le nuvole l’una dall’altra, ricreando la città sparpagliata di prima. Serve un contrappeso.

Il contrappeso è un secondo termine nella funzione di perdita: la divergenza di Kullback-Leibler tra la distribuzione prodotta dall’encoder e una gaussiana standard centrata nell’origine. Detto senza formule: ogni nuvola viene incoraggiata a restare vicina al centro e a mantenere una larghezza ragionevole. La loss complessiva del VAE è quindi un braccio di ferro tra due forze:

  • Errore di ricostruzione: spinge le nuvole a separarsi, perché input diversi devono restare distinguibili;
  • Termine KL: spinge le nuvole a sovrapporsi ordinatamente attorno all’origine, senza buchi.

L’equilibrio tra le due produce uno spazio latente continuo (punti vicini decodificano in output simili) e completo (quasi ogni punto vicino all’origine decodifica in qualcosa di plausibile). Ed è questa doppia proprietà che rende il VAE generativo: per creare un dato nuovo basta pescare un punto a caso da una gaussiana standard e passarlo al decoder.

Lo spazio latente campionabile del VAE spazio latente: nuvole continue, senza buchi input encoder μ, σ z campionato decoder esempio nuovo mai visto in training

Ogni input diventa una nuvola gaussiana (μ, σ) nello spazio latente; le nuvole si sovrappongono formando una regione continua. Campionare un punto z e decodificarlo produce un esempio nuovo, coerente con i dati di addestramento.

Il trucco che rende tutto addestrabile

C’è un ostacolo tecnico che merita un paragrafo, perché è una delle idee più citate del deep learning. L’addestramento delle reti neurali funziona propagando il gradiente all’indietro attraverso ogni operazione — ma «estrarre un numero a caso» non è un’operazione derivabile. Come fa il gradiente ad attraversare il campionamento?

La soluzione è il reparameterization trick: invece di campionare direttamente z dalla gaussiana dell’encoder, si campiona un rumore ε da una gaussiana standard fissa e si calcola z = μ + σ·ε. Il risultato statistico è identico, ma ora la casualità è confinata in ε, che non dipende da nessun parametro della rete: il gradiente può fluire liberamente attraverso μ e σ. È come spostare il lancio del dado fuori dalla catena di montaggio: il caso c’è ancora, ma non blocca più il nastro.

Il VAE non memorizza esempi: impara la geometria della loro variabilità, e da quella geometria può pescare cose mai esistite.

Cosa sanno fare — e cosa no

Uno spazio latente ben organizzato apre possibilità che l’autoencoder classico non ha. La più nota è l’interpolazione: presi due input reali — due volti, due molecole, due suoni — si può tracciare una linea tra i loro punti latenti e decodificare le tappe intermedie, ottenendo una transizione graduale e plausibile dall’uno all’altro. In alcuni casi certe direzioni dello spazio acquistano un significato leggibile: muoversi lungo un asse cambia l’inclinazione di una cifra scritta a mano, o l’età apparente di un volto.

Onestà intellettuale impone di dire anche cosa i VAE non fanno bene: le immagini generate tendono a essere sfocate. Il compromesso della loss — ricostruire bene in media, restando ordinati — spinge il decoder verso output prudenti, che assomigliano a una media di possibilità invece che a un esempio nitido. È il motivo per cui, sul fronte del fotorealismo puro, i VAE sono stati superati prima dalle GAN e poi dai modelli di diffusione.

Eppure non sono un reperto storico. I VAE restano preziosi dove serve uno spazio latente strutturato più che un’immagine perfetta: nella chimica computazionale per esplorare lo spazio delle molecole candidate a diventare farmaci, nel rilevamento di anomalie con una misura probabilistica di «quanto è strano» un dato, e soprattutto come componente di sistemi più grandi. I modelli di diffusione latente — la famiglia di Stable Diffusion — usano proprio un autoencoder variazionale per comprimere le immagini nello spazio compatto in cui la diffusione lavora: senza quel passaggio, generare immagini ad alta risoluzione costerebbe una potenza di calcolo proibitiva.

Perché vi riguarda

Il VAE è il punto in cui il deep learning smette di limitarsi a riconoscere e comincia a immaginare in modo matematicamente disciplinato. L’idea di fondo — rappresentare i dati non come punti ma come distribuzioni, e organizzare lo spazio in modo che si possa campionare — è diventata un pattern ricorrente dell’AI generativa. Se usate un generatore di immagini, una parte variazionale sta probabilmente lavorando dietro le quinte. E se studiate machine learning, il VAE è il ponte concettuale ideale tra i modelli che comprimono e quelli che creano: capito questo, GAN e diffusione diventano molto meno misteriosi.

Il paper originale

Il variational autoencoder è stato introdotto da Diederik P. Kingma e Max Welling nel paper Auto-Encoding Variational Bayes (2013), disponibile su arXiv: arxiv.org/abs/1312.6114. Per un’introduzione estesa scritta dagli stessi autori, il riferimento è An Introduction to Variational Autoencoders (2019): arxiv.org/abs/1906.02691.

I commenti sono riservati agli iscritti.

Accedi per commentare