Spójrz: możesz dokładnie zobaczyć, gdzie kończą się dane treningowe. Dane treningowe wynoszą od do .1
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.
regression
neural-networks
python
keras
Markus Appel
źródło
źródło
Odpowiedzi:
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.
(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 )
źródło
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,
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)
źródło
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.
źródło
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.
źródło
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ć.
źródło