Praktikumsbericht

Werbung
Praktikumsbericht
Marco Wangerin
Inhaltsverzeichnis
1 Einleitung
1.1 Neuronales Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Das lernende Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Sensomotorische Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Projekte
2.1 Roboterrad micro.eva . . . . . . . . . .
2.1.1 Sensomotorische Schleife mit fünf
2.1.2 neuronales Netz als Modell . . .
2.1.3 Rad-Simulation . . . . . . . . . .
2.1.4 serielle Schnittstelle . . . . . . .
2.2 Gnuplot . . . . . . . . . . . . . . . . . .
2.3 Kephera-Simulator . . . . . . . . . . . .
2.4 SNN-Simulator . . . . . . . . . . . . . .
1
. . . . . .
Neuronen
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
4
5
5
. 5
. 6
. 9
. 9
. 9
. 9
. 10
. 11
1
Einleitung
Die Rechenleistung der Computer stieg in den letzten Jahren enorm an und ermöglicht
das Lösen von bestimmten Problemen (Rechenaufgaben durch Algorithmen beschrieben) in kürzester Zeit. Dennoch bleibt das menschliche Gehirn in dessen Arbeitsweise
unübertroffen, da es sich im Laufe der Evolution perfekt seiner Umwelt anpasste. Das Erkennen und Zuordnen von sichtbaren Objekten, komplizierten Sachverhalten usw. kann
ein Computer heute nur mit hohem Rechen- bzw Zeitaufwand oder gar nicht erreichen.
Meine Bewunderung für dieses natürliche Konstrukt und meine Interesse an der Wissenschaft dessen, motivierten mich mein Praktikum an der Universität Leipzig im Bereich
Neuroninformatik und Robotik zu absolvieren.
1.1
Neuronales Netz
Das Gehirn ist ein komplexes Netzwerk von Nervenzellen (Neuronen). Jedes dieser Neuronen verfügt über einen Zellkörper, Dendriten und ein Axon. Die Dendriten sowie das
Axon sind Ausläufer, die aus dem Zellkörper hervorgehen und Nervenfasern, die für die
Weiterleitung von Reizen zuständig sind. Die Dendriten nehmen Reize auf und leiten sie
Abbildung 1: Motorsignale
zum Neuroninneren weiter. Wenn die Summe dieser Impulse einen bestimmten Schwellwert überschreitet, feuert das Neuron einen Reiz über das Axon zu anderen Nerven- oder
auch Muskellzellen ab. Die Synapsen, die sich am Ende des Axons befinden, bilden den
2
Kontakt zwischen den Neuronen und legen fest, wie stark ein Reiz auf das Empfängerneuron eingeht. Aus diesem biologischen Vorbild gehen das mathematische Modell eines
Neurons und die Grundlage für künstliche neuronale Netze hervor. Die Reize sowie die
synaptischen Gewichte werden in künstlichen neuronalen Netzen durch Zahlenwerte beschrieben.
x...Input
y...Output
w...synaptisschesGewicht
Jedem Input xi ist ein synaptisches Gewicht wi in der Form
z = ~x ∗ w
~=
X
(xi ∗ wi )
i
zugerodnet. Die Transferfunktion y = f (z) = f (~x|w)
~ beschreibt wie sich der Input ~x
auf den Output y des Neurons auswirken. Als Transferfunktion können unterschiedliche
Abbildung 2: Motorsignale
Funktionen eingesetzt werden. (lineare- ,Schwellwert- ,logistische Funktionen, Tangenshyperbolicus)
Beispiel mit einer Tangenshyperbolicus-Funktion
X
y = tanh(
i
3
(xi ∗ wi ))
Das Tangeshyperbolicus-Neuron eignet sich gut zur Ansteuerung von Motoren, da es
Abbildung 3: Tangenshyperbolicus
positive und negative Ausgangswerte liefern kann und somit die Unterscheidung zwischen
rechts und links drehen vereinfacht. In Verbindung mit Robotik kommt das TanghNeuron oft zum Einsatz.
1.2
Das lernende Neuron
Das Neuron bzw. das neuronale Netz kann nur dann etwas lernen, wenn ein Lehrer
vorhanden ist, der vorgibt was richtig und falsch ist. Dieser Lehrer kann die Umwelt
oder einfach nur eine Zielfunktion sein. Einen Fehler E macht das Neuron dann, wenn
der Output y des Neurons von dem der Zielfunktion ysoll abweicht.
E = (y − ysoll )2
Ziel ist die Minimierung des Fehlers durch die Anpassung der Gewichte w des Neurons.
Diese Anpassung erfolgt in Lernschritten. In jedem Schritt wird der Vektor w optimiert
(Update). Die Suche nach den optimalen Parametern wird über den Gradientenabstieg
auf der Fehlerlandschaft realisiert.
gradw E = (E/w1 , E/w2 , ..., E/wn )
So kann der Algorithmus gegen ein lokales Minimum der Fehlerfunktion konvergieren.
Ist dieses der Fall hat das Neuron die Zielfunktion gelernt.
4
1.3
Sensomotorische Schleife
Die sensomotorische Schleife beschreibt die Wechselwirkung zwischen dem Roboter und
seiner Umwelt. Jede Aktion die der Roboter über seine Motoren ausführt, verändert
seine Umwelt. Somit erhält der Controller des Roboters über seine Sensoren neue Informationen, welche seine nächste Aktion beeinflussen. Das Ziel ist ein Roboter der sich
Abbildung 4: Motorsignale
seiner Umwelt anpasst und die Konsequenzen seiner Aktionen kennt. Dazu benötigt der
Roboter ein Modell der Welt. Das Modell soll die Zusammenhänge, die zwischen Motorsignalen und Sensorwerten bestehen, lernen. Im einfachstem Fall ist das Modell eine
lineare Funktion. Für kompliziertere Zusammenhänge kann ein neuronales Netz verwendet werden. Das Modell soll dazu verwendet werden, die Sensorwerte des Roboters auf
Grund seiner Motoraktivitäten vorauszusagen. Aus der Differenz der Voraussage xmodell
und den tatsächlichen Sensorwerten x ergibt sich ein Fehler E.
E = (xmodell − x)2
Dieser Fehler wird als Lernsignal für den Controller sowie das Modell verwendet.
2
2.1
Projekte
Roboterrad micro.eva
Das fünfarmige Roboter-Rad micro.eva wurde im Jahre 2001 von Julius Popp entwickelt
und verschiedenen Forschungsinstituten zur Verfügung gestellt. Das Ziel war es, ein
Roboter zu bauen, der in Bezug auf seine Umgebung ein eigenes Bewusstsein entwickelt.
Ein neuronales Netz sollte diese Aufgabe lösen und micro.eva zum Leben erwecken.
Jeder der fünf Roboterarme wird mit einem Servomotor angetrieben. Ein Gyroskop
5
Abbildung 5: Motorsignale
steht für Drehgeschwindigkeitmessung und fünf Magnetsensoren für die Ermittlung der
Radstellung zur Verfügung. Die Ansteuerung und Datenverarbeitung übernimmt ein
Microcontroller, der mit einem kleinen Speicher ausgestattet ist, so dass Programme
direkt auf das Rad übertragen werden können.
2.1.1
Sensomotorische Schleife mit fünf Neuronen
Die ersten Versuche wurden mit ein C-Programm, welches eine sensomotorische Schleife
mit fünf Neuronen simulierte, durchgeführt. Jedes dieser Neuronen sollte jeweils einen
Arm des Rades ansteuern und die neuen Armstellungen des eigenen und die der Nachbararme als Sensorwert erhalten. Ziel war es, einen Zusammenhang zwischen den NachbarArmstellungen zu finden und eine Reaktion hervorzurufen, die das Rad dreht. Das Gyroskop sowie die Magnetsensoren des Rades wurden als Sensoren vernachlässigt, so konnte
man das Programm am Rechner testen ohne es auf das Rad zu übertragen.
Jeder Arm des Rades wird von einem Neuron angesteuert werden. Jedes dieser Neuronen i hat drei Eingäge xn und einen Bias H. Der Sensorwert xi ist die Stellung des vom
Neuroun i angesteuerten Armes. Die Sensorwerte xi−1 und xi+1 ergeben sich aus den
den benachbarten Armstellungen.
zi =
X
(xn ∗ cij ) + Hi
;
n = (i + j + 4)mod5
(1)
j
Der Fehler ist nur fu”r das Biasupdate bedeutend, wobei Bias sowie Fehler in diesem
Fall keinen grossen Einfluss auf das Verhalten der Neuronen haben, da nur das Rauschen
6
in den Fehler eingeht.
E=
X
(xi − yi )2
i
Die Rückkopplungsstäke des Neurons i ist
(
Ki =
X
(cij ∗ aji )
;
aji =
j
1
0
: j=1
: j=
6 1
Die Gewichte cij werden fr jedes Neuron i und jeden Eingang j seperat berechnet, wobei
ci1 das Gewicht des eigenen Sensorwertes ist.
Die Update-Regel der Gewichte:
∆cij = ∗ (1 − tanh2 (zi )) ∗ (aji − 2 ∗ Ki ∗ yi ∗ xn ) − γ ∗ cij
(2)
Die Update-Regel des Bias:
∆Hi = ∗ (−2 ∗ Ki ∗ yi ∗ E ∗ f req ∗ (1 − tanh2 (zi )))
(3)
Die Startparameter sind auf = 0.001, γ = 0.01, f req = 10 festgelegt. Die Sensorwerte und synaptischen Gewichte werden mit Zufallszahlen initialisiert. Nach einigen
Abbildung 6: Motorsignale
Durchläufen stabilisieren sich die Gewichte und die Motorsignale y schwingen phasenverschoben zwischen -1 und 1. Auch die Reihenfolge der Flanken ist ideal um eine Drehung
des Rades zu erzeugen. Problematisch ist die hohe Frequenz, die auch mit den Lernparametern nicht ausreichend verringert werden kann, da zu stark verı̈¿ 21 derte Startwerte
7
eine vı̈¿ 21 lig andere Dynamik des Systems verursachen. Um die Frequenz dennoch zu
reduzieren kann man das zi zu einem Update umformulieren und so eine Trı̈¿ 12 heit des
Neurons erreichen. λ ist eine Zeitkonstante mit der die Stı̈¿ 21 ke der Trı̈¿ 12 heit festgelegt
werden kann.
X
∆zi = λ( (xn ∗ cij ) + Hi − zi )
j
Abbildung 7: Motorsignale
Die Frequenz ist ungefär 40 mal kleiner als zuvor und würde das Rad zum drehen bringen.
Der Quelltext:
for(;;)
{
for (i =0; i < 5; i++)
{
E[i] = (x[i] - y[i]) * (x[i] - y[i]);
k[i]=c[i][1]*a[i][1];
for(j=0;j<3;j++)
c[i][j] += epsilonc *tanh((1 - tanh (z[i]) * tanh (z[i]))*
(a[i][j] - 2 * k[i] * y[i] *x[(i+j+4)%5]) - gam * c[i][j]);
h[i] += epsilonc * tanh(-2 * k[i] * y[i]* E[i] * freq * (1 - tanh (z[i])* tanh (z[i])));
z[i] += lam*((x[i] * c[i][1] + x[(i+4)%5] * c[i][0] +x[(i+1)%5] * c[i][2] + h[i])-z[i]);
}
8
for (i = 0; i < 5; i++)
{
y[i] = tanh (z[i]);
x[i] = y[i] + r*n();
}
}
2.1.2
neuronales Netz als Modell
2.1.3
Rad-Simulation
2.1.4
serielle Schnittstelle
2.2
Gnuplot
Abbildung 8: Motorsignale
Gnuplot ist eine Software mit der man Funktionen oder Datensätze graphisch darstellen kann. Das Programm eignet sich besonders für die Auswertung von Messwerten und
ist in den Linux-Paketen enthalten. Da die Bediennung nur über die Konsole möglich ist,
erstellte ein wissenschaftlicher Mitarbeiter bereits verschiedene Template-Klassen, welche die Verwendung vereinfachen und in Echtzeit ermöglichen. Meine Aufgabe bestand
darin weitere Klassen zu erstellen.
9
PlotLog
Erzeugt ein Gnuplot-Fenster und ein Gnuplot-Logfile gleichzeitig. Ist hilfreich wenn die
selben Daten in eine Datei geschrieben und in einem Gnuplot-Fenster angezeigt werden
sollen, da die Funktionen addChannel und putData nicht zweimal aufzurufen sind.
PlotDlg
Ein Dialogfenster nur für Qt-Anwendungen in Verbindung mit der Klasse Gnuplot oder
PlotLog. Einzelne Kanäle lassen sich während des Plotvorgangs ein- und ausschalten
und der Bereich der abgebildeten Daten verändern (Zoomfunktion).
GnuplotText
In Verbindung mit der Gnuplot-Klasse besteht die Möglichkeit über eine Zeichenkette
den Plotvorgang für einzelne Kanäle ein- und auszuschalten. Eine Erweiterung dieser
Klasse kann für den Khepera-Simulator verwendet werden. (GnuplotSIM)
2.3
Kephera-Simulator
Der Kephera ist ein kleiner Roboter mit acht Näherungssensoren und zwei Motoren. Er
wird in der Schweiz in produziert. Die Software zum Kephera ist ein Steuerprogramm
und eine Simulation zu gleich. Dem Anwender steht ein Programmabschnitt user.c für
die eigene Programmierung der KI zur Verfügung. Zum einen war es meine Aufgabe
Abbildung 9: Motorsignale
die alte Geschwindigkeitsmessung des Roboters durch eine neue zu ersätzen. Die alte
Messung gab nur ganzahlige Werte zurück, welche für ein neuronales Netz zu sprunghaft
seinen können. Die Idee war es, den Wheel-Counter und den Timer für die Berechnung
10
der Geschwindigkeit zu verwenden. In jedem Rechenzyklus wird die Geschwindigkeit des
Roboters über W egdif f erenz/Zeitdif f erenz neu berechnet. Die Rückgabewerte haben
so eine höher Aufgelösung und sind genauer.
Zum anderen schrieb ich eine kleine Funktion die über die Näherungssensoren erkennen
sollte, ob der Kephera mit der Hand umgesetzt wird. Der Funktion werden die acht
Werte der Näherungssensoren übergeben und es wird geprüft wie sich die Sensorwete
untereinander verhalten. Wenn zum Beispiel die vorderen und hinteren Senoren aktiv
sind, gibt die Funktion ein true zurück, da es sich nicht um eine Wand oder ein Ball
handeln kann.
2.4
SNN-Simulator
Der Stuttgarter Neuronales Netz Simulator wurde an der Universität Stuttgart entwickelt. Die graphische Oberfläche ermöglicht ein einfaches und schnelles Erstellen von
neuronalen Netzen. Unter Verwendung einer Pattern-File (Datei in der Inputs und ZielOutputs gespeichert sind) kann das Netz angelernt werden. Dazu stehen verschiedene
Lernalgorithmen zur Verfügung. Aus dem angelernte Netz kann eine C-Klasse erstellt
werden, so dass eine weitere Verwendung des neuronalen Netz ausserhalb des Simulators
möglich ist. Ich verwendete den SNNS dazu, ein neuronales Netz zu erstellen, welches
Abbildung 10: Motorsignale
die Position eines Objektes, von einem Kephera-Roboter gesehen, als Winkel bzgl. des
Roboters ausgibt. Als Input des Netzes werden die acht IV-Sensoren verwendet. Um
das Netz anzulernen, benötigt man eine Reihe von Datensätzen, die das Verhalten der
11
Sensoren in Bezug auf die Position des Objektes zeigen. Diese Daten mussten zuvor
aufgenommen werden. Dazu legte man das Objekt (kleiner Ball) neben den Roboter
und liess den Roboter um sich selbst drehen. So erhält man die gleichen Messdaten,
als wenn man den Ball um den Roboter drehen würde. Die Zeit und die Sensorwerte
wurden währendessen in einem Logfile gespeichert. Um das Logfile als Patternfile für
den SNNS zu nutzen, waren noch einige Anpassungen notwendig. Dazu schrieb ich ein
kleines C-Programm welches die Daten des Logfiles einlass und sie in die Form eines
SNNS-Pattern-Files brachte. Der Winkel, den das Netz lernen sollte, berechnete ich aus
der Zeit, die neben den Sensorwerten aufgenommen wurde. Mit dem fertigen pat-file
konnte das neuronale Netz, welches mit wenigen Mausklicks erstellt war, angelernt und
in einen C-Quellcode umgewangelt werden. Das Ergebniss zeigte Erflog. Das neuronale
Netz gab die Position des Balls richtig an.
12
Herunterladen