2013-07-07 10 views
10

Desidero che la macchina Boltzmann con restrizioni rilevi una nuova rappresentazione di dati a valori reali (vedere: Hinton - 2010 - A Practical Guide to Training RBMs). Sto lottando con un'implementazione di unità lineari gaussiane.Macchina Boltzmann ristretta per dati a valori reali - unità lineari gaussiane (glu) -

Con le unità lineari gaussiane nello strato visibile l'energia cambia in E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w. Ora non so come modificare l'algoritmo di apprendimento della divergenza contrastistica. Le unità visibili non saranno più campionate in quanto sono lineari. Io uso l'aspettativa (attivazione media) p(v_i=1|h)= a +∑hw + N(0,1) come stato. Le associazioni sono lasciate invariate (pos: data*p(h=1|v)' neg: p(v=1|h)*p(h=1|v)'). Ma questo porta solo a rumore casuale quando voglio ricostruire i dati. Il tasso di errore smetterà di migliorare di circa il 50%.

Infine voglio utilizzare unità lineari gaussiane in entrambi gli strati. Come otterrò allora gli stati delle unità nascoste? Suggerisco usando l'attivazione di campo medio p(h_i=1|v)= b +∑vw + N(0,1) ma non sono sicuro.

risposta

3

Si potrebbe dare un'occhiata al RBM gaussiano che lo stesso Hinton ha fornito Si prega di trovarlo qui. http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m

+1

Si noti che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, SO le risposte dovrebbero essere il punto finale di una ricerca di una soluzione (rispetto a un'altra sosta di riferimenti, che tende a diventare obsoleta nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

+3

-1: è anche un esempio davvero poco illuminante. –

+0

Esempio utile. È leggermente diverso da quello che l'OP voleva - lo strato nascosto è lineare-gaussiano e il visibile è bernoulli e il sigma non è appreso. – Peter

1

Ho lavorato a un progetto simile implementando un RBM con C++ e matlab mexfunction. ho trovato dall'implementazione del Professor Hinton (in MATLAB) che l'attivazione binaria per le unità visibili usa la funzione simoid. ie: vs = sigmoid (bsxfun (@plus, hs * obj.W2 ', obj.b)); Ma quando si implementano le unità visibili gaussiane RBM è sufficiente campionare le unità visibili senza usare il simoide. ie: vs = bsxfun (@plus, h0 * obj.W2 ', obj.b); o meglio l'implementazione del Professor Hinton (vedi: http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m)

Problemi correlati