Gli autoencoder

Le reti neurali sono disponibili in tutte le forme e dimensioni ed è esattamente la forma e la dimensione che determinano le prestazioni della rete nel risolvere un determinato problema.

Gli autoencoder sono reti neurali il cui obiettivo è generare nuovi dati dapprima comprimendo l’input in uno spazio di variabili latenti e, successivamente, ricostruendo l’output sulla base delle informazioni acquisite. Questa tipologia di rete è composta da due parti, encoder e decoder (vedi la figura sotto):

Encoder: la parte della rete che comprime l’input in uno spazio di variabili latenti e che può essere rappresentato dalla funzione di codifica h=f(x).

Decoder: la parte che si occupa di ricostruire l’input sulla base delle informazioni precedentemente raccolte. È rappresentato dalla funzione di decodifica r=g(h).

Nell’esempio qui sotto, la rete presenta due livelli nascosti completamente collegati, con quattro neuroni ciascuno.

In questo caso, i valori di input non possono essere semplicemente collegati ai rispettivi nodi di output. Per avere successo in questo compito, l’autoencoder deve in qualche modo comprimere le informazioni fornite e ricostruirle prima di presentarle come output finale.

Se formiamo questa rete come un autoencoder potremmo incontrare un problema serio, infatti se ogni neurone trasmette il proprio valore in modo lineare verso l’output (I0 su X0 su Y0 su Z0), non sta accadendo nessun vero apprendimento, ma semplicemente un passaggio di dati da un livello all’altro.

Mentre se uno dei livelli presenta meno nodi (vedi figura sotto), succede qualcosa di interessante.

Se la formazione ha esito positivo, il sistema ha imparato a rappresentare i valori di input in una forma diversa, ma più compatta. L’autoencoder può essere disaccoppiato quindi, in due reti separate, il codificatore e il decodificatore, entrambi condividendo il livello nel mezzo. I valori [Y0, Y1] sono spesso indicati come vettore di base e rappresentano l’immagine di input nel cosiddetto spazio latente.

Gli autoencoder sono naturalmente in perdita, il che significa che non saranno in grado di ricostruire perfettamente l’immagine di input, proprio perché si passa da 3 neuroni a 2 in fase di codifica e da 2 a 3 in fase di decodifica. Questo può essere visto nel confronto seguente [4], dove la prima riga mostra immagini casuali che sono state inviate, una ad una, a un codificatore automatico addestrato. La riga sotto mostra come sono stati ricostruiti dalla rete.

Tuttavia, poiché il codificatore automatico è costretto a ricostruire l’immagine di input nel miglior modo possibile, deve imparare a identificare e rappresentare le sue caratteristiche più significative. Poiché i dettagli più piccoli vengono spesso ignorati o persi, è possibile utilizzare un autoencoder per eliminare il rumore dalle immagini (come mostrato di seguito).

 

Funziona molto bene perché il rumore non aggiunge alcuna informazione reale, quindi è probabile che l’autoencoder lo ignori rispetto a funzionalità più importanti.