Vorhersage einer Zeitreihe (CSV Schnittstelle)
Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo,
ich bin neu im Forum und beschäftige mich seit kurzem mit MemBrain. Da mich die Vorhersage von Zeitreihen interessiert, habe ich mir bereits das „Mackey-glass time series“ Beispiel angeschaut. So wie ich es verstanden habe, geht man hier von einer fortlaufenden Datenreihe aus.
Ein Beitrag des Users Hanah ( viewtopic.php?f=5&t=18 ) widmet sich ebenfalls der Vorhersage einer Messreihe. Thomas Jetter vergleicht die Problematik anschaulich mit dem Erkennen von Melodien. Die Notwendigkeit des Einsatzes des „Activation Ignore Value“ Flags habe ich in diesem Zusammenhang verstanden. Er empfiehlt alle „Melodien“ zu einer großen Lesson (CSV) zusammenzuführen. Wie erkennt MemBrain, bei einem zeitabhängigen Netz, den Übergang des Ende einer „Melodie“ (bzw. Zeitreihe) zu dem Start einer neuen „Melodie“? Regelt das vielleicht der Wechsel („gültiger Wert“ --- „Activation Ignore Value“ --- „gültiger Wert“) des Ausgangsneuron bei einer fortlaufenden Abarbeitung der Datensätze in der CSV Datei?
Mit freundlichen Grüßen
Lupo
ich bin neu im Forum und beschäftige mich seit kurzem mit MemBrain. Da mich die Vorhersage von Zeitreihen interessiert, habe ich mir bereits das „Mackey-glass time series“ Beispiel angeschaut. So wie ich es verstanden habe, geht man hier von einer fortlaufenden Datenreihe aus.
Ein Beitrag des Users Hanah ( viewtopic.php?f=5&t=18 ) widmet sich ebenfalls der Vorhersage einer Messreihe. Thomas Jetter vergleicht die Problematik anschaulich mit dem Erkennen von Melodien. Die Notwendigkeit des Einsatzes des „Activation Ignore Value“ Flags habe ich in diesem Zusammenhang verstanden. Er empfiehlt alle „Melodien“ zu einer großen Lesson (CSV) zusammenzuführen. Wie erkennt MemBrain, bei einem zeitabhängigen Netz, den Übergang des Ende einer „Melodie“ (bzw. Zeitreihe) zu dem Start einer neuen „Melodie“? Regelt das vielleicht der Wechsel („gültiger Wert“ --- „Activation Ignore Value“ --- „gültiger Wert“) des Ausgangsneuron bei einer fortlaufenden Abarbeitung der Datensätze in der CSV Datei?
Mit freundlichen Grüßen
Lupo
Viele Grüße
Lupo
Lupo
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo Lupo,
herzlich WIllkommen im Forum!
Dies wird für alle Pattern der Teach-Lesson gemacht. Wenn alle Pattern einmal abgearbeitet wurden, dann nennt man das in der NN-Sprache 'Episode'. In MemBrain gibt es diesen Begriff nicht, hier wird von einem 'Teach Step' gesprochen.
Wenn MemBrain nun beim Training feststellt, dass einer der Outputs des gerade trainierten Patterns dem 'Acticvation Ignore Value' des zugehörigen Output Neurons entspricht, dann wird für dieses Neuron bei diesem Pattern kein Backpropagation Lernschritt durchgeführt. D.h., der zugehörige Output-Wert des Patterns aus der Lesson beeinflusst das Netz nicht. Sehr wohl beeinflusst aber der vorangehende 'Think Step' das Netz, nämlich genau dann, wenn es sich um ein zeitvariantes Netz handelt, also ein Netz, dessen innerer Zustand und damit auch seine Outputs nicht nur von den gerade angelegten Inputs abhängt, sondern auch von seiner Vorgeschichte, d.h., den netzinternen Zuständen von Neuronen und 'Activation Spikes', die in den Links gespeichert sein können.
Beim Training greift somit der Activation Ignore Value. Wenn man später das Netz benutzen will, um eine 'Melodie' zu erkennen, dann spielt der Activation Ignore Value keine Rolle mehr. Das Netz wird bei jedem Think Step an seinen Outputs Werte erzeugen. Mann muss dann ebenh wissen, dass man diese Outputs erst 'ernst nehmen' sollte, wenn ein guter Teil der 'Melodie' in das Netz 'hineingetaktet' wurde.
Helfen diese Erklärungen? Bearbeitest Du ein konkretes Problem, zu dem Du Hilfe benötigst?
Viele Grüße
herzlich WIllkommen im Forum!
MemBrain erkennt so etwas gar nicht. Du musst Dir vorstellen, dass MemBrain während des Trainings einfach nur die Inputs eines einzigen 'Patterns' aus einer 'Lesson' and das Netz anlegt, einen 'Think Step' durchführt (d.h., das Netz die zugehörigen Outputs als Reaktion auf die angelegten Inputs sowie den momentanen internen Zustand des Netzes berechnen lässt) und dann einen Backpropagation-Lernschritt durchführt. Dazu nimmt MemBrain die Outputs des gerade trainierten Patterns aus der Lesson, vergleicht diese mit den vom Netz errechneten Outputs und passt dann die Link Weights und die Activation Thresholds im Netz so an, dass der Output des Netzes möglichst etwas näher an seinen Sollwert heranrückt.Lupo wrote:Wie erkennt MemBrain, bei einem zeitabhängigen Netz, den Übergang des Ende einer „Melodie“ (bzw. Zeitreihe) zu dem Start einer neuen „Melodie“?
Dies wird für alle Pattern der Teach-Lesson gemacht. Wenn alle Pattern einmal abgearbeitet wurden, dann nennt man das in der NN-Sprache 'Episode'. In MemBrain gibt es diesen Begriff nicht, hier wird von einem 'Teach Step' gesprochen.
Wenn MemBrain nun beim Training feststellt, dass einer der Outputs des gerade trainierten Patterns dem 'Acticvation Ignore Value' des zugehörigen Output Neurons entspricht, dann wird für dieses Neuron bei diesem Pattern kein Backpropagation Lernschritt durchgeführt. D.h., der zugehörige Output-Wert des Patterns aus der Lesson beeinflusst das Netz nicht. Sehr wohl beeinflusst aber der vorangehende 'Think Step' das Netz, nämlich genau dann, wenn es sich um ein zeitvariantes Netz handelt, also ein Netz, dessen innerer Zustand und damit auch seine Outputs nicht nur von den gerade angelegten Inputs abhängt, sondern auch von seiner Vorgeschichte, d.h., den netzinternen Zuständen von Neuronen und 'Activation Spikes', die in den Links gespeichert sein können.
Beim Training greift somit der Activation Ignore Value. Wenn man später das Netz benutzen will, um eine 'Melodie' zu erkennen, dann spielt der Activation Ignore Value keine Rolle mehr. Das Netz wird bei jedem Think Step an seinen Outputs Werte erzeugen. Mann muss dann ebenh wissen, dass man diese Outputs erst 'ernst nehmen' sollte, wenn ein guter Teil der 'Melodie' in das Netz 'hineingetaktet' wurde.
Helfen diese Erklärungen? Bearbeitest Du ein konkretes Problem, zu dem Du Hilfe benötigst?
Viele Grüße
Thomas Jetter
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo Thomas,
vielen Dank für Deine Erläuterungen zu meiner Frage. Im Moment gibt es noch kein konkretes Projekt, sondern lediglich einige Vorüberlegungen.
Zunächst möchte ich die Funktionsweise von MemBrain erstmal genauer kennenlernen. Insbesondere interessiert mich hier das Scripting und die C# Wrapper-Klasse. Mit den Daten des Mackey-Glass Beispiels werde ich damit erst mal experimentieren.
Allerdings habe ich noch eine generelle Frage zur Aufteillung von Testdaten. Nimmt man besser 100% der Testdaten in die Learndatei und davon 10% in die Validierungsdatei, oder ist es besser von den 100% nur 90% in die Lerndatei zu überführen und die restlichen 10% in die Validierungsdatei zu übernehmen?
Viele Grüße
Lupo
vielen Dank für Deine Erläuterungen zu meiner Frage. Im Moment gibt es noch kein konkretes Projekt, sondern lediglich einige Vorüberlegungen.
Zunächst möchte ich die Funktionsweise von MemBrain erstmal genauer kennenlernen. Insbesondere interessiert mich hier das Scripting und die C# Wrapper-Klasse. Mit den Daten des Mackey-Glass Beispiels werde ich damit erst mal experimentieren.
Allerdings habe ich noch eine generelle Frage zur Aufteillung von Testdaten. Nimmt man besser 100% der Testdaten in die Learndatei und davon 10% in die Validierungsdatei, oder ist es besser von den 100% nur 90% in die Lerndatei zu überführen und die restlichen 10% in die Validierungsdatei zu übernehmen?
Viele Grüße
Lupo
Viele Grüße
Lupo
Lupo
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Eine Validierungsdatei muss grundsätzlich Muster enthalten, die in der Trainingsdatei NICHT enthalten sind. Bei der Validierung ist das Ziel nämlich gerade, festzustellen ob das Netz auf NICHT TRAINIERTE Daten auch gute Ergebnisse bringt (also ob das Netz gut generalisiert). Dazu dürfen die betreffenden Validierungsmuster natürlich nicht in der Trainingsdatei enthalten sein.Lupo wrote:Nimmt man besser 100% der Testdaten in die Learndatei und davon 10% in die Validierungsdatei, oder ist es besser von den 100% nur 90% in die Lerndatei zu überführen und die restlichen 10% in die Validierungsdatei zu übernehmen?
Wichtig ist aber, dass man die Normalisierungsgrenzen der I/O Neuronen des Netzes so wählt, dass sie in jedem Fall die Wertebereiche sowohl der Trainingsdaten als auch der Validierungsdaten einschließen.
Wenn man den 'Normalization Wizard' verwenden will, dann muss man zunächst sowohl Trainings- als auch Validierungsdaten in einer Lesson zusammenführen und damit den Normalization Wizard starten. Natürlich ist damit nicht sichergestellt, dass zukünftige Muster auch innerhalb dieser Grenzen liegen. Achtung: Mit dieser Lesson darf aber entsprechend dem oben gesagten nicht trainiert werden, die dient lediglich der automatischen Bestimmung der Normalisierungsgrenzen.
Außerdem müssen die Normalsierungsgrenzen natürlich auch zukünftig zu erwartende Werte mit einschließen. Deshalb wählt man sie typischerweise für das finale Netz händisch. Bei den ersten Testläufen ist aber die Herangehensweise mit dem Wizard genauso in Ordnung.
Viele Grüße
Thomas Jetter
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo Thomas,
Deine Ausführungen zur Aufteilung der Testdaten leuchten mir ein.
Ich habe noch eine Frage zur Normalisierung. Die Normalisierungsgrenzen lassen sich ja für die Eingangs- und Ausgangsneuronen des Netzes festlegen. Im Mackey-Glass Beispiel wird der Normalisierungsbereich des Ausgangsneurons auf -0.6 bis 0.6 festgelegt. Warum wird das Eingangsneuron nicht normiert?
Deine Ausführungen zur Aufteilung der Testdaten leuchten mir ein.
Ich habe noch eine Frage zur Normalisierung. Die Normalisierungsgrenzen lassen sich ja für die Eingangs- und Ausgangsneuronen des Netzes festlegen. Im Mackey-Glass Beispiel wird der Normalisierungsbereich des Ausgangsneurons auf -0.6 bis 0.6 festgelegt. Warum wird das Eingangsneuron nicht normiert?
Viele Grüße
Lupo
Lupo
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Der Berech der Mackey-Glass Reihe reicht von -0.5 bis +0.5.Lupo wrote:Im Mackey-Glass Beispiel wird der Normalisierungsbereich des Ausgangsneurons auf -0.6 bis 0.6 festgelegt. Warum wird das Eingangsneuron nicht normiert?
Beide Neuronen (Ein- und Ausgang, mit Ihren Akt-Funktionen IDENTICAL bzw. TAN-HYP) sind deshalb durch Ihren natürlichen Wertebereich von -1 bis +1 erst einmal grundsätzlich in der Lage, die Mackey-Glass Reihe abzudecken. Außerdem ist die Größenordnung der Wertebereiche i.O., d.h., man 'verschenkt' nicht allzu viel Auflösung, wenn alles ohne Normalisierung belässt.
Beim Ausgangsneuron bewegt man sich allerdings mit -0.5 bis +0.5 noch ziemlich im linearen Bereich der Aktivierungsfunktion. Das ist etwas unschön, denn gerade durch den nichtlinearen Charakter der Aktivierungsfunktionen kann ein Netz gute Assoziationen zwischen Ein- und Ausgangsdaten erlernen. Deshalb wird der Wertebereich des Ausgangsneurons etwas enger um den abzudeckenden Bereich herum gelegt.
Funktionieren würde es aber bestimmt auch ohne das ganz gut.
Beim Eingangsneuron spielt das keine Rolle, da hier ohnehin eine lineare Akt.-Funktion vorliegt. Eingangsneuronen werden eigentlich nur als 'Datencontainer' für die Eingangsstimuli verwendet. Die erlernte Abbildung ist in den Links und in den Activation Thresholds der Hidden- und Outputneuronen enthalten.
Viele Grüße
Thomas Jetter
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo Thomas,
ich habe noch eine Verständnisfrage. Die Funktion bool GetLessonOutputMinMax(...) scheint bei der Berechnung der Extremwerte den Activation Ignore Value des Outputsneurons nicht zu berücksichtigen.
Bei meinem Test sollte das Output Neuron nur die Werte 1 und 0 für true und false annehmen. Den Activation Ignore Value habe ich auf -2 gesetzt und aktiviert. In den CSV-Dateinen nimmt das Outputneuron die Werte 0, 1und -2 an. Die Funktion GetLessonOutputMinMax() gibt mir im Script als Minimum -2 und als Maximum 1 zurück. Ich hätte eigentlich die Werte 0 und 1 erwartet.
Sollte man vielleicht in diesem Beispiel besser 1 und -1 für true bzw. false setzen und als Activation Ignore Value die 0 wählen?
ich habe noch eine Verständnisfrage. Die Funktion bool GetLessonOutputMinMax(...) scheint bei der Berechnung der Extremwerte den Activation Ignore Value des Outputsneurons nicht zu berücksichtigen.
Bei meinem Test sollte das Output Neuron nur die Werte 1 und 0 für true und false annehmen. Den Activation Ignore Value habe ich auf -2 gesetzt und aktiviert. In den CSV-Dateinen nimmt das Outputneuron die Werte 0, 1und -2 an. Die Funktion GetLessonOutputMinMax() gibt mir im Script als Minimum -2 und als Maximum 1 zurück. Ich hätte eigentlich die Werte 0 und 1 erwartet.
Sollte man vielleicht in diesem Beispiel besser 1 und -1 für true bzw. false setzen und als Activation Ignore Value die 0 wählen?
Viele Grüße
Lupo
Lupo
Re: Vorhersage einer Zeitreihe (CSV Schnittstelle)
Hallo,
die Funktion bezieht sich tatsächlich nur auf die Lesson, der 'Activation Ignore Value' ist hingegen eine Eigenschaft des Netzes bzw. seiner Output-Neuronen.
Die Funktion weiß davon nichts, sie gibt also tatsächlich immer die tatsächlichen Maxima und Minima der Lesson zurück.
Viele Grüße,
Thomas
die Funktion bezieht sich tatsächlich nur auf die Lesson, der 'Activation Ignore Value' ist hingegen eine Eigenschaft des Netzes bzw. seiner Output-Neuronen.
Die Funktion weiß davon nichts, sie gibt also tatsächlich immer die tatsächlichen Maxima und Minima der Lesson zurück.
Viele Grüße,
Thomas
Thomas Jetter