Beschreibung eines Kohonen Netzwerkes
Zur Verwendung von Muster Erkennung
(Kohonen-Feature-Map)
 

von Walter Berger, Stefan Grosse und Udo Lugauer

click here for JAVA example applet for character recognition

 

Die Aufgabe ist es bestimmte Buchstaben, welche der Benutzer mit der Maus zeichnet, zu erkennen. Hierfür sind dem Netzwerk verschiedene Muster gelernt worden, welche die Eigenschaften der Buchstaben darstellen. Gibt ein Benutzer nun einen Buchstaben ein, so analysiert das Programm diese Eingabe und stellt daraus ein Muster zusammen. Dieses Muster wird dann in ein Kohonen Netzwerk eingegeben und zum Schluß wird der daraus erkannte Buchstaben ausgegeben.

 

Da die Grundidee dieser Aufgabe ist, ein gelerntes Muster wiederzuerkennen, ist das Kohonen Netzwerk gut dafür geeignet. Andererseits, soll nicht verschwiegen werden, daß es andere Netzwerke gibt, welche diese Aufgabe effizienter lösen könnten. Allerdings ging es hier nicht um die Effizienz, sondern um das Zeigen wie eine Kohonen Feature Map arbeitet. Der Vorteil eines Kohonen Netzwerkes ist, daß das Muster nicht exakt dem gelernten Muster entsprechen muß und trotzdem erkannt werden kann. Weiterhin ist es relativ leicht dem Netzwerk neue Muster zu lernen.

 

Funktionsweise einer Kohonen - Feature - Map.

Das Kohonen Netzwerk das für diese Aufgabe verwendet wurde, stellt sich zusammen aus einer eindimensionalen Eingabeschicht und einer zweidimensional Ausgabeschicht, welche die eigentliche selbstorganisierende Karte darstellt. Von der Eingabeschicht werden die Aktivitäten hin zur Ausgabeschicht ausgebreitet. Die Neuronen der Ausgabeschicht sind wechselseitig mit jedem anderen Neuron der Ausgabeschicht (Kartenschicht) verbunden. Jedes Neuron in der Ausgabeschicht ist eindeutig durch seine x und y Koordinaten bestimmt.

 

Die Eingabeneuronen nehmen das externe Eingabesignal auf und leiten es weiter zur Ausgabeschicht. In unserem Fall entspricht das externe Eingabesignal den Ausgang der Neuronen der Eingabeschicht (oi = xi). Die Eingabeneuronen sind vollständig mit den Neuronen der Kartenschicht verbunden. An jedes Neuron der Kartenschicht führen daher n synaptische Leitungen wij.

 

In unseren Beispiel enthält die Eingabeschicht 9 Neuronen, was genau der Länge des Eingabevektors entspricht. Die Ausgabeschicht besteht aus 256 Neuronen. Jedes Neuron der Kartenschicht entspricht einen Buchstaben (gelernten Muster), daher wären keine 256 Neuronen nötig gewesen. Zur Darstellung im Programm eignet sich diese Größe aber sehr gut um die Kohonen Feature Map während der Lernphase darzustellen.

 

Das Hauptziel beim Lernen ist es die zu lernenden Muster auf die Kohonen Feature Map abzubilden, d. .h es muß für jedes Muster ein Zentrum geben welches einem gelernten Muster entspricht. Um dieses Zentrum herum befinden sich Neuronen welche diesen Muster ähnlich sind. Daraus ergibt sich, das sich auf der Kartenschicht Blasen ausbilden welche die einzelnen Zentren und ihre Umgebung darstellen.

 

Aufbau einer Selbstorganisierenden Karte

 

Die Eingabeneuronen erregen oder hemmen die Neuronen der Karte. Diese geschieht über die synaptischen Leitungen wij Der Nettoinput netj eines Neurons j läßt sich mit folgender Formel bestimmen:

 

 
Ausgehend von diesem Nettoinput, kann der innere Aktivierungszustand des Neurons bestimmt werden mit:

 

 

Der Bias q j ist ein positives Signal von der Höhe 1. Es dient nur zur Verschiebung der Kennlinie auf der Abszisse. Die Ausgabefunktion transformiert den Aktivierungswert in den Ausgangswert. Hier entspricht dies der Identitätsfunktion:

 

 

 

Die Formel zur Berechnung des Nettoinput gilt aber nur für eine Isoliertes Neuron der Kartenschicht. Da aber die Neuronen der Kartenschicht untereinander vernetzt sind beeinflussen sie sich gegenseitig. Das heißt jedes Neuron leiste mit seiner Ausgabe einen Beitrag zum Nettoinput eines anderen Neurons.

 

 

Wie oben erwähnt, bilden sich in der Kohonen Feature Map Erregungszonen aus. Diese geschieht, weil von einem Erregungszentrum aus die Neuronen welche nahe am Zentrum stark erregt werden und Neuronen die weiter weg sind vom Zentrum nur noch schwach erregt werden bzw. sogar gehemmt werden. Dieses Verhalten kann in einem Programm sehr gut mit der Gaußschen Glockenkurve simuliert werden.

 

 

 

Nahe um das Erregerzentrum herum werden die Neuronen stark beeinflußt. Je weiter die Neuronen entfernt um so weniger stark werden sie beeinflußt. 3 dimensional gesehen ist dies eine hügelartige Erhebung welche nach allen Seiten langsam gegen 0 geht. Um nun eine gewünschte Abblidung der Merkmale auf die Kohonen Feature Map zu erhalten muß für jedes Eingabemuster das Erregerzentrum bestimmt werden. Würde man die Rückkopplung der Kartenschicht auf sich selbst bei der Berechnung des Erregerzentrums berücksichtigen, so wäre dies recht aufwendig. Daher kann man bei praktischer Anwendung diesen Rückkopplungseffekt vernachlässigen. Das Erregungszentrum ist damit das Neuron welches den maximalen Nettoinput besitzt:

 

 

Wenn nun das Erregerzentrum gefunden wurde, wie geht dann das Lernen vor sich? Nachdem das Neuron J als Erregerzentrum gefunden wurde, werden die Verbindungsleitungen der anderen Neuronen, welche sich innerhalb eines bestimmten Radius s befinden, angepaßt, nach folgender Formel:

 


;wenn j Î s

 


;sonst

 

Räumlich gesehen entspricht dies einer Verschiebung des Gewichtsvektors wj in Richtung auf den Eingabevektor x hin. Die Funktion hjz sorgt dafür, daß die Neuronen, die näher am Erregerzentrum liegen, stärker beeinflußt werden. Hjz ist die Gaußsche Glockenkurve:

 

 

j z : Abstand vom Neuron j zum Erregerzentrum z

s : Radius, innerhalb dessen die Einheiten verändert werden.

 

Der Radius s ist eine langsam, monoton fallende Funktion s (t) in Abhängigkeit von der Anzahl der Lernschritte t. Damit läßt sich das Erregerzentrum im Laufe des Lernens immer mehr stabilisieren. Dies wird unterstützt mit einer Lernrate e . Dies wird als Funktion gewählt, welche mit zunehmender Anzahl von Lernschritten langsam von 1 auf 0 geht. Damit werden die Verbindungen am Anfang stärker verändert um am Schluß werden nur noch Feinanpassungen vorgenommen. Zum Schluß nochmals eine Zusammenfassung des Lernvorgangs.

 

Ablauf des Lernverfahrens:

 

  1. Die Anfangsgewichte werden vergeben, wenn keine Information vorliegen, eignen sich gut kleine Zufallszahlen.
  2. EinEingabevektor x wird zufällig ausgewählt.
  3. Mit der oben angegebenen Formel wird das Erregerzentrum bestimmt.
  4. Bei jedem Lernschritt werden die Gewichte nach der oben angegebenen Formel angepaßt.
  5. Es wird mit Schritt 2 fortgefahren, bis die gewünschte Anzahl von Lernschritten durchgeführt worden ist.
 

Folgende Punkte sind zu beachten:

 

Die Parameter Radius und Lernrate wurden, wie oben beschrieben, als monoton fallende Funktionen gewählt. Dies sollte immer so sein. Allerdings ist es wichtig mit den MIN - und MAX Werten dieser Funktionen zu experimentieren. Es ist anhand des Problems zu testen welche Einstellungen sich am Besten Eignen. In diesem Projekt wurde die Lernrate so gewählt, daß sie am Anfang die komplette Karte umfaßt und somit die Karte grob sortiert. Mit zunehmender Lerndauer wird der Radius immer kleiner ,bis zum Schluß nur noch ein einzelnes Neuron und seine engsten Nachbarn beeinflußt werden. Der Radius wurde hier als Viereck gewählt, weil sich dies als praktisch für das Programm herausgestellt hat. Es gibt aber auch die Möglichkeit andere Radiusformen zu wählen, z. B. einen Kreis, Sechseck usw..

 

 

 

Je nachdem, wie man den Anfangsradius wählt, bildet sich die Kohonen Feature Map anders aus. Wird der Radius klein gewählt, so ändern sich von Haus aus nur kleine Bereiche und es kann passieren, daß sich die Karte nicht richtig ausprägt. Ändert man den Radius, muß das Netzt natürlich neu trainiert werden.

Die Lernrate ist ebenfalls eine Größe mit der Experimentiert werden sollte, um das bestmögliche Verhalten des Netzes zu bekommen. In unserm Beispiel beginnt die Lernrate bei 1 und langsam gegen 0. Daraus folgt, daß am Anfang die Gewichte stark angepaßt werden und am Schluß nur noch Feinanpassungen durchgeführt werden. Auch hier gilt wird die Lernrate verändert, muß das Netz neu gelernt werden. Ein weiterer Parameter des Netzes ist die Anzahl der Lernschritte. Sie wird vom Benutzer vor dem Lernen festgelegt. Die Anzahl der Lernschritte beeinflußt natürlich wie stark sich die Karte ausprägt. Bei einer kleinen Anzahl von Lernschritten, kann es passieren, daß die Karte schlecht ausgeprägt ist und die einzelnen Gewichtsvektoren nicht sehr gut angepaßt sind. Bei einer hohen Anzahl von Lernschritten wird die Karte sehr gut ausgeprägt und die Erkennungsrate steigt an. Außerdem beeinflußt die Anzahl der Lernschritte die Funktion e (t) und s (t).

 

Die Wahl der Eingangsgrößen.

Die wichtigste Aufgabe bei der Programmierung eines Neuronalen Netzes ist es, die richtigen Eingangsgrößen auszuwählen. Dies ist eine schwierigere Aufgabe als man vielleicht Denken würde. In unserem Projekt wurden als Eingangsgrößen die charakteristischen Eigenschaften von Druckbuchstaben gewählt. Das heißt, die Eingabe des Benutzers wird nach diesen Eigenschaften analysiert und ausgewertet. Ist dies geschehen wird daraus ein Eingangsvektor x zusammengestellt. Dieser wird in das gelernte Netz eingegeben und das Netz versucht daraus einen gelernten Buchstaben wiederzuerkennen. Das setzt natürlich voraus, daß das Netz vorher diese charakteristischen Eigenschaften des eingegebenen Buchstaben gelernt hat. Folgend kommt ein Beispiel für einen Eingangsvektor x, welcher an die Eingangsschicht gelegt wird. Dies geschieht während der Lernphase und später in der Arbeitsphase.

 

 

Der oben dargestellte Eingangsvektor ist ein Beispiel für den Buchstaben E. Dies setzt natürlich eine Funktion voraus, welche die Eingabe nach den oben genannten Eigenschaften analysiert und entsprechend den Eingangsvektor setzt. Beim Lernen werden jeweils die vorgegebenen idealen Eingangsvektoren gelernt. Auch wenn die Eingabe nicht exakt einen gelernten Muster entspricht, ist das Kohonen Netz in der Lage einen Buchstaben zu erkennen. Wie bereits oben schon erwähnt, ist dies nur eine grobe Analyse der Eingabe. Natürlich könnten noch viele weiter Eigenschaften analysiert werden und man käme auf einen Eingangsvektor x mit 30 oder mehr Eigenschaften. In diesem Projekt wurde das Lernen mit Lehrer angewandt (vorgegebene Muster), obwohl Kohonen Netze auch ohne Lehrer trainiert werden können.

 

Programmtechnische Lösung der Kohonen Feature - Map

Da zur Programmierung die Sprache JAVA gewählt wurde, hat es sich angeboten ein Neuron als Klasse zu definieren. In dieser Klasse wurden die einzelnen Funktionen, wie z. B. Berechnung des Nettoinputs, Aktivierungsfunktion, Gewichtsmatrix integriert. Diese Kapselung hat sich Angeboten, weil jedes Neuron, egal ob Eingangsschicht oder Ausgangsschicht, dieselben Eigenschaften besitzt. Im Hauptprogramm selber wurde dann ein eindimensionaler Vektor bestehend aus Neuronen initialisiert. Die Kohonen Feature Map besteht aus einer zweidimensionalen Neuronen Matrix. Diese Struktur vereinfachte das Programmieren, weil über die Matrix Indizes die einzelnen Neuronen bestimmt werden können. Beim Lernen, werden nun zufallsgesteuert die vorgegebenen idealen Muster an die Eingangsschicht gelegt und gelernt. Dieses Lernen erfolgt wie es oben bereits beschrieben wurde. Die Funktion s (t) wurde folgendermaßen definiert:

 

Current_radius = trunc(max_radius * exp((learned_cycles/

Muber_of_cycles) * (ln(min_radius/max_radius)));

 

 

Die Funktion e (t) wurde so definiert:

 

Current_learnrate = max_learnrate * exp((learned_cycles/

Number_of_cycles) * ln(min_learnrate/max_learnrate));

 

Dies garantiert eine stetige Abnahme der Werte in Verbindung mit der Anzahl der Lernschritte.

 

Eine andere Aufgabe war es die Eingabe des Benutzers zu analysieren. Für die Eingabe mit der Maus steht dem Benutzer ein dafür vorgesehenes Zeichenfeld zur Verfügung. Diese Zeichenfeld ist 1:1 auf eine Matrix abgebildet, d. h. in der Matrix steht genau dort eine 1 wo ein Pixel im Zeichenbereich gemalt wurde. Daraus folgt nun das die Eingabe des Benutzers in dieser Matrix steht. Diese Matrix besitzt die Größe von 75*75. Dies ist eine willkürliche und könnte auch jederzeit anders gewählt werden. Anschließend wird diese Matrix auf 16*16 Matrix skaliert. 16*16 deshalb, weil das genau die Größe unsere zweidimensionale Kohonen Feature Map ist. Die Skalierung hat auch den Vorteil, daß die Buchstaben in unterschiedlichen Größen gezeichnet werden können. Nach dem Skalieren wird diese 16*16 Matrix auf die oben angegebenen Eigenschaften durchsucht. Wird eine Eigenschaft entdeckt wird das entsprechende Bit im Eingangsvektor gesetzt.

 

Zusätzlich wurden noch Anzeigen in das Programm eingebaut, welche die Lernphase veranschaulichen. Es wird ein Graph angezeigt, welche die stetige fallende monotone Funktion von e (t) anzeigt. Des weiteren wird ein Graph angezeigt, welcher die Fehler vom Eingangsmuster zum Gewichtsvektor anzeigt. Diese Fehler sind am Anfang natürlich groß, werden aber mit zunehmender Dauer im kleiner bis der Fehler letztendlich gegen 0 geht.

Dies beweist, daß das Netz die vorgegebenen Muster richtig gelernt hat. Hier kann man deutlich erkennen, daß die Fehlerrate bei z. B. nur 100 Lernschritten, am Schluß noch wesentlich höher ist, als z. B. bei 2000 Lernschritten, wo sie praktisch gegen 0 geht. Zusätzlich wurde noch die Kohonen Feature Map dargestellt. Die einzelnen Muster wurden hierbei jeweils einer Farbe zugeordnet um sie identifizieren zu können. Während der Lernphase sieht man ganz deutlich, wie sich die einzelnen Bereiche ausbilden und somit Blasen bilden. Diese Ausbildung hängt stark von den Parametern Radius und Lernschritte ab. Zu guter letzt wird natürlich auch noch während der Arbeitsphase der Buchstabe ausgegeben, welcher vom Programm erkannt wurde. Dies dient natürlich als Beweis für richtige Funktionalität des Programms.

 

Beispiel einer fertig ausgebildeten Kohonen Feature Map. Die Farben geben die Bereiche der einzelnen Muster an.

 

click here for JAVA example applet for character recognition


MAIL TO :
stefan.grosse@stud.fh-regensburg.de
udo.lugauer@stud.fh-regensburg.de
walter.berger@stud.fh-regensburg.de