Jak ulepszyć moją sieć neuronową w przewidywaniu fal sinusoidalnych?

21

Spójrz: Wygenerowana fala sinusoidalna możesz dokładnie zobaczyć, gdzie kończą się dane treningowe. Dane treningowe wynoszą od do .1-11

Użyłem Keras i gęstej sieci 1-100-100-2 z aktywacją tanh. Obliczam wynik z dwóch wartości, p i q jako p / q. W ten sposób mogę uzyskać dowolny rozmiar liczby, używając tylko wartości mniejszych niż 1.

Pamiętaj, że wciąż jestem początkujący w tej dziedzinie, więc spokojnie.

Markus Appel
źródło
1
Aby wyjaśnić, twoje dane treningowe wynoszą od około -1,5 do +1,5, więc sieć nauczyła się tego dokładnie? Więc twoje pytanie dotyczy ekstrapolacji wyniku na niewidoczne liczby poza zakresem danych treningowych?
Neil Slater,
11
Możesz spróbować przekształcić Fouriera we wszystko i pracować w dziedzinie częstotliwości.
Nick Alger,
4
Do przyszłych recenzentów: Nie wiem, dlaczego jest to oznaczane do zamknięcia. Wydaje mi się zupełnie jasne: chodzi o strategie modelowania danych okresowych za pomocą sieci neuronowych.
Sycorax mówi Przywróć Monikę
1
Myślę, że jest to rozsądne pytanie dla początkujących w dziedzinie uczenia maszynowego, które powinniśmy uwzględnić tutaj. Nie
zamknąłbym
1
Nie wiem, czy to pomoże, ale od razu waniliowy NN będzie mógł nauczyć się funkcji wielomianowych. W praktyce jest to w porządku, ponieważ wielomian można dowolnie zamykać w ustalonych odstępach czasu. Ale oznacza to, że nigdy nie można nauczyć się fali sinusoidalnej, która rozciąga się poza koniec przedziału. Sztuczka, jak wskazały inne odpowiedzi poniżej, polega na przekształceniu problemu w taki, który można rozwiązać w ten sposób. Właśnie to sugeruje transformacja Fouriera, a w takim przypadku uczenie się fali sinusoidalnej jest po prostu uczeniem się stałej.
Ukko

Odpowiedzi:

19

Używasz sieci feed-forward; inne odpowiedzi są poprawne, że FFNN nie są świetne w ekstrapolacji poza zakres danych treningowych.

Ponieważ jednak dane mają jakość okresową, problem może być związany z modelowaniem za pomocą LSTM. LSTM to różnorodne komórki sieci neuronowej, które działają na sekwencjach i mają „pamięć” o tym, co „widziały” wcześniej. Streszczenie tego rozdziału książki sugeruje, że podejście LSTM jest kwalifikowanym sukcesem w przypadku problemów okresowych.

(xi,sin(xi))xi+1xi+nni

(Jimenez-Guarneros, Magdiel i Gomez-Gil, Pilar i Fonseca-Delgado, Rigoberto i Ramirez-Cortes, Manuel i Alarcon-Aquino, Vicente, „Długoterminowe przewidywanie funkcji sinus przy użyciu sieci neuronowej LSTM”, w naturze- Inspirowana konstrukcja hybrydowych systemów inteligentnych )

Sycorax mówi Przywróć Monikę
źródło
2
Jaka jest tutaj modelowana sekwencja? Jakie są przedziały czasowe? Dla mnie wygląda to na prostą aplikację do dopasowywania krzywych.
David J. Harris,
@ DavidJ.Harris Zaktualizowałem swoją odpowiedź.
Sycorax mówi Przywróć Monikę
1/(2)π)
Czy na przykład tak robią prognozy rynkowe?
Markus Appel
3
Nie, nie tak robisz prognozy rynkowe. Przynajmniej nie jak to zrobić, aby zarabiać pieniądze.
Aksakal
13

Jeśli chcesz nauczyć się prostych funkcji okresowych takich jak ten, możesz przyjrzeć się stosowaniu Procesów Gaussa. Lekarze ogólni pozwalają ci w większym stopniu egzekwować wiedzę o swojej dziedzinie, określając odpowiednią funkcję kowariancji; w tym przykładzie, ponieważ wiesz, że dane są okresowe, możesz wybrać okresowe jądro, a następnie model ekstrapoluje tę strukturę. Możesz zobaczyć przykład na zdjęciu; tutaj staram się dopasować dane o wysokości pływów, więc wiem, że ma on strukturę okresową. Ponieważ używam struktury okresowej, model prawidłowo ekstrapoluje tę okresowość (mniej więcej). OFC, jeśli próbujesz dowiedzieć się o sieciach neuronowych, nie jest to tak naprawdę istotne, ale może to być nieco lepsze podejście niż funkcje inżynierii ręcznej. Nawiasem mówiąc, sieci neuronowe i GP są ściśle powiązane teoretycznie,wprowadź opis zdjęcia tutaj

GP nie zawsze są przydatne, ponieważ w przeciwieństwie do sieci neuronowych, trudno jest je skalować do dużych zbiorów danych i głębokich sieci, ale jeśli interesują Cię takie problemy o małych wymiarach, prawdopodobnie będą one szybsze i bardziej niezawodne.

(na zdjęciu czarne kropki to dane treningowe, a czerwone to cele; widać, że nawet jeśli nie robi się to poprawnie, model uczy się w przybliżeniu okresowości. Kolorowe paski to przedziały ufności modelu Prognoza)

lsgs
źródło
2
Ta fabuła jest piękna.
Sycorax mówi Przywróć Monikę
11

Algorytmy uczenia maszynowego - w tym sieci neuronowe - mogą nauczyć się przybliżać dowolne funkcje, ale tylko w przedziale, w którym istnieje wystarczająca gęstość danych treningowych.

Algorytmy uczenia maszynowego oparte na statystykach działają najlepiej, gdy wykonują interpolację - przewidując wartości, które są bliskie lub pomiędzy przykładami szkolenia.

Poza danymi treningowymi liczysz na ekstrapolację. Ale nie ma łatwego sposobu na osiągnięcie tego. Sieć neuronowa nigdy nie uczy się funkcji analitycznie, tylko w przybliżeniu za pomocą statystyk - dotyczy to prawie wszystkich technik uczenia ML pod nadzorem. Bardziej zaawansowane algorytmy mogą dowolnie zbliżyć się do wybranej funkcji na podstawie wystarczającej liczby przykładów (i wolnych parametrów w modelu), ale nadal będą to robić tylko w zakresie dostarczonych danych treningowych.

To, jak sieć (lub inna ML) zachowuje się poza zakresem danych treningowych, będzie zależeć od jej architektury, w tym zastosowanych funkcji aktywacyjnych.

grzechgrzech(x),grzech(2)x+π/4)grzech

Neil Slater
źródło
„Sieć neuronowa nigdy nie uczy się funkcji analitycznie, tylko w przybliżeniu za pomocą statystyk”. - to samo można powiedzieć prawie o wszystkim, co jest używane w praktyce, np. FFT też nie uczy się analitycznie. Możesz zwiększyć częstotliwość próbkowania i okres do nieskończoności i zbliżyć się nieskończenie do prawdziwej funkcji, ale to samo dotyczy NN.
Aksakal,
@Aksakal: Tak, to prawda. Nie chciałem jednak stwierdzić, że „wszystkie algorytmy ML nigdy nie uczą się funkcji analitycznych ...” ponieważ ktoś bez wątpienia wymyśliby kontrprzykład jakiegoś bayesowskiego ucznia analitycznego, programowania genetycznego itp. Spróbuję go edytować, aby był bardziej ogólny
Neil Slater,
9

W niektórych przypadkach sugerowane przez @Neil Slater podejście do przekształcania funkcji za pomocą funkcji okresowej będzie działać bardzo dobrze i może być najlepszym rozwiązaniem. Trudność polega na tym, że może być konieczne ręczne wybranie okresu / długości fali (patrz to pytanie ).

Jeśli chcesz, aby okresowość była głębiej osadzona w sieci, najprostszym sposobem byłoby użycie sin / cos jako funkcji aktywacyjnej w jednej lub więcej warstwach. W artykule omówiono potencjalne trudności i strategie radzenia sobie z funkcjami okresowej aktywacji.

Alternatywnie, w niniejszym dokumencie zastosowano inne podejście, w którym wagi sieci zależą od funkcji okresowej. Artykuł sugeruje również użycie splajnów zamiast sin / cos, ponieważ są one bardziej elastyczne. To był jeden z moich ulubionych artykułów w zeszłym roku, więc warto go przeczytać (a przynajmniej obejrzeć wideo), nawet jeśli nie skończysz z jego podejściem.

David J. Harris
źródło
9

Podjąłeś złe podejście, nic nie da się zrobić, aby rozwiązać problem.

Istnieje kilka różnych sposobów rozwiązania problemu. Zasugeruję najbardziej oczywisty poprzez inżynierię funkcji. Zamiast zaślepiać czas jako cechę liniową, umieść go jako pozostałą część modułu T = 1. Na przykład, t = 0,2, 1,2 i 2,2 staną się cechą t1 = 0,1 itd. Dopóki T jest dłuższy niż okres fali, będzie to działać. Podłącz to do sieci i zobacz, jak to działa.

Inżynieria funkcji jest niedoceniana. W AI / ML jest ten trend, w którym sprzedawcy twierdzą, że zrzucasz wszystkie swoje wkłady do sieci, i jakoś to wymyśli, co z nimi zrobić. Jasne, że tak, jak widzieliście w przykładzie, ale potem tak łatwo się psuje. To świetny przykład, który pokazuje, jak ważne jest budowanie dobrych funkcji nawet w najprostszych przypadkach.

Mam również nadzieję, że zdajesz sobie sprawę, że jest to najdziwniejszy przykład inżynierii obiektów. To po prostu dać ci wyobrażenie, co możesz z tym zrobić.

Aksakal
źródło