2013-07-07 6 views
10

Chcę, aby moja restrykcyjna maszyna Boltzmanna nauczyła się nowej reprezentacji danych o wartościach rzeczywistych (patrz: Hinton - 2010 - A Practical Guide to Training RBMs). Walczę z implementacją gaussowskich jednostek liniowych.Ograniczona maszyna Boltzmanna dla danych o wartościach rzeczywistych - gaussowskie jednostki liniowe (glu) -

Z jednostkami liniowymi Gaussa w warstwie widzialnej energia zmienia się na E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w. Teraz nie wiem, jak zmienić algorytm Contrastive Divergence Learning Algorithm. Widoczne jednostki nie będą już próbkowane, ponieważ są liniowe. Używam oczekiwanie (średnia-aktywacja) p(v_i=1|h)= a +∑hw + N(0,1) jako ich stan. Powiązania pozostają niezmienione (poz: data*p(h=1|v)' neg: p(v=1|h)*p(h=1|v)'). Ale to tylko prowadzi do losowego hałasu, gdy chcę zrekonstruować dane. Wskaźnik błędów przestanie poprawiać się o około 50%.

Wreszcie chcę użyć jednostek liniowych Gaussa w obu warstwach. W jaki sposób otrzymam stany ukrytych jednostek? Sugeruję, używając aktywacji pola średniego p(h_i=1|v)= b +∑vw + N(0,1), ale nie jestem pewien.

Odpowiedz

3

Można rzucić okiem na gaussowskie RBM, które sam Hinton dostarczył Proszę znaleźć tutaj. http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m

+1

Należy odradzić [Odpowiedzi dotyczące wyłącznie linków] (http://meta.stackoverflow.com/tags/link-only-answers/info), SO Odpowiedzi powinny być punktem końcowym poszukiwania rozwiązania (w przeciwieństwie do kolejnego zatrzymania referencji, które z czasem stają się nieaktualne). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra

+3

-1: Jest to również naprawdę nieoczywisty przykład. –

+0

Przydatny przykład. Jest nieco inny niż to, co chciał OP - ukryta warstwa jest liniowo-gaussowska, a widoczna jest bernoulli, a sigma nie jest uczona. – Peter

1

Pracowałem nad podobnym projektem wdrażającym RBM z funkcją C++ i matlab mexfunction. Znalazłem od realizacji Profesora Hintona (w Matlab), że aktywacja binarna dla widocznych jednostek używa funkcji simoid. tj .: vs = sigmoid (bsxfun (@plus, hs * obj.W2 ', obj.b)); Ale przy realizacji Gaussian widoczne jednostki RBM po prostu trzeba próbować widoczne jednostki bez użycia simoid. tj .: vs = bsxfun (@plus, h0 * obj.W2 ', obj.b); lub lepiej spójrz na implementację profesora Hintona (patrz: http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m)

Powiązane problemy