5

Wdrażam modele Probabilistic Matrix Factorization w theano i chciałbym skorzystać z reguł Adam gradient descent.Czy jest nadzieja na wykorzystanie Adamowej implementacji Lasagne do probabilistycznej Matrix Factorization?

Moim celem jest posiadanie kodu, który jest tak niezmieniony, jak to tylko możliwe, co oznacza, że ​​nie chcę jawnie śledzić ilości "m" i "v" z algorytmu Adama.

Wygląda na to, że jest to możliwe, zwłaszcza po seeing how Lasagne's Adam is implemented: ukrywa on liczbę "m" i "v" w regułach aktualizacji theano.function.

Działa to, gdy formułowane jest ujemne logarytmu wiarygodności dla każdego terminu, który obsługuje inną ilość. Ale w probabilistycznej Matrix Factorization każdy termin zawiera produkt kropki jednego utajonego wektora użytkownika i jednego utajonego wektora przedmiotów. W ten sposób, jeśli przedstawię przypadek Adama Lasagne na każdym semestrze, będę miał wiele wielkości "m" i "v" dla tego samego utajonego wektora, co nie jest jak Adam ma działać.

Ja także posted on Lasagne's group, faktycznie twice, gdzie jest trochę więcej szczegółów i kilka przykładów.

Myślałem o dwóch możliwych implementacji:

  1. każdy istniejący rating (co oznacza, że ​​każdy istniejący termin w globalnym NLL funkcji celu) posiada własne Adama zaktualizowany za pośrednictwem dedykowanego wezwanie do theano.function. Niestety prowadzi to do niewłaściwego użycia Adama, ponieważ ten sam utajony wektor będzie powiązany z różnymi ilościami "m" i "v" używanymi przez algorytm Adama, który nie jest tym, w jaki sposób Adam powinien działać.
  2. Wywołanie Adama na cały obiektywny NLL, który sprawi, że mechanizm aktualizacji będzie jak zwykłe Gradient Descent zamiast SGD, z wszystkimi znanymi wadami (wysoki czas obliczeń, pozostawanie w lokalnych minimach itp.).

Moje pytania są następujące:

  • może jest tam coś, czego nie rozumiem, w jaki sposób Lasagne Adam działa?

  • Czy opcja numer 2 byłaby faktycznie podobna do SGD, w tym sensie, że każda aktualizacja wektora ukrytego wpłynie na inną aktualizację (w tym samym wywołaniu Adama), która korzysta z tego zaktualizowanego wektora?

  • Czy mają Państwo inne sugestie dotyczące sposobu wdrożenia?

Każdy pomysł na rozwiązanie tego problemu i unikanie ręcznego utrzymywania replikowanych wektorów i macierzy dla wielkości "v" i "m"?

+0

Wygląda na to, że Q byłoby bardziej w domu na http://stats.stackexchange.com/ – redcalx

+0

@redcalx: Nie zgadzam się, problem polega tylko na tym, jak * implementuj * Adam. – fstab

+0

Nie czytałem PMF w szczegółach i nie jestem użytkownikiem Lasagne, ale czy możliwe jest wyrażenie celu optymalizacji jako pojedynczej funkcji theano parametrów twojego modelu? Jeśli tak, to z pewnością można to zrobić w czystym theano. – Kh40tiK

Odpowiedz

0

To wygląda na papierze są co sugeruje, że do optymalizacji całego funkcji naraz używając zejście gradient:

Możemy wykonać metoda gradientu prostego w Y, V i W celu minimalizacji funkcji celu danego przez Eq. 10.

Powiedziałbym, że twoja opcja 2 jest prawidłowym sposobem realizacji tego, co zrobili.

Nie ma zbyt wielu złożoności ani nieliniowości (obok sigmoidy), więc prawdopodobnie nie napotkasz typowych problemów optymalizacyjnych związanych z sieciami neuronowymi, które wymagają czegoś takiego jak Adam. Tak długo, jak to wszystko pasuje do pamięci, myślę, że to podejście zadziała.

Jeśli nie mieści się w pamięci, być może istnieje sposób, w jaki można zoptymalizować stratę, aby zoptymalizować. Byłby również zainteresowany, aby móc dodać jedną lub więcej sieci neuronowych, aby zastąpić niektóre z tych warunkowych prawdopodobieństw. Ale to zaczyna być nieco nie na temat ...