Guida AutoEncoder - A cosa servono? Come si implementano?

MattiaL

Utente Gold
25 Agosto 2013
331
21
171
223
Ultima modifica:
Buonasera a tutti,
con questo inizierò una serie di guide che andranno a trattare alcune delle tecniche allo stato dell'arte nel Deep Learning.
Proverò sapendo di fallire miseramente di spiegare il tutto nel modo più semplice possibile, spero troviate utile tutto ciò che vi presenterò,

Cosa sono gli AutoEncoder? A cosa serve il pre-training)?
Il concetto di pre-training si ispira all'essere umano. Grazie a un'abilità innata, non dobbiamo imparare tutto da zero. Invece, trasferiamo e riutilizziamo le nostre vecchie esperienze e conoscenze scaturite da ciò che abbiamo appreso in passato per comprendere nuove conoscenze e gestire una serie di nuovi compiti.

Nel deep learning, il pre-training imita il modo in cui gli esseri umani elaborano nuove conoscenze. In parole povere si vanno ad utilizzare parametri e pesi di un modello preaddestrato su certi task per inizializzarlo verso nuovi task. In questo modo, la vecchia conoscenza aiuta i nuovi modelli a svolgere con successo i nuovi compiti invece di partire da zero e quindi avere una più rapida discesa del gradiente.

Gli autoencoder sono una classe di reti neurali artificiali non supervisionate che imparano a codificare in modo efficiente un vettore di input, creando una rappresentazione compressa ma significativa nello "spazio latente", per poi ricostruirlo ottenendo un vettore che si avvicina il più possibile a quello originale. Inoltre, per loro stessa concezione, gli autoencoder riducono le dimensioni dei dati imparando a ignorare il rumore presente nei dati, e quindi fungono da ottimi strumenti di denoising.

In genere sono costituiti da quattro componenti:
  • Encoder: uno o più strati di rete neurale e_1, ..., e_h che compongono una funzione f, in cui il modello impara a ridurre le dimensioni dell'input e a comprimere il pattern di input x in una rappresentazione codificata f(x).
  • BottleNeck: l'ultimo strato dell'encoder e_h, contenente la rappresentazione compressa f(x).
  • Decoder: uno o più strati di rete neurale d_1, ..., d_r (di solito, il decoder è costruito in modo speculare rispetto all'encoder. Questi strati compongono una funzione di decodifica g, in cui il modello impara a ricostruire i dati di ingresso originali dalla rappresentazione codificata f(x) in modo tale che g(f(x)) sia il più vicino possibile all'ingresso originale x.
  • Reconstruction Loss: esattamente come nelle normali reti neurali, gli autoencoder vengono addestrati con un algoritmo di ottimizzazione per minimizzare una funzione di perdita J. L'unica differenza è che negli autoencoder la perdita rappresenta la distanza tra l'input e l'output ricostruito:
2.png

dove è la ricostruzione della rete sull'ingresso x.


Spesso si ricorre a tecniche di regolarizzazione come il dropout o termini di regolarizzazione aggiunti alle funzioni di loss dell'autoencoder, in quanto ciò ha il duplice vantaggio di ridurre l'overfitting e di rendere la rappresentazione appresa più sparsa, più adatta a compiti diversi dalla ricostruzione dell'input, che è esattamente l'obiettivo del pre-training. Un altro modo per rendere sparsa la rappresentazione è quello di aggiungere un termine di penalizzazione alla perdita, basato sul valore di attivazione dei neuroni del bottleneck:

Immagine 2022-10-17 232943.png

dove
ai.png
è il valore di attivazione dell'i-esimo neurone del collo di bottiglia.

Cosa troverete nel package fornito?
  • AutoEncoder, una classe per scrivere AutoEncoder.
  • Convolutional1DAutoEncoder(eredita la classe AutoEncoder)
  • RecurrentAutoEncoder(eredita la classe AutoEncoder)
Esempi di AutoEncoder costruiti con questo codice:
CNN 1D AutoEncoder:

cnn_autoencoder_page-0001.jpg

LSTM AutoEncoder:
lstm_autoencoder_page-0001.jpg

A causa dei limiti di Inforge non riesco a scrivere tutto il codice dunque lo lascio in allegato per i più esperti. Il codice ovviamente è commentato ed allegato di script di test.
Mi sarebbe piaciuto commentarvelo in italiano ma non credo avrete problemi a comprendere le funzioni e il loro utilizzo.

Ai moderatori di Inforge, sarebbe possibile inserire Latex su Inforge? Perchè questi argomenti sono estratti di articoli e lavori universitari (che ovviamente ho già scritti in Latex) e mi sarebbe parecchio comodo. Inoltre dato che non sono molto bravo a formattare senza Latex se trovate il tempo di sistemare voi, ve ne sarei grato.
 

Allegati

  • models.zip
    22 KB · Visualizzazioni: 2
  • 2.png
    2.png
    3 KB · Visualizzazioni: 1
  • 2.png
    2.png
    3 KB · Visualizzazioni: 2