Neuronale Netze - Hintergrund
Dann starten wir mal mit ein bisschen Theorie. Heute: Neuronale Netze.
Wer sich "ernsthaft" mit dem Thema auseinandersetzen will, findet im Netz jede Menge "serious shit" zum Thema. Ich will hier eher einen (weiteren) kurzen Streifzug zu dem Thema geben, damit der geneigte Leser im weiteren Verlauf die Grundmechanismen versteht die ich zu verwenden gedenke.
Was ist ein Neuronales Netz
Prinzipiell ist ein NN nichts anderes als die Approximation einer (beliebig komplexen) Funktion. Also eine Black-Box mit einer fixen Menge an Eingabeparametern und einer fixen Menge an Ausgaben. Man versucht also eine Funktion zu "schätzen" deren wahre Logik man nicht kennt, von der man aber eine gewisse Menge an Beispielwerten (Eingabeparameter mit dazugehörigen Ausgaben) hat.
Aber warum heißt es dann "neuronales Netz"?
Ein NN ist eine Menge von Knoten (genannt "Neuronen") die miteinander in einer Netzartigen Struktur verbunden sind. Jede Verbindung kann man sich wie eine Datenübertragungsleitung vorstellen über die jeweils eine Zahl übertragen wird.
Ein Neuron hat eine beliebige Anzahl an Eingangsverbindungen (über die jeweils eine Zahl an das Neuron geschickt wird). Aus all diesen Zahlen berechnet das Neuron eine neue Zahl (mit der sogenannten Übergangsfunktion). Diese Zahl sendet das Neuron dann über seine Ausgangsverbindungen an die nächsten Neuronen weiter.
Damit es nicht zu kompliziert wird sind die Neuronen in Schichten (Layern) angeordnet. Die erste Schicht besteht aus den Input-Neuronen, diese erhalten ihre Werte aus den Inputparametern. Die letzte Schicht sind die Output-Neuronen, deren Ergebnisse sind die Ausgaben des NN.
Feed Forward
Um es nicht unnötig kompliziert zu machen, verwende ich ein feed forward NN. Das bedeutet einfach, das es innerhalb des Netzwerks nur Verbindungen von einer Schicht zu Neuronen in der direkt nächsten Schicht gibt. Also weder Verbindungen die "zurück zum Eingang" laufen, noch Verbindungen die Schichten überspringen.
Die Übergangsfunktionen
Nicht unwesentlich für die Funktion des NN sind die Übergangsfunktionen. In der Regel haben sie eine sehr einfache Form:
Jede Eingangsverbindung erhält ein fixes Gewicht. Kommt ein neuer Satz von Eingangswerten (also 1 Zahl pro Verbindung) daher, wird der jeweilige Wert mit dem entsprechenden Gewicht multipliziert und die Ergebnisse summiert. Sprich es wird eine gewichtete Summe gebildet.
Dieser Summenwert ist nun der Input für die Aktivierungsfunktion, deren Ergebnis auch schon der Ausgangswert des Neurons ist. Typische Beispiele für diese Aktivierungsfunktion ist zB die sogenannte HeavySide Funktion die 0 liefert solang der Wert unter einem fixen Schwellwert ist und 1 wenn er darüber ist.
Oder die lineare Aktivierungsfunktion die einfach den Eingangswert 1:1 als Ausgang zurückgibt.
Wie lernt ein NN
Die gerade beschriebenen Gewichte sind auch schon der Schlüssel wie ein NN nun lernt. Einfach ausgedrückt so wie ein Mensch auch: Man zeigt ihm eine Reihe von Beispielhaften Inputdaten und die dazugehörigen Outputs.
Das NN rechnet nun für diese Inputdaten aus welche Outputs es gerade liefern würde, vergleicht diese mit den gewünschten Outputs und passt alle internen Gewichte so an, das ab sofort für diese Inputs die gewünschten Outputs geliefert werden.
(Der eigentlich Lernalgorithmus ist etwas komplizierter, aber das ist die Grundidee)
Auswendig lernen
Man kennt es vom optimieren: Overfitting. Auch beim NN gibt es dieses Problem: Man hat ein hochkomplexes NN mit massig Neuronen und Schichten und trainiert es auf wenige Testdaten (Inputs mit entsprechenden Outputs). Nun besteht das große Risiko, dass das Netz einfach diese Testdaten auswendig lernt. Somit für die Testmenge perfekte Ergebnisse liefert, aber für leicht veränderte Daten komplett daneben liegt.
Verhindert wird es mit der gleichen Technik wie beim Trading: Out of Sample. Man teilt die Menge der vorhandenen Testdaten auf. Mit der einen Menge trainiert man das Netz, nach jeder Lerniteration (davon braucht man meist sehr viele) testet man das Netz an der zweiten Menge (lässt es aber nicht "lernen" also die Gewichte bleiben unverändert). Zu Beginn sollte der Fehler nun bei beiden Mengen sinken. Sobald der Fehler bei der zweiten Menge wieder steigt, beginnt offensichtlich das overfitten und man stoppt den Lernalgorithmus. Nun sollte das NN bestmöglich trainiert sein.
Soweit der Überblick über neuronale Netze. Wie ich ein solches Netz jetzt im Trading anwenden will, gibts in einem nächsten Eintrag.
2 Comments
Recommended Comments