W tej chwili gram z Restricted Boltzmann Machines i skoro już to robię, chciałbym spróbować sklasyfikować za nim ręcznie pisane cyfry.
Model, który stworzyłem, jest teraz dość fantazyjnym modelem generatywnym, ale nie wiem, jak dalej z nim iść.
W tym artykule autor mówi, że po stworzeniu dobrego modelu generatywnego, jeden „ trenuje dyskryminujący klasyfikator (tj. Klasyfikator liniowy, maszynę wektorową wspomagającą) na podstawie RBM za pomocą oznaczonych próbek ”, a ponadto stwierdza „ odkąd propagujesz wektory danych do ukrytych jednostek modelu RBM w celu uzyskania wektorów ukrytych jednostek lub reprezentacji danych na wyższym poziomie ". Problem polega na tym, że nie jestem pewien, czy dobrze to zrozumiem.
Czy to oznacza, że wszystko, co muszę zrobić, to propagować dane wejściowe do ukrytych jednostek i tam mam swoją funkcję RBM do klasyfikacji?
Czy ktoś może mi wyjaśnić ten proces?
źródło
Odpowiedzi:
Przegląd ograniczonych maszyn Boltzmann
Ograniczona maszyna Boltzmanna (RBM) jest modelem generatywnym , który uczy się rozkładu prawdopodobieństwa na wejściu. Oznacza to, że po przeszkoleniu RBM może generować nowe próbki na podstawie wyuczonego rozkładu prawdopodobieństwa. Rozkład prawdopodobieństwa w obrębie widocznych jednostek jest określony przez gdzie a jest funkcją sigmoid, jest odchylenie dla widocznego węzła , a to waga od dov
Używanie KMS do klasyfikacji
Korzystając z KMS do zadań klasyfikacyjnych, korzystasz z następującego pomysłu: ponieważ informacje o tym, jak wygenerowano dane treningowe lub testowe, są zapisywane w ukrytych jednostkach , możesz wyodrębnić te podstawowe czynniki, wprowadzając próbkę szkoleniową do widoczne jednostki RBM, propaguj je do jednostek ukrytych i użyj tego wektora jednostek ukrytych jako wektora cech. Nie wykonujesz już żadnego przejścia do widocznych jednostek.h
Ten ukryty wektor jest tylko przekształconą wersją danych wejściowych - nie jest w stanie samodzielnie sklasyfikować niczego. Aby dokonać klasyfikacji, trenowałbyś dowolny klasyfikator (klasyfikator liniowy, SVM, sieć neuronowa ze sprzężeniem zwrotnym lub cokolwiek innego) z ukrytym wektorem zamiast „surowych” danych treningowych jako danych wejściowych.
Jeśli budujesz sieć głębokiej wiary (DBN) - która była używana do wstępnego trenowania głębokich sieci neuronowych ze sprzężeniem zwrotnym w sposób nienadzorowany - wziąłbyś ten ukryty wektor i wykorzystał go jako dane wejściowe do nowego RBM, który układasz w stos na górze tego. W ten sposób możesz trenować sieć warstwa po warstwie, aż osiągnie pożądany rozmiar, bez potrzeby oznaczania danych. Na koniec dodasz np. Warstwę softmax na górę i wyszkolisz całą sieć z propagacją wsteczną w zadaniu klasyfikacyjnym.
źródło
@hbaderts doskonale opisał cały przepływ pracy. Jednak może to nie mieć sensu, jeśli jesteś zupełnie nowy w tym pomyśle. Dlatego wyjaśnię to laikowi (dlatego pominę szczegóły):
Pomyśl o głębokich sieciach jako o funkcji przekształcania danych. Przykładem transformacji jest normalizacja, rejestr danych itp. Głębokie sieci, które trenujesz, składają się z wielu warstw. Każda z tych warstw jest szkolona przy użyciu pewnego rodzaju algorytmu uczenia się. W przypadku pierwszej warstwy przekazujesz oryginalne dane jako dane wejściowe i próbujesz uzyskać funkcję, która zwróci te „te same oryginalne dane”, co dane wyjściowe. Jednak nie uzyskasz idealnej wydajności. Dlatego otrzymujesz przekształconą wersję danych wejściowych jako danych wyjściowych pierwszej warstwy.
Teraz, dla drugiej warstwy, bierzesz te „przekształcone dane” i przekazujesz je jako dane wejściowe i powtarzasz cały proces uczenia się. Robisz to dla wszystkich warstw w swojej głębokiej sieci.
Na ostatniej warstwie otrzymujesz „przekształconą wersję” oryginalnych danych wejściowych. Można to pomyśleć o wyższym poziomie abstrakcji oryginalnych danych wejściowych. Pamiętaj, że nie korzystałeś jeszcze z etykiet / danych wyjściowych w swojej głębokiej sieci. Dlatego wszystko do tego momentu to nauka bez nadzoru. Nazywa się to treningiem warstwowym.
Teraz chcesz wytrenować model klasyfikatora / regresji i jest to nadzorowany problem uczenia się. Sposób, w jaki osiągasz ten cel, polega na pobraniu „ostatecznej przekształconej wersji” oryginalnego wejścia z ostatniej warstwy w głębokiej sieci i wykorzystaniu ich jako danych wejściowych do dowolnego klasyfikatora (np. Klasyfikatora knn / klasyfikatora softmax / regresji logistycznej itp.). Nazywa się to układaniem w stosy.
Kiedy trenujesz tego klasyfikatora / ucznia ostatniego kroku, propagujesz całą swoją naukę w całej sieci. Zapewnia to, że możesz uczyć się na podstawie etykiet / wyników i odpowiednio modyfikować wyuczone parametry warstwowe.
Po wyszkoleniu modelu generatywnego weź wyniki modelu generalnego i wykorzystaj je jako dane wejściowe do klasyfikatora / ucznia. Niech błąd przepływa przez całą sieć, gdy uczenie się trwa, abyś mógł zmodyfikować parametr warstwowy nauczony we wcześniejszych krokach.
źródło
Możesz trenować stosy RBM na swoich obrazach, a następnie trenować ostateczny RBM na konkatenacji danych wyjściowych ze stosu RBM i etykiet. Następnie możesz faktycznie użyć RBM do klasyfikacji. W tym artykule Hinton ++ wyjaśniono to podejście . Algorytm szybkiego uczenia się dla sieci głębokiego przekonania , możesz też obejrzeć to demo
źródło