Quali sono le differenze tra codifica sparsa e autoencoder?


35

La codifica sparsa è definita come l'apprendimento di un insieme troppo completo di vettori di base per rappresentare i vettori di input (<- perché lo vogliamo). Quali sono le differenze tra codifica sparsa e autoencoder? Quando utilizzeremo la codifica sparsa e il codificatore automatico?


1
La codifica sparsa in realtà costituisce un tipo specifico di autoencoder noto come autoencoder sparse . Quindi puoi considerare la codifica sparsa come un sottoinsieme di autoencoder se vuoi.
Ciao Arrivederci,

Risposte:


34

Trovare le differenze può essere fatto guardando i modelli. Diamo un'occhiata prima alla codifica sparsa.

Codifica sparsa

La codifica sparsa minimizza l'obiettivo cui W è una matrice di basi, H è una matrice di codici e X è una matrice dei dati che desideriamo rappresentare. λ implementa uno scambio tra sparsità e ricostruzione. Nota che se ci viene dato H , la stima di W è facile tramite i minimi quadrati.

Lsc=||WHX||22reconstruction term+λ||H||1sparsity term
WXλHW

In principio, non abbiamo comunque. Eppure, esistono molti algoritmi che possono risolvere il suddetto obiettivo rispetto a H . In realtà, ecco come facciamo l'inferenza: dobbiamo risolvere un problema di ottimizzazione se vogliamo conoscere la h appartenente a una x invisibile .HHhx

Encoder automatici

Gli encoder automatici sono una famiglia di reti neurali non supervisionate. Ce ne sono molti, ad es. Codificatori automatici profondi o quelli con diversi trucchi di regolarizzazione collegati - ad es. Denoising, contrattive, sparsi. Esistono anche quelli probabilistici, come le reti stocastiche generative o il codificatore automatico variazionale. La loro forma più astratta è ma per ora andremo avanti con una molto più semplice: L ae = | | W σ ( W T X )

D(d(e(x;θr);θd),x)
dove σ è una funzione non lineare come il sigmoide logistico σ ( x ) = 1
Lae=||Wσ(WTX)X||2
σ .σ(x)=11+exp(x)

Somiglianze

Si noti che sguardi quasi come L una e una volta che abbiamo impostato H = σ ( W T X ) . La differenza di entrambi è che i) i codificatori automatici non incoraggiano la scarsità nella loro forma generale ii) un codificatore automatico utilizza un modello per trovare i codici, mentre la codifica sparsa lo fa mediante l'ottimizzazione.LscLaeH=σ(WTX)

WWLsc

Inoltre, i diversi metodi di regolarizzazione producono rappresentazioni con caratteristiche diverse. Denoising Auto Encoder ha anche dimostrato di essere equivalente a una certa forma di RBM ecc.

Ma perché?

Se vuoi risolvere un problema di previsione, non avrai bisogno di codificatori automatici a meno che tu abbia solo pochi dati etichettati e molti dati senza etichetta. Quindi in genere sarà meglio addestrare un codificatore automatico profondo e mettere un SVM lineare in cima invece di allenare una rete neurale profonda.

Tuttavia, sono modelli molto potenti per catturare la caratteristica delle distribuzioni. Questo è vago, ma attualmente sono condotte ricerche che lo trasformano in fatti statistici concreti. I modelli gaussiani latenti profondi noti come encoder Variational Auto o reti stocastiche generative sono modi piuttosto interessanti per ottenere encoder automatici che stimano in modo dimostrabile la distribuzione dei dati sottostanti.


Grazie per la tua risposta! Quindi significa che la codifica sparsa media non dovrebbe essere usata in nessun caso, ma autoencoder? Inoltre, dovrebbe esserci un termine aggiuntivo nella codifica sparsa che regolarizza W?
RockTheStar,

Non esiste una regola generale del genere. SC ha un vantaggio rispetto agli eventi avversi: la codifica tramite ottimizzazione può essere molto potente.
Bayerj,

Mi dispiace, puoi approfondire questo?
RockTheStar,

Avere una mappa fissa che è stata stimata per seguire alcuni vincoli (qui: risultato scarso) è meno potente di avere un ottimizzatore che cerca di trovare una soluzione come quella su probabilmente molte iterazioni.
Bayerj,

1
Mi dispiace sollevare di nuovo questa domanda. Penso che anche il codificatore automatico possa incoraggiare la scarsità, vale a dire il codificatore automatico scarso.
RockTheStar,

11

Nelle neuroscienze il termine Codifica neuronale è usato per riferirsi ai modelli di attività elettrica dei neuroni indotti da uno stimolo. La codifica sparsa a sua volta è un tipo di modello. Si dice che un codice sia scarso quando uno stimolo (come un'immagine) provoca l'attivazione di un numero relativamente piccolo di neuroni, che insieme lo rappresentano in modo scarso. Nell'apprendimento automatico, lo stesso vincolo di ottimizzazione utilizzato per creare un modello di codice sparso può essere utilizzato per implementare gli autodecoratori sparsi, che sono normali autocodificatori addestrati con un vincolo di scarsità. Vengono fornite spiegazioni più dettagliate per ciascuna delle tue domande.

La codifica sparsa è definita come l'apprendimento di un insieme troppo completo di vettori di base per rappresentare i vettori di input (<- perché lo vogliamo)

Innanzitutto, almeno da quando (Hubel & Wiesel, 1968) è noto che nella regione V1 ci sono cellule specifiche che rispondono al massimo a stimoli simili a bordi (oltre ad avere altre proprietà "utili"). Sparse Coding è un modello che spiega bene molte delle caratteristiche osservate di questo sistema. Vedi (Olshausen & Field, 1996) per maggiori dettagli.

In secondo luogo, viene mostrato che il modello che descrive la codifica sparsa è una tecnica utile per l'estrazione di funzioni in Machine Learning e produce buoni risultati nelle attività di apprendimento di trasferimento. Raina et al. (2007) hanno mostrato che una serie di "vettori di base" (caratteristiche, come tratti di penna e bordi) appresi con un set di addestramento composto da caratteri scritti a mano migliora la classificazione in un compito di riconoscimento delle cifre scritte a mano. Successivamente sono stati utilizzati modelli basati sulla codifica sparsa per addestrare reti "profonde", impilando strati di rilevatori di caratteristiche sparse per creare una "rete di credenze sparse profonde" (Lee et al., 2007). Più recentemente risultati sorprendenti nel riconoscimento delle immagini sono stati raggiunti usando modelli basati sulla codifica sparsa per costruire una rete con diversi livelli (il famoso "Cervello di Google"), che era in grado di distinguere l'immagine di un gatto in un modo puramente incustodito (Le et al. , 2013) .

In terzo luogo, è probabilmente possibile utilizzare le basi apprese per eseguire la compressione. A non ho mai visto nessuno farlo davvero.

Qual è la differenza tra codifica sparsa e autoencoder?

Un codificatore automatico è un modello che tenta di ricostruire il suo input, di solito usando una sorta di vincolo. Secondo Wikipedia, "è una rete neurale artificiale utilizzata per l'apprendimento di codifiche efficienti". Non c'è nulla nella definizione dell'autoencoder che richieda la scarsità. Contraddizioni basate su codifiche sparse sono una delle tecniche disponibili, ma ce ne sono altre, ad esempio Denoising Autoencoder, Auto-contrattori contrattuali e RBM. Tutto ciò fa sì che la rete apprenda buone rappresentazioni dell'input (che sono anche comunemente "sparse").

Quando utilizzeremo la codifica sparsa e il codificatore automatico?

Probabilmente sei interessato all'utilizzo di un codificatore automatico per l'estrazione delle funzioni e / o il pre-training delle reti profonde. Se si implementa un codificatore automatico con il vincolo di sparsità, verranno utilizzati entrambi.


Questa risposta ha molti punti interessanti e riferimenti importanti. Tuttavia, il primo paragrafo è sbagliato . La codifica sparsa e gli encoder automatici sparsi sono bestie diverse.
Bayerj,

Dove si afferma che sono la stessa cosa? Per favore, dimmelo e correggerò la risposta.
Saul Berardo,

Nella prima frase
Bayerj,

"La codifica sparsa è solo una delle tecniche disponibili per l'addestramento degli autoencoders". Questa frase non definisce "Sparse Coding" come la stessa "bestia" del codificatore automatico. Dice che, tra tutte le tecniche disponibili per l'addestramento degli autoencoder, uno di questi è "Sparse Coding". Concordo sul fatto che la frase abbia effettivamente qualche ambiguità, che credo sia chiarita dal resto della risposta.
Saul Berardo,

Dici che la codifica sparsa è un metodo per addestrare gli encoder automatici. Questo non è chiaramente il caso, poiché gli encoder automatici hanno un decodificatore esplicito che non è implementato con un algoritmo di ottimizzazione. Dato un codificatore automatico arbitrario non è possibile addestrarlo con una codifica sparsa.
Bayerj,

1

Un programmatore sparso è un po 'come un mezzo codificatore automatico. Un codificatore automatico funziona come:

input  =>  neural net layer  =>  hidden outputs => neural net layer => output

Per la retro-propagazione, il segnale di errore, la perdita, è: input - output

Se applichiamo un vincolo di sparsità sugli output nascosti, allora la maggior parte sarà zero e alcuni saranno 1s. Quindi il secondo strato è essenzialmente un insieme di funzioni di base lineari, che vengono sommate, secondo quale delle uscite nascoste sono 1s.

Nella codifica sparsa, abbiamo solo la seconda metà di questo:

                                codes => neural net layer => output

I "codici" sono un gruppo di numeri reali, che selezionano per le funzioni di base rappresentate dai pesi nello strato della rete neurale. Dal momento che nel documento di Olshausen, stanno applicando un vincolo di scarsità ai codici, i codici sono, proprio come nell'encoder automatico rado, sparsi: per lo più zeri con alcuni.

La differenza che possiamo vedere ora chiaramente: per la codifica sparsa, non esiste una prima metà della rete neurale: i codici non ci vengono forniti automaticamente da una rete neurale.

Come otteniamo i codici nella codifica sparsa? Dobbiamo ottimizzare noi stessi, cosa che facciamo usando la discesa gradiente o simile, per trovare l'insieme di codici che fornisce meglio l'output corrispondente all'immagine di input. Dobbiamo farlo per ogni immagine, incluso per ogni immagine di prova, ogni volta.


0

Potresti voler leggere questo recente documento, https://arxiv.org/abs/1708.03735v2 proprio su questo stesso argomento. In questo documento gli autori mostrano che in effetti si può impostare un autoencoder in modo tale che il dizionario di verità di base sia un punto critico della funzione di perdita quadrata di quell'autoencoder.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.