Mit der momentanen Konfiguration würde das Netz bei der Eingabe (0.2, 0.3) die folgende Ausgabe berechnen:
o1 = i1 · w11 + i2 · w21 = 0.2 · 0.2 + 0.3 · 0.0 = 0.04
o2 = i1 · w12 + i2 · w22 = 0.2 · 0.5 + 0.3 · 0.7 = 0.31
Der erhaltene Ausgabe (0.04, 0.31) steht somit die erwartete Ausgabe (0.5, 0.1) gegenüber. Im nächsten Schritt müssen nun die Gewichte mit Hilfe der Delta-Regel angepasst werden. Wenn wir für
den Lerngeschwindigkeits-Koeffizienten α (erst einmal willkürlich gewählt) den Wert 0.5 annehmen, berechnen sich die Werte für Δwij dann folgendermaßen:
Δw11 = α · (o’1 – o1) · i1 = 0.5 · (0.5 – 0.04) · 0.2 = 0.046
Δw12 = α · (o’2 – o2) · i1 = 0.5 · (0.1 – 0.31) · 0.2 = -0.021
Δw21 = α · (o’1 – o1) · i2 = 0.5 · (0.5 – 0.04) · 0.3 = 0.069
Δw22 = α · (o’2 – o2) · i2 = 0.5 · (0.1 – 0.31) · 0.3 = -0.0315
Die neuen Kantengewichte berechnen sich also zu
w’11 = w11 + Δw11 = 0.2 + 0.046 = 0.246
w’12 = w12 + Δw12 = 0.5 – 0.021 = 0.479
w’21 = w21 + Δw21 = 0.0 + 0.0696 = 0.0696
w’22 = w22 + Δw22 = 0.7 – 0.0315 = 0.6685
Eine Überprüfung des Eingabe-Ausgabe-Paares mit den neuen Kantengewichten führt zu den Werten
o1 = i1 · w11 + i2 · w21 = 0.07008
o2 = i1 · w12 + i2 · w22 = 0.29455
Man sieht, dass sich die Ausgaben in die gewünschte Richtung verschoben haben – o1 nach oben Richtung 0.5 und o2 nach unten in Richtung 0.1. Nun wird man sich natürlich fragen, warum die Änderung in Richtung der gewünschten Werte doch relativ klein ist und ob man das nicht mit Hilfe eines größeren α-Wertes beschleunigen kann. Das ist durchaus möglich, wird aber aus dem folgenden Grund nicht gemacht:
Angewendet wird die Delta-Regel in einem iterativen Prozess, in welchem nacheinander verschiedene Eingabe-Ausgabe-Paare dem Netz vorgelegt und die Kantengewichte angepasst werden. Die Nutzung verschiedener Paare ist wichtig, da das Netz sonst gezielt auf eine einzige Ausgabe hin trainiert werden würde (man spricht hier von Überanpassung) – und das würde für die Verwendung nicht viel bringen. Ein zu großer Wert für α (oder sogar die direkte Berechnung der nötigen Kantengewichte für ein bestimmtes Eingabe-Ausgabe-Paar) hätte zur Folge, dass das Netz in jedem Schritt des Anlern-Vorgangs lediglich zwischen den verschiedenen Zielwerten schwanken würde, ohne eine stabile, sinnvolle Belegung für alle Kantengewichte zu finden. Kleinere Änderungen an den Gewichten pro Schritt bedingen dagegen, dass das Netz (wenn möglich) in Richtung eines lokalen (oder gar globalen) Optimums konvergiert, also eine Belegung annimmt, welche für die einzelnen
Eingabe-Ausgabe-Paare jeweils vielleicht die allerbeste Übereinstimmung darstellt, im Mittel über alle Paare aber dennoch noch brauchbar ist.
Die Delta-Regel stellt ein gutes Verfahren dar, um die Kantengewichte eines KNN zu justieren. Der Nachteil des Verfahrens ist natürlich, dass für jedes Neuron die Eingabe , die Ausgabe und die gewünschte Ausgabe bekannt sein müssen; Eingabe und Ausgabe sind kein Problem, da sie nach jedem Berechnungsschritt vorliegen. Die gewünschte Ausgabe allerdings ist natürlich nur für die letzte Schicht der Neuronen, die Ausgabeschicht, bekannt. Die Delta-Regel kann somit wirklich nur auf einlagige Netze angewendet werden.
Um dennoch mehrlagige KNNs mit überwachtem Lernen anlernen zu können, wurden verschiedene andere Algorithmen entwickelt. Eines der am meisten verbreiteten Verfahren zur Anpassung der Kantengewichte in mehrlagigen Netzen ist der sogenannte Backpropagation-Algorithmus (mit seinen verschiedenen Variationen). Er nutzt mehr oder weniger die Delta-Regel aus, wurde aber so modifiziert, dass die gewünschte Änderung der Kantengewichte auf Grundlage der erwarteten Ausgabewerte der Neuronen (die ja nur für die Ausgabeschicht bekannt sind) für alle Neuronen berechnet werden können.
Kommentare (1)