Tecnologie

Autoencoder per la compressione dei dati: cosa sono, vantaggi e applicazioni



Indirizzo copiato

Usati nell’apprendimento non supervisionato, gli autoencoder sono in grado di apprendere da dati non etichettati e possono essere impiegati in diversi ambiti. La loro architettura li rende validi alleati e, benché possa sembrare banale, affronta e risolve diverse complessità

Pubblicato il 31 ott 2023



deep neural network

Gli autoencoder, chiamati auto codificatori in italiano, sono reti neurali usate per apprendere da dati non etichettati e questo li colloca nella sfera dell’unsupervised learning, ossia del Deep learning non supervisionato.

La disponibilità di un numero sempre maggiore di dati pone in prima istanza due problemi, ossia la necessità di elaborarli in tempi stretti e quella di elaborarli in meno spazio.

La compressione dei dati è l’elemento cardine degli autoencoder, progettati per la dimensionality reduction (la riduzione della dimensionalità dei dati) ma applicati successivamente a diversi ambiti.

Diventano anche dei modelli generativi tant’è che, se si addestrano gli autoencoder a riconoscere immagini di facce, sono anche in grado di generarne.

Cos’è un autoencoder

Gli autoencoder sono una particolare classe di algoritmi di deep learning utilizzati per la creazione di rappresentazioni compatte (o “codifiche”) di dati complessi in modo non supervisionato.

Sono framework di reti neurali, tecniche di apprendimento non supervisionate addestrate a copiare input in output.

Gli autoencoder hanno tre parti, ossia coder, codice e decoder. L’encoder comprime i dati e il decoder li ricostruisce. In questo processo di rappresentazione di dati di input, gli autoencoder imparano i coding, ossia la rappresentazione dei dati stessi ma a una dimensionalità inferiore.

In parole più accessibili, gli autoencoder elaborano dati di input comprimendoli e codificandoli per poi ricostruire i dati di output.

Il modello di autoencoder viene addestrato finché l’output non viene rappresentato nel modo più fedele possibile. È proprio attraverso questo processo che l’autoencoder impara a riconoscere le caratteristiche fondamentali dei dati.

Gli autoencoder, al pari di ogni rete neurale, sono composti da più livelli e ciò che li caratterizza è che i livelli di input contengono la medesima quantità di informazioni dell’output. Questo diventa più chiaro approfondendone l’architettura.

Il rilevamento di anomalie e la riduzione del rumore (denoising) delle immagini è uno degli ambiti principali in cui gli autoencoder vengono utilizzati.

Osservano i dati di input, elaborano una loro rappresentazione e producono degli output simili ai dati in ingresso. Per farlo sfruttano due parti distinte:

  • una recognition network (rete di riconoscimento) che è l’encoder, deputata a convertire i dati di input nelle rappresentazioni interne
  • una generative network (rete generativa) che è il decoder e che converte la rappresentazione interna in output

Questa suddivisione è funzionale al discorso relativo all’architettura degli autoencoder.

Architettura di un autoencoder

L’encoder e il decoder sono reti neurali feedforward dotate di un numero identico di livelli di input e di output, giacché determinato dai dati di input, i livelli centrali hanno un numero minore di nodi, è infatti il collo di bottiglia tipico delle reti neurali e, nel caso specifico, mentre input e output sono la rappresentazione dei dati ad alta dimensione, lo strato centrale coincide con la rappresentazione a bassa dimensione.

L'obiettivo dell'autoencoder è quello di minimizzare l'errore di ricostruzione tra l'input originario e l'output ricostruito, conducendo ad un'apprendimento che permette di creare rappresentazioni ottimizzate e ridotte dei dati di input.

Lo scopo del processo è quello di ridurre gli errori di ricostruzione dei dati e, restando nel dominio dell’apprendimento automatico, gli algoritmi maggiormente usati per raggiungere questo obiettivo sono quelli di backpropagation, strategia tesa a migliorare le reti neurali durante l’addestramento che si basa sul fare percorrere all’errore un cammino inverso tra output (decoder) e hidden (il livello nascosto).

Nell’apprendimento automatico esiste quello che viene chiamato dilemma bias-varianza. Nei modelli ci sono errori costanti (bias) che possono variare a seconda dei set di dati (varianza). Il compromesso che ne deriva è fondamentale negli autoencoder, che devono ricostruire gli input riducendo gli errori e può essere ottenuto mediante le architetture implementate.

Come si implementano gli autoencoder

Un autoencoder viene addestrato configurando quattro parametri. È bene ricordare, in questo passaggio, che è costituito da tre parti, ovvero encoder, code e decoder e queste vanno parametrizzate:

  • occorre configurare il numero di livelli che variano a seconda della complessità dei dati da elaborare
  • il numero di nodi per livello è un parametro di cui tenere conto considerando che encoder e decoder hanno medesime dimensioni
  • va pure impostato il numero di nodi nel livello intermedio (code), più il valore è ridotto e più la compressione è elevata
  • la funzione di perdita è un altro parametro ed è deputata alla misurazione di “perdita di ricostruzione”. È un problema di regressione, le funzioni di perdita sono entropia incrociata binaria (per valori di input binari) oppure errore quadratico medio

L’implementazione degli autoencoder varia a seconda della libreria usata. Tra le più popolari possiamo citare Keras o il framework PyTorch.

Applicazioni degli autoencoder

Gli ambiti in cui vengono usati gli autoencoder sono molteplici. Trovano collocazione nella riduzione della dimensionalità, nel rilevamento di anomalie e, più in generale, per l’apprendimento di caratteristiche.

Altro scopo classico è il denoising, modelli che vengono addestrati per rimuovere il rumore (noise) dai dati di input. Un esempio classico riguarda le immagini e l’addestramento dei sistemi a queste collegate. Si può aggiungere rumore ai dati di input e allenare la rete a ripristinare quelli originali.

Allo stesso modo, gli autoencoder possono essere utilizzati anche per comprimere database di immagini.

Nel 2019 un autoencoder variazionale – che si differisce da quelli classici che abbiamo trattato qui – ha permesso di prevedere l’interazione tra farmaci in un test effettuato sui topi.

Ecco alcuni dei principali utilizzi degli autoencoder

  1. Riduzione della dimensionalità: possono ridurre la dimensione dei dati complessi, creando una rappresentazione compressa che conserva le informazioni rilevanti. Questo è utile per gestire dati ad alta dimensionalità, eliminando ridondanze e rumore.
  2. Compressione dei dati: possono essere utilizzati per comprimere i dati, creando una rappresentazione compatta che occupa meno spazio sul disco. Questo è particolarmente utile quando si devono conservare grandi quantità di dati in modo efficiente.
  3. Rimozione del rumore: gli autoencoder possono imparare a ricostruire i dati originali anche se sono stati corrotti con del rumore. Addestrando l’autoencoder a ricostruire i dati originali, si produce una versione “pulita” dei dati da utilizzare per ulteriori analisi.
  4. Estrazione di feature: addestrando l’autoencoder su un insieme di dati non etichettati, si può creare una rappresentazione compressa che cattura le caratteristiche salienti dei dati, che possono poi essere utilizzate come input per modelli di apprendimento supervisivo.
  5. Generazione di dati sintetici: addestrando l’autoencoder a ricostruire i dati originali, è possibile generare nuove istanze di dati che condividono le stesse caratteristiche salienti dei dati di input.

In generale, gli autoencoder sono una potente tecnica di deep learning che offre molte possibilità di utilizzo in diversi ambiti, come il data mining, l’analisi delle immagini, la compressione dati e l’apprendimento automatico.

Articoli correlati

Articolo 1 di 2