Come usare RBM per la classificazione?


12

Al momento sto giocando con Restricted Boltzmann Machines e dato che ci sono, vorrei provare a classificare le cifre scritte a mano con esso.

Il modello che ho creato ora è un modello generativo piuttosto elaborato ma non so come andare oltre.

In questo articolo l'autore afferma che, dopo aver creato un buon modello generativo, uno " addestra un classificatore discriminante (vale a dire, classificatore lineare, Support Vector Machine) in cima all'RBM usando i campioni etichettati " e afferma inoltre " poiché si propaga il vettori di dati alle unità nascoste del modello RBM per ottenere vettori di unità nascoste o una rappresentazione di livello superiore dei dati ". Il problema è che non sono sicuro di aver capito bene.

Significa che tutto ciò che devo fare è propagare l'input alle unità nascoste e lì ho la mia funzione RBM per la classificazione?

Qualcuno può spiegarmi questo processo?


La macchina Boltzmann limitata è uno dei primi componenti utilizzati per l'apprendimento profondo. In effetti, il primo importante lavoro in DNN è stato svolto da Hinton è che la rete di credenze profonde si basava su RBM. Cerca questo documento (rete di credenze profonde, 2007, per Hinton) per ulteriori informazioni. Sul suo sito web puoi trovare risorse molto importanti, nonché un esperimento demo cs.toronto.edu/~hinton/digits.html
Bashar Haddad,

@hbaderts Ho iniziato a giocare con RBM. La risposta accettata è stata di facile lettura. Volevo chiedere chiarimenti, il livello nascosto RBM è casuale dopo il campionamento dalla distribuzione binaria. Per la classificazione, vengono utilizzate le probabilità di unità nascoste o le unità nascoste campionate da una distribuzione binaria (1 e 0) passate nel classificatore?
M3tho5,

Risposte:


15

Revisione di macchine Boltzmann limitate

Una macchina Boltzmann con restrizioni (RBM) è un modello generativo , che apprende una distribuzione di probabilità sull'input. Ciò significa che, dopo essere stato addestrato, l'RBM può generare nuovi campioni dalla distribuzione di probabilità appresa. La distribuzione di probabilità sulle unità visibili è data da dove e è la funzione , è la funzione polarizzazione per il nodo visibile e è il peso da a p ( vh ) = V i = 0 p ( v ih ) ,v

p(vh)=i=0Vp(vih),
σ a i i w j i h j v i p ( vh
p(vih)=σ(ai+j=0Hwjihj)
σaiiwjihjvi. Da queste due equazioni, ne consegue che dipende solo dagli stati nascosti . Ciò significa che le informazioni su come viene generato un campione visibile , devono essere memorizzate nelle unità nascoste, nei pesi e nei pregiudizi.h vp(vh)hv

Utilizzo degli RBM per la classificazione

Quando si utilizzano gli RBM per le attività di classificazione, si utilizza la seguente idea: poiché le informazioni su come sono stati generati i dati di allenamento o test vengono salvate nelle unità nascoste , è possibile estrarre questi fattori sottostanti inserendo un campione di allenamento nel unità visibili dell'RBM, propagatele in avanti verso le unità nascoste e utilizzate questo vettore di unità nascoste come vettore di feature. Non devi più passare indietro alle unità visibili.h

Questo vettore nascosto è solo una versione trasformata dei dati di input - questo non può classificare nulla da solo. Per fare una classificazione, dovresti formare qualsiasi classificatore (classificatore lineare, SVM, una rete neurale feedforward o qualsiasi altra cosa) con il vettore nascosto invece dei dati di allenamento "grezzi" come input.

Se stai costruendo una rete di credenze profonde (DBN) - che è stata utilizzata per pre-addestrare reti neurali di feed-forward profonde in modo non supervisionato - prenderesti questo vettore nascosto e lo utilizzeresti come input per un nuovo RBM, che impili sopra. In questo modo, è possibile addestrare la rete strato per strato fino a raggiungere la dimensione desiderata, senza la necessità di dati etichettati. Infine, aggiungi ad esempio un livello di softmax in alto e addestra tutta la rete con backpropagation sul tuo compito di classificazione.


Grazie per la modifica @ Seanny123, questo rende molto più facile la lettura.
hbaderts,

5

@hbaderts ha descritto perfettamente l'intero flusso di lavoro. Tuttavia, potrebbe non avere alcun senso nel caso in cui tu sia completamente nuovo a questa idea. Pertanto, lo spiegherò alla maniera dei non addetti ai lavori (pertanto, tralascerò i dettagli):

Pensa alle reti profonde come una funzione per trasformare i tuoi dati. Esempi di trasformazioni includono la normalizzazione, la registrazione dei dati, ecc. Le reti profonde che si stanno formando hanno più livelli. Ognuno di questi livelli viene addestrato utilizzando un qualche tipo di algoritmo di apprendimento. Per il primo livello, si passano i dati originali come input e si tenta di ottenere una funzione che restituirà quegli "stessi dati originali" dell'output. Tuttavia, non ottieni l'output perfetto. Pertanto, stai ottenendo una versione trasformata del tuo input come output del primo layer.

Ora, per il secondo livello, prendi quei "dati trasformati" e li passi come input e ripeti l'intero processo di apprendimento. Continui a farlo per tutti i livelli della tua rete profonda.

All'ultimo livello, ciò che ottieni è una "versione trasformata" dei tuoi dati di input originali. Questo può essere considerato un'astrazione di livello superiore dei dati di input originali. Nota che non hai ancora usato le etichette / output nella tua rete profonda. Pertanto, tutto fino a questo punto è un apprendimento senza supervisione. Questo si chiama pre-training a livello di layer.

Ora, vuoi formare un modello di classificazione / regressione e questo è un problema di apprendimento supervisionato. Il modo in cui raggiungi questo obiettivo è quello di prendere la "versione trasformata finale" del tuo input originale dall'ultimo livello nella tua rete profonda e di usarli come input per qualsiasi classificatore (ad es. Classificatore knn / classificatore softmax / regressione logistica ecc.). Questo si chiama impilamento.

Durante l'addestramento di questo classificatore / discente dell'ultimo passaggio, propaghi tutto il tuo apprendimento nella rete completa. Questo assicura che tu sia in grado di imparare dalle etichette / output e modificare i parametri appresi a livello di livelli di conseguenza.

Quindi, una volta che hai formato il tuo modello generativo, prendi l'output del tuo modello generativo e usalo come input per un classificatore / discente. Consenti all'errore di fluire attraverso l'intera rete man mano che l'apprendimento continua in modo da poter modificare il parametro a livello di layer appreso nei passaggi precedenti.


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.