mozzicone Cos'è un codificatore automatico? - Unite.AI
Seguici sui social
Corso di perfezionamento sull'intelligenza artificiale:

AI 101

Cos'è un codificatore automatico?

mm
aggiornato on

Se hai già letto delle tecniche di apprendimento non supervisionato, potresti esserti imbattuto nel termine "codificatore automatico”. Gli autoencoder sono uno dei modi principali in cui vengono sviluppati i modelli di apprendimento senza supervisione. Ma cos'è esattamente un codificatore automatico?

In breve, gli autocodificatori operano prendendo i dati, comprimendoli e codificandoli, quindi ricostruendo i dati dalla rappresentazione della codifica. Il modello viene addestrato finché la perdita non viene ridotta al minimo e i dati vengono riprodotti il ​​più fedelmente possibile. Attraverso questo processo, un codificatore automatico può apprendere le caratteristiche importanti dei dati. Sebbene questa sia una rapida definizione di codificatore automatico, sarebbe utile dare un'occhiata più da vicino ai codificatori automatici e ottenere una migliore comprensione del loro funzionamento. Questo articolo cercherà di demistificare gli autoencoder, spiegando l'architettura degli autoencoder e le loro applicazioni.

Cos'è un codificatore automatico?

Autoencoder sono reti neurali. Le reti neurali sono composte da più livelli e l'aspetto determinante di un codificatore automatico è che i livelli di input contengono esattamente la stessa quantità di informazioni del livello di output. Il motivo per cui il livello di input e il livello di output hanno esattamente lo stesso numero di unità è che un codificatore automatico mira a replicare i dati di input. Emette una copia dei dati dopo averli analizzati e ricostruiti in modo non supervisionato.

I dati che si muovono attraverso un codificatore automatico non sono solo mappati direttamente dall'input all'output, il che significa che la rete non si limita a copiare i dati di input. Ci sono tre componenti in un codificatore automatico: una parte di codifica (input) che comprime i dati, un componente che gestisce i dati compressi (o collo di bottiglia) e una parte di decodifica (output). Quando i dati vengono immessi in un codificatore automatico, vengono codificati e quindi compressi in una dimensione inferiore. La rete viene quindi addestrata sui dati codificati/compressi e genera una ricreazione di tali dati.

Allora perché dovresti addestrare una rete a ricostruire solo i dati che le vengono forniti? Il motivo è che la rete impara "l'essenza", o le caratteristiche più importanti dei dati di input. Dopo aver addestrato la rete, è possibile creare un modello in grado di sintetizzare dati simili, con l'aggiunta o la sottrazione di determinate funzionalità target. Ad esempio, potresti addestrare un codificatore automatico su immagini sgranate e quindi utilizzare il modello addestrato per rimuovere la grana/rumore dall'immagine.

Architettura dell'autocodificatore

Diamo uno sguardo a l'architettura di un codificatore automatico. Discuteremo qui l'architettura principale di un codificatore automatico. Ci sono variazioni su questa architettura generale che discuteremo nella sezione seguente.

Foto: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Come accennato in precedenza, un autoencoder può essere essenzialmente suddiviso in tre diversi componenti: l'encoder, un collo di bottiglia e il decoder.

La parte del codificatore dell'autocodificatore è tipicamente una rete di feedforward densamente connessa. Lo scopo dei livelli di codifica è quello di prendere i dati di input e comprimerli in una rappresentazione dello spazio latente, generando una nuova rappresentazione dei dati che ha una dimensionalità ridotta.

I livelli di codice, o il collo di bottiglia, si occupano della rappresentazione compressa dei dati. Il codice del collo di bottiglia è attentamente progettato per determinare le porzioni più rilevanti dei dati osservati, o per dirla in altro modo le caratteristiche dei dati che sono più importanti per la ricostruzione dei dati. L'obiettivo qui è determinare quali aspetti dei dati devono essere conservati e quali possono essere eliminati. Il codice del collo di bottiglia deve bilanciare due diverse considerazioni: dimensione della rappresentazione (quanto è compatta la rappresentazione) e rilevanza variabile/funzionalità. Il collo di bottiglia esegue l'attivazione in base all'elemento sui pesi e sui pregiudizi della rete. Il livello del collo di bottiglia è talvolta chiamato anche rappresentazione latente o variabili latenti.

Il livello di decodifica è responsabile di prendere i dati compressi e riconvertirli in una rappresentazione con le stesse dimensioni dei dati originali e inalterati. La conversione viene eseguita con la rappresentazione dello spazio latente creata dal codificatore.

L'architettura più basilare di un codificatore automatico è un'architettura feed-forward, con una struttura molto simile a un percettrone a strato singolo utilizzato nei percettroni multistrato. Proprio come le normali reti neurali feed-forward, l'auto-codificatore viene addestrato attraverso l'uso della backpropagation.

Attributi di un codificatore automatico

Esistono vari tipi di codificatori automatici, ma tutti hanno determinate proprietà che li accomunano.

Gli autoencoder apprendono automaticamente. Non richiedono etichette e, se vengono forniti dati sufficienti, è facile ottenere un codificatore automatico per raggiungere prestazioni elevate su un tipo specifico di dati di input.

Gli autoencoder sono specifici dei dati. Ciò significa che possono comprimere solo dati molto simili ai dati su cui l'autoencoder è già stato addestrato. Anche gli autoencoder sono con perdita, il che significa che gli output del modello saranno degradati rispetto ai dati di input.

Quando progettano un codificatore automatico, gli ingegneri del machine learning devono prestare attenzione a quattro diversi iperparametri del modello: dimensione del codice, numero di livello, nodi per livello e funzione di perdita.

La dimensione del codice decide quanti nodi iniziano la parte centrale della rete e meno nodi comprimono maggiormente i dati. In un codificatore automatico profondo, mentre il numero di livelli può essere qualsiasi numero ritenuto appropriato dall'ingegnere, il numero di nodi in un livello dovrebbe diminuire man mano che il codificatore va avanti. Nel frattempo, vale il contrario nel decodificatore, il che significa che il numero di nodi per strato dovrebbe aumentare man mano che gli strati del decodificatore si avvicinano allo strato finale. Infine, la funzione di perdita di un codificatore automatico è tipicamente l'entropia incrociata binaria o l'errore quadratico medio. L'entropia incrociata binaria è appropriata per i casi in cui i valori di input dei dati sono compresi nell'intervallo 0 – 1.

Tipi di codificatore automatico

Come accennato in precedenza, esistono variazioni sulla classica architettura dell'autoencoder. Esaminiamo le diverse architetture di autoencoder.

scarso

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Mentre gli autoencoder in genere hanno un collo di bottiglia che comprime i dati attraverso una riduzione dei nodi, codificatore automatico sparsos sono un'alternativa a quel tipico formato operativo. In una rete sparsa, i livelli nascosti mantengono le stesse dimensioni dei livelli del codificatore e del decodificatore. Vengono invece penalizzate le attivazioni all'interno di un dato layer, impostandolo in modo che la funzione di perdita catturi meglio le caratteristiche statistiche dei dati di input. Per dirla in un altro modo, mentre i livelli nascosti di un autoencoder sparso hanno più unità rispetto a un autoencoder tradizionale, solo una certa percentuale di essi è attiva in un dato momento. Le funzioni di attivazione di maggiore impatto vengono mantenute e altre vengono ignorate e questo vincolo aiuta la rete a determinare solo le caratteristiche più salienti dei dati di input.

Contrattivo

Codificatori automatici contrattivi sono progettati per essere resistenti a piccole variazioni nei dati, mantenendo una rappresentazione coerente dei dati. Ciò si ottiene applicando una penalità alla funzione di perdita. Questa tecnica di regolarizzazione si basa sulla norma di Frobenius della matrice Jacobiana per le attivazioni del codificatore di input. L'effetto di questa tecnica di regolarizzazione è che il modello è costretto a costruire una codifica in cui input simili avranno codifiche simili.

Convoluzionale

Codificatori automatici convoluzionali codificare i dati di input suddividendo i dati in sottosezioni e quindi convertendo queste sottosezioni in segnali semplici che vengono sommati insieme per creare una nuova rappresentazione dei dati. Analogamente alle reti neurali a convoluzione, un codificatore automatico convoluzionale è specializzato nell'apprendimento dei dati dell'immagine e utilizza un filtro che viene spostato sull'intera sezione dell'immagine per sezione. Le codifiche generate dal livello di codifica possono essere utilizzate per ricostruire l'immagine, riflettere l'immagine o modificare la geometria dell'immagine. Una volta che i filtri sono stati appresi dalla rete, possono essere utilizzati su qualsiasi input sufficientemente simile per estrarre le caratteristiche dell'immagine.

denoising

Foto: MAL tramite Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Denoising degli autocodificatori introdurre rumore nella codifica, risultando in una codifica che è una versione corrotta dei dati di input originali. Questa versione danneggiata dei dati viene utilizzata per addestrare il modello, ma la funzione di perdita confronta i valori di output con l'input originale e non con l'input danneggiato. L'obiettivo è che la rete sia in grado di riprodurre la versione originale e non corrotta dell'immagine. Confrontando i dati corrotti con i dati originali, la rete apprende quali caratteristiche dei dati sono più importanti e quali caratteristiche non sono importanti/corruzioni. In altre parole, affinché un modello possa eliminare il rumore dalle immagini danneggiate, deve aver estratto le caratteristiche importanti dei dati dell'immagine.

Variazionale

Autocodificatori variazionali operare facendo ipotesi su come sono distribuite le variabili latenti dei dati. Un codificatore automatico variazionale produce una distribuzione di probabilità per le diverse caratteristiche delle immagini di addestramento/attributi latenti. Durante l'addestramento, il codificatore crea distribuzioni latenti per le diverse funzionalità delle immagini di input.

 

Poiché il modello apprende le caratteristiche o le immagini come distribuzioni gaussiane invece che come valori discreti, può essere utilizzato per generare nuove immagini. La distribuzione gaussiana viene campionata per creare un vettore, che viene immesso nella rete di decodifica, che esegue il rendering di un'immagine basata su questo vettore di campioni. In sostanza, il modello apprende le caratteristiche comuni delle immagini di addestramento e assegna loro una certa probabilità che si verifichino. La distribuzione di probabilità può quindi essere utilizzata per decodificare un'immagine, generando nuove immagini che assomigliano alle immagini di addestramento originali.

Durante l'addestramento della rete, i dati codificati vengono analizzati e il modello di riconoscimento emette due vettori, estraendo la media e la deviazione standard delle immagini. Una distribuzione viene creata in base a questi valori. Questo viene fatto per i diversi stati latenti. Il decodificatore quindi preleva campioni casuali dalla distribuzione corrispondente e li utilizza per ricostruire gli input iniziali alla rete.

Applicazioni di codifica automatica

Gli autoencoder possono essere utilizzati per un ampio varietà di applicazioni, ma vengono in genere utilizzati per attività come la riduzione della dimensionalità, il denoising dei dati, l'estrazione di caratteristiche, la generazione di immagini, la previsione da sequenza a sequenza e i sistemi di raccomandazione.

Il denoising dei dati è l'uso di codificatori automatici per rimuovere grana/rumore dalle immagini. Allo stesso modo, gli autoencoder possono essere utilizzati per riparare altri tipi di danni all'immagine, come immagini sfocate o sezioni mancanti di immagini. La riduzione della dimensionalità può aiutare le reti ad alta capacità ad apprendere caratteristiche utili delle immagini, il che significa che gli autocodificatori possono essere utilizzati per aumentare l'addestramento di altri tipi di reti neurali. Ciò vale anche per l'utilizzo di codificatori automatici per l'estrazione di funzionalità, poiché i codificatori automatici possono essere utilizzati per identificare funzionalità di altri set di dati di addestramento per addestrare altri modelli.

In termini di generazione di immagini, gli autoencoder possono essere utilizzati per generare immagini umane false o personaggi animati, che trovano applicazione nella progettazione di sistemi di riconoscimento facciale o nell'automazione di determinati aspetti dell'animazione.

I modelli di previsione da sequenza a sequenza possono essere utilizzati per determinare la struttura temporale dei dati, il che significa che un codificatore automatico può essere utilizzato per generare il successivo anche in una sequenza. Per questo motivo, un codificatore automatico potrebbe essere utilizzato per generare video. Infine, gli autocodificatori profondi possono essere utilizzati per creare sistemi di raccomandazione raccogliendo modelli relativi all'interesse dell'utente, con il codificatore che analizza i dati sul coinvolgimento dell'utente e il decodificatore che crea raccomandazioni che si adattano ai modelli stabiliti.

Blogger e programmatore con specialità in machine Learning ed Deep Learning temi. Daniel spera di aiutare gli altri a usare il potere dell'intelligenza artificiale per il bene sociale.