2013-07-07 4 views
10

Ich möchte meine Restricted Boltzmann Machine eine neue Darstellung von reellwertigen Daten lernen (siehe: Hinton - 2010 - A Practical Guide to Training RBMs). Ich kämpfe mit einer Implementierung von Gaußschen linearen Einheiten.Restricted Boltzmann Machine für reellwertige Daten - Gaußsche Lineareinheiten (glu) -

Mit Gaußschen linearen Einheiten in der sichtbaren Schicht ändert sich die Energie zu E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w. Jetzt weiß ich nicht, wie ich den Lernalgorithmus für kontrastive Divergenz ändern kann. Die sichtbaren Einheiten werden nicht mehr abgetastet, da sie linear sind. Ich verwende die Erwartung (mittlere Aktivierung) p(v_i=1|h)= a +∑hw + N(0,1) als ihren Zustand. Die Assoziationen bleiben unverändert (Pos: data*p(h=1|v)' neg: p(v=1|h)*p(h=1|v)'). Aber das führt nur zu einem zufälligen Rauschen, wenn ich die Daten rekonstruieren will. Die Fehlerrate hört auf, sich um 50% zu verbessern.

Schließlich möchte ich Gaußsche lineare Einheiten in beiden Schichten verwenden. Wie bekomme ich dann die Zustände der versteckten Einheiten? Ich schlage vor, mit der Mittelfeldaktivierung p(h_i=1|v)= b +∑vw + N(0,1), aber ich bin mir nicht sicher.

Antwort

3

Sie könnten einen Blick auf die Gaussian RBM werfen, die Hinton selbst zur Verfügung gestellt hat Finden Sie es hier. http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m

+1

Beachten Sie, dass [Link-only-Antworten] (http://meta.stackoverflow.com/tags/link-only-answers/info) entmutigt werden, SO Antworten sollten der Endpunkt einer Suche nach einer Lösung sein (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die im Laufe der Zeit veralten). Bitte beachten Sie, dass Sie hier eine eigenständige Zusammenfassung hinzufügen und den Link als Referenz beibehalten. – kleopatra

+3

-1: Es ist auch ein wirklich unleuchtendes Beispiel. –

+0

Nützliches Beispiel. Es ist etwas anders als das, was OP wollte - die versteckte Schicht ist linear-Gaussian und das Sichtbare ist Bernoulli und Sigma ist nicht gelernt. – Peter

1

Ich habe an einem ähnlichen Projekt gearbeitet, das einen RBM mit C++ und Matlab-Mexfunktion implementiert. Ich habe aus der Implementierung von Professor Hinton (in Matlab) gefunden, dass die binäre Aktivierung für sichtbare Einheiten die Simoid-Funktion verwendet. dh: vs = Sigmoid (bsxfun (@plus, hs * obj.W2 ', obj.b)); Aber wenn Sie die Gaussian sichtbaren Einheiten RBM implementieren, müssen Sie einfach die sichtbaren Einheiten abtasten, ohne den Simoid zu benutzen. dh: vs = bsxfun (@plus, h0 * obj.W2 ', obj.b); oder besser auf die Professor Hinton-Implementierung aussehen (siehe: http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m)

Verwandte Themen