MAL-Homepage Inhaltsverzeichnis



MAL Dokumentation: Neurale Netze




Inhalt:

1. ALLGEMEINES
2. LOGISCHER AUFBAU VON NN
3. LERNDATENSÄTZE
4. NETZTOPOLOGIE
5. LERNEN
6. ABFRAGEN
7. KLASSE FÜR NEURONALE NETZE


1. ALLGEMEINES

Neuronale Netze (kurz NN) sind fehlertolerante Lernsysteme, die auf einem stark vereinfachten Modell von biologischen Nervensystemen basieren.

Die derzeit in MAL realisierten Neuronalen Netze sind sog. Feed Forward Netze, die mit Back-Propagation lernen. Das ist auch der einzige Typ von Neuronalen Netzen, der hier erläutert wird.

Back-Propagation Netze werden zur Mustererkennung benutzt. Die Muster werden in einer Lernphase den Eingängen des Netzes übergeben. Dabei werden interne Parameter (die synaptischen Gewichte) stufenweise angepaßt, sodaß die Ausgangswerte des Netzes einigermaßen mit vorgegebenen Sollwerten korrespondieren.

Sämtliche Worte zum Thema NeuronalenNetze sind unter Topic
neural zu finden.

MAL-Homepage Inhaltsverzeichnis


2. LOGISCHER AUFBAU VON NN

NN sind Netzwerke von Recheneinheiten (genannt Units), deren Funktion ursprünglich von biologischen Neuronen abgeleitet, jedoch stark vereinfacht wurde.

Jede Unit hat mehrere Eingänge ij (Synapsen), deren (analoge) Eingangsgrößen mit einem Faktor (dem synaptischen Gewicht) wj multipliziert werden. Die so gewichteten Eingangswerte werden summiert und ergeben das sogenannte Aktionspotential a der Unit.

Dieses wird mit einer sigmoiden Funktion sig() mit weichen Übergängen so begrenzt, daß der Ausgangswert o der Unit zwischen 0 und 1 zu liegen kommt.

Das Neurale Netz ergibt sich durch Zusammenschaltung vieler Units.

Die Anzahl der Neuronen und Art der Zusammenschaltung nennt man die Topologie des Netzes. Sie ist in MAL immer (siehe obiges Bild) in Form von mehreren Schichten (Layers) realisiert, wobei alle Neuronen eines Layers mit allen Neuronen des folgenden Layers verbunden sind (totale Konnektivität).

Nach außen hin erscheint das NN als ein System mit mehreren analogen Eingängen, mehreren analogen Ausgängen, und einem Satz von synaptischen Gewichten.

Dieser Satz von synaptischen Gewichten ist in MAL so aufgebaut, daß er auch die Topologie des Netzes (=Zusammenschaltung der Units) beschreibt. Er wird vor der Lernphase mit Zufallswerten initalisiert und am Ende der Lernphase am Stack übergeben. Er enthält sozusagen das in der Lernphase erworbene 'Wissen'.

MAL-Homepage Inhaltsverzeichnis


3. LERNDATENSÄTZE

Das ´Trainieren´ eines Neuralen Netzes geschieht anhand von Beispielen.

Jedes Beispiel (=Lerndatensatz) besteht immer aus mehreren Eingangswerten m1..mn und mehreren dazugehörigen Sollwerten s1..sj.

Ein Lerndatensatz entspricht folgender Syntax:

[ m1 .... mn s1 ... sj ]

Die Mustermenge ist ein Verbund solcher Lerndatensätze.

MAL-Homepage Inhaltsverzeichnis


4. NETZTOPOLOGIE

Die realisierbaren Netztopologien lassen sich durch Unit-Anzahlen per Layer beschreiben (Feed Forward Netze haben keine Schleifen). Diese Anzahlen sind in einem Verbund anzugeben.

z.B.: [ 10 3 4 5 ]

bedeutet: 10 Eingänge (input units)

Damit ist auch bestimmt, daß die Lerndatensätze 10 Musterdaten und 5 Sollwertdaten enthalten müssen.

Mit
create_net kann eine Netztopologie aufgebaut werden, wobei die synaptischen Gewichte zufällig initialisiert werden.

Syntax:

[ lern1 ... lernN ] konfig k -> netz

'k' ist ein Initialisierungsfaktor, der bestimmt, in welchem Bereich die synaptischen Gewichte vorbesetzt werden. Der Wertebereich für die Initialisierung wird mit folgender Formel berechnet:

+-1 * k / sqrt(inputanzahl)

Gute Erfahrungen wurden im Bereich 0.5 < k < 2 gemacht.

'netz' ist ein Verbund in dem sich die synaptischen Gewichte (damit auch die Netztopologie) und zwei Realfelder, die den zulässigen Wertebereich der Eingangs- und Ausgangsgrößen abstecken, befinden. Der Wertebereich wird mit '1.5*Minimalwert' bis '1.5*Maximalwert' festgelegt. Die tatsächlichen Eingangs- und Ausgangswerte werden durch lineare Anpassung vom oder in den Wertebereich 0..1 umgerechnet.

Beispiel: steigende von fallenden Zahlenfolgen unterscheiden
( Muster Sollwert)
[ [ 0 1 2 1 ]
[ 2 1 0 0 ]
[ 3 1 1 0 ]
[ 1 2 2 1 ]
[ 0 2 2 1 ]
[ 2 0 0 0 ] ] >> mustermenge


mustermenge [ 3 2 1 ] 0.7 create_net >> netz

netz . [ ( Untergrenze Ein/Ausgangswerte) [ -0.75 -0.5 -0.5 -0.25 ] ( Obergrenze Ein/Ausgangswerte) [ 3.75 2.5 2.5 1.25 ] [ ( synaptische Gewiche von Layer 1 auf 2) [ -0.39561 -0.400938 -0.133243 -0.377257 ] [ -0.116617 -0.228584 0.0298851 -0.245901 ] ] [ ( synaptisch Gewichte von Layer 2 auf 3) [ 0.198325 0.445397 -0.222948 ] ] ]


MAL-Homepage Inhaltsverzeichnis


5. LERNEN

Zum Trainieren des Netzes dient das Wort
back_prop.

Syntax:

[ lern1 .. lernN ] netz anz -> [ lernka lernkb ] lnetz

'anz' ist die Anzahl der Lerndurchläufe. 'lernka' und 'lernkb' sind Realfelder mit Lernkurven, die die Abweichungen der Istwerte von den Sollwerten im Zuge des Lernen anzeigen (jeweils auf 100 Stützpunke normalisiert).
'lernka' ... Euklidische Fehlerdistanz.
'lernkb' ... Durchschnittliche Trefferanzahl pro Versuch.
'lnetz' ist das trainierte Netz.

Beispiel:

[ [ 0 1 2 1 ]
[ 2 1 0 0 ]
[ 3 1 1 0 ]
[ 1 2 2 1 ]
[ 0 2 2 1 ]
[ 2 0 0 0 ] ] >> mustermenge
mustermenge [ 3 2 1 ] 0.7 create_net >> netz


mustermenge netz 10000 back_prop -> netz >> lernkurven
lernkurven 1 , draw screen

MAL-Homepage Inhaltsverzeichnis


6. ABFRAGEN

Mit
forward_prop kann das Netz abgefragt werden.

Syntax:

muster lnetz -> erg

Beispiel:

[ 1 1 2 ] netz forward_prop . 
[ 0.78 ]
Die Zahlenfolge [ 1 1 2 ] hat also eher aufsteigende Tendenz.

MAL-Homepage Inhaltsverzeichnis


7. KLASSE FÜR NEURONALE NETZE

Vor allem wenn man ein System mit mehreren Neuralen Netzen mit einer Bedienoberfläche aufbauen will, empfiehlt es sich, die Klasse
neural_class zu verwenden. Diese Klasse besitzt unter anderem eine Funktion menu, die ein Menü zum Konfigurieren, Initialisieren und Trainieren des Netzes aufruft.

Für die praktische Anwendung muss man immer ein Klasse definieren, die von neural_class abgeleitet ist und die Funktion get_patterns neu definiert. Diese Funktion ist für das Heranschaffen der Lernmuster verantwortlich.

Für Test und Übungszwecke kann aber auch die Klasse neural_class direkt verwendet werden, da eine Musterfunktion für get_patterns vordefiniert ist.

Beispiel:

public \ neural >voc
interface_of neural_class >voc


create_neural_net >> testnetz
testnetz menu -> testnetz

MAL-Homepage Inhaltsverzeichnis