Wie verbessere ich mein neuronales Netzwerk bei der Vorhersage von Sinuswellen?


21

Hier ein Blick: Generierte Sinuswelle Sie können genau sehen, wo die Trainingsdaten enden. Die Trainingsdaten reichen von bis .-11

Ich habe Keras und ein dichtes 1-100-100-2-Netzwerk mit Tanh-Aktivierung verwendet. Ich berechne das Ergebnis aus zwei Werten, p und q als p / q. Auf diese Weise kann ich eine beliebige Anzahl von Werten ermitteln, die kleiner als 1 sind.

Bitte beachten Sie, dass ich in diesem Bereich noch ein Anfänger bin.


1
Zur Verdeutlichung: Ihre Trainingsdaten liegen zwischen -1,5 und +1,5. Hat das Netzwerk das also genau gelernt? Ihre Frage ist es also, das Ergebnis auf unsichtbare Zahlen außerhalb des Bereichs der Trainingsdaten zu extrapolieren?
Neil Slater

11
Sie könnten versuchen, Fourier-Transformationen durchzuführen und im Frequenzbereich zu arbeiten.
Nick Alger

4
An zukünftige Rezensenten: Ich weiß nicht, warum dies zur Schließung vorgemerkt wird. Mir scheint völlig klar: Es geht um Strategien zur Modellierung periodischer Daten mit neuronalen Netzen.
Sycorax sagt Reinstate Monica

1
Ich denke, es ist eine vernünftige Frage für einen Anfänger im Bereich des maschinellen Lernens, die wir hier berücksichtigen sollten. Ich würde es nicht schließen
Aksakal

1
Ich weiß nicht, ob dies helfen wird, aber ein Vanille-NN kann von Anfang an nur Polynomfunktionen lernen. In der Praxis ist dies in Ordnung, da Sie ein Polynom in einem festen Intervall beliebig schließen können. Es bedeutet jedoch, dass Sie niemals eine Sinuswelle lernen können, die sich über die Intervallenden hinaus erstreckt. Der Trick, auf den andere Antworten weiter unten hingewiesen haben, besteht darin, das Problem in ein Problem umzuwandeln, das auf diese Weise gelöst werden kann. Das ist, was die vorgeschlagene Fourier-Transformation tut, und in diesem Fall ist das Lernen einer Sinuswelle nur das Lernen einer Konstanten.
Ukko

Antworten:


19

Sie verwenden ein Feed-Forward-Netzwerk. Die anderen Antworten stimmen, dass FFNNs bei der Extrapolation außerhalb des Bereichs der Trainingsdaten nicht besonders gut sind.

Da die Daten jedoch eine periodische Qualität aufweisen, ist das Problem möglicherweise für die Modellierung mit einem LSTM geeignet. LSTMs sind verschiedene neuronale Netzwerkzellen, die mit Sequenzen arbeiten und ein "Gedächtnis" für das haben, was sie zuvor "gesehen" haben. Die Zusammenfassung dieses Buchkapitels schlägt vor, dass ein LSTM-Ansatz ein qualifizierter Erfolg bei periodischen Problemen ist.

In diesem Fall wären die Trainingsdaten eine Folge von Tupeln und die Aufgabe, genaue Vorhersagen für neue Eingaben für einige zu treffen und indiziere einige aufsteigende Reihenfolge. Die Länge jeder Eingabesequenz, die Breite des Intervalls, das sie abdecken, und ihr Abstand bestimmen Sie. Intuitiv würde ich erwarten, dass ein reguläres Raster für einen Zeitraum ein guter Startpunkt ist, wobei die Trainingssequenzen einen weiten Wertebereich abdecken und nicht auf ein bestimmtes Intervall beschränkt sind.(xich,Sünde(xich))xich+1xich+nnich

(Jimenez-Guarneros, Magdiel und Gomez-Gil, Pilar und Fonseca-Delgado, Rigoberto und Ramirez-Cortes, Manuel und Alarcon-Aquino, Vicente, "Long-Term Prediction einer Sinusfunktion ein LSTM neuronalen Netz", in Nature- Inspiriertes Design hybrider intelligenter Systeme )


2
Welche Sequenz wird hier modelliert? Was sind die Zeitschritte? Das sieht für mich nach einer einfachen Kurvenanpassung aus.
David J. Harris

@ DavidJ.Harris Ich habe meine Antwort aktualisiert.
Sycorax sagt Reinstate Monica

1/(2π)

Machen sie so zum Beispiel Marktvorhersagen?
Markus Appel

3
Nein, so machen Sie keine Marktvorhersagen. Zumindest nicht, wie man es macht, um Geld zu verdienen.
Aksakal

13

Wenn Sie einfache periodische Funktionen wie diese erlernen möchten, können Sie sich mit der Verwendung von Gaußschen Prozessen befassen. Mithilfe von Hausärzten können Sie Ihr Domänenwissen in einem gewissen Umfang durchsetzen, indem Sie eine geeignete Kovarianzfunktion angeben. In diesem Beispiel können Sie einen periodischen Kernel auswählen, da Sie wissen, dass die Daten periodisch sind. Das Modell extrapoliert dann diese Struktur. Auf dem Bild sehen Sie ein Beispiel. Hier versuche ich, die Gezeitenhöhendaten anzupassen, damit ich weiß, dass sie eine periodische Struktur haben. Da ich eine periodische Struktur verwende, extrapoliert das Modell diese Periodizität (mehr oder weniger) korrekt. OFC, wenn Sie versuchen, etwas über neuronale Netze zu lernen, ist dies nicht wirklich relevant, aber dies ist möglicherweise ein etwas besserer Ansatz als handtechnische Funktionen. Im Übrigen sind neuronale Netze und GPs in der Theorie eng verwandt,Bildbeschreibung hier eingeben

Allgemeinmediziner sind nicht immer nützlich, da sie im Gegensatz zu neuronalen Netzen für große Datasets und tiefe Netzwerke schwer skalierbar sind. Wenn Sie sich jedoch für solche Probleme mit geringen Abmessungen interessieren, sind sie wahrscheinlich schneller und zuverlässiger.

(Auf dem Bild sind die schwarzen Punkte Trainingsdaten und die roten die Ziele. Sie können sehen, dass das Modell die Periodizität ungefähr lernt, auch wenn sie nicht genau richtig ist. Die farbigen Bänder sind die Konfidenzintervalle der Modelle Prognose)


2
Dieses Grundstück ist wunderschön.
Sycorax sagt Reinstate Monica

11

Algorithmen für maschinelles Lernen - einschließlich neuronaler Netze - können lernen, beliebige Funktionen zu approximieren, jedoch nur in dem Intervall, in dem eine ausreichende Dichte von Trainingsdaten vorliegt.

Auf Statistiken basierende Algorithmen für maschinelles Lernen funktionieren am besten, wenn sie eine Interpolation durchführen. Dabei werden Werte vorhergesagt, die den Trainingsbeispielen nahe kommen oder zwischen ihnen liegen.

Außerhalb Ihrer Trainingsdaten hoffen Sie auf eine Hochrechnung. Aber es gibt keinen einfachen Weg, das zu erreichen. Ein neuronales Netzwerk lernt eine Funktion niemals analytisch, sondern nur ungefähr über Statistiken - dies gilt für nahezu alle überwachten Lern-ML-Techniken. Die fortschrittlicheren Algorithmen können bei genügend Beispielen (und freien Parametern im Modell) einer ausgewählten Funktion beliebig nahe kommen, tun dies jedoch nur im Bereich der bereitgestellten Trainingsdaten.

Wie sich das Netzwerk (oder eine andere ML) außerhalb des Bereichs Ihrer Trainingsdaten verhält, hängt von der Architektur ab, einschließlich der verwendeten Aktivierungsfunktionen.

SündeSünde(x),Sünde(2x+π/4)Sünde


"Ein neuronales Netzwerk lernt eine Funktion niemals analytisch, sondern nur ungefähr über Statistiken." - Dasselbe gilt für fast alles, was in der Praxis verwendet wird, z. B. lernt FFT auch nicht analytisch. Sie könnten die Abtastrate und -periode auf unendlich erhöhen und der wahren Funktion unendlich nahe kommen, aber das Gleiche gilt für NN.
Aksakal

@Aksakal: Ja das stimmt. Ich wollte jedoch nicht behaupten, dass "alle ML-Algorithmen niemals Funktionen analytisch lernen". weil sich zweifellos jemand ein Gegenbeispiel für einen Bayesianischen Analytiker oder eine genetische Programmierung usw. ausgedacht hat. Ich werde versuchen, es zu überarbeiten, um es allgemeiner zu machen
Neil Slater,

9

In einigen Fällen funktioniert der von @Neil Slater vorgeschlagene Ansatz, Ihre Features mit einer periodischen Funktion zu transformieren, sehr gut und ist möglicherweise die beste Lösung. Die Schwierigkeit hierbei ist, dass Sie die Periode / Wellenlänge möglicherweise manuell auswählen müssen (siehe diese Frage ).

Wenn die Periodizität tiefer in das Netzwerk eingebettet werden soll, ist es am einfachsten, sin / cos als Aktivierungsfunktion in einer oder mehreren Ebenen zu verwenden. In diesem Artikel werden mögliche Schwierigkeiten und Strategien für den Umgang mit periodischen Aktivierungsfunktionen erörtert.

Alternativ wird in diesem Artikel ein anderer Ansatz verfolgt, bei dem die Gewichtung des Netzwerks von einer periodischen Funktion abhängt. In der Arbeit wird auch vorgeschlagen, Splines anstelle von sin / cos zu verwenden, da diese flexibler sind. Dies war eine meiner Lieblingszeitungen im letzten Jahr, es lohnt sich also, sie zu lesen (oder zumindest das Video anzuschauen), auch wenn Sie am Ende nicht den Ansatz verwenden.


9

Sie haben einen falschen Ansatz gewählt. Mit diesem Ansatz können Sie das Problem nicht beheben.

Es gibt verschiedene Möglichkeiten, um das Problem zu beheben. Ich werde das offensichtlichste durch Feature-Engineering vorschlagen. Anstatt die Zeit als lineares Merkmal zu verstopfen, setzen Sie sie als Rest des Moduls T = 1. Zum Beispiel werden t = 0,2, 1,2 und 2,2 alle zu einem Merkmal t1 = 0,1 usw. Solange T größer als die Wellenperiode ist, funktioniert dies. Stecken Sie dieses Ding in Ihr Netz und sehen Sie, wie es funktioniert.

Feature Engineering wird unterschätzt. Es gibt diesen Trend in AI / ML, in dem die Verkäufer behaupten, Sie würden alle Ihre Eingaben ins Netz werfen und irgendwie herausfinden, was sie damit anfangen sollen. Sicher, es funktioniert, wie Sie in Ihrem Beispiel gesehen haben, aber dann bricht es genauso leicht zusammen. Dies ist ein großartiges Beispiel, das zeigt, wie wichtig es ist, auch in einfachsten Fällen gute Funktionen zu erstellen.

Ich hoffe, Sie erkennen, dass dies das gröbste Beispiel für Feature-Engineering ist. Es soll Ihnen nur eine Vorstellung davon geben, was Sie damit machen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.