8.2 KiB
Autoencoder
Quando si allenano le CNN, uno dei problemi è che abbiamo bisogno di molti dati etichettati. Nel caso della classificazione delle immagini, dobbiamo separare le immagini in diverse classi, il che richiede un lavoro manuale.
Quiz pre-lezione
Tuttavia, potremmo voler utilizzare dati grezzi (non etichettati) per allenare gli estrattori di caratteristiche delle CNN, il che viene chiamato apprendimento auto-supervisionato. Invece delle etichette, utilizzeremo le immagini di allenamento sia come input che come output della rete. L'idea principale dell'autoencoder è che avremo una rete encoder che converte l'immagine di input in uno spazio latente (latent space) (normalmente è solo un vettore di dimensioni ridotte), e poi una rete decoder, il cui obiettivo sarà ricostruire l'immagine originale.
✅ Un autoencoder è "un tipo di rete neurale artificiale utilizzata per apprendere codifiche efficienti di dati non etichettati."
Poiché stiamo allenando un autoencoder per catturare quante più informazioni possibili dall'immagine originale per una ricostruzione accurata, la rete cerca di trovare il miglior embedding delle immagini di input per catturarne il significato.
Immagine dal blog di Keras
Scenari di utilizzo degli Autoencoder
Sebbene la ricostruzione delle immagini originali possa non sembrare utile di per sé, ci sono alcuni scenari in cui gli autoencoder sono particolarmente utili:
- Riduzione della dimensione delle immagini per la visualizzazione o allenamento degli embedding delle immagini. Di solito gli autoencoder danno risultati migliori rispetto al PCA, perché tengono conto della natura spaziale delle immagini e delle caratteristiche gerarchiche.
- Rimozione del rumore, ovvero eliminare il rumore dall'immagine. Poiché il rumore trasporta molte informazioni inutili, l'autoencoder non riesce a inserirlo tutto nello spazio latente relativamente piccolo e quindi cattura solo la parte importante dell'immagine. Quando si allenano denoiser, si parte dalle immagini originali e si utilizzano immagini con rumore aggiunto artificialmente come input per l'autoencoder.
- Super-risoluzione, ovvero aumentare la risoluzione delle immagini. Si parte da immagini ad alta risoluzione e si utilizza l'immagine a risoluzione inferiore come input per l'autoencoder.
- Modelli generativi. Una volta allenato l'autoencoder, la parte decoder può essere utilizzata per creare nuovi oggetti partendo da vettori latenti casuali.
Autoencoder Variazionale (VAE)
Gli autoencoder tradizionali riducono la dimensione dei dati di input in qualche modo, individuando le caratteristiche importanti delle immagini di input. Tuttavia, i vettori latenti spesso non hanno molto senso. In altre parole, prendendo come esempio il dataset MNIST, capire quali cifre corrispondono ai diversi vettori latenti non è un compito facile, perché vettori latenti vicini non corrispondono necessariamente alle stesse cifre.
D'altra parte, per allenare modelli generativi è meglio avere una certa comprensione dello spazio latente. Questa idea ci porta agli autoencoder variazionali (VAE).
Il VAE è un autoencoder che apprende a prevedere la distribuzione statistica dei parametri latenti, la cosiddetta distribuzione latente. Ad esempio, potremmo voler che i vettori latenti siano distribuiti normalmente con una certa media zmean e deviazione standard zsigma (sia la media che la deviazione standard sono vettori di una certa dimensionalità d). L'encoder nel VAE apprende a prevedere questi parametri, e poi il decoder prende un vettore casuale da questa distribuzione per ricostruire l'oggetto.
Riassumendo:
- Dal vettore di input, prevediamo
z_meanez_log_sigma(invece di prevedere direttamente la deviazione standard, prevediamo il suo logaritmo) - Campioniamo un vettore
sampledalla distribuzione N(zmean,exp(zlog_sigma)) - Il decoder cerca di decodificare l'immagine originale utilizzando
samplecome vettore di input
Immagine da questo post sul blog di Isaak Dykeman
Gli autoencoder variazionali utilizzano una funzione di perdita complessa composta da due parti:
- Perdita di ricostruzione è la funzione di perdita che mostra quanto l'immagine ricostruita sia vicina al target (può essere l'Errore Quadratico Medio, o MSE). È la stessa funzione di perdita degli autoencoder normali.
- Perdita KL, che garantisce che le distribuzioni delle variabili latenti rimangano vicine alla distribuzione normale. Si basa sul concetto di divergenza di Kullback-Leibler - una metrica per stimare quanto due distribuzioni statistiche siano simili.
Un vantaggio importante dei VAE è che permettono di generare nuove immagini relativamente facilmente, perché sappiamo da quale distribuzione campionare i vettori latenti. Ad esempio, se alleniamo un VAE con un vettore latente 2D su MNIST, possiamo poi variare i componenti del vettore latente per ottenere cifre diverse:
Immagine di Dmitry Soshnikov
Osserva come le immagini si fondono l'una nell'altra, mentre iniziamo a ottenere vettori latenti da diverse porzioni dello spazio dei parametri latenti. Possiamo anche visualizzare questo spazio in 2D:
Immagine di Dmitry Soshnikov
✍️ Esercizi: Autoencoder
Scopri di più sugli autoencoder in questi notebook corrispondenti:
Proprietà degli Autoencoder
- Specifici per i dati - funzionano bene solo con il tipo di immagini su cui sono stati allenati. Ad esempio, se alleniamo una rete di super-risoluzione sui fiori, non funzionerà bene sui ritratti. Questo perché la rete può produrre immagini ad alta risoluzione prendendo dettagli fini dalle caratteristiche apprese dal dataset di allenamento.
- Lossy - l'immagine ricostruita non è identica all'immagine originale. La natura della perdita è definita dalla funzione di perdita utilizzata durante l'allenamento.
- Funziona su dati non etichettati
Quiz post-lezione
Conclusione
In questa lezione, hai imparato i vari tipi di autoencoder disponibili per lo scienziato AI. Hai imparato come costruirli e come usarli per ricostruire immagini. Hai anche imparato il VAE e come usarlo per generare nuove immagini.
🚀 Sfida
In questa lezione, hai imparato a utilizzare gli autoencoder per le immagini. Ma possono essere utilizzati anche per la musica! Dai un'occhiata al progetto Magenta MusicVAE, che utilizza gli autoencoder per apprendere a ricostruire la musica. Fai alcuni esperimenti con questa libreria per vedere cosa puoi creare.
Quiz post-lezione
Revisione & Studio Autonomo
Per riferimento, leggi di più sugli autoencoder in queste risorse:
- Costruire Autoencoder in Keras
- Post sul blog di NeuroHive
- Autoencoder Variazionali Spiegati
- Autoencoder Variazionali Condizionali
Compito
Alla fine di questo notebook con TensorFlow, troverai un 'task' - usalo come tuo compito.
