Lernen

Die Abstraktion der Daten kann in mehreren Schritten erfolgen, sodass man Daten auf verschiedenen Abstraktionsstufen permanent speichern und gegebenenfalls für verschiedene Lernprobleme verwenden kann. Am Ende dieser Folge muss jedoch immer eine abstrakte Erfahrung (abstract experience in Abbildung 2) definiert sein, die genau die Daten für das zu lernende Problem in einer sinnvollen abstrakten Beschreibung enthält.

Der Lernvorgang wird ebenfalls deklarativ beschrieben. Ein Lernproblem besteht aus der zu verwendenden Erfahrung, dem zu verwendenden Lernsystem (d.h. dem Lernalgorithmus und seiner Parameter) und einer Beschreibung der Funktion, die gelernt werden soll. RoLL lässt verschiedene Funktionstypen zu: Modelle, die speziell abgespeichert werden um beispielsweise Fehler bei der Planausführung automatisiert zu finden, (Lisp-)Funktionen, (Lisp-)Methoden und Routinen, bei denen die gelernte Funktion in eine Schleife eingebaut wird, um sie zur Steuerung zu verwenden.

Zu einer gelernten Funktion wird eine Quelldatei erzeugt, die entweder eine eigenständige Funktion enthält oder eine Wrapper-Funktion, die beispielsweise mit einem "Foreign Function Call" die gelernte Funktionalität herbeiführt. Diese Datei wird sofort nach dem Lernen geladen, sodass sie gleich verwendet werden kann. Andererseits dient sie als permanente Speicherung der gelernten Funktion, die jedes Mal mit dem Gesamtprogramm geladen werden kann. Alexandra Kirsch hat 2008 ihre Promotion abgeschlossen und leitet jetzt die Nachwuchsgruppe "Human-Centered Artificial Intelligence" an der TU München. Forschungsschwerpunkte sind planbasierte Aktionsausführung, Roboterlernen, Mensch-Roboter Kooperation, autonome Entscheidungsfindung und wissensbasierte Fehlererkennung.

  Abb. 1 Simulation eines Haushaltsroboters.

2

  Robot Learning Language Die Robot Learning Language (RoLL) ist eine Erweiterung der Plansprache RPL (Reactive Plan Language) [5], die auf Lisp basiert. Ein besonderes Augenmerk lag auf der Lösung von folgenden Problemen: 1. Wie können Erfahrungen deklarativ beschrieben werden, sodass ein unabhängiger Beobachtungsprozess die Daten sammeln kann ohne dass der Code für die eigentliche Funktionalität des Roboters verändert werden muss? 2. Wie kann man gelernte Funktionen automatisch in das Steuerungsprogramm einbauen? 3. Wie können verschiedene Modi zum Lernen verwendet werden? Modi umfassen online und offline Lernen ebenso wie das aktive und passive Datensammeln. Bei dem gewählten Lösungsansatz ist der Lernprozess in zwei grobe Schritte geteilt: das Sammeln von Erfahrungen und das Lernen (s. Abb. 2). Die Erfahrungen werden vom Programmierer deklarativ beschrieben. Daraus wird Code generiert, der in einem parallelen Prozess zu irgendeinem Steuerungsprogramm laufen kann und automatisch die gewünschten Daten herausschreibt. Auch für den Lernvorgang an sich gibt es ein deklaratives Konstrukt, das die zu lernende Funktion und die Lernparameter beschreibt. Daraus wird eine Funktion generiert, die ebenfalls an einer beliebigen Stelle des Programms aufgerufen werden kann.

Abb. 2

 2 Abb. 2 Allgemeiner Lernvorgang mit RoLL. Die deklarative Beschreibung führt zu einer kompakten Darstellung aller Parameter des Lernvorgangs, inklusive der beobachteten Daten. Damit lässt sich genau rekonstruieren, wie eine Funktion gelernt wurde. Außerdem bietet die deklarative Beschreibung eine Grundlage für eine weitere Automatisierung des Lernprozesses. Durch die Einteilung in Datensammlung und Lernen lassen sich verschiedene Lernmodi umsetzen. Man kann beispielsweise einen Roboter so programmieren, dass er während des Tages seine normalen Tätigkeiten ausführt und nebenbei Erfahrungen sammelt und aus diesen Erfahrungen nachts seine Vorhersagemodelle und Entscheidungsfunktionen neu lernt. Wenn man die Erfahrungssammlung und das Lernen im Code näher zusammenrückt, bekommt man einen stärkeren online Charakter, was auch für Reinforcement Learning genutzt werden kann. Oder sollte ein Roboter feststellen, dass eines seiner Modelle gar nicht mehr funktioniert, könnte er statt seines normalen Programmes ein spezielles Skript zum Datensammeln ablaufen lassen, um in kurzer Zeit eine größere Menge von Lerndaten zu erzeugen. RoLL macht keine Vorgaben zum verwendeten Lernalgorithmus. Lernalgorithmen können nah Bedarf modular als learning system ergänzt werden, wofür man vorhandene Bibliotheken verwenden kann. In meiner Dissertation habe ich mit neuronalen Netzen (mit dem Stuttgart Neural Network Simulator, SNNS) und Entscheidungsbäumen (mit WEKA) gearbeitet. Mittlerweile ist auch eine Anbindung für Support Vector Machines (mit libSVM) implementiert.

  zum Sammeln und Abstrahieren von Lerndaten und define-learning-problem für die Spezifikation des Lernproblems. Aus diesen deklarativen Angaben werden zwei prozedurale Konstrukte generiert, die vom Programmierer flexibel im Programm eingebaut werden können: acquire-experiences, parametrisiert mit einer Erfahrungsklasse, kann in einem parallelen Prozess zu einem beliebigen Programmteil eingebaut werden und zeichnet automatisch die spezifizierten Daten auf. Die Funktion learn, parametrisiert mit dem Namen des Lernproblems, führt den Lernvorgang aus, wobei Datenabstraktion, Aufruf des Lernalgorithmus und Einbettung der gelernten Funktion in das Steuerungsprogramm automatisch durchgeführt werden. Außerdem bietet RoLL Hilfestellung für das gezielte Datensammeln an. Das Konstrukt with-problemparameters erlaubt es eine Menge von Variablen zu definieren und nach vorgegebenen Regeln mit verschiedenen Werten zu belegen. Will man beispielsweise lernen, an welchen Positionen auf einem Tisch sich eine Tasse greifen lässt, kann man die Fläche auf dem Tisch diskretisieren und den Roboter die Tasse an jeder so definierten Gridposition greifen lassen. Alternativ kann man zufällige Samples aus dem Zustandsraum ziehen oder systematische mit zufälliger Datensammlung kombinieren. Schließlich bietet RoLL noch Möglichkeiten zur Anpassung und Erweiterung: mit define-abstract-experience-class können verschiedene Möglichkeiten der Speicherung von Erfahrungen, z.B. in verschiedenen Dateiformaten oder einer Datenbank definiert werden; define-learning-problem-class bietet die Möglichkeit weitere Arten von Funktionen zu definieren, die gelernt werden sollen; zum Definieren eines neuen Lernsystems muss eine entsprechende abstrakte Erfahrungsklasse definiert werden (entsprechend dem Datenformat, das der Lernalgorithmus verwendet) und zwei Methoden zum Ausführen des Lernen und zum Generieren der gelernten Funktion spezifiziert werden.

Literatur

  

  1. Michael Beetz, Lorenz Mösenlechner, and Moritz Tenorth. CRAM -A Cognitive Robot Abstract Machine for Everyday Manipulation in Human Environments. In IEEE/RSJ International Conference on Intelligent RObots and Systems., 2010. 2. Alexandra Kirsch. Integration of Programming and Learning in a Control Language for Autonomous Robots Performing Everyday Activities. PhD thesis, Technische Universität München, 2008. 3. Alexandra Kirsch. Robot learning language -integrating programming and learning for cognitive systems. Robotics and Autonomous Systems Journal, 57(9):943-954, 2009. 4. Alexandra Kirsch, Michael Schweitzer, and Michael Beetz. Making robot learning controllable: A case study in robot navigation. In Proceedings of the ICAPS Workshop on Plan Execution: A Reality Check, 2005. 5. Drew McDermott. A reactive plan language. Technical report, Yale University, Computer Science Dept., 1993.

  Ein Problem liegt darin, dass man zur Lernzeit alle relevanten Informationen des Zustands kennen und das Performanzmaß festlegen muss. Dies bedeutet, dass man für die Navigation Wände und andere Hindernisse im Lernproblem modellieren müsste, was allerdings den Zustandsraum so groß macht, dass mit einer Datenmenge in realistischem Umfang keine Verallgemeinerung möglich ist. Und es wäre durch das Lernen festgelegt, ob ein Roboter sein Ziel zum Beispiel schnell oder sehr genau erreichen soll, was jedoch oft eher durch die Anwendungssituation bestimmt wird. Außerdem ist die Auswahl der Lerndaten extrem schwierig, da man viele Daten sammelt, die das Ziel zwar erreichen, aber nach dem festgelegten Performanzmaß nicht gut sind. Zum Beispiel bei der Navigation gibt es unendlich viele Möglichkeiten einen Zielpunkt zu erreichen, aber nur wenige davon sind effizient. Daher konzentrieren wir uns aktuell darauf Vorhersagemodelle zu lernen und diese zur Laufzeit für eine einfache Suche zu verwenden. Bei der Entscheidung, welche Hand ein Roboter verwenden soll, ist dies noch sehr einfach, solange er nur zwei Arme hat. Die Entscheidung, wo sich der Roboter positioniert um ein Objekt zu greifen, ist dagegen mit größerem Suchaufwand verbunden. RoLL wurde komplett überarbeitet und steht jetzt als open source ROS Stack zur Verfügung 1 . Dabei wurde das zugrundeliegende RPL durch die neue CRAM Plan Language 2 [1] ersetzt.

	3 Anwendungen und Ausblick
	RoLL wurde an mehreren Lernproblemen getestet [3], zum
	Beispiel zum Lernen einer Navigationsroutine, für die Vor-
	hersage der Zeitdauer für eine Navigationsaktion und für die
	Entscheidung welche Hand der Roboter in einer Situation
	zum Greifen benutzen sollte. Das volle Potential von RoLL
	liegt allerdings in komplexeren Systemen mit vielen weite-
	ren Lernproblemen. Wir sind derzeit dabei weitere Lernpro-
	bleme zu implementieren, sodass ein Roboter von Grund auf
	Modelle für die Armsteuerung und die Navigation lernt und
	diese für verschiedene Entscheidungsprobleme verwendet.
	Bei den Experimenten mit RoLL hat sich gezeigt, dass
	es äußerst schwierig ist, Steuerungsentscheidungen direkt zu
	Lernen, z.B. welcher Navigationsbefehl in einer Situation
	gegeben werden muss, um an einen gegebenen Zielpunkt zu
	fahren [4].

http://www.ros.org/wiki/roll

http://www.ros.org/wiki/cram pl