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ą.
- Ilya Sutskever, Oriol Vinyals i Quoc V. Le (2014). Uczenie sekwencji za pomocą sieci neuronowych. Postępy w systemach przetwarzania informacji neuronowych , 27. ( pdf )
Odpowiedzi:
Sieć neuronowa o wielu wynikach przyjmuje postać Jeśli twój wynik ma wymiar , wtedy będzie miał wymiar .
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?
źródło
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 .
źródło
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.
źródło
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.
źródło