1. Problembeschreibung und Zielsetzung
2.1.2. Das Fuzzysystem zur Bestimmung des Lernfaktors
2.1.3. Der Genetische Algorithmus zur Bestimmung der Netzstruktur
2.1.4. Der Genetische Algorithmus zur Bestimmung der Initialgewichte
3. Verwendete Datenbasis und Datenaufbereitung
4.1.3. Genetischer Algorithmus zur Bestimmung der Netzstruktur
4.1.4. Genetischer Algorithmus zur Bestimmung der Initialgewichte
1. Problembeschreibung und Zielsetzung
Der Beleg vereint an einer speziellen Aufgabe, der Zeitreihenanalyse, drei Gebiete des Soft-Computing: Wissensbasierte Fuzzysysteme, Neuronale Netze und Genetische Algorithmen.
Ausgangspunkt ist ein Neuronales Netz, welches für das Erlernen von Zusammenhängen einer beliebigen Zeitreihe verantwortlich ist. Das Fuzzysystem und der Einsatz von Genetischen Algorithmen sollen das Gesamtsystem erweitern, um das Lernverhalten des Netzes positiv zu beeinflussen.
Als spezielle, praktische Anwendung der Zeitreihenanalyse stand insbesondere die Aktienkursprognose im Vordergrund.
Der Beleg folgt dabei, soweit möglich dem Black-Box-Ansatz, d. h. dem Verstecken der vielen Einstellmöglichkeiten eines Neuronalen Netzes, um weniger erfahrenen Benutzern den Einstieg zu erleichtern und die Möglichkeiten der anderen Komponenten aufzuzeigen. Dies gelingt im Hinblick auf die Parameter des Fuzzysystem und der Genetischen Algorithmen ähnlich erfolgreich, trotzdem haben wir uns entschlossen bei diesen Komponenten grundlegende Parameter dem Einfluss des Nutzers nicht zu entziehen.
Auf die theoretischen Grundlagen hinter den drei Gebieten wird nur oberflächlich zum Zusammenhang mit der Bedienung bzw. Realisierung der Anwendung eingegangen. Bei größerem Interesse dafür sollte auf das große Angebot an Fachliteratur zurückgegriffen werden.
Wie schon in der Einführung aufgeführt, kommen drei unterschiedliche Verfahren zur Lösung der Aufgabenstellung zur Anwendung. Sie werden an den Punkten des Neuronalen Netzes eingesetzt, an denen es bekanntermaßen zu Problemen beim praktischen Einsatz kommen kann, bzw. die einen Einfluss auf das Lernverhalten des Netzes haben. Dazu zählen die Wahl des Lernfaktors, die Bestimmung des Layouts des Netzes, d.h. der Anzahl der zu verwendenden Neuronen, und die Initialisierung der Gewichte.
In diesem Abschnitt werden die einzelnen Einsatzgebiete und die Funktionsweise der Komponenten detailliert erläutert. Alle Komponenten wurden zuerst separat entwickelt und an kleinen Aufgaben getestet.
Das Neuronale Netz bietet mit seinem Lernverfahren die Ausgangsbasis. In der Theorie der Neuronalen Netze existieren unterschiedliche Architekturen mit viele Merkmalen. Dazu zählen die Netzwerkstruktur, Anzahl der Verarbeitungseinheiten, Aktivierungsfunktion, Ausgabefunktion, Übertragungsfunktion (Propagierungsfunktion), die externe Eingabefunktion und das benutzte Lernverfahren.
Die Bibliothek des Neuronalen Netzes bietet mehrere Aktivierungsfunktionen wie die Lineare Schwellwertfunktion, die Semilineare Funktion, die Lineare Funktion und drei Sigmoide Funktionen; dem Tangenshyperbolicus, dem Arcustangens und der Logistischen Funktion (1/(1+e^-in)).
Dabei ist es möglich den einzelnen Aktivierungseinheiten (Neuronen) unterschiedliche Aktivierungsfunktionen zuzuordnen. Für das zu bearbeitende Problem der Zeitreihenanalyse kommt wegen der komplexen Zusammenhänge und der stetigen Ausgangswerte nur eine sigmoide Funktion in Frage. Daher wurde die Logistische Funktion als Aktivierungsfunktion gewählt.
Da in den meisten eingesetzten Netzmodellen als Ausgabefunktion die Identität zum Einsatz kommt, wurde auf eine separate Ausgabefunktion verzichtet.
Als Übertragungsfunktion wird wie in dem Großteil der konnektionistischen Netzmodelle die gewichtete Summe aller Ausgaben der Einheiten genutzt.
Das zur Lösung der Aufgabenstellung eingesetzte Lernverfahren funktioniert nach dem Prinzip der Error-Backpropagation für Feedforward-Netze, d.h. einer auf mehrere Schichten erweiterten Delta-Regel für das Multilayer-Perceptron. Um eine bessere Konvergenz des Verfahrens zu erreichen kommt eine Variante der Error-Backpropagation, das Backpropagation-Momentum zum Einsatz, welches eine gewisse 'Trägheit' einführt und damit hilft eventuelle Nebenminima zu vermeiden. Der Momentum-Faktor ist dabei im Gegensatz zum Lernfaktor, der durch das Fuzzysystem geregelt wird, ein fester Wert.
Auf weitere Modifikationen des Lernverfahrens und des Neuronalen Netzes im Zusammenhang mit der Verwendung eines wissensbasierten Fuzzysystems und von Genetischen Algorithmen wird in den nächsten Abschnitten genauer eingegangen.
2.1.2. Das Fuzzysystem zur Bestimmung des Lernfaktors
Das Fuzzysystem wird als eine Art Regler zur Einstellung der Lernrate des Neuronalen Netzes verwendet. Mit Hilfe von vordefinierten und vom Nutzer änderbaren Regeln wird auf der Basis des darin enthaltenen Wissens eine 'Intelligenz' in die Wahl des Lernfaktors gebracht.
Das Fuzzysystem stellt mit Hilfe von Regeln der Form:
IF <fuzzy_eingabe> IS <fuzzy_wert> THEN <fuzzy_ausgabe> IS <fuzzy_wert> WITH <certainty_value>
das Wissen dar.
Dabei bezieht sich <fuzzy_eingabe> bzw. <fuzzy_ausgabe> auf Ein- und Ausgangsvariablen des Fuzzysystems, und <fuzzy_wert> auf die Ausprägungen dieser Variablen.
Mit WITH <certainly_value> wird optional ein Vertrauenswert zu dieser Regel im Bereich von 0 bis 1 angegeben. Je größer dieser Wert desto mehr findet diese Regel Berücksichtigung.
Jede Fuzzyvariable kann mehrere Ausprägungen haben die üblicherweise mit Adjektiven beschrieben werden, und auf welche in den Regeln des Fuzzysystems Bezug genommen wird.
Der Werte- und der Bildbereich der Ausprägungen der Fuzzyvariablen muß in dem Bereich von 0 bis 1 liegen, d.h. es sind unter Umständen Normalisierungen und Transformationen der realen Ein- und Ausgangswerte vorzunehmen. Um eine möglichst einfache Realisierung der Ausprägungen zu erreichen wurde auf die Angabe von formalen Funktionen verzichtet, da sonst der Aufwand bei der Ableitung derselbigen immens gewesen wäre. Stattdessen können die Ausprägungen mit zusammengesetzten Geraden angegeben werden, mit dem Vorteil einer einfachen Ermittlung des Anstiegs. Nachteilig wirkt sich allerdings die damit erkaufte eventuelle Nichtstetigkeit an den Berührungspunkten der einzelnen Abschnitte aus.
Außerdem sollte ein nicht durch eine Ausprägung abgedeckter Bereich einer Fuzzyvariablen vermieden werden, da sonst ebenfalls durch die nicht ermittelbaren Werte der Ausprägung(en) kein Ergebnis errechnet werden kann.
Für die Aggregation und den Vertrauenswert für die Berechnung wurden im Fuzzy System einige Kompensierende sowie auch nicht Kompensierende Operatoren implementiert.
Zu den zur Verfügung stehenden nicht Kompensierende Operatoren (spezielle t- und s-Normen) gehören:
- das Algebraische Produkt,
- die Algebraische Summe
- Begrenztes Produkt
- Begrenzte Summe.
Die möglichen Kompensierenden Operatoren sind:
- Arithmetisches Mittel
- Geometrisches Mittel.
- FuzzyAND
- FuzzyOR
- MinMax Operator
- Algebraischer ProdSum Operator.
Für die Implikation wurden folgende Operatoren implementiert:
- Minimum
- Algebraisches Produkt.
Für die Akkumulation wurden folgende Operatoren implementiert
- Maximum.
Für die Defuzzyfizierung dient die Flächenschwerpunkt-Methode (Center Of Area).
In dem vorliegenden System zur Einstellung der Lernrate des Neuronalen Netzes findet die folgende Operator-Kombination Anwendung:
- Aggregation: FuzzyAND
- Sicherheit: Algebraisches Produkt
- Implikation: Minimum
- Akkumulation: Maximum.
2.1.3. Der Genetische Algorithmus zur Bestimmung der Netzstruktur
Genetische Algorithmen kommen insbesondere bei Optimierungsaufgaben zur Anwendung. Daher dient zur Ermittlung eines geeigneten Layouts des Neuronalen Netzes, d.h. der Anzahl der verdeckten Schichten und der Anzahl von Neuronen, ein Genetischer Algorithmus.
Dazu wird eine Population mit einer geraden Anzahl von Individuen - den Neuronalen Netzen - gebildet.
Die Struktur des Netzes wird dabei durch eine binäre Kodierung der Anzahl der verdeckten Schichten - den Chromosomen - und der Neuronen pro Schicht dargestellt.
Ein gesetztes Bit innerhalb des Chromosoms entspricht einem vorhandenem Neuron. Durch Aufsummierung der Bits ergibt sich damit die Anzahl der Neuronen innerhalb einer Schicht.
Die Grenzen, die maximale Anzahl der Schichten und Neuronen und andere relevante Parameter werden durch den Nutzer vorgegeben (s. Kap 4.1.3.).
Als Bewertungs- bzw. Fitnessfunktion der Individuen findet der Abfall des Validierungsfehler des Neuronalen Netzes Verwendung, je schneller dieser erfolgt, d.h. innerhalb der maximalen Anzahl von Trainingszyklen liegt, desto größer ist die Fitness.
Für die Auswahl der Individuen zur Fortpflanzung kommt das Roulette-Verfahren zum Einsatz. Die neue Population setzt sich aus einem Teil der Kinder und einem Teil der Elternpopulation zusammen.
2.1.4. Der Genetische Algorithmus zur Bestimmung der Initialgewichte
Um eine Gewichtsinitialisierung zu erhalten, die einen raschen Lernfortschritt verspricht, kommt ebenfalls ein Genetischer Algorithmus zum Einsatz.
Den Ausgangspunkt bildet ein Netz mit fester Struktur, .d.h. konstante Anzahl von Schichten und Neuronen. Für dieses Netzlayout eines Fullconnected-Feedforward-Netzes werden Individuen angelegt, in denen sämtliche Gewichtswerte binär kodiert sind. Jedes Chromosom bildet einen Gewichtwert ab, die in der Reihenfolge ihres Auftretens den Gewichten in dem Neuronalen Netz zugeordnet sind.
Innerhalb des Chromosoms entspricht ein Bit einem bestimmten Betrag, der durch die Parameter: Genauigkeit der Gewichte, sowie der unteren und oberen Grenze derselben festgelegt ist.
Die Summe der gesetzten Bits * Betrag pro Bit ergibt den Gewichtswert für das Chromosom.
Auch diese Parameter sind vom Nutzer änderbar.
Das so initialisierte Netz wird nicht trainiert, sondern mit den Validierungsdaten auf den Netzfehler überprüft. Je kleiner der dabei auftretende Fehler ist desto größer ist die Fitness.
Für die Auswahl der Individuen zur Fortpflanzung kommt das Roulette-Verfahren zum Einsatz. Die neue Population setzt sich aus einem Teil der Kinder und einem Teil der Elternpopulation zusammen.
2.2. Das Zusammenspiel der Komponenten
Da das Programm zur besseren Visualisierung der Fehlerverläufe und Prognosedaten mit einer grafischen Oberfläche ausgestattet wurde, und sämtliche Komponenten sehr rechenintensiv sind, war es für die Bedienbarkeit unumgänglich die Anwendung mit mehreren Threads zu implementieren.
Die einzelnen Komponenten arbeiten in folgender Reihenfolge zusammen. Zuerst wird mit dem Genetischen Algorithmus das Netzlayout durch das 'Vortrainieren' des Netzes ermittelt. Dabei wird, wie auch später bei der eigentlichen Trainingsphase, schon der Lernfaktor durch das Fuzzysystem bestimmt.
Nach der Ermittlung der Netzstruktur initialisiert der zweite Genetische Algorithmus die Gewichte.
Anschließend ist das Netz bereit für das Training, bei dem wie erwähnt auch das Fuzzysystem zum Einsatz kommt.
3. Verwendete Datenbasis/Datenaufbereitung
Die als Ausgangsbasis benutzten Daten sind historische Aktienkurse diverser deutscher Unternehmen, sie stammen von einer CD der Ausgabe 99 der Zeitschrift c't Geld Online. Sie liegen in getrennten Dateien als Semikolon-separierte Liste vor, mit den Angaben von Datum, Eröffnungkurs, Tageshöchstkurs, Tagestiefstkurs und Schlußkurs für jeden Tag. Für die Prognose wird nur der Schlußkurs der Aktie betrachtet.
Aus der Eingangsdatei mit den Aktienwerten werden mehrere Dateien generiert. Die Eingangsdaten werden aufgeteilt in Trainingsdaten (ca. 90%) zum eigentlichen Training des Neuronalen Netzes, in Validierungsdaten (ca. 10%) zur Überprüfung der Generalisierungsfähigkeit des Netzes während der Trainingsphase, sowie in Testdaten (immer die letzten 10 Datensätze - ohne Ausgangswerte) die für die Prognose nach dem hoffentlich erfolgreichen Training Verwendung finden. Für diese Testdaten werden natürlich zum Vergleich mit den prognostizierten Werten des Netzes auch noch die kompletten Testdaten (inklusive Ausgangswerten) in einer separaten Vergleichsdatei gespeichert.
Die Aufteilung des Datenpools nach der Generierung und Codierung der Daten, in Trainingsdaten und Validierungsdaten, erfolgt per Zufallgenerator. Die zeitliche Reihenfolge der Daten werden nicht verändert, von den entfernten Validierungsdaten abgesehen, damit hängt die Reihenfolge in der die Daten dem Netz präsentiert werden vom Netz selbst ab. Die Daten werden standardmäßig in zufälliger Reihenfolge dem Netz zum Training angeboten.
Zur einfacheren Handhabung durch das Programm wird zusätzlich eine Projektdatei angelegt (*.nnp) mit einer Auflistung der Dateinamen aller anderen Dateien und der Kodierungsform, die für die grafische Darstellung der Daten mit den zurücktransformierten Werten benötigt wird.
Alle verwendeten Beispiele sind mit je 5 Eingangswerten (5 Eingangsneuronen) und einem Ausgangswert pro Datensatz erstellt worden. Dabei wird immer von einer Zeitverschiebung von einem Tag ausgegangen.
Zur Codierung erfolgt für jeden Eingangswert eine Dividierung durch den doppelten Maximalwert des Kurses. Der Vorteil dieser Codierung liegt in der Transformation der Werte in den Bereich von 0 bis 0.5. Damit ergibt sich durch die Vermeidung von negativen Eingangswerten (wie z.B. bei einfacher Differenzbildung zum Vorgängerwert) eine einfache Umrechnung von Netzausgangswerten in reale Aktienkurse unabhängig von Wert und Anzahl der davor liegenden Kurswerte. Außerdem wird dadurch ein großer Teil des linearen Bereichs der Aktivierungsfunktion genutzt.
Nachteilig an dieser Form der Codierung ist der enge Wertebereich, der bei zwar relativ seltenen aber möglichen Kursentwicklungen über 100% Wertzuwachs bezogen auf den Maximalwert nicht mehr richtig abgebildet werden können. In einem solchen Fall ist dann eine erneute Codierung mit anschließendem Training erforderlich.
Hier befinden sich noch einige weitere Informationen zu der Datenaufbereitung und zum Erstellen eigener Projekte.
Da ein Großteil der Aspekte des Neuronalen Netzes mit den anderen Komponenten in Verbindung stehen wird darauf auch in den nächsten Kapiteln mit eingegangen.
Die Werte des Fuzzysystems, d.h. die Art und Anzahl der Ausprägungen sowie die zu verwendenden Regeln können zur Laufzeit des Programms bequem vom Nutzer verändert werden (s. Kap. 6.2.). Die Variablen sind auf den Validierungsfehler als Eingangsvariable und der Lernrate als Ausgangsvariable beschränkt. Das Fuzzysystem selbst könnte mehrere Variablen verarbeiten, da diese jedoch mit Eingangswerten hinterlegt werden müssen, um eine Berechnung durchzuführen sind zusätzliche Variablen für den speziellen Anwendungsfall sinnlos.
Ziel des Fuzzysystems ist es den Lernfaktor variabel in Abhängigkeit vom Validierungsfehler in einem Bereich von etwa 0.05 bis 0.4 zu halten um zu große Lernraten die sich für den Lernfortschritt negativ auswirken zu verhindern. Das voreingestellte Fuzzysystem verwendet nur 2 Ausprägungen für den Lernfaktor und 3 für den Validierungsfehler und hat sich damit als funktionsfähig erwiesen. Es sind sicherlich leistungsfähigere Ausprägungen und Regeln denkbar, allerdings ist der Aufwand zur Erstellung und Anpassung immens.
Variablen:
LearnFactor als Ausgangsvariable die nach jedem Lernschritt des Netzes neu berechnet und als Lernrate für den nächsten Lernschritt eingestellt wird.
ValidError als Eingangsvariable mit dem Validierungsfehler des Neuronalen Netzes der im vorhergehenden Lernschritt ermittelt wurde.
Die Ausprägungen der Variablen sind B (groß) und S(klein) für LearnFactor sowie NB (negativ groß), PB (positiv groß) und Z (null) für den Validierungsfehler.
|
x |
0.0 |
0.35 |
1.0 |
|
y |
1.0 |
0.0 |
0.0 |
Tab. 1 Wertepaare der Ausprägung NB
|
x |
0.0 |
0.3 |
0.5 |
0.7 |
1.0 |
|
y |
0.0 |
0.0 |
1.0 |
0.0 |
0.0 |
Tab. 2 Wertepaare der Ausprägung Z
|
x |
0.0 |
0.65 |
1.0 |
|
y |
0.0 |
0.0 |
1.0 |
Tab. 3 Wertepaare der Ausprägung PB
|
x |
0.0 |
0.1 |
0.125 |
1.0 |
|
y |
0.0 |
1.0 |
0.0 |
0.0 |
Tab. 4 Wertepaare der Ausprägung S
|
x |
0.0 |
0.2 |
0.5 |
0.500001 |
1.0 |
|
y |
0.0 |
0.1 |
1.0 |
0.0 |
0.0 |
Tab. 5 Wertepaare der Ausprägung B
IF ValidError IS NB THEN LearnFactor IS B WITH 1.0
IF ValidError IS PB THEN LearnFactor IS S WITH 1.0
IF ValidError IS Z THEN LearnFactor IS S WITH 1.0
Die Logik hinter den Regeln geht davon aus, daß bei negativen Fehlerveränderungen (sinkenden Fehler) der Lernfaktor weiterhin groß sein sollte, um einen raschen Lernfortschritt zu gewährleisten. Auch bei Fehleränderungen um den Nullpunkt soll ein großer Lernfaktor verwendet werden. Erst wenn der Fehler wieder ansteigt ist der Lernfaktor kleiner zu wählen, damit das Fehlergebiet sicher verlassen wird.
4.1.3. Genetischer Algorithmus zur Bestimmung der Netzstruktur
Maximale Anzahl von Schichten und Neuronen pro Schicht:
Die Wahl der Parameter des Genetischen Algorithmus richtet sich nach verschiedenen Gesichtspunkten. Für die Anzahl der verdeckten Schichten entspricht die angegebene Zahl direkt der tatsächlich angelegten Schichten innerhalb des Netzes. Bei der Wahl der maximalen Zahl an Neuronen in einer Schicht ist zu berücksichtigen, das die Wahrscheinlichkeit das diese Zahl in der Praxis durch den Algorithmus auch wirklich erreicht wird, d.h. alle Bits sind auf '1' gesetzt, relativ klein ist. Es ist empfehlenswert einen Aufschlag von etwa dem 1.2-fachen zu verwenden.
Bei allen trainierten Beispielen (s. Kap. 4.2.) hat sich maximal ein realer Wert von 8 als noch sinnvoll erwiesen. Mit einer Wahl von 20 als maximale Neuronenzahl in einer Schicht sollten sich 95% aller Fälle bei einer moderaten Laufzeit abdecken lassen. Nur bei extrem komplexen und sehr großen Trainingsdatensätzen könnten breitere Schichten notwendig sein.
Allgemein hat sich gezeigt das bei den trainierten Beispielen, die aus Zwecken der Vergleichbarkeit alle mit 5 Eingangsneuronen und einem Ausgangsneuron ausgelegt wurden, flache Netzhierarchien besser geeignet sind. Mit zunehmender Zahl der verdeckten Schichten verlängert sich der Trainingbedarf überproportional. Spätestens ab 3 verdeckten Schichten ist eine Verbesserung der Lernfähigkeit des Netzes in einer sinnvollen Zeitspanne unrealistisch. Der Grund für dieses Verhalten liegt wahrscheinlich in der Konzentration der Ausgabe des Netzes auf ein Neuron, daher sind mehrere verdeckte Schichten anscheinend eher hinderlich gegenüber einer einzigen.
Sollten trotzdem mehrere Schichten als Parameter benutzt werden ist ebenfalls ein größerer Wert für die maximale Anzahl der Trainingszyklen einzustellen. Bei z.B. 3 verdeckten Schichten sollte das Netz mindestens 100 Trainingszyklen absolvieren, da ansonsten kein gültige Bewertung der Fitness (s. Kap. 2.1.3. ) möglich ist.
Max. Trainingszyklen des Neuronalen Netzes:
Die Wahl der maximalen Anzahl der Trainingszyklen des Netzes richtet sich in erster Linie nach der Anzahl der Schichten die verwendet werden. Dabei gilt allgemein: je größer die Zahl der Schichten desto größer muß die Zahl der Trainingszyklen sein.
Durchläufe des Genetischen Algorithmus:
Mit diesem Parameter wird angegeben wie viele Generationen der Algorithmus erstellen, verändern und bewerten soll. Werte im Bereich von 10 bis 20 haben sich als günstig erwiesen. Dieser Parameter hat logischerweise einen direkten Einfluß auf die Laufzeit.
Mutationswahrscheinlichkeit:
Die Mutationshäufigkeit gibt an wie hoch die Chance ist, daß eine Mutation stattfindet. Der Wertebereich liegt zwischen 0 und 1. Der voreingestellte Wert von 0.1 hat sich als günstig erwiesen.
Selektionswahrscheinlichkeit:
Für die Selektionswahrscheinlichkeit kann ein Wert von 0 bis 1 angegeben werden. Er spiegelt das Verhältnis wieder mit dem bessere, fittere Individuen bei der Selektion eine größere Möglichkeit erhalten, Berücksichtigung bei der Vererbung (Fortpflanzung) zu finden. Hier ist der voreingestellte Wert 0.6.
Populationsgröße:
Die Größe einer Population spielt in Hinsicht auf die Laufzeit des Algorithmus eine entscheidende Rolle, da ja jedes Individuum im Hinblick auf seine Fitness beurteilt, d.h. das Neuronale Netz trainiert werden muß. Die Populationsgröße ist immer geradzahlig anzugeben. Der Standardwert beträgt 10 Individuen.
4.1.4. Genetischer Algorithmus zur Bestimmung der Initialisierungsgewichte
Minimaler und maximaler Werte der Gewichte:
Diese Werte geben die oberen und unteren Grenzen an mit denen der Genetische Algorithmus die Gewichte initialisieren kann. Je größer diese Spanne ist desto mehr Speicherplatz wird durch die binäre Kodierung benötigt um sie abzubilden. Empfehlenswert und voreingestellt sind -1 für die untere und 1 für die obere Grenze.
Genauigkeit der Gewichte:
Ebenso wie die Grenzwerte der Gewichtsinitialisierung beeinflußt die Genauigkeit (der Wert eines gesetzten Bits) den Speicherbedarf des Algorithmus. Je größer die gewünschte Genauigkeit gewählt wird, desto mehr Speicher ist notwendig. Es scheint nicht sinnvoll Werte kleiner als 0.001 einzustellen da dies auf den Lernfortschritt des Netzes kaum Einfluß hat.
Durchläufe des Genetischen Algorithmus:
Mit diesem Parameter wird angegeben wie viele Generationen der Algorithmus erstellen, verändern und bewerten soll. Werte im Bereich von 10 bis 20 haben sich als günstig erwiesen. Dieser Parameter hat logischerweise einen direkten Einfluß auf die Laufzeit.
Mutationswahrscheinlichkeit:
Für die Mutationswahrscheinlichkeit gilt ebenfalls das unter 4.1.3 Gesagte. Der Standardwert beträgt 0.02.
Selektionswahrscheinlichkeit:
Für die Selektionswahrscheinlichkeit ist die Voreinstellung 0.3. Auch hier gilt entsprechendes unter 4.1.3.
Populationsgröße:
Auch hier gilt im Hinblick auf die Laufzeit, daß größere Populationen die Laufzeit verlängern, aber möglicherweise bessere Ergebnisse bezüglich der Fitness bieten. Der Standardwert sind 10 Individuen.
Sinus:
Für den Funktionsverlauf des Sinus ergibt sich eine sehr gute Erkennungsleistung des Neuronalen Netzes, die nur an den Extremstellen Schwächen, und da insbesondere im Bereich der Minima, aufweist.
Dollar:
Für den vorliegen Dollarkursverlauf ist kennzeichnend das sich über weite Bereiche nur marginale Differenzen ergeben die zum Teil sogar nur in der 3. Nachkommastelle auftreten bzw. gleich 0 sind.
Damit ergibt sich logischerweise eine für die Erkennung des Trends ungünstige Situation, da trotz einer kleinen prozentualen Abweichung, d.h. eines eigentlich geringen Fehlers die Vorzeichen durchaus unterschiedlich ausfallen.
Chaosreihe:
Für das zusätzlich als Test zu verwendende Muster aus dem Beleg von Herrn Kurbjuhn, ergeben sich ausgezeichnete Erkennungsraten mit leichten Schwächen im Bereich der Extremstellen.
Aktien:
Hervorzuheben ist besonders das Beispiel DaimlerChrysler, für welches nur eine kleine Anzahl von 156 Datensätzen zur Verfügung steht. An dem Chart der Erkennungsleistung des trainierten Netz wird dabei deutlich, daß eine so geringe Datenmenge unzureichend ist. Im allgemeinen wird der Trend zwar noch recht gut ermittelt, aber die Abweichung zum realen Kursverlauf ist doch ziemlich bedeutend. Generell ist damit zu sagen, daß eine größere Anzahl an Datensätzen die Grundlage für eine gute Erkennungsleistung des Netzes bildet. Gute Ergebnisse wurden ab etwa 900 Datensätzen erzielt.
Zuallererst ist ein Projekt zu laden, damit die immer benötigten Datensätze (Trainings-, Validierungs-, Test-, und Vergleichsdaten) zur Verfügung stehen.
Falls durch einen früheren Lauf des Programms schon die anderen Bestandteile des Projekts wie die Netzdatei, das Fuzzysystem, sowie die Fehlerdaten existieren, werden auch diese geladen. Damit kann, falls man das Neuronale Netz nicht neu initialisieren möchte, das Training sofort fortgesetzt werden.
Für den Fall, daß das Projekt zum ersten Mal geladen wird, sieht das weitere Vorgehen folgendermaßen aus. Da noch kein Neuronales Netz für die Datensätze angelegt wurde, ist mit dem Genetischen Algorithmus (s. Reiter Genetischer Algorithmus) zunächst einmal ein Netz erstellen zu lassen. Dabei sind zuvor unter Umständen die Parameter auf die Bedürfnisse abzustimmen. Nachdem der Genetische Algorithmus mit der Ermittlung der Netzstruktur fertig ist, kann entweder sofort mit dem Training (s. Reiter Neuronales Netz) begonnen werden, oder zuvor noch mit dem zweiten Genetischen Algorithmus eine günstige Gewichtsinitialisierung für das Netz finden lassen.
Einstellungen an den Regeln, Variablen und Ausprägungen des Fuzzysystem sind natürlich falls nötig als erstes vorzunehmen. Das sollte aber in den wenigsten Fällen notwendig sein, da das per Voreinstellung vorhandene Fuzzysystem eine gut funktionierende Regelung bietet.
Die Bedienoberfläche ist weitestgehend selbsterklärend, trotzdem folgen hier noch einige Hinweise dazu.

Abb. 1 Projekt-Dialog
Der Projektdialog dient zur Auswahl des Projektes und der dazugehörenden Dateien. Diese werden innerhalb der Projektdatei mit ihrem relativen Pfad abgespeichert. Die Projektdateien enthalten auch Angaben zu beim ersten Laden noch nicht vorhandenen Dateien wie: der Ergebnisdatei (enthält die Prognosewerte), der Eingabedatei (das Neuronale Netz), dem Fuzzysystem, dem Genetischen Algorithmus, sowie der Trainings- und Validierungsfehlerdateien. Nach dem ersten Trainingslauf und dem Abspeichern des Projektes sind diese Dateien dann vorhanden. Daher kommt es beim erstmaligen Laden eines Projektes zu Fehlermeldungen über fehlende Dateien (das Neuronale Netz, und die Fehlerdateien).
Mit den Schaltflächen an den zugeordneten Eingabefelder der Dateien wird ein Standard-Dateiauswahldialog geöffnet.
Derselbe Projektdialog wird auch zum Abspeichern des Projektes genutzt.

Abb. 2 Fuzzy-System-Dialog
In diesem Dialog kann das Fuzzysystem detailliert beeinflusst werden. Es werden die grafischen Verläufe der Ausprägungen von je einer Eingangs- und Ausgangsvariablen dargestellt. Diese Variablen werden über die Combobox „Variable wählen“ festgelegt.
Wichtig ist die Veränderung der Variablen-Ausprägungen für die zuerst die entsprechende Variable auszuwählen ist und in die Combobox „Ausprägung wählen“ die neue Ausprägung einzutragen. Anschließend kann sie mit der Schaltfläche „Auspr. Einf.“ der Variablen zugeordnet werden. Für das Löschen einer Ausprägung gilt entsprechendes.
Der Verlauf einer Ausprägung wird mit der Gruppe „Auspr. Ändern“ beeinflusst. Dabei gilt das Punkte beim Einfügen eines neuen Punktes an derselben x-Position überschrieben werden. Zum Löschen muss zuerst ein Punkt aus der Listbox gewählt werden.
Die Regeln werden in die Combobox eingetragen, dabei ist die Syntax (s. Kap. 4.1.2.) für die Regeln einzuhalten. Außerdem müssen natürlich die Variablen und Ausprägungen schon im System enthalten sein. Zum Löschen ist die entsprechende Regel vorher in der Combobox zu markieren.
Um einen Test des Fuzzysystems auf seine Regelung zu ermöglichen, bietet der Dialog die Möglichkeit einen Wert, welcher der Eingangsvariablen „ValidError“ zugeordnet wird, einzugeben.
6.3. Dialog - Genetischer Algorithmus

Abb. 3 Dialog - Genetischer Algorithmus
Auf der linken Seite befinden sich die Steuerelemente für den Genetischen Algorithmus zur Ermittlung der Netzstruktur. Mit ihm können die Parameter (s. Kap 4.1.3.) eingestellt werden.
Mit den Elementen auf der rechten Seite ist das für den Genetischen Algorithmus zur Gewichtinitialisierung möglich (s. Kap. 4.1.4.).
Mit den Schaltflächen lassen sich die Threads, welche die eigentlichen Berechnungen vornehmen, kontrollieren.
Vor der Beendigung des Programms sollte man, deshalb eine noch laufende Berechnung stoppen. Es ist zwar möglich beide Berechnungen parallel ausführen zu lassen, dies führt dann jedoch zu nicht konsistenten Netzen und ist daher logischerweise zu vermeiden.

Abb. 4 Dialog - Neuronales Netz, Darstellung der Fehlerkurve
Im Dialog „Neuronales Netz“ befinden sich die Kontrollen für den Trainingsprozeß des Netzes.
Das Training wird nach der Eingabe der Anzahl der Trainingszyklen in das Eingabefeld „Zyklen“ mit der Schaltfläche „Lernen“ gestartet. Ist die grafische Darstellung aktiviert werden die Fehlerkurven ständig aktualisiert.
Die grafische Ausgabe bildet in Abhängigkeit von der Auswahl in der Gruppe „Darstellung“ entweder die Fehlerkurven des Validierungs-, bzw. Trainingsfehlers oder den realen Kurschart und die Prognosekurve ab.
In der linken Tabelle werden die absolvierten Trainingsdurchläufe mit den entsprechenden Fehlerwerten ausgegeben.
Die rechte Tabelle wird nach der Beendigung des Trainings mit den Werten der Prognose des Netzes gefüllt. Dazu ist auf die Schaltfläche „Prognose“ zu klicken.
Sollen alle Werte, d.h. alle Fehler und Prognosewerte entfernt werden, ist die Schaltfläche „Werte löschen“ zu betätigen.
Da manche Kurse, wie z.B. Währungskurse im Gegensatz zu normalen Aktienkursen auf mehr als 2 Stellen nach dem Komma angegeben werden, kann für die Ausgabe in die Tabellen die Anzahl der Nachkommastellen beeinflusst werden.

Abb. 5 Dialog - Neuronales Netz, Darstellung der Prognose
Prognosewerte im Netzdialog:
Zu beachten ist, das es zwischen den Prognosewerten und den realen Werten eine Zeitverschiebung von einem Tag ergibt ( durch die Verschiebung der Eingabemuster). Das heißt das beispielsweise der Prognosewert des 4. Tages dem realen Wert des 3. Tages entspricht. Das wird in der Ausgabe der Werte in der Tabelle berücksichtigt.
Anhand eines Beispiels soll die Ausgabe kurz erläutert werden.
|
Tag |
Realer Kurs |
Prognose |
Abweichung |
Trend |
|
1088. Tag |
338.50 |
339.41 |
-10.09/-2.8864% |
ja +10.50/+3.87 |
|
1087. Tag |
349.50 |
335.54 |
-3.46/-1.0201% |
ja -11.50/-1.51 |
|
1086. Tag |
339.00 |
337.05 |
-13.45/-3.8374% |
ja +14.50/+8.42 |
Tab. 6 Beispiel
zur Erläuterung der AusgabeDie Ausgabe für den 1088. Tag berechnet sich wie folgt.
Abweichung: -10.09 = 339.41 (P vom 1088. Tag) - 349.50 (RK vom 1087. Tag)
Trend erster Wert: 10.50 = 349.50 (RK vom 1087. Tag) - 339.00 (RK vom 1086. Tag)
Trend zweiter Wert: 3.87 = 339.41 (P vom 1088. Tag) - 335.54 (P vom 1087. Tag)
7. Systemumgebung und Installation
Plattform:
Entwickelt wurde das Programm unter Windows 98 mit VisualC++ 6.0 und der STL. Die komplette Anwendung ist auf Grund der grafischen Oberfläche auf Basis der MFC auf die Windows-Plattform begrenzt. Die Tests wurden sowohl unter Windows NT 4.0 als auch Windows 98 durchgeführt. Es sollte daher auch unter den anderen Versionen ab Windows 95 aufwärts lauffähig sein.
Hardware:
Eine Auflösung von 1024x768 Pixeln ist empfehlenswert, da ansonsten einige, zwar weniger wichtige, Kontrollen nicht mehr sichtbar sind. Notfalls ist eine Auflösung 800x600 gerade noch ausreichend.
Da das Programm intensive Berechnungen durchführt, ist ein schneller Prozessor (ab 300 MHz) von Vorteil. Entwickelt und getestet wurde das Programm auf einem PII-400 MHz mit 128 MB RAM.
Installation:
Eine Installation ist nicht notwendig, das Kopieren der Programmdatei in ein beliebiges Verzeichnis ist ausreichend.
Skripte:
Literatur: