next up previous contents
Next: Zusammenfassung Up: Regelung des Pendelsystems Previous: Lernen mit Regler

Lernen mit Gütemaß

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 gif, mittels einer Formel aus den Parametern des Systems ein Gütemaß zu bestimmen. Die Schwierigkeit hierbei ist, eine solche geeignete Bewertungsformel zu finden.

   figure356
Abbildung: Lernen mit Gütemaß

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 Formelgif ein sinnvolles Gütemaß darstellt:

  equation366

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 gif.

   figure370
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 gif.

   figure378
Abbildung: Pendel- und Motorwinkel mit Integral

Die Auslenkungen des Motorarms lagen teilweise bei tex2html_wrap_inline720 , so daß das Netz nicht zur Anwendung auf das Hardware-Problem geeignet war. Dieses nämlich erlaubt technisch nur Auslenkungen von etwa tex2html_wrap_inline722 .

Das verwendete Fehlermaß sah nach einer Skalierung auf einen Bereich von -1 bis 1 etwa folgendermaßen aus:

  equation385

Hierbei wurden err und olderr jeweils nach Formel (gif) 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 gif. 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 tex2html_wrap_inline732 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 gif 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 tex2html_wrap_inline734 bis tex2html_wrap_inline736 , und der Motorarm pendelt sich bei etwa tex2html_wrap_inline738 ein.

   figure393
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 tex2html_wrap_inline740 ), jedoch schwankte der Motorarm auch nur um einen etwa gleich großen Winkelbereich.

   figure400
Abbildung: Training bei 10 kHz, Regelung bei 1 kHz

   figure407
Abbildung: Einschwingen bei einer Auslenkung des Pendels von tex2html_wrap_inline742

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 gif, Start beim Nullpunkt, und gif, Start mit Auslenkung, besser war als mit 10 kHz, siehe Abbildung gif, 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 gif, Start beim Nullpunkt, und gif, Start mit Abweichung.

   figure419
Abbildung: Training mit 10-facher Wiederholung, 3 Gewichte mit Schraube

   figure426
Abbildung: Einschwingen bei einer Auslenkung des Pendels von tex2html_wrap_inline742

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 gif, Start beim Nullpunkt, und gif, 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 gif, Start beim Nullpunkt, und gif, Start mit Abweichung.

   figure437
Abbildung: Pendel- und Motorwinkel, 1 Gewicht

   figure444
Abbildung: Einschwingen bei einer Auslenkung des Pendels von tex2html_wrap_inline746 ; 1 Gewicht

%


next up previous contents
Next: Zusammenfassung Up: Regelung des Pendelsystems Previous: Lernen mit Regler

Marius Heuler
Tue Jan 7 12:05:27 MET 1997