Modifikation der Gewichtswerte: das Lernen

Das Lernen erfolgt ebenfalls in der Kohonen-Klasse und zwar in der Funktion LerneMuster. Ihr wird, wie das so beim Lernen üblich ist, ein Reiz bzw. Eingabesignal vorgegeben und zusätzlich die Bedeutung des Reizes, der Ausgabevektor.

Der erste Schritt beim Lernen ist die Ermittlung des Aktivierungszentrums. Dies ist jenes Neuron, das mit dem Eingabesignal am besten kann, sprich die größte Aktivität zeigt. In der Lernefunktion erledigt dies die Zentrum-Funktion, die ebenfalls in der Klasse implementiert ist.

Der Zentrum-Funktion wird lediglich der Eingabereiz (Merkmalsvektor eines Fingerabdrucks) übergeben. Diese Funktion hat nun nichts besseres zu tun, alles diesen Eingabevektor mit allen Gewichtsvektoren der Feature-Map zu vergleichen. Das Erregungszentrum liegt nun bei den Koordinaten des Neurons, das am besten mit dem Eingabevektor übereinstimmt. Die stärkste Übereinstimmung wird mit Hilfe der Euklidischen Distanz zwischen einem Neuron und dem Eingabevektor ermittelt. Das Neuron mit der kleinsten Distanz bildet das Erregungszentrum.

Die Berechnung der Euklidischen Distanz erfolgt in der GetLevel-Funktion der NeuroVektor-Klasse. Sie bildet die Summe der Quadrate aus der Differenz des i-ten Eingabevektor - Elements und dem i-ten Gewichtswert des Neurons. Oder einfacher ausgedrückt:

Aus Geschindigkeitsgründen wird das Quadrat der Distanz zurückgeliefert, was jedoch nichts an dem Ergebnis ändert.

Nach dem das Erregungszentrum bestimmt wurde, werden die Grenzen für die Beeinflussung der Nachbarneuronen anhand des Radius (Varianz) bestimmt. Innerhalb dieses Bereichs werden nun die Gewichtsvektoren der Neuronen in Richtung auf den Eingabesignalvektor hin verschoben. Je weiter das Neuron innerhalb des Bereichs von dem Zentrum entfernt ist, um so schwächer wird dessen Gewichtsvektor verändert. Die Intensität der Änderung gleicht der Gaußschen Glockenkurve:

wobei i,j die Koordinaten des Neurons sind und zi,zj die Koordinaten der Zentrums darstellen. Die Funktion r hat im Zentrum sowohl ihr Maximum als auch ihr Symmetriezentrum; sig ist der Abstand von diesem Zentrum zu den Wendepunkten der Kurve. Ist sig klein, so ist die Kurve hoch und spitz, ist sig groß, so ist sie breit und flach.

Die Berechnung der neuen Gewichtsvektoren erfolgt dann nach folgender Formel:

Diese Formel wird sowohl auf alle Gewichtsvektoren der Feature-Map als auch auf alle Gewichtsvektoren der Ausgabeschicht angewandt, die sich innerhalb des Beeinflussungsradius befinden.

Die Feature-Map und die Ausgabe-Map muß vor dem Lernen mit Anfangswerten vorbelegt werden. Traditionell geschieht dies anhand von Zufallszahlen für die einzelnen Gewichtswerte. Die KohonenNetz-Klasse besitzt hierfür diverse InitFeatureMap und InitOutputMap - Methoden. Neben Zufallswerten ist es auch möglich die Feature-Map mit einer Art Pyramidenlandschaft vorzubelegen. Die Feature-Map besitzt dann bereits an den Pyramidenspitzen Zentren, deren Gewichtswerte alle 0 sind. Die Wahrscheinlichkeit daß sich später die Zentren der Eingabemuster um diese "künstlich" erzeugten Zentren bilden ist groß, da bereits nach dem Ersten Lernschritt diese Spitzen das ungefähre Abbild der Muster enthalten:

 

-> falls w ein Nullvektor ist, die Lernrate 1 und r einen Wert der ungefähr 1 ist liefert, enthält w(t+1) nach dem 1. Lernschritt den Wert von x.

Die Initialisierung der beiden Maps erfolgt bereits im Konstruktor der KohonenNetz-Klasse.

Anpassung der Lernrate und des Radius

Für die Erreichung eines Gleichgewichtszustand ist eine geeignete Wahl der Funktion

notwendig. Sie bestimmen die aktuelle Lernrate und den aktuellen Radius um das Erregungszentrum z herum, in Abhängigkeit von der Anzahl t der Lernschritte. Für beide Funktionen ist eine monotone Abnahme mit der Anzahl der Lernschritte zu realisieren; dies gilt aus folgenden Gründen: Für eine große Lernrate ist die durch jeden Lernschritt bewirkte Änderung der Gewichtsvektoren sehr groß. Dies ist im Anfangsstadium der Lernphase durchaus gewünscht, verzögert später jedoch das Einpendeln auf einen Gleichgewichtszustand der Gewichtsvektoren. Ähnliches gilt für den Radius. Ein großer Radius hilft der Karte, zunächst eine Grobstruktur zu bilden, die sie im weiteren Verlauf bei immer kleiner werdendem Radius in die gesuchte Verbindungsstruktur verfeinern kann.

Der komplette Lernvorgang im Programm erfolgt in der Lernen-Methode der NetzTester-Klasse. Sie ruft für jedes zum Lernen markierte Eingabemuster im MusterSpeicher die LerneMuster-Funktion im KohonenNetz auf. Nach jedem Lernschritt wird die Lernrate und der Radius nach folgende Formeln angepaßt:

Die maximale und minimale Lernrate (m_maxeps, m_mineps), sowie die maximale und minimale Varianz (m_maxsig, m_minsig) sind in der NetzTester-Klasse definiert und können vom Anwender individuell geändert werden. Beim Lernen wird dann die Lernrate bzw. Varianz vom maximalen zum minimalen Wert hin verändert.

Um der Anwendung die Möglichkeit zu gegen, z.B. den aktuellen Stand des Lernens graphisch auszugeben, gibt die Lernen - Funktion nach 4 Lernschritten die Kontrolle wieder zurück ans Hauptprogramm.

Falls die Lernmethode "AutoLernrate" aktiviert ist, wird in der LerneMuster-Funktion der KohonenNetz-Klasse die Lernrate anhand des Rückgabewerts der Zentrum-Funktion bestimmt. Die Zentrum-Funktion liefert das Quadrat der Euklidischen Distanz zwischen dem Eingabevektor und dem Zentrumsneuron zurück. Falls dieser Wert ziemlich klein ist, wurde ein Zentrum gefunden das dem Eingabevektor sehr ähnlich ist. Je kleiner nun dieser Wert ist, um so kleiner wird auch die Lernrate festgelegt, da für dieses Muster ja bereits ein gutes Zentrum existiert.

Home