GMU:Neuronale Netze - eine Einführung für Künstler/Präsentation/Neuronale Netze in Pure Data

From Medien Wiki

Neuronale Netze in Pure Data

Pure Data ANN Objekte

Neuronale Netze können in Pure Data mit Hilfe der ANN-Library realisiert werden. Die Library enthält drei Objekte:

Hier wird das Erstellen eines Neuronalen Netzes mit Hilfe des ann_mlp Objektes erklärt.

Generelles

Die Steuerung des ann_mlp Objektes geschieht durch Nachrichten. Das neuronale Netz hat als Eingabe eine Liste von float Werten. Alles was nicht aus float Werten besteht, muss erst in float Werte umgewandelt werden. Die Ausgabe des Neuronalen Netzes besteht ebenso nur aus float Werten.

Am besten ist es, Eingaben um 0 zu zentrieren, d.h. -1 bis 1 (zur Not kann man auch bei 0 beginnen) und nicht 12 bis 99.

Neuronale Netze müssen trainiert werden um zu funktionieren. Bevor man das Neuronale Netz benutzen kann, muss also erst einige Zeit darin investiert werden es zu trainieren. Tranierte Netze können gespeichert und geladen werden.

Erstellen des Netzes

Netz mit zwei Eingabeneuronen und einem Ausgabeneuron erstellen

Um ein mlp-Netz zu erstellen braucht man zuerst ein ann_mlp Objekt. Um das Netz aber auch wirklich zu erstellen, muss man dem ann_mlp Objekt eine Nachricht mit dem Wort "create" und mehreren Parametern übergeben. Folgende Parameter sind Möglich:

create <Anzahl Eingabeneuronen> <Anzahl Ausgabeneuronen>
<Anzahl der Schichten> <Anzahl versteckte Neuronen>
<Verbindungsrate> <Lernrate>

Die Anzahl der Eingabeneuronen und die Anzahl der Ausgabeneuronen müssen immer angegeben werden, die anderen Parameter sind optional.

Als Ausgabe in der Konsole sollte man jetzt folgende Ausgabe bekommen:

created ann with:
num_input = 2
num_output = 1
num_layers = 3
connection_rate = 1.000000
learning_rate = 0.700000

Trainieren des Netzes

Neuronales Netz mit "train" Nachricht

Um das Neuronale Netz zu trainieren muss man ihm die Nachricht "train" schicken. Das Netz wird damit in den Training-Modus versetzt, erkennbar an folgender Konsolenausgabe:

nn:training

Nachdem das Neuronale Netz in den Training-Modus versetzt wurde erwartet es eine Liste mit Eingaben und ihren gewünschten Ausgaben Wir werden hier als Beispiel das UND benutzen. Die Eingaben und Ausgaben dafür sind:

A B A und B
1 1 1
1 0 0
0 1 0
0 0 0
ann_mlp, rechtes Outlet ist der Fehler (MSE)

Dem Neuronalen Netz müssen diese vier Fälle beigebracht werden. Bei einem Neuronalen Netz genügt es nicht einfach alle Fälle einmal zu trainieren, sondern es muss alles so oft trainiert werden, bis der Fehler (MSE, rechtes Outlet) klein genug ist. Am besten trainiert man das neuronale Netz mit Hilfe eines Counters.

Trainieren mit einem Metronom

Sobald das Metronom angeschaltet wird, lernt das Neuronale Netz alle 10ms einen zufällig ausgewählten Fall. In den Nachrichten sind die Eingaben und Ausgaben hintereinander geschrieben. Man gibt also für jede Eingabe das gewünschte Ergebnis an. Je länger das Metronom läuft, desto kleiner sollte der Fehler werden. Ist der Fehler klein genug, kann die Lernphase abgeschlossen werden. Ab wann der Fehler klein genug ist, muss ausprobiert werden. Für ein einfaches Beispiel wie das logische UND, muss der Fehler nicht sehr klein sein um zu funktionieren.

Benutzen des Netzes

Neuronales Netz mit "run" Nachricht

Ist das Netz trainiert, muss man es wieder in den normalen Modus versetzen. Dazu muss man den Neuronalen Netz die Nachricht "run" schicken. Folgende Konsolenausgabe sollte erscheinen:

nn: running

Im run-Modus erwartet das Neuronale Netz nur eine Liste mit Eingabe Werten, ohne Ausgabe Werte. Für das logische UND sind das also folgende:

1 1
1 0
0 1
0 0
Neuronales Netz mit Eingabe 1 1

Wenn das Neuronale Netz nun eine solche Eingabe bekommt, gibt es die entsprechend trainierten Ausgaben zurück. Die Ausgabe erscheint im linken Ausgang, hat man mehrere Ausgaben sind das alle Ausgänge bis auf das rechte. Der Vorteil eines Neuronalen Netzes liegt unter anderem darin, dass die Eingaben nicht genau sein müssen folgende Eingabe wird bei richtigen Training auch funktionieren:

0.9 0.1

Die Ausgabe des Neuronalen Netzes entspricht auch nicht immer genau derm trainierten Ausgabe Wert, meistens variert die Ausgabe ein wenig. Um dies zu umgehen müssen entsprechende Filter eingebaut werden (z.b mit < und >).

Netze wiederverwenden

Neuronales Netz mit "save" und "load" Nachricht

Einmal trainierte Netze können wiederverwendet werden. Zum Speichern übergibt man dem Neuronalen Netz folgende Nachricht:

save <Dateiname>

Zum Laden eines Netzes übergibt man dem Neuronalen Netz diese Nachricht:

load <Dateiname>


Links