65
edits
Line 25: | Line 25: | ||
|} | |} | ||
Bei dem unten aufgeführtem Beispiel handelt es sich um eine leicht modifizierte Version eines neuronalen Netzes von Daniel Shiffman <ref>Daniel Shiffman: [http://www.shiffman.net/teaching/nature/nn/ The Nature of Code - Neural Networks]</ref>. Mittels eines [http://en.wikipedia.org/wiki/Multilayer_perceptron Multilayer Perceptrons] wird hier versucht das nichtlinear trennbare [http://en.wikipedia.org/wiki/Xor XOR Problem] zu lösen. Jede Ecke des Würfels entspricht einer 0 oder 1, wobei sich gleiche Werte je Fläche diagonal spiegeln, d.h. benachbarte Eckpunkte sind niemals beide gleichzeitig 0 oder 1, sondern immer im Wechsel. Zwischen 2 Eckpunkten wird entlang der Flächen interpoliert, sodass man für Werte zwischen 0 und 1 eine Annährung erhält. Zur Verdeutlichung wurde in den folgenden Beispielbildern als mögliches Antwortpaar für das Training via [http://en.wikipedia.org/wiki/Backpropagation Backpropagation] [0.2, 0.8] gewählt (siehe angepasste Wahrheitstabelle links). Damit wird | Bei dem unten aufgeführtem Beispiel handelt es sich um eine leicht modifizierte Version eines neuronalen Netzes von Daniel Shiffman <ref>Daniel Shiffman: [http://www.shiffman.net/teaching/nature/nn/ The Nature of Code - Neural Networks]</ref>. Mittels eines [http://en.wikipedia.org/wiki/Multilayer_perceptron Multilayer Perceptrons] wird hier versucht das nichtlinear trennbare [http://en.wikipedia.org/wiki/Xor XOR Problem] zu lösen. Jede Ecke des Würfels entspricht einer 0 oder 1, wobei sich gleiche Werte je Fläche diagonal spiegeln, d.h. benachbarte Eckpunkte sind niemals beide gleichzeitig 0 oder 1, sondern immer im Wechsel. Zwischen 2 Eckpunkten wird entlang der Flächen interpoliert, sodass man für Werte zwischen 0 und 1 eine Annährung erhält. Zur Verdeutlichung wurde in den folgenden Beispielbildern als mögliches Antwortpaar für das Training via [http://en.wikipedia.org/wiki/Backpropagation Backpropagation] [0.2, 0.8] gewählt (siehe angepasste Wahrheitstabelle links). Damit wird dem Netz ein schnelleres Lernen ermöglicht, da die Ableitungen der [http://en.wikipedia.org/wiki/Sigmoid_function Sigmoid-Funktion] an diesen Stellen nicht allzu niedrig sind. Je weiter gen 0 und 1, desto niedriger werden die abgeleiten Werte (Anstieg der Tangenten an den jeweiligen Punkten) und desto weniger wird der Lernprozess beeinflusst, bzw. die Gewichte verändert. | ||
[[Image:processing_neural_network_xor_1.png|thumb|left|100px|XOR possible state (1)]] | [[Image:processing_neural_network_xor_1.png|thumb|left|100px|XOR possible state (1)]] | ||
Line 46: | Line 46: | ||
=== Trainieren des neuronalen Netzes === | === Trainieren des neuronalen Netzes === | ||
In der setup() Methode initialisiert man einmalig die Eingabewerte (hier mit den ursprünglichen Werten 0 und 1 für das XOR Problem), welche | In der setup() Methode initialisiert man einmalig die Eingabewerte (hier mit den ursprünglichen Werten 0 und 1 für das XOR Problem), welche im globalen [http://en.wikipedia.org/wiki/Variable_(programming)#Scope_and_extent Scope], d.h. dem programmweiten Namensraum, zur Verfügung stehen. Dies bedeutet, dass jede erstellte Methode und instanziierte Klasse auf diese Variablen Zugriff hat. | ||
<source lang="java"> | <source lang="java"> |
edits