Als zweiter Versuch wurde das Lernen mit einem Gütemaß, auch ,,Reinforcement-Learning`` genannt, angewendet. Reinforcement Learning kann als Spezialfall eines überwachten Lernverfahrens betrachtet werden. Die Gewichtsfaktoren werden für gute Aktionen verstärkt (,,belohnt``), daher auch der Begriff ,,reinforced``, und für schlecht durchgeführte Aktionen vermindert (,,bestraft``). Im Trainingsmustersatz wird allerdings nicht, wie beim überwachten Lernverfahren, das gewünschte Ausgangsmuster mitangegeben. Statt dessen wird nach jeder Aktion eine Bewertung derselben in Form eines skalaren Wertes errechnet, welcher ein Gütekriterium darstellt.
Die einfachste Variante davon ist den Fehlschlag, also das Umfallen des Pendels, als Fehlermaß zu nehmen. Das Problem hierbei ist, daß das Netz bis zum Fehlschlag mehrere Durchläufe hat, und man nicht mehr sagen kann, welcher Schritt wie stark ausschlaggebend für den Fehlschlag war. Außerdem nimmt mit längerem Lernen die Anzahl der Durchläufe bis zum Fehlschlag immer mehr zu (immer angenommen, das Netz wird durch Lernen verbessert). Das bedeutet, man kann das Netz anfänglich ziemlich schnell lernen, wohingegen es immer länger dauert, bis man das Netz noch einen Schritt weiter lernen kann. Ein weitere Variante besteht darin, siehe Abbildung , mittels einer Formel aus den Parametern des Systems ein Gütemaß zu bestimmen. Die Schwierigkeit hierbei ist, eine solche geeignete Bewertungsformel zu finden.
Als Algorithmus wurde das normale Backpropagation-Verfahren verwendet. Statt der Differenz zwischen gewünschter und tatsächlicher Ausgabe des Netzes wurde eine eigene Fehlerfunktion eingefügt ( calculate_error() beziehungsweise calculate_error_without_move()). Diese Funktion simuliert einen Zeitschritt der Pendelbewegung und ermittelt hieraus mit Hilfe des Gütemaßes ein Fehlermaß.
Verschiedene Versuche ergaben, daß folgende Formel ein sinnvolles Gütemaß darstellt:
Bei den ersten Versuchen wurde nur die Differenz zwischen dem alten und dem neuen Gütemaß nach Ablauf eines Zeittaktes benutzt. Das hat zur Folge, daß das Netz lernt, diese Differenz zu minimieren, jedoch nicht das Gütemaß. Das heißt, das Pendel schwingt mit längerer Lerndauer des Netzes langsamer hin und her, jedoch hört es nicht damit auf, siehe Abbildung .
Abbildung: Schwingungsablauf ohne Integral
Um diesen Mißstand zu beheben, wurde zusätzlich eine Art Integral mit in das Fehlermaß aufgenommen. Das normale Gütemaß wurde immer aufsummiert und somit bewirkt, daß das Netz auch lernte, das Fehlermaß zu minimieren. Das so gelernte Netz hatte schon eine viel geringere Amplitude des Motorarms, und auch die Schwingungsfrequenz war kleiner. Jedoch war das Netz noch nicht in der Lage, Motor- und Pendelarm gleichzeitig in der Senkrechten zu halten, siehe Abbildung .
Abbildung: Pendel- und Motorwinkel mit Integral
Die Auslenkungen des Motorarms lagen teilweise bei , so daß das Netz nicht zur Anwendung auf das Hardware-Problem geeignet war. Dieses nämlich erlaubt technisch nur Auslenkungen von etwa .
Das verwendete Fehlermaß sah nach einer Skalierung auf einen Bereich von -1 bis 1 etwa folgendermaßen aus:
Hierbei wurden err und olderr jeweils nach Formel () berechnet.
Die Schwierigkeit beim Finden dieser Formeln besteht immer darin, daß das Netz in Fällen mit großem Fehler nicht gegen die maximale Ausgabe konvergiert, da es sonst zu einem Stillstand des Lernprozesses in dieser Position kommt. Das Netz liefert dann nur diese Ausgabe, egal welche Systemparameter es als Eingabe hat.
Zu erklären ist das folgendermaßen: Das Netz weiß nicht, ob das Pendel wegen seiner Aktion umgefallen ist, oder ob es sowieso nicht mehr zu halten war. Es versucht also, den Fehler zu minimieren und wendet seine größtmögliche Ausgabe an. Durch den Backpropagation-Algorithmus bedingt verfängt sich das Netz jedoch bei diesem Maximalwert, wenn es einmal dort angelangt ist. Man muß also beim Finden einer brauchbaren Formel für das Gütemaß sehr vorsichtig sein, damit der Fehler am Rand des Gültigkeitsbereichs nicht zu groß wird und eben dieses Problem auftritt. Wählt man dagegen das Fehlermaß so, daß der Fehler immer ziemlich klein bleibt, dann ist das gelernte Netz zu träge. Es kann dann das Pendel nicht schnell genug korrigieren und reagiert erst, wenn es schon zu spät ist.
Es zeichnete sich ab, daß das Netz dem Zeittakt nicht schnell genug folgen konnte. Deshalb wurde dieser verfeinert. Der normale Zeittakt liegt - durch die Hardware bedingt - bei 1 kHz. Ein mit 10 kHz an der Simulation gelerntes Netz war bei seiner Anwendung bei 10 kHz dann auch etwas besser als die mit nur 1 kHz gelernten Netze, siehe Abbildung . Die maximale Auslenkung war geringer geworden, und auch die Frequenz der Oszillation war geringer. Jedoch war das Ergebnis noch nicht auf das Hardware-Modell anzuwenden, da die Auslenkungen noch bis gingen. Überdies wäre das Netz sowieso nicht anzuwenden gewesen, da die Steuerkarte, die für das Hardware-Modell verwendet wurde, maximal 2kHz an Steuerfrequenz zuließ.
An Abbildung sieht man gut, daß der Backpropagation-Algorithmus nicht immer das globale Minimum, sondern oft auch lokale Minima der Fehlerfunktion findet. So regelt das Netz das Pendel in einem Bereich von bis , und der Motorarm pendelt sich bei etwa ein.
Abbildung: Training bei 10 kHz, Regelung bei 10 kHz
Dies führte zu der Idee, das mit 10 kHz gelernte Netz bei einer Frequenz von 1 kHz, also der eigentlichen Zielfrequenz, zu untersuchen. Das Ergebnis war überraschend gut. Das Netz regelte das Pendel zwar nicht mehr so stabil wie vorher (die Auslenkungen des Pendels waren bei etwa ), jedoch schwankte der Motorarm auch nur um einen etwa gleich großen Winkelbereich.
Abbildung: Training bei 10 kHz, Regelung bei 1 kHz
Abbildung: Einschwingen bei einer Auslenkung des Pendels von
Zu erklären ist das folgendermaßen: Bei einer Lernfrequenz von 1 kHz war das Neuronale Netz nicht in der Lage, dem Bewegungsablauf des Pendels schnell genug zu folgen und darauf zu reagieren. Bei einer Lernfrequenz von 10 kHz konnte das Neuronale Netz die Systemdynamik schnell genug adaptieren. Interessant ist, daß das so gelernte Netz beim Regeln mit 1 kHz, siehe Abbildungen , Start beim Nullpunkt, und , Start mit Auslenkung, besser war als mit 10 kHz, siehe Abbildung , Start beim Nullpunkt.
Dieser Erfolg wurde anschließend noch verbessert, indem wieder der ursprüngliche Lerntakt von 1 kHz verwendet wurde. Nun wurde aber statt einem Lernschritt je Zeittakt eine größere Anzahl Lernschritte durchgeführt. Dazu ging man folgendermaßen vor:
Zuerst wurde die zufällig gewählte Startposition des Pendelsystems einige Male durch das Netz geregelt, ohne einen Lernalgorithmus auf das Netz anzuwenden, um im Netz die Rückkopplungen richtig vorzubelegen. Jetzt wurde der Zustand des Pendelsystems sowie die Werte in den Kontextneuronen des Elman-Netzes gespeichert. Jeweils von der selben Startkonfiguration aus wurde dann ein Zustand des Pendels durch das Netz propagiert und mit dem daraus resultierenden Fehlermaß das Netz gelernt. Nach einer gewissen Zahl von Wiederholungen dieses Vorganges wurde das Pendelsystem wieder einen Schritt durch das Netz gesteuert und dieser neue Zustand von Pendelsystem und Netz gespeichert. Ein Problem bei dieser Methode war das Integral, das ebenfalls bei jeder dieser Schleifen wieder auf den ursprünglichen Wert zurückgesetzt werden mußte.
Die so gelernten Netze lieferten die besten Ergebnisse, siehe Abbildungen , Start beim Nullpunkt, und , Start mit Abweichung.
Abbildung: Training mit 10-facher Wiederholung, 3 Gewichte mit Schraube
Abbildung: Einschwingen bei einer Auslenkung des Pendels von
Bemerkenswert ist, daß ein Netz, das mit einem Gewicht am Ende des Pendels gelernt wurde, das Pendel mit drei Gewichten und Mutter noch stabiler regeln konnte. So wurde das Netz in den Abbildungen , Start beim Nullpunkt, und , Start mit Abweichung, zwar mit einem Gewicht am Ende des Pendels gelernt, beim Regeln aber auf das Pendel mit drei Gewichten und einer Schraubenmutter angewandt. Das selbe Netz, auf ein Pendel mit nur einem Gewicht angesetzt, liefert die etwas schlechteren Schwingungskurven , Start beim Nullpunkt, und , Start mit Abweichung.
Abbildung: Pendel- und Motorwinkel, 1 Gewicht
Abbildung: Einschwingen bei einer Auslenkung des Pendels von ;
1 Gewicht
%