Niezmienne sieci neuronowe permutacji

14

Biorąc pod uwagę sieć neuronową f która przyjmuje jako dane wejściowe n punktów danych: x1,,xn . Mówimy, że f jest niezmienną permutacją, jeśli

f(x1...xn)=f(pi(x1...xn))

pi

Czy ktoś mógłby polecić punkt początkowy (artykuł, przykład lub inny artykuł) dla niezmienniczych sieci neuronowych permutacji?

Josef Ondrej
źródło
Interesujące pytanie. Chcesz traktować swoje dane wejściowe jako zbiór, a nie wektor. Zakładając, że twoje dane wejściowe są skalarne lub w inny sposób porównywalne, czy zastanawiałeś się nad posortowaniem danych wejściowych w celu stworzenia kanonicznej reprezentacji niezmiennej dla permutacji i dostarczeniem ich do zwykłej sieci?
mjul
@mjul Moje dane wejściowe są seriami zakładów klientów (każdy zakład jest reprezentowany przez wektor niektórych zmiennych kategorycznych i ciągłych). Mógłbym je na przykład uporządkować chronologicznie, ale ponieważ odstępy czasu między zakładami dla każdego klienta są bardzo różne, nie miałoby to większego sensu. Prawdopodobnie można to rozwiązać za pomocą funkcji (ustalonej lub wyuczonej) czasu, która obniżyłaby współczynniki dla każdego zakładu. Ale myślę, że w tym przypadku kolejność naprawdę nie ma znaczenia, dlatego najpierw chciałem spróbować nieuporządkowanych danych, co oczywiście wymaga symetrycznego traktowania zakładów dla każdego klienta.
Josef Ondrej,
Jaka jest wydajność sieci? Jeśli sieć jest niezmienna w permutacji, dane wyjściowe będą takie same dla dowolnej kolejności danych wejściowych. Czy to jest to, czego chcesz?
BlueMoon93,
@ BlueMoon93 Tak, dokładnie tego chcę. Wyjście może być dowolne (liczba, wektor), o ile nie zależy od kolejności danych wejściowych.
Josef Ondrej,
dlaczego miałbyś chcieć niezmiennej sieci neuronowej permutacji?
kc sayz 'kc sayz'

Odpowiedzi:

2

O ile mi wiadomo, nikt tego nie próbował ze względu na strukturę sieci. Każde wejście ma zestaw wag, które są połączone z większą liczbą wejść. Jeśli wejścia się zmienią, wyjście też .

Możesz jednak zbudować sieć zbliżającą się do tego zachowania. W zestawie szkoleniowym korzystaj z uczenia wsadowego i dla każdej próbki szkoleniowej podaj wszystkie możliwe permutacje dla sieci, tak aby uczyła się , że jest niezmienna permutacji. To nigdy nie będzie dokładnie niezmienne, może po prostu być blisko .

Innym sposobem na to jest replikacja wag dla wszystkich danych wejściowych. Załóżmy na przykład, że masz 3 wejścia (i0, i1, i2), a następna ukryta warstwa ma 2 węzły (hl0, hl1) i funkcję aktywacji F. Zakładając, że warstwa jest w pełni połączona, masz 2 wagi w0 i w1. Węzły warstwy ukrytej hl0 i hl1 są podane odpowiednio przez

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

W ten sposób otrzymujesz ukrytą warstwę, której wartości są permutacyjne niezmienne od danych wejściowych. Odtąd możesz uczyć się i budować resztę sieci według własnego uznania. Jest to podejście wywodzące się z warstw splotowych.


Nie na temat, wydaje się, że to fajny projekt. Jeśli chcesz współpracować przy jakimś projekcie badawczym, skontaktuj się ze mną (sprawdź mój profil)

BlueMoon93
źródło
Pierwsze sugerowane podejście byłoby w moim przypadku niemożliwe ze względu na złożoność obliczeniową. Druga natomiast wydaje się być może zbyt restrykcyjna. Ale to z pewnością dobry początek. Do tej pory wymyśliłem podejście podobne do tego, które znalazłem w tym artykule: arxiv.org/pdf/1612.04530.pdf . Najpierw rozważam wszystkie pary (ogólnie wszystkie k-krotki) danych wejściowych x_i, x_j, i, j w 0 ... n i stosuję na nich jakąś sieć neuronową (taki sam nn na każdej parze). To daje mi n ** 2 wyjścia f (x_i, x_j), a następnie uśredniam je (lub przyjmuję maksimum) i stosuję inny wynik nn.
Josef Ondrej,
Do tej pory wymyśliłem
Josef Ondrej
3

Zaimplementowałem tutaj warstwę permutacyjną za pomocą Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Możesz wywołać PermutationalModulefunkcję, aby z niej skorzystać.

Zaimplementowano w oparciu o ten dokument: https://arxiv.org/pdf/1612.04530.pdf

Chodzi o porównanie wszystkich par N ^ 2 par z N danych wejściowych, użycie modelu ze wspólnymi wagami, a następnie użycie funkcji pulowania N razy na N danych wejściowych. Dane wyjściowe można użyć ponownie w puli, ale w dokumencie nie wspominają o kolejnej puli.

off99555
źródło