8

Cześć chłopaki: Próbuję ustalić, w jaki sposób "stan" VowpalWabbit jest utrzymywany w miarę wzrostu naszego zbioru wejściowego. W typowym środowisku uczenia maszynowego, jeśli mam 1000 wektorów wejściowych, oczekiwałbym wysłania wszystkich tych elementów naraz, czekania na zakończenie fazy budowania modelu, a następnie użycia modelu do tworzenia nowych przewidywań.VowpalWabbit: Różnice i skalowalność

W VW wydaje się, że "online" charakter algorytmu przesuwa ten paradygmat, aby był bardziej wydajny i zdolny do regulacji w czasie rzeczywistym.

1) W jaki sposób zaimplementowano tę modyfikację modelu w czasie rzeczywistym?

2) Czy VW zwiększa zasoby w odniesieniu do całkowitej wielkości danych wejściowych w czasie? Oznacza to, że gdy dodaję więcej danych do mojego modelu VW (gdy jest mały), czy obliczenia korekty w czasie rzeczywistym zaczynają trwać dłużej, gdy sumaryczne liczby wektorów funkcji zwiększają się do 1000, 10000 lub milionów?

+0

Zależy od tego, co rozumiemy przez * "[wyższy] łączny rozmiar danych wejściowych w czasie" *. Jeśli używasz cech jakościowych, to jeśli "więcej danych" oznacza "więcej poziomów w kategoriach", a zwłaszcza jeśli włączasz interakcje wyższego rzędu, masz kolizje mieszania, które wpływają na dokładność, więc tak, w końcu musisz zwiększyć "- b 'hash bitdepth, a tym samym twoje wymaganie pamięci dla skrótu funkcji. Jednak wektor wagowy (przechowywany w pamięci) jest nadal mały. – smci

Odpowiedz

19

Wystarczy, że dodasz do dobrą odpowiedź carlosdc.

Niektóre z cech, które wyróżniają vowpal wabbit siebie i pozostawić do skalowania do tera-feature (10) data-rozmiary to:

Masa wektor stronie: vowpal wabbit utrzymuje w pamięci weight-vector, który jest w istocie wektorem wag dla budowanego modelu. To właśnie nazywasz "stanem" w swoim pytaniu.

nieokreślonej wielkości danych: Wielkość Wagowo wektora jest proporcjonalna do liczby cech (niezależnych zmiennych wejściowych), a nie liczba przykładów (wystąpienia). To właśnie sprawia, że ​​vowpal wabbit, w przeciwieństwie do wielu innych (nie online) uczących się, skaluje się w przestrzeni. Ponieważ nie trzeba ładować wszystkich danych do pamięci, tak jak robi to typowy program wsadowy, nadal może się uczyć z zestawów danych, które są zbyt duże, aby zmieścić się w pamięci.

tryb Cluster: vowpal wabbit podpory działające na wielu hostach w klastrze, nakładające binarny diagram struktury drzewa na węzłach i za pomocą redukcji z liści do korzenia all-reduce.

Hash trick: vowpal wabbit zatrudnia co nazywa się hashing trick. Wszystkie nazwy funkcji są mieszane do liczby całkowitej za pomocą murmurhash-32. Ma to kilka zalet: jest bardzo proste i wydajne czasowo, nie wymagając zarządzania hash-table i kolizji, jednocześnie pozwalając na zderzanie się funkcji.Okazuje się (w praktyce), że niewielka liczba kolizji elementów w zestawie szkoleniowym z tysiącami różnych funkcji jest podobna do dodawania niejawnego terminu regularyzacji. Jest to sprzeczne z intuicją, często poprawia dokładność modelu, zamiast go zmniejszać. Jest także agnostykiem dla rozrzedzenia (lub zagęszczenia) przestrzeni cech. Wreszcie, pozwala na to, że nazwy funkcji wejściowych są dowolnymi ciągami znaków, w przeciwieństwie do większości konwencjonalnych uczniów, którzy wymagają, aby nazwy/identyfikatory funkcji były jednocześnie a) numeryczne i b) unikalne.

Równoległość: vowpal Wabbit wykorzystuje wiele procesorów CPU, uruchamiając analizowania i uczenia się w dwóch oddzielnych nitek, dodając ponadto jej prędkości. To właśnie sprawia, że ​​vw może nauczyć się tak szybko, jak odczytuje dane. Okazuje się, że większość obsługiwanych algorytmów, w przeciwieństwie do intuicji, jest wąskim gardłem przez prędkość IO, a nie przez prędkość uczenia się.

punktów kontrolnych i przyrostowe learning: vowpal wabbit pozwala zaoszczędzić swój model na dysku podczas nauki, a następnie załadować model i kontynuować naukę w którym zostało przerwane z opcją --save_resume.

oszacowanie błędu Test-jak: średniej straty obliczane przez vowpal Wabbit "jak to działa" jest zawsze na niewidzialne (z próbki) danych (*). Eliminuje to konieczność przejmowania zaplanowanych blokad lub sprawdzania poprawności krzyżowej. Wskaźnik błędu, który widzisz podczas treningu, jest "podobny do testu".

Oprócz modeli liniowych: vowpal wabbit obsługuje wiele algorytmów, w tym faktoryzacja macierzy (mniej rzadki SVD macierzy), utajoną Dirichlet środków (LDA), a także wiele innych. Obsługuje również generowanie w czasie rzeczywistym interakcji terminowych (dwu-liniowe, kwadratowe, sześcienne i sprzężone sigmoidalne sieci neuronowe z określoną przez użytkownika liczbą jednostek), klasyfikację wieloklasową (oprócz podstawowej regresji i binarnej klasyfikacja) i więcej.

Istnieją tutoriale i wiele przykładów w the official vw wiki na github.

(*) Jeden wyjątek dotyczy wielokrotnych karnetów z opcją --passes N.

+0

Myślałem, że vw zrobił tylko 1 warstwę sieci neuronowych? (np. --nn 10 dla pojedynczej warstwy z 10 neuronami). Jak zrobiłbyś sieć wielowarstwową? – Zach

+0

@Zach: Myślę, że masz rację. Odpowiednio zredagowałem odpowiedź. Dzięki i przepraszam. – arielf

+0

Co się tyczy VW wykorzystującego wiele rdzeni, jestem pod wrażeniem, że VW używa tylko jednego rdzenia, bez względu na to, ile masz rdzeni. Tak, ma 2 wątki: jeden dla I/O i jeden dla komputerów. To wszystko. – piggybox

8

VW to (bardzo) wyrafinowana implementacja stochastycznego gradientu zejścia. Możesz przeczytać więcej na temat gradientu stochastycznego here

Okazuje się, że dobra implementacja stochastycznego gradientu jest w zasadzie związana z I/O, działa tak szybko, jak tylko można uzyskać dane, więc VW ma pewne wyrafinowane struktury danych "kompilować" dane.

Dlatego odpowiedź na pytanie (1) brzmi, wykonując gradient stochastyczny, a odpowiedź na pytanie (2) zdecydowanie nie jest.

Powiązane problemy