Sieć neuronowa do regresji wielokrotnego wyjścia


14

Mam zestaw danych zawierający 34 kolumny wejściowe i 8 kolumn wyjściowych. Jednym ze sposobów rozwiązania tego problemu jest pobranie 34 danych wejściowych i zbudowanie indywidualnego modelu regresji dla każdej kolumny wyjściowej. Zastanawiam się, czy ten problem można rozwiązać za pomocą tylko jednego modelu, szczególnie za pomocą sieci neuronowej.

Użyłem perceptronu wielowarstwowego, ale to wymaga wielu modeli, podobnie jak regresja liniowa. Czy uczenie się od sekwencji do sekwencji 1 może być realną opcją? Próbowałem użyć TensorFlow, nie wydaje się, aby był w stanie obsłużyć wartości zmiennoprzecinkowych.

Docenione zostaną wszelkie sugestie dotyczące rozwiązania tego problemu za pomocą tylko jednego zunifikowanego modelu specjalnie wykorzystującego sieć neuronową.

  1. Ilya Sutskever, Oriol Vinyals i Quoc V. Le (2014). Uczenie sekwencji za pomocą sieci neuronowych. Postępy w systemach przetwarzania informacji neuronowych , 27. ( pdf )

Co jest problem?
TEG

2
(Do wszystkich potencjalnych bliskich wyborców: To nie jest pytanie programowe. To byłoby nie na temat przepełnienia stosu .)
gung - Przywróć Monikę

Czy możesz tutaj wyjaśnić opcję „sekwencję do sekwencji”? Nie wiem, czy będzie to znane ludziom, którzy pracują z NN, ale nie dla mnie.
gung - Przywróć Monikę

Modelowanie sekwencji za pomocą RNN. papers.nips.cc/paper/…
sjishan

Możesz wypróbować MultiOutputRegressor (). Działa to w przypadku tego rodzaju problemów
Subham Sarkar

Odpowiedzi:


7

Sieć neuronowa o wielu wynikach przyjmuje postać Jeśli twój wynik ma wymiar , wtedy będzie miał wymiar .

Y=γ+V1Γ1+ϵV1=a(γ2+V2Γ2)V2=a(γ3+V3Γ3)VL1=a(γL+XΓL)
N×8[γ1,Γ1](pV1+1)×8

To znaczy, że zakładasz, że każdy wynik ma WSZYSTKIE parametry w ukrytych warstwach i ma tylko inne parametry do wzięcia najwyższej pochodnej zmiennej i powiązania jej z wynikiem.

Czy to realistyczne założenie w twoim kontekście?


5

Na początku myślałem, że komentarz generic_user był przerywnikiem programu, ale zdałem sobie sprawę, że to nie jest:

Jeśli trenuję d różnych sieci na d różnych wyjściach, wówczas każda z nich będzie pasować do tego wymiaru bez względu na inne.

Ale jeśli wytrenuję jedną sieć z wyjściami d i wykorzystam wszystkie wyjścia do propagacji wstecznej, wówczas każda waga w każdej warstwie w sieci zostanie dostosowana, aby wszystkie wyjścia d były bardziej dokładne.

Oznacza to, że: każdy parametr sieci zostanie wyregulowany o sumę gradientów (w jaki sposób każde wyjście zmienia się za pomocą „ poruszenia ” w tym parametrze), tak że dostosowanie go w wybranym kierunku w górę lub w dół powoduje ogólnie dokładniejsze wyjście - nawet jeśli dostosujesz waga w ten sposób powoduje, że niektóre wymiary danych wyjściowych są mniej dokładne.

Tak więc, rzeczą, która ostatecznie odróżnia każde wyjście, jest po prostu równanie liniowe zakodowane w ostatniej warstwie, ale w szkoleniu jednej sieci wielowyjściowej każda warstwa stanie się lepsza w prezentacji tej ostatniej warstwy czymś, co pozwala jej lepiej wykonywać swoją pracę . Wynika stąd, że relacje między wyjściami zostaną uwzględnione w tej architekturze.

Możesz być w stanie zrobić coś lepszego niż w pełni połączona sieć, sprawiając, że architektura odzwierciedla wszelkie znane relacje w danych wyjściowych, podobnie jak sieci głębokie radzą sobie lepiej niż te płytkie, wykorzystując relacje „kompozycyjne” między wejściami .


Regresja wielowymiarowa zakłada, że ​​istnieje pewna (nieznana) macierz kowariancji, która łączy te zmienne docelowe ze sobą. Czy sugerujesz, że posiadanie jednej gęstej warstwy wystarczy, aby uchwycić tę kowariancję bez potrzeby jawnego włączania ukrytych warstw?
thecity2

Sugeruję, że ukryte warstwy muszą uchwycić część tej kowariancji. Sama jedna gęsta warstwa wyjściowa to tylko kilka równoległych funkcji regresji liniowej poprzez aktywację. Nie można ustalić żadnego związku między wyjściami, gdy nie ma ukrytej warstwy, aby mogły się one wzajemnie dostroić i przyjmować jako dane wejściowe / przekazywane jako dane wejściowe do innych węzłów wyjściowych.
Pavel Komarov

0

Możesz to zrobić za pomocą tylko jednej sieci neuronowej. Ale twoja sieć neuronowa powinna wyglądać tak:
Warstwa wejściowa: 34 węzły (jeden na kolumnę wejściową)
Warstwa wyjściowa: 8 węzłów (jeden na kolumnę wyjściową)

Możesz dodać tyle, ile chcesz ukrytych warstw w sieci neuronowej. Zatem sieć neuronowa generuje 8 przewidywanych wartości, a każda wartość będzie inną regresją danych wejściowych.


który pakiet jakiego języka obsługuje?
Arpit Sisodia

0

Zastanawiałem się nad tym samym; oto moje pomysły:

Przypuszczam, że jeśli dane wyjściowe mają pewne ukryte wzorce, to trening może skorzystać z jednoczesnego uczenia się regresji dla wszystkich wyników.

Interesujące byłoby wypróbowanie architektury, w której budujesz sieć neuronową dla każdego wyjścia, ale wszystkie sieci neuronowe mają kilka warstw (na przykład warstwy pierwszej połowy). Następnie możesz trenować każdą sieć neuronową jednocześnie: w pętli uczenia się każda sieć neuronowa jest trenowana jeden krok (z jedną partią) sekwencyjnie.

Byłoby to podobne do transferu wiedzy, ale z tą różnicą, że w przekazywaniu wiedzy każda sieć neuronowa jest w pełni wyszkolona przed ponownym użyciem jej części do szkolenia innej sieci neuronowej.

Założę się, że ktoś już o tym myślał, ale nie mam na to odniesienia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.