Neuronale Netze - D. Kriesel
Neuronale Netze - D. Kriesel
Neuronale Netze - D. Kriesel
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Ein kleiner Überblick über<br />
<strong>Neuronale</strong> <strong>Netze</strong><br />
David <strong>Kriesel</strong><br />
dkriesel.com<br />
Downloadadresse:<br />
http://www.dkriesel.com/science/neural_networks<br />
NEU ‐ Für die Coder:<br />
Skalierbares, effizientes NN‐Framework für JAVA<br />
http://www.dkriesel.com/tech/snipe
In Gedenken an<br />
Dr. Peter Kemp, Notar a.D., Bonn.
Vorwörtchen<br />
„Diese Arbeit ist ursprünglich im Rahmen eines Seminars der Rheinischen<br />
Friedrich-Wilhelms-Universität Bonn entstanden, wurde und wird jedoch<br />
(nachdem vorgetragen und online verfügbar gemacht unter<br />
www.dkriesel.com am 27.05.2005) immer mehr erweitert – erstens, um mit<br />
der Zeit einen möglichst guten Überblick über das Thema der <strong>Neuronale</strong>n<br />
<strong>Netze</strong> liefern zu können und zweitens schlicht und einfach, weil ich daran<br />
immer mehr und besser L ATEX lernen möchte. Wer weiss, vielleicht wird aus<br />
dieser Zusammenfassung ja sogar einmal ein Vorwort!“<br />
Zusammenfassung dieser Arbeit, Ende 2005<br />
Aus der obenstehenden Zusammenfassung ist bis jetzt zwar kein Vorwort, aber immerhin<br />
ein Vorwörtchen geworden, nachdem sich die Erweiterung der Arbeit (damals auf<br />
40 Seiten) bei mir unverhofft zum Downloadschlager entwickelt hat.<br />
Anspruch und Intention dieses Manuskripts<br />
Der ganze Text ist großzügiger geschrieben und ausführlicher bebildert als früher. Die<br />
Illustrationen sind nun „nach meinem Gusto“ selbst erstellt, zum Großteil direkt in<br />
L ATEX unter Verwendung des Pakets XYpic. Sie spiegeln das wieder, was ich mir beim<br />
Erarbeiten des Stoffs gewünscht hätte, sollen also mit dem Text zusammen möglichst<br />
eingängig und schnell verständlich sein, um möglichst vielen einen Einstieg in das<br />
Gebiet der <strong>Neuronale</strong>n <strong>Netze</strong> zu ermöglichen.<br />
Trotzdem kann der mathematisch und formal versierte Leser die Definitionen weitestgehend<br />
ohne Fließtext lesen, der nur an dem Gebiet an sich interessierte Leser umgekehrt;<br />
alles wird also sowohl umgangssprachlich wie auch formal erklärt. Ich bitte ausdrücklich<br />
um Hinweise, falls ich diese Doppelmoral einmal nicht ausreichend bewerkstelligt<br />
haben sollte.<br />
v
Abschnitte dieser Arbeit sind weitestgehend eigenständig<br />
Das Dokument selbst gliedert sich in mehrere Teile, die sich wiederum in Kapitel teilen.<br />
Trotz Querverweisen untereinander kann man die Kapitel mit nur geringem Vorwissen<br />
auch für sich selbst lesen. Hierbei gibt es größere und kleinere Kapitel: Während die<br />
größeren einen etwas fundierteren Einblick in ein Paradigma <strong>Neuronale</strong>r <strong>Netze</strong> geben<br />
sollen (z.B. beim Standardbeispiel <strong>Neuronale</strong>r <strong>Netze</strong>, dem Perceptron und seiner Lernverfahren),<br />
sind die kleineren für einen kurzen Überblick gedacht – dies wird in der<br />
jeweiligen Kapiteleinleitung auch beschrieben. In einigen Exkursen möchte ich noch<br />
gerne im Zusammenhang interessantes, aber nicht direkt dem Stoff zugehöriges Wissen<br />
vermitteln.<br />
Auf der Suche nach kostenlosen deutschen Quellen, die inhaltlich (was die Paradigmen<br />
<strong>Neuronale</strong>r <strong>Netze</strong> angeht) vielfältig, aber trotzdem durchgehend einheitlichen Stils sind,<br />
bin ich (zumindest was deutschsprachiges Material angeht) leider nicht wirklich fündig<br />
geworden. Das Ziel dieser Arbeit (auch wenn sie es vielleicht nicht auf Anhieb erfüllen<br />
kann) ist, diese Lücke nach und nach zu schließen und das Fachgebiet auf leicht<br />
verständliche Weise zugänglich zu machen.<br />
Für diejenigen, die direkt während des Lesens programmieren<br />
möchten, gibt es SNIPE<br />
SNIPE 1 ist eine ausführlich dokumentierte JAVA-Bibliothek, welche ein schnelles,<br />
feature-reiches und einfach benutzbares Framework für <strong>Neuronale</strong> <strong>Netze</strong> implementiert.<br />
Für nichtkommerzielle Einsatzgebiete ist es kostenlos verfügbar. Es war von mir<br />
ursprünglich für den Einsatz in Hochleistungssimulationen konzipiert, in denen sehr viele,<br />
auch große <strong>Netze</strong> gleichzeitig trainiert und ausgeführt werden. Vor kurzem habe ich<br />
mich nun entschieden, Snipe als professionelle Referenzimplementierung zu dieser Arbeit<br />
online zu stellen, die sehr viele der behandelten Aspekte abdeckt, aber angesichts<br />
des ursprünglichen Design-Ziels effizienter arbeitet als die meisten anderen Implementierungen.<br />
Wer also direkt vieles vom Gelernten ausprobieren möchte oder aus anderen<br />
Gründen nach dem Lernen eine schnelle und stabile <strong>Neuronale</strong>-<strong>Netze</strong>-Implementierung<br />
braucht, ist mit Snipe sicher gut beraten.<br />
Die von Snipe abgedeckten Aspekte sind allerdings nicht komplett deckungsgleich mit<br />
dem Manuskript. Manche im Manuskript vorgestellten Arten <strong>Neuronale</strong>r <strong>Netze</strong> werden<br />
von Snipe nicht unterstützt, während Snipe in anderen Bereichen deutlich mehr<br />
1 Scalable and Generalized Neural Information Processing Engine, Download unter http://www.dkriesel.<br />
com/tech/snipe, Online-JavaDoc unter http://snipe.dkriesel.com
Fähigkeiten hat, als im Manuskript in Form von Praxistipps beschrieben werden kann<br />
(ich habe aber die Erfahrung gemacht, dass die allermeisten Implementierungsinteressen<br />
der Leser gut abgedeckt werden). Auf der Snipe-Downloadseite gibt es in der<br />
Rubrik „Loslegen mit Snipe“ eine einfache, schrittweise Einführung in Snipe und seine<br />
Dokumentation, sowie einige Beispiele.<br />
SNIPE: Dieses Manuskript integriert Snipe sehr stark. Über weite Teile des Manuskriptes hinweg<br />
finden sich abgesetzte, unterlegte Textstellen wie diese, aus denen hervorgeht, wie der gerade<br />
beschriebene Kontext in Snipe realisiert werden kann. Wer Snipe nicht nutzen möchte,<br />
muss also nur diese abgesetzten Textstellen überspringen! Die Snipe-Textstellen setzen<br />
voraus, dass man sich vorher die „Loslegen mit Snipe“-Anleitung auf der Downloadseite zu<br />
Gemüte geführt hat. Oftmals werden Klassennamen verwendet; da Snipe nicht sehr viele Java-<br />
Pakete hat, habe ich die Paketnamen der Übersichtlichkeit halber nicht den Klassennamen<br />
vorangestellt.<br />
Es ist einfach, diese Arbeit zu drucken<br />
Diese Ausarbeitung ist durchgehend farbig gehalten, kann jedoch auch so, wie sie ist<br />
monochrom gedruckt werden: Die Farben sind in Abbildungen, Tabellen und Text so<br />
gewählt, dass sie neben schönem Farbdesign auch einen hervorragenden Schwarz-Weiss-<br />
Kontrast ergeben.<br />
Es sind viele Hilfsmittel im Text integriert<br />
In das Dokument sind verschiedene Hilfsmittel direkt integriert, die das Lesen wesentlich<br />
flexibler machen sollen: Wer (wie ich) lieber auf Papier liest als am Bildschirm,<br />
soll sich trotzdem einiger Features erfreuen.<br />
Verschiedene Kapiteltypen sind im Inhalt gekennzeichnet<br />
Direkt im Inhaltsverzeichnis sind die Kapiteltypen gekennzeichnet. Kapitel, die als<br />
„wichtige Grundlagen“ gekennzeichnet sind, sollte man definitiv zu Anfang lesen, denn<br />
eigentlich alle nachfolgenden Kapitel basieren in irgendeiner Form darauf. Andere Kapitel<br />
basieren zusätzlich auf bestimmten anderen (vorherigen) Kapiteln, auch hier steht<br />
eine entsprechende Bemerkung im Inhaltsverzeichnis neben dem Kapiteltitel.
Sprechende Überschriften im Text, kürzere im Inhaltsverzeichnis<br />
Das ganze Scriptum ist nun mit sprechenden Überschriften durchzogen. Sprechende<br />
Überschriften sind nicht nur einfach ein Titel wie z.B. „Bestärkendes Lernen“, sondern<br />
definieren den Kernpunkt des zugehörigen Abschnitts: in diesem Fall „Bestärkendes<br />
Lernen gibt dem Netz Feedback, ob es sich gut oder schlecht verhält“. Die letztere,<br />
lange Version dient hierbei als Überschrift, die im Text verwendet wird, die kürzere<br />
steht im Inhaltsverzeichnis, so dass dieses griffig bleibt.<br />
Randbemerkungen sind eine Navigationshilfe<br />
Über das ganze Dokument hinweg existieren umgangssprachliche Randhinweise (siehe<br />
nebenstehendes Beispiel) , an denen entlang man (unter Mitbenutzung der Überschriften)<br />
durch den Text „gleiten“ und Textstellen einfach wiederfinden kann.<br />
Neue mathematische Symbole kennzeichne ich zum einfachen Wiederfinden mit besonderen<br />
Randhinweisen (nebenstehend ein Beispiel für x).<br />
Es gibt verschiedene Arten der Indizierung<br />
Es existieren verschiedene Arten der Indizierung: Zunächst kann man einen Begriff,<br />
nachdem man ihn im Index gefunden und die betreffende Seite aufgeschlagen hat,<br />
einfach finden, indem man nach hervorgehobenem Text sucht – indizierte Begriffe<br />
sind grundsätzlich auf diese Weise hervorgehoben.<br />
Kapitelübergreifende mathematische Symbole (wie z.B. Ω für ein Outputneuron, ich<br />
habe mich bemüht, bei allgegenwärtig wiederkehrenden Elementen eine konsistente Nomenklatur<br />
beizubehalten) besitzen eine eigene Indexkategorie unter „Mathematische<br />
Symbole“, so dass sie einfach dem entsprechenden Begriff zugeordnet werden können.<br />
Personennamen, welche in Kapitälchen geschrieben sind, werden in der Indexkategorie<br />
„Personen“ indiziert und nach Nachnamen geordnet.<br />
Nutzungsbedingungen und Lizenz<br />
Von der Epsilon-Edition an ist das Manuskript unter Creative Commons Attribution-<br />
No Derivative Works 3.0 Unported License 2 lizensiert, bis auf einige wenige Kleinteile,<br />
2 http://creativecommons.org/licenses/by-nd/3.0/
die liberaleren Lizenzen unterstehen (im Wesentlichen ein paar Bilder, die in den Wikimedia<br />
Commons sind). Hier ist eine Kurzzusammenfassung dessen, was diese Lizenz<br />
ungefähr wiedergibt:<br />
1. Dieses Dokument darf frei weiterverbreitet werden (auch wenn es eine bessere<br />
Idee ist, einfach die URL meiner Homepage weiterzuverbreiten, denn hier gibt es<br />
schließlich immer die neueste Version).<br />
2. Dieses Dokument darf nicht modifiziert oder als Teil eines anderen verwendet<br />
werden, insbesondere nicht für kommerzielle Zwecke.<br />
3. Dieses Dokument muss in jeglicher seiner Verwendungen dem Autor zugeschrieben<br />
werden. Die Urheberschaft des Autors darf nicht verschleiert werden.<br />
4. Die o.g. Zuschreibung des Dokumentes zum Autor impliziert nicht, dass der Autor<br />
die Art befürwortet, auf die ein beliebiger Leser das Dokument nutzt.<br />
Da ich kein Anwalt bin, ist die obige Stichpunktzusammenfassung nur informativ gemeint.<br />
Wenn sie in irgendeiner Form in Konflikt zur o.g. Creative Commons-Lizenz<br />
steht, so hat letztere in jedem Fall Vorrang. Natürlich berührt die Lizenz ebenfalls<br />
nicht den Source Code des Manuskripts, der nicht veröffentlicht wird.<br />
Wie dieser Text zitiert wird<br />
Da dieser Text keinen offiziellen Verlag hat, muss man mit Referenzen sorgfältig sein:<br />
Hierzu gibt es Informationen in Deutsch und Englisch auf meiner Homepage bzw. der<br />
zum Text gehörenden Unterseite 3 .<br />
Danksagung<br />
Ich möchte nun einige Danksagungen loswerden, da ein Skriptum wie dieses durchaus<br />
genug Arbeit macht, um viele Helfer zu benötigen. Zunächst einmal möchte ich mich bei<br />
den Korrektoren dieses Skriptums bedanken, welche mir und der Leserschaft sehr sehr<br />
geholfen haben. Genannt seien in alphabetischer Ordnung: Wolfgang Apolinarski, Kathrin<br />
Gräve, Paul Imhoff, Thomas Kühn, Christoph Kunze, Malte Lohmeyer, Joachim<br />
Nock, Daniel Plohmann, Daniel Rosenthal, Christian Schulz und Tobias Wilken.<br />
Vielen Dank für Verbesserungen, Feedback und Anmerkungen möchte ich auch den<br />
Lesern Dietmar Berger, Igor Buchmüller, Marie Christ, Julia Damaschek, Jochen Döll,<br />
3 http://www.dkriesel.com/science/neural_networks
Maximilian Ernestus, Hardy Falk, Anne Feldmeier, Sascha Fink, Andreas Friedmann,<br />
Jan Gassen, Markus Gerhards, Sebastian Hirsch, Andreas Hochrath, Nico Höft, Thomas<br />
Ihme, Boris Jentsch, Tim Hussein, Thilo Keller, Mario Krenn, Mirko Kunze, Maikel<br />
Linke, Adam Maciak, Benjamin Meier, David Möller, Andreas Müller, Rainer Penninger,<br />
Lena Reichel, Alexander Schier, Matthias Siegmund, Mathias Tirtasana, Oliver<br />
Tischler, Maximilian Voit, Igor Wall, Achim Weber, Frank Weinreis, Gideon Maillette<br />
de Buij Wenniger, Philipp Woock und vielen anderen aussprechen.<br />
Herzlicher Dank geht an Sebastian Merzbach, der die Epsilon2-Version des Skriptums<br />
auf gewissenhafteste und gründlichste Art und Weise auf Inkonsistenzen und Fehler<br />
durchgesehen hat. Insbesondere die englische Version verdankt ihm zusätzlich unzählige<br />
sprachliche und ortographische Verbesserungen.<br />
Ebenfalls danke ich Beate Kuhl ganz besonders für die Übersetzung des Skriptums<br />
vom Deutschen ins Englische und Nachfragen, die mich bewogen haben, einige Formulierungen<br />
anders zu gestalten.<br />
Ganz besonderen Dank möchte ich Prof. Rolf Eckmiller und Dr. Nils Goerke aussprechen,<br />
sowie der ganzen Abteilung Neuroinformatik des Instituts für Informatik der<br />
Universität Bonn – sie sorgten dafür, dass ich immer Neues über <strong>Neuronale</strong> <strong>Netze</strong> und<br />
Fachverwandtes lernte (und auch lernen musste). Insbesondere Herr Dr. Goerke war<br />
und ist immer bereit, auf jedwede Frage einzugehen, die ich mir während des Schreibens<br />
nicht selber beantworten konnte. Gespräche mit Prof. Eckmiller waren für mich immer<br />
bereichernd und gaben Anstoß für weitere Recherchen oder verleiteten mich, „von der<br />
Tafel zurückzutreten“, um Sachverhalte von weiter weg nüchtern zu betrachten und<br />
nächste Aufgaben auszumachen.<br />
Ganz global und nicht nur auf das Skriptum bezogen geht ein weiteres Dankeschön<br />
an meine Eltern, welche nie müde werden, mir fachbezogene und damit nicht wirklich<br />
preiswerte Buchwünsche zu erfüllen und mir auch sonst viel Unterstützung für mein<br />
Studium zukommen lassen.<br />
Für viele „Bemerkungen“ und die ganz besonders herzliche Stimmung ;-) bedanke<br />
ich mich sehr bei Andreas Huber und Tobias Treutler, mit denen es seit dem ersten<br />
Semester nur selten langweilig wurde!<br />
Ich möchte auch noch kurz an meine Schulzeit denken und mich bei jenen Lehrern ganz<br />
herzlich danken, die mir (das ist meine Überzeugung) trotz meiner vielleicht nicht<br />
immer vollherzigen Mitarbeit naturwissenschaftlich etwas mit auf den Weg gegeben<br />
haben: Herrn Wilfried Hartmann, Herrn Hubert Peters und Herrn Frank Nökel.<br />
Ein Dankeschön geht auch an die Wikimedia Commons, wo ich einige (wenige) Bildvorlagen<br />
entnommen und auf mein Skriptum angepasst habe.
Weiterhin danke ich der gesamten Mann- bzw. Frauschaft des Notariates Dr. Kemp<br />
Dr. Kolb aus Bonn, bei der ich mich immer gut aufgehoben fühle und die alles tut,<br />
damit sich meine Druckkosten im Rahmen halten - insbesondere seien hier erwähnt<br />
Christiane Flamme und Herr Dr. Kemp!<br />
Als letztes, und sozusagen als Ehrenplatz, möchte ich aber zwei Personen danken, die<br />
sich sehr um das Skriptum verdient machen: Meine Freundin Verena Thomas, die,<br />
obwohl viele andere Dinge für sie zu tun sind, viele mathematische und logische Fehler<br />
in meinem Skriptum aufgedeckt und mit mir diskutiert hat – und Christiane Schultze,<br />
die das Skript sorgfältigst auf Rechtschreibfehler und Inkonsistenzen durchgesehen<br />
hat.<br />
David <strong>Kriesel</strong>
Inhaltsverzeichnis<br />
Vorwörtchen v<br />
I Von der Biologie zur Formalisierung – Motivation, Philosophie, Geschichte<br />
und Realisierung <strong>Neuronale</strong>r Modelle 1<br />
1 Einleitung, Motivation und Geschichte 3<br />
1.1 Warum <strong>Neuronale</strong> <strong>Netze</strong>? . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.1.1 Die 100-Schritt-Regel . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.1.2 Einfache Anwendungsbeispiele . . . . . . . . . . . . . . . . . . . 6<br />
1.2 Geschichte <strong>Neuronale</strong>r <strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
1.2.1 Anfänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
1.2.2 Blütezeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
1.2.3 Lange Stille und langsamer Wiederaufbau . . . . . . . . . . . . . 13<br />
1.2.4 Renaissance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2 Biologische <strong>Neuronale</strong> <strong>Netze</strong> 17<br />
2.1 Das Nervensystem von Wirbeltieren . . . . . . . . . . . . . . . . . . . . 17<br />
2.1.1 Peripheres und zentrales Nervensystem . . . . . . . . . . . . . . . 18<br />
2.1.2 Großhirn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2.1.3 Kleinhirn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.1.4 Zwischenhirn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.1.5 Hirnstamm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
2.2 Das Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.2.1 Bestandteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.2.2 Elektrochemische Vorgänge im Neuron . . . . . . . . . . . . . . . 24<br />
2.3 Rezeptorzellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
2.3.1 Arten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
2.3.2 Informationsverarbeitung im Nervensystem . . . . . . . . . . . . 31<br />
2.3.3 Lichtsinnesorgane . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
2.4 Neuronenmengen in Lebewesen . . . . . . . . . . . . . . . . . . . . . . . 35<br />
xiii
2.5 Technische Neuronen als Karikatur der Biologie . . . . . . . . . . . . . . 37<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
3 Bausteine künstlicher <strong>Neuronale</strong>r <strong>Netze</strong> (wichtige Grundlagen) 41<br />
3.1 Der Zeitbegriff bei <strong>Neuronale</strong>n <strong>Netze</strong>n . . . . . . . . . . . . . . . . . . . 41<br />
3.2 Bestandteile <strong>Neuronale</strong>r <strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . . . . 42<br />
3.2.1 Verbindungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
3.2.2 Propagierungsfunktion und <strong>Netze</strong>ingabe . . . . . . . . . . . . . . 44<br />
3.2.3 Aktivierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
3.2.4 Schwellenwert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
3.2.5 Aktivierungsfunktion . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
3.2.6 Gängige Aktivierungsfunktionen . . . . . . . . . . . . . . . . . . 46<br />
3.2.7 Ausgabefunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
3.2.8 Lernverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
3.3 Verschiedene Netztopologien . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
3.3.1 FeedForward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
3.3.2 Rückgekoppelte <strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
3.3.3 Vollständig verbundene <strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . 56<br />
3.4 Das Biasneuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
3.5 Darstellung von Neuronen . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />
3.6 Aktivierungsreihenfolgen . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
3.6.1 Synchrone Aktivierung . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
3.6.2 Asynchrone Aktivierung . . . . . . . . . . . . . . . . . . . . . . . 60<br />
3.7 Ein- und Ausgabe von Daten . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
4 Grundlagen zu Lernprozess und Trainingsbeispielen (wichtige Grundlagen) 65<br />
4.1 Paradigmen des Lernens . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />
4.1.1 Unüberwachtes Lernen . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
4.1.2 Bestärkendes Lernen . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
4.1.3 Überwachtes lernen . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
4.1.4 Offline oder Online lernen? . . . . . . . . . . . . . . . . . . . . . 68<br />
4.1.5 Fragen im Vorhinein . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
4.2 Trainingsmuster und Teaching Input . . . . . . . . . . . . . . . . . . . . 70<br />
4.3 Umgang mit Trainingsbeispielen . . . . . . . . . . . . . . . . . . . . . . 71<br />
4.3.1 Aufteilung der Trainingsmenge . . . . . . . . . . . . . . . . . . . 73<br />
4.3.2 Reihenfolgen der Musterpräsentation . . . . . . . . . . . . . . . . 74<br />
4.4 Lernkurve und Fehlermessung . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
4.4.1 Wann hört man auf zu lernen? . . . . . . . . . . . . . . . . . . . 77
4.5 Gradientenbasierte Optimierungsverfahren . . . . . . . . . . . . . . . . . 78<br />
4.5.1 Probleme von Gradientenverfahren . . . . . . . . . . . . . . . . . 80<br />
4.6 Beispielproblemstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
4.6.1 Boolesche Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
4.6.2 Die Paritätsfunktion . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
4.6.3 Das 2-Spiralen-Problem . . . . . . . . . . . . . . . . . . . . . . . 82<br />
4.6.4 Das Schachbrettproblem . . . . . . . . . . . . . . . . . . . . . . . 83<br />
4.6.5 Die Identitätsfunktion . . . . . . . . . . . . . . . . . . . . . . . . 83<br />
4.6.6 Weitere Beispielproblemstellungen . . . . . . . . . . . . . . . . . 84<br />
4.7 Hebbsche Lernregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />
4.7.1 Urform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />
4.7.2 Verallgemeinerte Form . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
II Überwacht lernende Netzparadigmen 87<br />
5 Das Perceptron, Backpropagation und seine Varianten 89<br />
5.1 Das Singlelayerperceptron . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />
5.1.1 Perceptron-Lernalgorithmus und Konvergenz-Theorem . . . . . . 95<br />
5.1.2 Delta-Regel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />
5.2 Lineare Separierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />
5.3 Das Multilayerperceptron . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />
5.4 Backpropagation of Error . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />
5.4.1 Herleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />
5.4.2 Reduktion von Backpropagation auf Delta-Regel . . . . . . . . . 115<br />
5.4.3 Wahl der Lernrate . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />
5.5 Resilient Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . 117<br />
5.5.1 Änderung der Gewichte . . . . . . . . . . . . . . . . . . . . . . . 118<br />
5.5.2 Dynamische Lernraten-Anpassung . . . . . . . . . . . . . . . . . 119<br />
5.5.3 Rprop in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . 120<br />
5.6 Mehr Variationen und Erweiterungen zu Backpropagation . . . . . . . . 121<br />
5.6.1 Momentum-Term . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />
5.6.2 Flat Spot Elimination . . . . . . . . . . . . . . . . . . . . . . . . 122<br />
5.6.3 Second Order Backpropagation . . . . . . . . . . . . . . . . . . . 123<br />
5.6.4 Weight Decay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />
5.6.5 Pruning und Optimal Brain Damage . . . . . . . . . . . . . . . . 124<br />
5.7 Initialkonfiguration eines Multilayerperceptrons . . . . . . . . . . . . . . 125<br />
5.7.1 Anzahl der Schichten . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />
5.7.2 Anzahl der Neurone . . . . . . . . . . . . . . . . . . . . . . . . . 126
5.7.3 Wahl der Aktivierungsfunktion . . . . . . . . . . . . . . . . . . . 127<br />
5.7.4 Initialisierung der Gewichte . . . . . . . . . . . . . . . . . . . . . 128<br />
5.8 Das 8-3-8-Kodierungsproblem und verwandte Probleme . . . . . . . . . 128<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />
6 Radiale Basisfunktionen 133<br />
6.1 Bestandteile und Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />
6.2 Informationsverarbeitung eines RBF-<strong>Netze</strong>s . . . . . . . . . . . . . . . . 135<br />
6.2.1 Informationsverarbeitung in den RBF-Neuronen . . . . . . . . . 137<br />
6.2.2 Analytische Gedanken im Vorfeld zum Training . . . . . . . . . . 140<br />
6.3 Training von RBF-<strong>Netze</strong>n . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />
6.3.1 Zentren und Breiten von RBF-Neuronen . . . . . . . . . . . . . . 145<br />
6.4 Wachsende RBF-<strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />
6.4.1 Hinzufügen von Neuronen . . . . . . . . . . . . . . . . . . . . . . 149<br />
6.4.2 Begrenzung der Neuronenanzahl . . . . . . . . . . . . . . . . . . 150<br />
6.4.3 Entfernen von Neuronen . . . . . . . . . . . . . . . . . . . . . . . 150<br />
6.5 Gegenüberstellung von RBF-<strong>Netze</strong>n und Multilayerperceptrons . . . . . 150<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />
7 Rückgekoppelte <strong>Netze</strong> (baut auf Kap. 5 auf) 153<br />
7.1 Jordannetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />
7.2 Elmannetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />
7.3 Training rückgekoppelter <strong>Netze</strong> . . . . . . . . . . . . . . . . . . . . . . . 157<br />
7.3.1 Unfolding in Time . . . . . . . . . . . . . . . . . . . . . . . . . . 157<br />
7.3.2 Teacher Forcing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />
7.3.3 Rekurrentes Backpropagation . . . . . . . . . . . . . . . . . . . . 160<br />
7.3.4 Training mit Evolution . . . . . . . . . . . . . . . . . . . . . . . . 160<br />
8 Hopfieldnetze 161<br />
8.1 Inspiration durch Magnetismus . . . . . . . . . . . . . . . . . . . . . . . 161<br />
8.2 Aufbau und Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />
8.2.1 Eingabe und Ausgabe eines Hopfieldnetzes . . . . . . . . . . . . 163<br />
8.2.2 Bedeutung der Gewichte . . . . . . . . . . . . . . . . . . . . . . . 163<br />
8.2.3 Zustandswechsel der Neurone . . . . . . . . . . . . . . . . . . . . 164<br />
8.3 Erzeugen der Gewichtsmatrix . . . . . . . . . . . . . . . . . . . . . . . . 165<br />
8.4 Autoassoziation und traditionelle Anwendung . . . . . . . . . . . . . . . 167<br />
8.5 Heteroassoziation und Analogien zur neuronalen Datenspeicherung . . . 167<br />
8.5.1 Erzeugung der Heteroassoziationsmatrix . . . . . . . . . . . . . . 169<br />
8.5.2 Stabilisierung der Heteroassoziationen . . . . . . . . . . . . . . . 170<br />
8.5.3 Biologische Motivation der Heteroassoziation . . . . . . . . . . . 171
8.6 Kontinuierliche Hopfieldnetze . . . . . . . . . . . . . . . . . . . . . . . . 171<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
9 Learning Vector Quantization 173<br />
9.1 Über Quantisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173<br />
9.2 Zielsetzung von LVQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174<br />
9.3 Benutzung von Codebookvektoren . . . . . . . . . . . . . . . . . . . . . 175<br />
9.4 Ausrichtung der Codebookvektoren . . . . . . . . . . . . . . . . . . . . . 176<br />
9.4.1 Vorgehensweise beim Lernen . . . . . . . . . . . . . . . . . . . . 176<br />
9.5 Verbindung zu <strong>Neuronale</strong>n <strong>Netze</strong>n . . . . . . . . . . . . . . . . . . . . . 178<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178<br />
III Unüberwacht lernende Netzparadigmen 179<br />
10 Self Organizing Feature Maps 181<br />
10.1 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182<br />
10.2 Funktionsweise und Ausgabeinterpretation . . . . . . . . . . . . . . . . . 183<br />
10.3 Training . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />
10.3.1 Die Topologiefunktion . . . . . . . . . . . . . . . . . . . . . . . . 185<br />
10.3.2 Monoton sinkende Lernrate und Nachbarschaft . . . . . . . . . . 187<br />
10.4 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189<br />
10.4.1 Topologische Defekte . . . . . . . . . . . . . . . . . . . . . . . . . 192<br />
10.5 Auflösungsdosierung und ortsabhängige Lernrate . . . . . . . . . . . . . 192<br />
10.6 Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />
10.6.1 Zusammenspiel mit RBF-<strong>Netze</strong>n . . . . . . . . . . . . . . . . . . 197<br />
10.7 Variationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />
10.7.1 <strong>Neuronale</strong>s Gas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />
10.7.2 Multi-SOMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200<br />
10.7.3 Multi-<strong>Neuronale</strong>s Gas . . . . . . . . . . . . . . . . . . . . . . . . 200<br />
10.7.4 Wachsendes <strong>Neuronale</strong>s Gas . . . . . . . . . . . . . . . . . . . . . 201<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202<br />
11 Adaptive Resonance Theory 203<br />
11.1 Aufgabe und Struktur eines ART-<strong>Netze</strong>s . . . . . . . . . . . . . . . . . . 203<br />
11.1.1 Resonanz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
11.2 Lernvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />
11.2.1 Mustereingabe und Top-Down-Lernen . . . . . . . . . . . . . . . 205<br />
11.2.2 Resonanz und Bottom-Up-Lernen . . . . . . . . . . . . . . . . . . 205<br />
11.2.3 Hinzufügen eines Ausgabeneurons . . . . . . . . . . . . . . . . . 205
11.3 Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />
IV Exkurse, Anhänge und Register 209<br />
A Exkurs: Clusteranalyse und Regional and Online Learnable Fields 211<br />
A.1 k-Means Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212<br />
A.2 k-Nearest Neighbouring . . . . . . . . . . . . . . . . . . . . . . . . . . . 213<br />
A.3 ε-Nearest Neighbouring . . . . . . . . . . . . . . . . . . . . . . . . . . . 213<br />
A.4 Der Silhouettenkoeffizient . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />
A.5 Regional and Online Learnable Fields . . . . . . . . . . . . . . . . . . . 216<br />
A.5.1 Aufbau eines ROLFs . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />
A.5.2 Training eines ROLFs . . . . . . . . . . . . . . . . . . . . . . . . 218<br />
A.5.3 Auswertung eines ROLFs . . . . . . . . . . . . . . . . . . . . . . 221<br />
A.5.4 Vergleich mit populären Clusteringverfahren . . . . . . . . . . . . 221<br />
A.5.5 Initialisierung von Radien, Lernraten und Multiplikator . . . . . 223<br />
A.5.6 Anwendungsbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . 223<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224<br />
B Exkurs: <strong>Neuronale</strong> <strong>Netze</strong> zur Vorhersage 225<br />
B.1 Über Zeitreihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225<br />
B.2 One Step Ahead Prediction . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />
B.3 Two Step Ahead Prediction . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />
B.3.1 Rekursive Two Step Ahead Prediction . . . . . . . . . . . . . . . 230<br />
B.3.2 Direkte Two Step Ahead Prediction . . . . . . . . . . . . . . . . 230<br />
B.4 Weitere Optimierungsansätze für die Prediction . . . . . . . . . . . . . . 231<br />
B.4.1 Veränderung zeitlicher Parameter . . . . . . . . . . . . . . . . . . 231<br />
B.4.2 Heterogene Prediction . . . . . . . . . . . . . . . . . . . . . . . . 232<br />
B.5 Bemerkungen zur Vorhersage von Aktienkursen . . . . . . . . . . . . . . 233<br />
C Exkurs: Reinforcement Learning 235<br />
C.1 Systemaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236<br />
C.1.1 Die Gridworld . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />
C.1.2 Agent und Umwelt . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
C.1.3 Zustände, Situationen und Aktionen . . . . . . . . . . . . . . . . 239<br />
C.1.4 Reward und Return . . . . . . . . . . . . . . . . . . . . . . . . . 241<br />
C.1.5 Die Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242<br />
C.2 Lernvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244<br />
C.2.1 Strategien zur Rewardvergabe . . . . . . . . . . . . . . . . . . . . 245<br />
C.2.2 Die State-Value-Funktion . . . . . . . . . . . . . . . . . . . . . . 246
C.2.3 Montecarlo-Methodik . . . . . . . . . . . . . . . . . . . . . . . . 249<br />
C.2.4 Temporal Difference Learning . . . . . . . . . . . . . . . . . . . . 251<br />
C.2.5 Die Action-Value-Funktion . . . . . . . . . . . . . . . . . . . . . 252<br />
C.2.6 Q-Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253<br />
C.3 Beispielanwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254<br />
C.3.1 TD-Gammon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254<br />
C.3.2 Das Auto in der Grube . . . . . . . . . . . . . . . . . . . . . . . 255<br />
C.3.3 Der Pole Balancer . . . . . . . . . . . . . . . . . . . . . . . . . . 255<br />
C.4 Reinforcement Learning im Zusammenhang mit <strong>Neuronale</strong>n <strong>Netze</strong>n . . . 256<br />
Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />
Literaturverzeichnis 259<br />
Abbildungsverzeichnis 265<br />
Index 269
Teil I<br />
Von der Biologie zur Formalisierung<br />
– Motivation, Philosophie,<br />
Geschichte und Realisierung<br />
<strong>Neuronale</strong>r Modelle<br />
1
Kapitel 1<br />
Einleitung, Motivation und Geschichte<br />
Wie kann man dem Computer etwas beibringen? Entweder, indem man ein<br />
starres Programm schreibt – oder, indem man ihm das Lernen ermöglicht.<br />
Lebende Wesen haben keinen Programmierer, der ihnen ein Programm für ihre<br />
Fähigkeiten schreibt, welches nur ausgeführt werden muss. Sie lernen – ohne<br />
Vorkenntnisse durch Eindrücke von außen – selber und kommen damit zu<br />
besseren Problemlösungen als jeder heutige Computer. Kann man solches<br />
Verhalten auch bei Maschinen wie Computern erreichen? Können wir solche<br />
Kognition von der Biologie adaptieren? Geschichte, Entwicklung, Niedergang<br />
und Wiederauferstehung eines großen Ansatzes, Probleme zu lösen.<br />
1.1 Warum <strong>Neuronale</strong> <strong>Netze</strong>?<br />
Es gibt Kategorien von Problemen, welche sich nicht in einen Algorithmus fassen lassen<br />
– Probleme, die von einer großen Menge subtiler Faktoren abhängen, wie zum<br />
Beispiel die Bestimmung des Kaufpreises einer Immobilie, den wir mit unserem Gehirn<br />
(ungefähr) bestimmen können, ein Computer in Ermangelung eines Algorithmus<br />
aber nicht. Darum muss man sich die Frage stellen: Wie lernen wir denn, auf solche<br />
Fragestellungen einzugehen?<br />
Genau – wir lernen; eine Fähigkeit, an der es Computern offensichtlich mangelt . Menschen<br />
haben ein Gehirn mit der Fähigkeit zu lernen, Computer einige Recheneinheiten<br />
und Speicher. Diese ermöglichen, in kürzester Zeit komplizierteste numerische Berechnungen<br />
auszuführen, bieten uns jedoch keine Lernfähigkeit. Stellen wir Computer und<br />
3
Gehirn Computer<br />
Anzahl Recheneinheiten ≈ 1011 ≈ 109 Art Recheneinheiten Neurone Transistoren<br />
Art der Berechnung massiv parallel i.d.R. seriell<br />
Datenspeicherung assoziativ adressbasiert<br />
Schaltzeit ≈ 10−3s ≈ 10−9s Theoretische Schaltvorgänge<br />
Tatsächliche Schaltvorgänge<br />
≈ 1013 1<br />
s<br />
≈ 1012 1<br />
s<br />
≈ 1018 1<br />
s<br />
≈ 10 10 1<br />
s<br />
Tabelle 1.1: Der (hinkende) Vergleich zwischen Gehirn und Rechner auf einen Blick. Vorlage:<br />
[Zel94]<br />
Gehirn gegenüber 1 , so bemerken wir, dass der Computer theoretisch leistungsfähiger<br />
sein müsste: Er besitzt 10 9 Transistoren mit einer Schaltzeit von 10 −9 Sekunden. Das<br />
Gehirn hat zwar 10 11 Neurone, jedoch schalten diese nur in etwa 10 −3 Sekunden.<br />
Allerdings arbeitet der größte Teil des Gehirns durchgehend, während wiederum der<br />
größte Teil des Computers nur passiv Daten speichert. So arbeitet das Gehirn parallel<br />
und damit nahe an seiner theoretischen Maximalleistung, der Computer ist von<br />
dieser jedoch um Zehnerpotenzen entfernt (Tabelle 1.1). Zudem ist ein Computer in<br />
sich statisch - das Gehirn als biologisches <strong>Neuronale</strong>s Netz kann sich jedoch während<br />
seiner „Laufzeit“ umstrukturieren und so lernen, Fehler kompensieren und mehr.<br />
Innerhalb dieser Arbeit möchte ich skizzieren, wie man sich solche Eigenschaften des<br />
Gehirns auch am Computer zunutze macht.<br />
Das Studium der Künstlichen <strong>Neuronale</strong>n <strong>Netze</strong> ist also motiviert durch die Ähnlichkeit<br />
zu erfolgreich arbeitenden biologischen Systemen, welche im Vergleich zum Gesamtsystem<br />
aus sehr einfachen , aber dafür vielen und massiv parallel arbeitenden Nervenzellen<br />
bestehen und (das ist wohl einer der bedeutendsten Aspekte) Lernfähigkeit besitzen.<br />
Ein <strong>Neuronale</strong>s Netz muss nicht explizit für seine Aufgaben programmiert werden, es<br />
kann beispielsweise aus Trainingsbeispielen lernen oder auch durch Bestärkung, sozusagen<br />
durch Zuckerbrot und Peitsche (Reinforcement Learning).<br />
Ein aus dem Lernvorgang resultierender Aspekt ist die Generalisierungs- bzw. Assoziationsfähigkeit<br />
<strong>Neuronale</strong>r <strong>Netze</strong>: Nach erfolgreichem Training kann ein Neu-<br />
1 Diese Gegenüberstellung ist natürlich aus vielen naheliegenden Gründen bei Biologen wie Informatikern<br />
umstritten, da Schaltzeit und Menge nichts über Qualität und Leistung der Recheneinheiten aussagt und<br />
Neurone und Transistoren auch nicht direkt vergleichbar sind. Dennoch erfüllt die Gegenüberstellung den<br />
Zweck, den Vorteil der Parallelität anhand der Verarbeitungszeit aufzuzeigen.
onales Netz ähnliche Probleme derselben Klasse, die nicht explizit trainiert wurden,<br />
plausiblen Lösungen zuführen. Daraus resultiert dann wieder eine große Fehlertoleranz<br />
gegenüber verrauschten Eingabedaten.<br />
Fehlertoleranz steht wieder in enger Beziehung zu biologischen <strong>Neuronale</strong>n <strong>Netze</strong>n, bei<br />
denen diese Eigenschaft sehr ausgeprägt ist: Wie schon bemerkt, hat ein Mensch ca.<br />
10 11 Neurone, die sich aber kontinuierlich umstrukturieren oder durch Einflüsse von außen<br />
umstrukturiert werden (bei einem Vollrausch verliert ein Mensch ca. 10 5 Neurone,<br />
auch bestimmte Arten Nahrungsmittel oder Umwelteinflüsse zerstören Gehirnzellen) –<br />
trotzdem wird unsere Kognitionsfähigkeit nicht wesentlich beeinträchtigt. Das Gehirn<br />
ist also tolerant gegenüber inneren Fehlern – und auch gegenüber Fehlern von außen,<br />
denn so manche „Sauklaue“ können wir immer noch lesen, obwohl einzelne Buchstaben<br />
vielleicht gar nicht wirklich auszumachen sind.<br />
Unsere moderne Technologie hingegen ist noch nicht automatisch fehlertolerant – mir<br />
ist noch kein Computer bekannt, in dem jemand vergessen hat, den Festplattencontroller<br />
einzubauen, weshalb die Grafikkarte automatisch dessen Job übernimmt, Leiterbahnen<br />
ausbaut und Kommunikation entwickelt, so dass der fehlende Baustein das<br />
Gesamtsystem nur wenig beeinträchtigt, aber auf keinen Fall völlig lahmlegt.<br />
Nachteil dieser verteilten, fehlertoleranten Speicherung ist natürlich, dass wir einem<br />
<strong>Neuronale</strong>n Netz nicht ohne weiteres ansehen können, was es weiß, kann oder wo seine<br />
Fehler liegen – Analysen dieser Art sind bei herkömmlichen Algorithmen in der Regel<br />
wesentlich leichter. Auch bekommen wir das Wissen in unser <strong>Neuronale</strong>s Netz meistens<br />
nur durch einen Lernvorgang, bei dem verschiedene Fehler passieren können und der<br />
nicht immer einfach zu handhaben ist.<br />
Fehlertoleranz von Daten ist bei der aktuellen Technologie schon wesentlich ausgereifter:<br />
Vergleichen wir eine Schallplatte mit einer CD. Ist auf der Schallplatte ein Kratzer,<br />
so ist die Toninformation an der Stelle des Kratzers für einen winzigen Moment komplett<br />
verloren (man hört ein Knacken), danach geht die Musik weiter. Bei einer CD<br />
sind die Audiodaten verteilt gespeichert: Ein Kratzer sorgt für einen unschärferen Ton<br />
in seiner näheren Umgebung, der Datenstrom an sich bleibt aber weitestgehend unbeeinträchtigt<br />
– mit der Folge, dass der Hörer ihn nicht bemerkt.<br />
Wir halten also die herausragenden Merkmale fest, die wir aus der Biologie zu adaptieren<br />
versuchen:<br />
⊲ Selbstorganisation bzw. Lernfähigkeit,<br />
⊲ Generalisierungsfähigkeit und<br />
⊲ Fehlertoleranz.
Welche Arten von <strong>Neuronale</strong>n <strong>Netze</strong>n welche Fähigkeiten besonders stark ausbilden,<br />
welche für was für Problemklassen nutzbar sind, werden wir im Verlauf dieser Arbeit<br />
noch herausfinden.<br />
Direkt im Einleitungskapitel dieser Arbeit sei gesagt: „Das <strong>Neuronale</strong> Netz“ gibt es<br />
so nicht. Es gibt viele verschiedene Paradigmen, was <strong>Neuronale</strong> <strong>Netze</strong> sind, wie sie<br />
trainiert und wo sie eingesetzt werden – und mein Ziel ist es, einige dieser Paradigmen<br />
anschaulich vorzustellen und mit Bemerkungen für die praktische Anwendung zu<br />
versehen.<br />
Oben haben wir bereits erwähnt, dass die Arbeit z.B. unseres Gehirns im Gegensatz zur<br />
Arbeit eines Computers massiv parallel stattfindet, also jeder Baustein zu jeder Zeit<br />
aktiv ist. Möchte man nun ein Argument für den Nutzen massiver Parallelverarbeitung<br />
anführen, so wird oft die 100-Schritt-Regel genannt.<br />
1.1.1 Die 100-Schritt-Regel<br />
Durch Experimente hat man festgestellt, dass ein Mensch ein Bild eines bekannten<br />
Gegenstandes bzw. einer bekannten Person in ≈ 0.1 Sekunden erkennen kann, also<br />
bei einer Neuronenschaltzeit von ≈ 10 −3 Sekunden in ≈ 100 diskreten Zeitschritten<br />
paralleler Verarbeitung.<br />
Ein der Von-Neumann-Architektur folgender Rechner hingegen kann in 100 Zeitschritten<br />
sequentieller Verarbeitung, also beispielsweise 100 Assemblerschritten oder Taktschritten,<br />
so gut wie nichts tun.<br />
Nun wollen wir ein einfaches Anwendungsbeispiel betrachten, bei dem ein <strong>Neuronale</strong>s<br />
Netz zum Einsatz kommen könnte.<br />
1.1.2 Einfache Anwendungsbeispiele<br />
Angenommen, wir besitzen einen kleinen Roboter wie in Abb. 1.1 auf der rechten Seite.<br />
Dieser Roboter besitzt acht Abstandssensoren, aus denen er Eingabedaten gewinnt:<br />
Drei Sensoren vorne rechts, weitere drei vorne links, und zwei hinten. Jeder dieser<br />
Sensoren liefert uns zu jeder Zeit einen reellen Zahlenwert, wir erhalten also immer<br />
einen Input I ∈ R 8 .<br />
In unserem einfachen Beispiel kann der Roboter trotz seiner zwei Motoren (die brauchen<br />
wir später) noch nicht viel: Er soll einfach immer fahren, aber anhalten, wenn<br />
er Gefahr läuft an ein Hindernis zu stoßen. Unser Output ist also binär: H = 0 für
Abbildung 1.1: Ein kleiner Roboter mit acht Sensoren und zwei Motoren. Der Pfeil zeigt die<br />
Fahrtrichtung an.<br />
„Alles okay, fahr weiter“ und H = 1 für „Halte an“ (Wir nennen den Output H für<br />
„Haltesignal“). Wir benötigen also eine Abbildung<br />
f : R 8 → B 1 ,<br />
welche die Inputsignale einer Robotertätigkeit zuführt.<br />
1.1.2.1 Der klassische Weg<br />
Es gibt nun zwei Wege, diese Abbildung zu realisieren. Zum einen gibt es den klassischen<br />
Weg: Wir setzen uns eine Weile hin und denken nach, so dass wir am Ende eine<br />
Schaltung oder ein kleines Computerprogramm erhalten, dass die Abbildung realisiert<br />
(bei der Einfachheit des Beispieles ist das natürlich ohne weiteres möglich). Anschließend<br />
nehmen wir die technischen Referenzen der Sensoren zur Hand, studieren die<br />
Kennlinie der Sensoren, um zu wissen, was für Werte bei welchen Hindernisentfernungen<br />
ausgegeben werden, und binden die Werte in unser oben gebautes Regelwerk ein.<br />
Solche Verfahren finden in der klassischen Künstlichen Intelligenz Anwendung, und<br />
falls man die Regeln für eine Abbildung exakt kennt, ist man auch gut beraten, diesem<br />
Schema zu folgen.
Abbildung 1.2: Der Roboter wird in eine Landschaft platziert, die ihm Sensorwerte für verschiedene<br />
Situationen liefert. Die gewünschten Ausgabewerte H geben wir selbst hinzu, und erhalten so unsere<br />
Lernbeispiele. Bei zwei Robotern sind exemplarisch die Richtungen aufgetragen, in die die Sensoren<br />
weisen.<br />
1.1.2.2 Der Weg des Lernens<br />
Für uns hier interessanter und für viele Abbildungen und Probleme, welche nicht auf<br />
Anhieb erfassbar sind, auch erfolgreicher ist aber der Weg des Lernens: Wir zeigen dem<br />
Roboter verschiedene Situationen (Abb. 1.2), in denen er sich beispielsweise befinden<br />
kann – und er soll selbst lernen, was in seinem Roboterleben zu tun ist.<br />
In diesem Beispiel soll er einfach lernen, wann anzuhalten ist. Wir stellen uns hierzu<br />
erst einmal das <strong>Neuronale</strong> Netz als eine Art Black Box (Abb. 1.3 auf der rechten Seite)<br />
vor, kennen also nicht seinen Aufbau, sondern betrachten es rein in seinem Verhalten<br />
nach außen.<br />
Die Situationen in Form von einfach gemessenen Sensorwerten (wir stellen den Roboter<br />
z.B. einfach vor ein Hindernis, siehe Abbildung), die wir dem Roboter zeigen<br />
und für die wir ihm vorgeben, ob weiterzufahren oder zu halten ist, nennen wir Trainingsbeispiele<br />
– ein Trainingsbeispiel besteht also aus einem beispielhaften Input und<br />
einem dazugehörigen gewünschten Output. Die Frage ist nun, wie wir dieses Wissen,<br />
die Information, in das <strong>Neuronale</strong> Netz transportieren.
Abbildung 1.3: Wir betrachten die Robotersteuerung zunächst als Black Box, deren Innenleben<br />
uns unbekannt ist. Die Black Box nimmt einfach acht reelle Sensorwerte entgegen und bildet diese<br />
auf einen binären Ausgabewert ab.<br />
Die Beispiele lassen sich durch ein einfaches Lernverfahren einem <strong>Neuronale</strong>n Netz<br />
beibringen (ein Lernverfahren ist ein einfacher Algorithmus bzw. eine mathematische<br />
Formel). Hier wird das <strong>Neuronale</strong> Netz, wenn wir alles richtig gemacht und gute Beispiele<br />
gewählt haben, aus den Beispielen generalisieren und so eine allgemeingültige<br />
Vorschrift finden, wann anzuhalten ist.<br />
Unser Beispiel ist beliebig erweiterbar – die Motoren unseres Roboters könnten auch<br />
zwecks Richtungssteuerung separat steuerbar sein 2 , bei ansonsten gleichem Sensorlayout.<br />
In diesem Fall suchen wir eine Abbildung<br />
f : R 8 → R 2 ,<br />
welche die beiden Motoren anhand der Sensorinputs stufenlos steuert und so den Roboter<br />
z.B. nicht nur anhalten, sondern auch Hindernissen ausweichen lassen kann – hier<br />
ist es schon schwieriger, aus dem Kopf Regeln abzuleiten, und de facto ein <strong>Neuronale</strong>s<br />
Netz angebrachter.<br />
Ziel ist es also nicht etwa, die Beispiele auswendig zu lernen – sondern das Prinzip<br />
dahinter zu realisieren: Der Roboter soll das <strong>Neuronale</strong> Netz im Idealfall in beliebigen<br />
Situationen anwenden und Hindernissen ausweichen können. Insbesondere soll der<br />
Roboter das Netz während des Fahrens kontinuierlich bzw. oft direkt hintereinander<br />
befragen können, um kontinuierlich Hindernissen auszuweichen. Dies ergibt einen ständigen<br />
Kreislauf: Der Roboter befragt das Netz. Er fährt dadurch in eine Richtung,<br />
wodurch sich seine Sensorwerte verändern. Er befragt wieder das Netz und verändert<br />
abermals seine Position, die Sensorwerte verändern sich erneut, und so weiter. Dass<br />
2 Es gibt einen Roboter namens Khepera, der in etwa diese Eigenschaften besitzt. Er ist rund, hat ca. 7cm<br />
Durchmesser, besitzt zwei Motoren mit Rädern und verschiedene Sensoren. Zur Veranschaulichung kann<br />
ich nur empfehlen, einmal im Internet danach zu recherchieren.
Abbildung 1.4: Einige Urgesteine des Fachbereichs der <strong>Neuronale</strong>n <strong>Netze</strong>. Von links nach rechts:<br />
John von Neumann, Donald O. Hebb, Marvin Minsky, Bernard Widrow, Seymour Papert, Teuvo<br />
Kohonen, John Hopfield, alle weitestgehend „in order of appearance“.<br />
sich dieses System auch auf dynamische, das heißt sich selbst verändernde Umwelten<br />
(z.B. bewegte Hindernisse in unserem Beispiel) adaptieren lässt, ist ersichtlich.<br />
1.2 Zur Geschichte <strong>Neuronale</strong>r <strong>Netze</strong><br />
Wie jedes Naturwissenschaftliche Gebiet hat auch die Lehre der <strong>Neuronale</strong>n <strong>Netze</strong> eine<br />
Entwicklungsgeschichte hinter sich, welche, wie wir gleich sehen werden, Höhen und<br />
Tiefen aufweist. Dem Stil meiner Arbeit treu bleibend stelle ich diese Geschichte nicht<br />
als Text, sondern kompakter als Zeitleiste dar. Zitat- und Literaturangaben werde<br />
ich hier im Wesentlichen bei Punkten niederschreiben, welche im weiteren Skriptum<br />
nicht mehr bearbeitet werden. Zu Stichworten, die wir später noch genauer ergründen,<br />
werden die Zitatangaben in den entsprechenden Kapiteln geliefert.<br />
Die Geschichte nimmt ihren Anfang in den frühen 1940er Jahren und damit fast zeitgleich<br />
mit der Geschichte der programmierbaren elektronischen Computer. Wie auch<br />
bei der Informatik an sich erkennt man die Jugend des Gebiets daran, dass viele der<br />
erwähnten Personen auch heute noch unter uns weilen.<br />
1.2.1 Anfänge<br />
Bereits 1943 beschreiben Warren McCulloch und Walter Pitts eine Art neurologischer<br />
Netzwerke, bauen Schwellwertschalter durch Neurone nach und zeigen,<br />
dass selbst einfache <strong>Netze</strong> dieser Art praktisch jede logische oder auch arithmetische<br />
Funktion berechnen können [MP43]. Weiter entstehen erste Computervorläufer<br />
(„Elektronengehirne“), u.a. unterstützt von Konrad Zuse, der es leid<br />
war, ballistische Bahnen per Hand zu berechnen.
1947 nennen Walter Pitts und Warren McCulloch ein praktisches Anwendungsgebiet<br />
(in ihrer Arbeit von 1943 wurde noch kein solches genannt), nämlich die<br />
Erkennung räumlicher Muster durch <strong>Neuronale</strong> <strong>Netze</strong> [PM47].<br />
1949: Donald O. Hebb formuliert die klassische Hebb’sche Lernregel [Heb49], welche<br />
in ihrer allgemeineren Form die Basis fast aller neuronalen Lernverfahren<br />
darstellt. Sie besagt, dass die Verbindung zwischen zwei Neuronen verstärkt wird,<br />
wenn beide Neurone gleichzeitig aktiv sind – die Verstärkung ist also proportional<br />
zum Produkt beider Aktivitäten. Hebb konnte diese Regel zwar postulieren,<br />
jedoch in Ermangelung neurologischer Forschung nicht verifizieren.<br />
1950 vertritt Neuropsychologe Karl Lashley die These, dass die Informationsspeicherung<br />
im Gehirn verteilt realisiert wird. Begründet wird seine These an Versuchen<br />
mit Ratten, bei denen nur der Umfang und nicht der Ort zerstörten<br />
Nervengewebes ihre Leistung beeinflusst, aus einem Labyrinth zu finden.<br />
1.2.2 Blütezeit<br />
1951 entwickelt Marvin Minsky für seine Dissertation den Neurocomputer Snark,<br />
der seine Gewichte 3 bereits automatisch justieren kann, aber nie praktisch eingesetzt<br />
wird – da er zwar fleißig rechnet, jedoch niemand so genau weiss, was.<br />
1956 treffen sich auf dem Dartmouth Summer Research Project renommierte<br />
Wissenschaftler und aufstrebende Studierende und diskutieren, salopp gesagt,<br />
wie man ein Gehirn nachbilden kann – Unterschiede zwischen Top-Down- und<br />
Bottom-Up-Forschung bilden sich heraus. Während die frühen Anhänger der Artificial<br />
Intelligence Fähigkeiten durch Software nachbilden möchten, haben die<br />
Anhänger der <strong>Neuronale</strong>n <strong>Netze</strong> im Sinn, Systemverhalten durch Nachbildung<br />
kleinster Systemteile, der Neurone, zu erreichen.<br />
1957 - 1958 entwickeln Frank Rosenblatt, Charles Wightman und ihre Mitarbeiter<br />
am MIT den ersten erfolgreichen Neurocomputer, das Mark I Perceptron<br />
, welches mit einem 20 × 20 Pixel großen Bildsensor einfache Ziffern<br />
erkennen kann und 512 motorbetriebene Potentiometer besitzt - pro variablem<br />
Gewicht eins.<br />
1959 beschreibt Frank Rosenblatt verschiedene Varianten des Perceptrons, formuliert<br />
und beweist sein Perceptron-Konvergenz-Theorem. Er beschreibt an der Retina<br />
orientierte Neuronenschichten, Schwellwertschalter und eine Lernregel, welche<br />
die Verbindungsgewichte justiert.<br />
3 Wir werden bald erfahren, was Gewichte sind.
1960 stellen Bernard Widrow und Marcian E. Hoff das ADALINE (ADAptive<br />
LInear NEuron) vor [WH60], ein schnell und genau lernendes adaptives<br />
System, das wohl das erste verbreitet kommerziell eingesetzte <strong>Neuronale</strong> Netz<br />
darstellte: Es war praktisch in jedem Analogtelefon zur Echtzeit-Echofilterung zu<br />
finden und lernte mit der Widrow-Hoff-Lernregel bzw. Deltaregel. Hoff, ein Mitbegründer<br />
von Intel, war zu diesem Zeitpunkt Doktorand von Widrow, der seinerseits<br />
einer der Erfinder der modernen Mikroprozessoren war. Einer der Fortschritte<br />
der Delta-Regel gegenüber dem ursprünglichen Perceptron-Lernalgorithmus<br />
war ihre Adaptivität: War man weit von der richtigen Lösung entfernt, so veränderten<br />
sich auch die Verbindungsgewichte in größeren Schritten, die in der Nähe<br />
des Ziels kleiner werden – Nachteil: bei falscher Anwendung erhält man unendlich<br />
kleine Schrittweiten zum Ziel in der Nähe desselben. Während der späteren<br />
Flaute und aus Angst vor der wissenschaftlichen Unbeliebtheit der <strong>Neuronale</strong>n<br />
<strong>Netze</strong> wurde das ADALINE zwischenzeitlich in Adaptive Linear Element umbenannt<br />
– was später wieder rückgängig gemacht wurde.<br />
1961 stellt Karl Steinbuch Techniken assoziativer Speicherung vor, die als Vorgänger<br />
heutiger neuronaler Assoziativspeicher gesehen werden [Ste61]. Er beschreibt<br />
weiterhin Konzepte für neuronale Techniken und analysiert ihre Möglichkeiten<br />
und Grenzen.<br />
1965 gibt Nils Nilsson in seinem Buch Learning Machines einen Überblick über<br />
die Fortschritte und Arbeiten dieser Periode der Erforschung <strong>Neuronale</strong>r <strong>Netze</strong>.<br />
Allgemein nimmt man an, die grundlegenden Prinzipien selbstlernender und damit<br />
landläufig gesprochen „intelligenter“ Systeme bereits entdeckt zu haben, was<br />
aus heutiger Sicht eine maßlose Überschätzung darstellt, aber damals für hohe<br />
Popularität und genügend Forschungsmittel sorgte.<br />
1969 veröffentlichen Marvin Minsky und Seymour Papert eine genaue mathematische<br />
Analyse des Perceptrons [MP69] um zu zeigen, dass das Perceptronmodell<br />
viele wichtige Probleme gar nicht repräsentieren kann (Stichwörter: XOR-<br />
Problem und lineare Separierbarkeit), und setzen so der Überschätzung, der Popularität<br />
und den Forschungsmitteln ein jähes Ende. Die weitergehende Folgerung,<br />
dass auch mächtigere Modelle die exakt gleichen Probleme aufweisen, verbunden<br />
mit der Prognose, dass das ganze Gebiet ein research dead-end sei, bewirken<br />
einen fast kompletten Rückgang der Forschungsgelder für die nächsten 15 Jahre,<br />
so unzutreffend diese Prognosen aus heutiger Sicht auch waren.
1.2.3 Lange Stille und langsamer Wiederaufbau<br />
Wie oben bereits gesagt – Forschungsgelder wurden extrem knapp. So wurde zwar<br />
überall ein wenig weiter geforscht, es gab aber keine Kongresse und sonstigen Veranstaltungen<br />
und demzufolge auch wenig Veröffentlichungen. Diese Isolation der einzelnen<br />
Forschenden sorgte für die vielen Paradigmen <strong>Neuronale</strong>r <strong>Netze</strong>, welche voneinander<br />
isoliert entstanden sind: Man forschte, redete aber nicht miteinander.<br />
Trotz der geringen Anerkennung des Gebiets wurden in dieser Zeit die theoretischen<br />
Grundlagen für die noch andauernde Renaissance gelegt:<br />
1972 stellt Teuvo Kohonen ein Modell des linearen Assoziators, eines Assoziativspeichermodells<br />
vor [Koh72], es wird im gleichen Jahr davon unabhängig von<br />
James A. Anderson aus neurophysiologischer Sicht präsentiert [And72].<br />
1973 verwendet Christoph von der Malsburg ein Neuronenmodell, was nichtlinear<br />
und biologisch besser motiviert ist [vdM73].<br />
1974 entwickelt Paul Werbos für seine Dissertation in Harvard das Backpropagation<br />
of Error-Lernverfahren [Wer74], das aber erst ein Jahrzehnt später seine heutige<br />
Bedeutung erlangt.<br />
1976 – 1980 und danach werden von Stephen Grossberg viele Arbeiten<br />
(z.B. [Gro76]) vorgestellt, in denen eine Vielzahl von neuronalen Modellen<br />
mathematisch genau analysiert wird. Er widmet sich weiterhin ausführlich<br />
dem Problem, ein <strong>Neuronale</strong>s Netz lernfähig zu halten, ohne bereits erlernte<br />
Assoziationen wieder zu zerstören – hieraus entstanden unter Mitarbeit von<br />
Gail Carpenter die Modelle der Adaptive Resonance Theory, kurz ART.<br />
1982 beschreibt Teuvo Kohonen die nach ihm benannten selbstorganisierenden<br />
Karten (self organizing feature maps, SOM) [Koh82,Koh98] auf der Suche nach<br />
den Mechanismen der Selbstorganisation des Gehirns (er wusste, dass die Informationen<br />
über den Aufbau von Wesen im Genom gespeichert sind, das aber<br />
ganz wesentlich zu wenig Speicherplatz für eine Struktur wie das Gehirn besitzt<br />
– folglich muss sich das Gehirn zum Großteil selbst organisieren und aufbauen).<br />
Weiterhin beschreibt John Hopfield die nach ihm benannten Hopfieldnetze<br />
[Hop82], welche durch die Gesetze des Magnetismus in der Physik inspiriert sind.<br />
Sie erfuhren wenig technische Anwendungen, aber das Gebiet der <strong>Neuronale</strong>n<br />
<strong>Netze</strong> kam langsam wieder ins Rollen.
1983 wird von Fukushima, Miyake und Ito das neuronale Modell Neocognitron<br />
zur Erkennung handgeschriebener Zeichen vorgestellt [FMI83], welches eine Erweiterung<br />
des schon 1975 entwickelten Cognitrons darstellt.<br />
1.2.4 Renaissance<br />
Durch den Einfluss u.a. John Hopfields, der viele Forscher persönlich von der Wichtigkeit<br />
des Gebiets überzeugte, und die weite Publikation von Backpropagation durch<br />
Rumelhart, Hinton und Williams machte sich im Gebiet der <strong>Neuronale</strong>n <strong>Netze</strong><br />
langsam wieder Aufschwungsstimmung breit.<br />
1985 veröffentlicht John Hopfield einen Artikel, der Wege beschreibt, akzeptable<br />
Lösungen für das Travelling Salesman Problem durch Hopfieldnetze zu finden.<br />
1986 wird das Lernverfahren Backpropagation of Error als Verallgemeinerung der<br />
Delta-Regel durch die Parallel Distributed Processing-Gruppe separat entwickelt<br />
und weit publiziert [RHW86a]: Nicht linear separierbare Probleme wurden durch<br />
mehrschichtige Perceptrons lösbar, Marvin Minskys Negativabschätzungen waren<br />
mit einem Schlag widerlegt. Weiterhin machte sich zeitgleich in der Artificial<br />
Intelligence eine gewisse Ermüdung breit, verursacht durch eine Reihe von Fehlschlägen<br />
und untertroffenen Hoffnungen.<br />
Ab dieser Zeit findet eine geradezu explosive Entwicklung des Forschungsgebietes<br />
statt, die zwar nicht mehr stichpunktfähig ist, aber von der wir einige Resultate<br />
noch wiedersehen werden.<br />
Übungsaufgaben<br />
Aufgabe 1. Suchen Sie für jeden der folgenden Punkte mindestens ein Beispiel:<br />
⊲ Ein Buch über <strong>Neuronale</strong> <strong>Netze</strong> oder Neuroinformatik,<br />
⊲ eine Arbeitsgruppe an einer Universität, die mit <strong>Neuronale</strong>n <strong>Netze</strong>n arbeitet,<br />
⊲ ein Software-Tool, welches <strong>Neuronale</strong> <strong>Netze</strong> realisiert („Simulator“),<br />
⊲ eine Firma, die <strong>Neuronale</strong> <strong>Netze</strong> einsetzt, und<br />
⊲ ein Produkt oder eine Dienstleistung, die mit <strong>Neuronale</strong>n <strong>Netze</strong>n realisiert wurde.
Aufgabe 2. Nennen Sie mindestens vier Anwendungen von technischen <strong>Neuronale</strong>n<br />
<strong>Netze</strong>n, jeweils zwei aus den Bereichen Mustererkennung und Funktionsapproximation.<br />
Aufgabe 3. Charakterisieren Sie kurz die vier Phasen der Entwicklung <strong>Neuronale</strong>r<br />
<strong>Netze</strong> und geben Sie aussagekräftige Beispiele für jede Phase an.
Kapitel 2<br />
Biologische <strong>Neuronale</strong> <strong>Netze</strong><br />
Wie lösen biologische Systeme Probleme? Wie funktioniert ein System von<br />
Neuronen? Wie kann man dessen Funktionalität erfassen? Wozu sind<br />
verschieden große Mengen von Neuronen imstande? Wo im Nervensystem<br />
findet Informationsverarbeitung statt? Ein kleiner biologischer Überblick über<br />
die große Komplexität einfacher Bausteine <strong>Neuronale</strong>r<br />
Informationsverarbeitung. Zusätzlich die Überleitung zu deren Vereinfachung,<br />
um sie technisch adaptieren zu können.<br />
Bevor wir anfangen, <strong>Neuronale</strong> <strong>Netze</strong> auf technischer Seite zu beschreiben, ist ein kleiner<br />
Exkurs in die Biologie der <strong>Neuronale</strong>n <strong>Netze</strong> und der Kognition von Lebewesen<br />
sinnvoll – der Leser kann das folgende Kapitel gerne überspringen, ohne etwas Technisches<br />
zu verpassen. Ich möchte es aber jedem empfehlen, der ein wenig über die<br />
zugrundeliegende Neurophysiologie wissen und sehen möchte, was für eine Karikatur<br />
der Natur unsere kleinen Ansätze, die Technischen <strong>Neuronale</strong>n <strong>Netze</strong> sind – und wie<br />
mächtig die natürlichen Pendants sein müssen, wenn wir mit unseren kleinen Ansätzen<br />
schon so weit kommen. Wir wollen nun kurz das Nervensystem von Wirbeltieren<br />
betrachten: Wir werden mit sehr grober Granularität beginnen und uns bis ins Gehirn<br />
und dann auf die Ebene der Neurone vorarbeiten. Über das ganze Kapitel hinweg<br />
haben mir die beiden Bücher [CR00, KSJ00] sehr geholfen, die ich als weiterführende<br />
Literatur angeben möchte.<br />
2.1 Das Nervensystem von Wirbeltieren<br />
Das komplette informationsverarbeitende System, das Nervensystem eines Wirbeltiers,<br />
besteht, um erst einmal eine einfache Unterteilung vorzunehmen, aus dem Zentralnervensystem<br />
und dem peripheren Nervensystem. In der Realität ist eine ganz so<br />
17
starre Unterteilung nicht sinnvoll, aber hier hilft sie uns bei der Skizzierung der Informationsverarbeitung<br />
im Körper.<br />
2.1.1 Peripheres und zentrales Nervensystem<br />
Das periphere Nervensystem (PNS) besteht aus den Nerven, die außerhalb des<br />
Gehirns bzw. Rückenmarks gelegen sind. Diese Nerven bilden ein verzweigtes und sehr<br />
dichtes Netz durch den ganzen Körper. Zum peripheren Nervensystem gehören beispielsweise<br />
die Spinalnerven, welche vom Rückenmark ausgehen (in Höhe eines jeden<br />
Wirbels zwei) und Extremitäten, Hals und Rumpf versorgen, aber auch die direkt zum<br />
Gehirn führenden Hirnnerven.<br />
Das zentrale Nervensystem (ZNS) hingegen stellt quasi den „Zentralcomputer“<br />
im Wirbeltier dar. Hier werden Informationen gespeichert und verwaltet, die durch<br />
Sinnesorgane von außen aufgenommen werden. Weiter steuert und reguliert es die<br />
inneren Vorgänge, und koordiniert nicht zuletzt sämtliche motorischen Leistungen des<br />
Organismus. Das zentrale Nervensystem der Wirbeltiere setzt sich zusammen aus dem<br />
eigentlichen Gehirn und dem Rückenmark (Abb. 2.1 auf der rechten Seite). Wir<br />
wollen aber besonderes Augenmerk auf das Gehirn legen. Das Gehirn unterteilt man<br />
vereinfachend in vier Bereiche (Abb. 2.2 auf Seite 20), die hier kurz genannt werden<br />
sollen.<br />
2.1.2 Das Großhirn ist für abstrakte Denkaufgaben zuständig<br />
Das Großhirn (Telencephalon) ist der Bereich des Gehirns, der sich im Laufe der<br />
Evolution mit am meisten verändert hat. Er ist entlang einer Achse, welche den Kopf<br />
von Gesichtsseite bis Hinterkopf zentral durchläuft, in zwei Hemisphären geteilt, welche<br />
eine in sich gefaltete Struktur aufweisen. Diese Teile sind über einen großen Nervenstrang<br />
(„Balken“)und mehrere kleine miteinander verbunden. Eine Vielzahl von<br />
Neuronen liegt in der ca. 2-4 cm dicken Großhirnrinde (Cortex), die in verschiedene<br />
Rindenfelder einzuteilen ist, von denen jedes eine eigene Aufgabe hat. Primäre<br />
Rindenfelder sind hier für die Verarbeitung qualitativer Information zuständig, wie<br />
beispielsweise das Verwalten von verschiedenen Wahrnehmungen (z.B. die Verwaltung<br />
des Sehsinnes ist Aufgabe des visuellen Cortexes). Assoziationsfelder hingegen<br />
absolvieren höhere, abstraktere Assoziations- und Denkvorgänge; in Ihnen ist auch<br />
unser Gedächtnis untergebracht.
Abbildung 2.1: Skizze des zentralen Nervensystems mit Rückenmark und Gehirn.
Abbildung 2.2: Skizze des Gehirns. Eingefärbte Bereiche des Gehirns werden im Text behandelt.<br />
Je weiter wir von der abstrakten Informationsverarbeitung in Richtung der direkten reflexhaften<br />
gehen, desto dunkler sind die Gehirnbereiche eingefärbt.<br />
2.1.3 Das Kleinhirn steuert und koordiniert die Motorik<br />
Das Kleinhirn (Cerebellum) ist unterhalb des Großhirns gelegen, also näher am<br />
Rückenmark. Entsprechend dient es weniger abstrakten Funktionen mit höherer Priorität:<br />
Hier werden große Teile der motorischen Koordination absolviert, also Gleichgewicht<br />
und Bewegungen gesteuert und laufend fehlerkorrigiert. Zu diesem Zweck besitzt<br />
das Kleinhirn direkte sensorische Informationen über die Muskellängen sowie akustische<br />
und visuelle Informationen. Weiter erhält es auch Meldungen über abstraktere<br />
motorische Signale, die vom Großhirn ausgehen.<br />
Beim Menschen ist das Kleinhirn deutlich kleiner als das Großhirn, dies ist aber eher<br />
eine Ausnahme: Bei vielen Wirbeltieren ist dieses Verhältnis nicht so stark ausgeprägt.<br />
Betrachtet man die Evolution der Wirbeltiere, so ist nicht das Kleinhirn „zu klein“<br />
sondern das Großhirn „zu groß“ geraten (immerhin ist es die am höchsten entwickelte<br />
Struktur des Wirbeltiergehirns). Die beiden restlichen Gehirnteile seien ebenfalls noch<br />
kurz betrachtet: Das Zwischenhirn und der Hirnstamm.<br />
2.1.4 Das Zwischenhirn steuert grundlegende Körpervorgänge<br />
Das Zwischenhirn (Diencephalon) umfasst wieder einige Teile, von denen nur der<br />
Thalamus einer kurzen Betrachtung unterzogen werden soll: Dieser Teil des Zwi-
schenhirns ist das Medium zwischen sensorischen und motorischen Signalen und Großhirn:<br />
Insbesondere wird im Thalamus entschieden, welcher Teil der Information an das<br />
Großhirn weitergeleitet wird, so dass gerade weniger wichtige Sinneswahrnehmungen<br />
kurzfristig ausgeblendet werden können, um Überlastungen zu vermeiden. Als weiterer<br />
Teil des Zwischenhirns steuert der Hypothalamus eine Vielzahl körperinterner Vorgänge.<br />
Das Zwischenhirn ist auch maßgeblich beteiligt am Schlaf-Wach-Rhythmus des<br />
Menschen („innere Uhr“) und der Schmerzempfindung.<br />
2.1.5 Der Hirnstamm verbindet Hirn und Rückenmark und steuert Reflexe<br />
Verglichen mit dem Zwischenhirn ist der Hirnstamm bzw. das Stammhirn (Truncus<br />
cerebri) stammesgeschichtlich deutlich älter: Es markiert, grob gesprochen, das „verlängerte<br />
Rückenmark“ und damit die Überleitung vom Gehirn zum Rückenmark. Auch<br />
der Hirnstamm kann wieder in verschiedene Teile unterteilt werden, von denen einige<br />
exemplarisch vorgestellt werden sollen. Die Funktionen gehen weiter vom Abstrakten<br />
in Richtung des Grundlegenden. Ein wichtiger Bestandteil ist die Pons (=Brücke),<br />
eine Art Durchgangsstation für sehr viele Nervensignale vom Gehirn an den Körper<br />
und umgekehrt.<br />
Wird die Pons geschädigt (beispielsweise durch einen Hirninfarkt), so kann es zum<br />
Locked-In-Syndrom kommen – dem Eingeschlossensein in den eigenen Körper, ein<br />
Zustand, in dem es für einen Menschen bei voller geistiger Leistungsfähigkeit völlig<br />
unmöglich ist, sich auf irgendeine Weise der Außenwelt zu vermitteln. Man kann nicht<br />
sprechen, sich nicht bewegen, während Seh-, Hör-, Geruchs- und Geschmackssinn in aller<br />
Regel völlig normal funktionieren. Als letzte Kommunikationsmöglichkeit verbleibt<br />
Locked-In-Patienten meist nur die Augenbewegung oder Zwinkern.<br />
Weiter ist der Hirnstamm für viele grundlegende Reflexe zuständig, wie z. B. den<br />
reflexartigen Augenlidschluss oder Husten.<br />
Alle Teile des Nervensystems haben eine Sache gemeinsam: Es werden Informationen<br />
verarbeitet. Dies geschieht durch riesige Ansammlungen von Milliarden sehr ähnlicher<br />
Zellen, die an sich sehr einfach gebaut sind, aber fortlaufend miteinander kommunizieren.<br />
Große Gruppen dieser Zellen senden dann koordiniert Signale und erreichen so<br />
die gewaltige Informationsverarbeitungskapazität, die wir von unserem Gehirn kennen.<br />
Wir wechseln nun von der Ebene der Gehirnteile auf die zelluläre Ebene im Körper –<br />
auf die Ebene der Neuronen.
Abbildung 2.3: Skizze eines biologischen Neurons mit Beschriftung von im Text verwendeten<br />
Bestandteilen.<br />
2.2 Neuronen sind informationsverarbeitende Zellen<br />
Bevor wir auf die Funktionen und Vorgänge innerhalb eines Neurons genauer eingehen,<br />
sei hier zunächst eine Skizze der Neuronenfunktion geliefert: Ein Neuron ist nichts<br />
weiter als ein Schalter mit einem Informationseingang und -ausgang. Der Schalter wird<br />
aktiviert, wenn genug Reize anderer Neurone am Informationseingang auftreffen. Am<br />
Informationsausgang wird dann ein Impuls an z.B. andere Neurone gesendet.<br />
2.2.1 Bestandteile eines Neurons<br />
Wir wollen nun die Einzelbestandteile eines Neurons (Abb. 2.3) betrachten. Wir gehen<br />
dabei den Weg, den die elektrische Information im Neuron nimmt. Den Dendriten eines<br />
Neurons zugeleitet wird die Information über spezielle Übergangsstellen, die Synapsen.<br />
2.2.1.1 Synapsen gewichten die einzelnen Informationsanteile<br />
Von anderen Neuronen oder sonstigen Zellen eingehende Signale werden einem Neuron<br />
über spezielle Übergangsstellen, die Synapsen zugeleitet. Solch eine Übergangsstelle
liegt meistens an den Dendriten eines Neurons, manchmal auch direkt am Soma. Man<br />
unterscheidet elektrische und chemische Synapsen.<br />
Die einfachere von beiden Varianten ist die elektrische Synapse . Ein elektrisches Signal,<br />
welches auf der Synapse eingeht, also von der präsynaptischen Seite kommt, wird<br />
direkt in den postsynaptischen Zellkern fortgeleitet. Es liegt also eine direkte, starke,<br />
nicht regulierbare Verbindung von Signalgeber zu Signalempfänger vor, zum Beispiel<br />
sinnvoll für Fluchtreflexe, die in einem Lebewesen „hart codiert“ sein müssen.<br />
Die ausgeprägtere Variante ist die chemische Synapse. Hier findet keine direkte elektrische<br />
Kopplung von Quelle und Ziel statt, sondern diese Kopplung ist unterbrochen<br />
durch den synaptischen Spalt. Dieser Spalt trennt die prä- und postsynaptische Seite<br />
elektrisch voneinander. Dennoch muss ja Information fließen, werden Sie jetzt denken,<br />
also wollen wir darauf eingehen, wie das passiert: Nämlich nicht elektrisch, sondern<br />
chemisch. Auf der präsynaptischen Seite des synaptischen Spalts wird das elektrische<br />
Signal in ein chemisches konvertiert, indem dort chemische Signalstoffe freigesetzt werden<br />
(sog. Neurotransmitter). Diese Neurotransmitter überwinden den synaptischen<br />
Spalt und übertragen die Information in den Zellkern (das ist sehr vereinfacht ausgedrückt,<br />
wir werden später noch sehen, wie das genau funktioniert), wo sie wieder in<br />
elektrische Information umgewandelt wird. Die Neurotransmitter werden sehr schnell<br />
wieder abgebaut, so dass auch hier sehr genaue Informations-Impulse möglich sind.<br />
Trotz der viel komplizierteren Funktionsweise hat die chemische Synapse im Vergleich<br />
zur elekrischen Variante eklatante Vorteile:<br />
Einwegschaltung: Die chemische Synapse ist eine Einwegschaltung. Dadurch, dass<br />
der prä- und postsynaptische Teil nicht direkt elektrisch verbunden sind, können<br />
elektrische Impulse im postsynaptischen Teil nicht auf den präsynaptischen<br />
überschlagen.<br />
Regulierbarkeit: Es gibt eine Vielzahl verschiedener Neurotransmitter, die noch dazu<br />
in verschiedenen Mengen in einem synaptischen Spalt freigesetzt werden können.<br />
So gibt es Neurotransmitter, die anregend auf den postsynaptischen Zellkern wirken,<br />
aber auch andere, die eine solche Anregung wieder abflauen lassen. Manche<br />
Synapsen geben ein stark anregendes Signal weiter, manche nur schwach anregende<br />
Signale. Die Regulierungsvielfalt ist enorm, und dass die Synapsen hier<br />
auch noch variabel sind, also mit der Zeit eine stärkere oder schwächere Verbindung<br />
darstellen können, ist einer der zentralen Punkte bei Betrachtung der<br />
Lernfähigkeit des Gehirns.
2.2.1.2 Dendriten sammeln alle Informationsanteile<br />
Dendriten verästeln sich baumartig vom Zellkern des Neurons (den man Soma nennt)<br />
und dienen der Aufnahme von elektrischen Signalen aus vielen verschiedenen Quellen,<br />
die dann in den Zellkern übertragen werden. Die sich verästelnde Menge von Dendriten<br />
wird auch Dendritenbaum genannt.<br />
2.2.1.3 Im Soma werden die gewichteten Informationsanteile aufkumuliert<br />
Nachdem über Synapsen und Dendriten eine Fülle an aktivierenden (=anregenden)<br />
und inhibierenden (=abschwächenden) Signalen beim Zellkern (Soma) eingetroffen ist,<br />
kumuliert das Soma diese Signale auf. Sobald das aufkumulierte Signal einen gewissen<br />
Wert (Schwellwert genannt) überschreitet, löst der Neuronenzellkern seinerseits einen<br />
elektrischen Impuls aus, der dann zur Weiterleitung an die nachfolgenden Neuronen<br />
bestimmt ist, zu denen das aktuelle Neuron verbunden ist.<br />
2.2.1.4 Das Axon leitet ausgehende Impulse weiter<br />
Die Weiterleitung des Impulses zu anderen Neuronen erfolgt durch das Axon. Das<br />
Axon ist ein fadenartiger Fortsatz des Somas. Ein Axon kann im Extremfall ca. einen<br />
Meter lang werden (z.B. im Rückenmark). Das Axon ist elektrisch isoliert, um das<br />
elektrische Signal besser leiten zu können (später mehr dazu) und mündet in Dendriten,<br />
um die Information an z.B. andere Neurone weiterzugeben. Wir sind also wieder am<br />
Anfang unserer Beschreibung der Neuronenbestandteile angelangt. Natürlich kann ein<br />
Axon aber auch Informationen an andere Zellenarten zu deren Steuerung übertragen.<br />
2.2.2 Elektrochemische Vorgänge im Neuron und seinen Bestandteilen<br />
Nachdem wir nun den Weg eines elektrischen Signals von den Dendriten über die<br />
Synapsen in den Zellkern, und von dort über das Axon in weitere Dendriten verfolgt<br />
haben, wollen wir einen kleinen Schritt von der Biologie in Richtung Technik gehen.<br />
Auf diesem Weg soll vereinfacht vorgestellt werden, wie die Informationsverarbeitung<br />
elektrochemisch vonstatten geht.
2.2.2.1 Neuronen erhalten ein elektrisches Membranpotential aufrecht<br />
Ein grundlegender Aspekt ist, dass die Neurone gegenüber ihrer Umwelt eine elektrische<br />
Ladungsdifferenz, ein Potential aufweisen. Innerhalb der Membran (=Hülle) des<br />
Neurons herrscht also eine andere Ladung vor als außen. Diese Ladungsdifferenz ist<br />
ein zentraler Begriff, den man braucht, um die Vorgänge im Neuron zu verstehen, wir<br />
nennen sie Membranpotential. Das Membranpotential, also der Ladungsunterschied,<br />
entsteht durch mehrere Arten geladener Atome (Ione), die innerhalb und außerhalb<br />
des Neurons unterschiedlich hoch konzentriert sind. Wenn wir von innen nach außen<br />
durch die Membran stoßen, werden wir bestimmte Arten Ione häufiger oder weniger<br />
häufig vorfinden als innen, wir nennen diesen Abfall oder Anstieg der Konzentration<br />
einen Konzentrationsgradienten.<br />
Betrachten wir das Membranpotential zunächst für den Ruhezustand des Neurons, nehmen<br />
wir also an, es treffen gerade keine elektrischen Signale von außen ein. In diesem<br />
Fall beträgt das Membranpotential −70 mV. Da wir gelernt haben, dass dieses Potential<br />
von Konzentrationsgradienten verschiedener Ionen abhängt, ist natürlich eine zentrale<br />
Frage, wie diese Konzentrationsgradienten aufrecht erhalten werden: Normalerweise<br />
herrscht ja überall Diffusion vor, also sind alle Ionen bestrebt, Konzentrationsgefälle<br />
abzubauen und sich überall gleichmäßig zu verteilen. Würde das passieren, würde das<br />
Membranpotential gegen 0 mV gehen, schlussendlich würde also kein Membranpotential<br />
mehr vorhanden sein. Das Neuron erhält sein Membranpotential also aktiv aufrecht,<br />
um Informationsverarbeitung betreiben zu können. Wie geht das vonstatten?<br />
Das Geheimnis liegt in der Membran selbst, die für manche Ione durchlässig ist, für<br />
andere aber nicht. Um das Potential aufrecht zu erhalten, wirken hier mehrere Mechanismen<br />
gleichzeitig:<br />
Konzentrationsgradient: Wie schon beschrieben, versuchen die Ionen, immer möglichst<br />
gleichverteilt vertreten zu sein. Ist innerhalb des Neurons die Konzentration<br />
eines Ions höher als außen, versucht es nach außen zu diffundieren und umgekehrt.<br />
Das positiv geladene Ion K + (Kalium) ist im Neuron häufig, außerhalb des Neurons<br />
weniger anzutreffen, und diffundiert darum langsam durch die Membran aus<br />
dem Neuron hinaus. Eine weitere Sammlung negativer Ionen, zusammenfassend<br />
A − genannt, bleibt aber im Neuron, da die Membran hierfür nicht durchlässig<br />
ist. Das Neuroneninnere wird also negativ: Negative A-Ionen bleiben, positive<br />
K-Ionen verschwinden, das Innere der Zelle wird negativer. Dies führt uns zu<br />
einem weiteren Gradienten.
Elektrischer Gradient: Der elektrische Gradient wirkt dem Konzentrationsgradienten<br />
entgegen. Das Zellinnere ist mittlerweile sehr negativ geworden, also zieht es<br />
positive Ionen an: K + möchte nun wieder in die Zelle hinein.<br />
Würde man diese beiden Gradienten nun einfach sich selbst überlassen, so würden sie<br />
sich irgendwann ausgleichen, einen stabilen Zustand erreichen und ein Membranpotential<br />
von −85 mV würde entstehen. Wir wollen aber auf ein Ruhemembranpotential<br />
von −70 mV hinaus, es muss also Störkomponenten geben, die dies verhindern. Zum<br />
einen gibt es noch ein weiteres wichtiges Ion, Na + (Natrium), für das die Membran<br />
zwar nicht besonders durchlässig ist, das aber trotzdem langsam durch die Membran<br />
in die Zelle einströmt. Das Natrium fühlt sich hierbei doppelt nach innen getrieben:<br />
Zum einen gibt es weniger Natrium im inneren des Neurons als außen, zum anderen<br />
ist Natrium positiv, das Zellinnere aber negativ, ein zweiter Grund, in die Zelle zu<br />
wollen.<br />
Durch die geringe Natriumdiffusion ins Zellinnere nimmt die Natriumkonzentration<br />
im Zellinneren zu, gleichzeitig wird das Zellinnere aber weniger negativ, so dass der<br />
Einstrom von K + langsamer wird (wir sehen: Das ist ein komplizierter Mechanismus, in<br />
dem alles sich gegenseitig beeinflusst). Durch Natrium wird das Zellinnere tendentiell<br />
weniger negativ gegenüber der Umwelt. Auch mit diesen beiden Ionen könnte aber<br />
immer noch ein Stillstand erreicht werden, in dem sich alle Gradienten ausgleichen<br />
und nichts mehr passiert. Nun kommt aber das fehlende Mosaiksteinchen, auf das wir<br />
warten: Eine „Pumpe“ (eigentlich das Protein ATP) bewegt aktiv Ionen entgegen der<br />
Richtung, zu der sie eigentlich möchten!<br />
Natrium wird aktiv aus der Zelle rausgepumpt, obwohl es entlang des Konzentrationsund<br />
des elektrischen Gradienten in die Zelle möchte.<br />
Kalium hingegen diffundiert stark aus der Zelle heraus, wird aber wieder aktiv hineingepumpt.<br />
Aus diesem Grund nennen wir die Pumpe auch Natrium-Kalium-Pumpe. Die Pumpe<br />
erhält sowohl für Natrium als auch für Kalium den Konzentrationsgradienten aufrecht,<br />
so dass eine Art Fließgleichgewicht entsteht und das Ruhepotential schlussendlich<br />
bei den beobachteten −70 mV landet. Zusammenfassend wird das Membranpotential<br />
also aufrecht erhalten, indem die Membran für manche Ionen gar nicht durchlässig<br />
ist und andere Ionen aktiv entgegen der Konzentrations- und elektrischen Gradienten<br />
gepumpt werden. Nachdem wir nun wissen, dass jedem Neuron ein Membranpotential<br />
zueigen ist, wollen wir genau betrachten, wie ein Neuron Signale empfängt und<br />
versendet.
2.2.2.2 Veränderungen im Membranpotential aktivieren das Neuron<br />
Oben haben wir gelernt, dass Natrium und Kalium durch die Membran hindurchdiffundieren<br />
können, Natrium langsam, Kalium schneller. Dies geschieht durch in der<br />
Membran enthaltene Kanäle, Natrium- bzw. Kaliumkanäle. Neben diesen immer geöffneten<br />
Kanälen, die für die Diffusion verantwortlich sind und durch die Natrium-<br />
Kalium-Pumpe ausgeglichen werden, gibt es auch Kanäle, die nicht immer geöffnet<br />
sind, sondern nur „nach Bedarf“ geöffnet werden. Da sich durch eine Öffnung dieser<br />
Kanäle die Konzentration von Ionen innerhalb und außerhalb der Membran verändern,<br />
ändert sich logischerweise auch das Membranpotential.<br />
Diese steuerbaren Kanäle werden geöffnet, wenn der aufkumulierte eingehende Reiz<br />
einen gewissen Schwellwert überschreitet. Eingehende Reize können beispielsweise von<br />
anderen Neuronen kommen oder aber von anderen Ursachen herrühren: So gibt es<br />
zum Beispiel spezialisierte Formen von Neuronen, Sinneszellen, für die z.B. Lichteinfall<br />
einen solchen Reiz darstellen kann. Fällt dann genug Licht ein, um den Schwellwert zu<br />
überschreiten, werden steuerbare Kanäle geöffnet.<br />
Der besagte Schwellwert (das Schwellenwertpotential) liegt bei ca. −55 mV. Sobald<br />
dieses von den eingehenden Reizen erreicht wird, wird das Neuron aktiviert und ein<br />
elektrisches Signal, ein Aktionspotential wird ausgelöst. Dieses Signal wird dann weitergeleitet<br />
an diejenigen Zellen, die mit dem betrachteten Neuron verbunden sind, also<br />
ihm „zuhören“. Die Phasen des Aktionspotentials wollen wir etwas genauer betrachten<br />
(Abb. 2.4 auf der folgenden Seite):<br />
Ruhezustand: Nur die immer geöffneten Kalium- und Natriumkanäle liegen offen, das<br />
Membranpotential liegt bei −70 mV und wird vom Neuron aktiv dort gehalten.<br />
Stimulus bis Schwellwert: Ein Reiz (Stimulus) öffnet Kanäle, so dass Natrium einströmen<br />
kann. Die Ladung des Zellinneren wird positiver. Sobald das Membranpotential<br />
über den Schwellenwert von −55 mV geht, wird das Aktionspotential<br />
ausgelöst, indem sehr viele Natriumkanäle geöffnet werden.<br />
Depolarisation: Natrium strömt ein. Wir erinnern uns, dass Natrium einströmen möchte<br />
sowohl, weil davon deutlich weniger in der Zelle vorhanden ist als außen, als<br />
auch, weil in der Zelle ein negatives Milieu vorherrscht, durch das das positive<br />
Natrium angezogen wird. Durch den starken Einstrom steigt das Membranpotential<br />
drastisch an, bis auf ca. +30 mV. Dies ist dann der elektrische Impuls, das<br />
Aktionspotential.<br />
Repolarisation: Natriumkanäle werden nun geschlossen, dafür werden die Kaliumkanäle<br />
geöffnet. Das positiv geladene Kalium will nun aus dem ebenfalls positiven
Abbildung 2.4: Auslösung eines Aktionspotentials über die Zeit.
Zellinneren heraus. Zusätzlich ist es im Zellinneren wesentlich höher konzentriert<br />
als außen, was den Ausstrom noch beschleunigt. Das Zellinnere wird wieder negativer<br />
geladen als die Außenwelt.<br />
Hyperpolarisation: Sowohl Natrium- als auch Kaliumkanäle werden wieder geschlossen.<br />
Zunächst ist das Membranpotential nun leicht negativer als das Ruhepotential,<br />
was daher kommt, dass die Kaliumkanäle sich etwas träger schließen, was<br />
Kalium (positiv geladen) aufgrund seiner geringeren Konzentration außerhalb<br />
der Zelle ausströmen lässt. Nach einer Refraktärzeit von 1 − 2 ms ist dann der<br />
Ruhezustand wiederhergestellt, so dass das Neuron auf neue Reize wieder mit einem<br />
Aktionspotential reagieren kann. Die Refraktärzeit ist, einfach ausgedrückt,<br />
eine Zwangspause, welche ein Neuron einhalten muss, um sich zu regenerieren.<br />
Je kürzer sie ist, desto öfter kann ein Neuron pro Zeit feuern.<br />
Der so entstandene Impuls wird dann durch das Axon fortgeleitet.<br />
2.2.2.3 Im Axon wird ein Impuls auf saltatorische Weise weitergeleitet<br />
Wir haben schon gelernt, dass das Axon zur Fortleitung des Aktionspotentials über<br />
lange Distanzen dient (zur Erinnerung: Eine Illustration eines Neurons inklusive Axon<br />
findet sich in Abb. 2.3 auf Seite 22). Das Axon ist ein fadenartiger Fortsatz des Somas.<br />
Bei Wirbeltieren ist es in der Regel von einer Myelinscheide umgeben, welche aus<br />
Schwannschen Zellen (im PNS) oder Oligodendrozyten (im ZNS) besteht 1 , die<br />
das Axon elektrisch sehr gut isolieren. Zwischen diesen Zellen befinden sich im Abstand<br />
von 0.1−2mm Lücken, die sogenannten Ranvierschen Schnürringe, die jeweils dort<br />
auftreten, wo eine Isolationszelle zuende ist und die nächste anfängt. An einem solchen<br />
Schnürring ist das Axon logischerweise schlechter isoliert.<br />
Man mag nun annehmen, dass diese schlecht isolierten Schnürringe von Nachteil für das<br />
Axon sind: Dem ist aber nicht so. An den Schnürringen ist ein Stoffaustausch zwischen<br />
intrazellulärem und extrazellulärem Raum möglich, der an Teilen des Axons, welche<br />
zwischen zwei Schnürringen liegen (Internodien) und so durch die Myelinscheide<br />
isoliert sind, nicht funktioniert. Dieser Stoffaustausch ermöglicht die Erzeugung von Signalen,<br />
ganz ähnlich der Erzeugung des Aktionspotentials im Soma. Die Weiterleitung<br />
eines Aktionspotentials funktioniert nun folgendermaßen: Es läuft nicht kontinuierlich<br />
entlang des Axons, sondern springt von einem Schnürring zum nächsten. Es läuft also<br />
eine Reihe von Depolarisationen entlang der Ranvierschnürringe. Ein Aktionspotential<br />
1 Sowohl Schwannsche Zellen als auch Oligodendrozyten sind Ausprägungen der Gliazellen, von denen es<br />
ca. 50 mal mehr gibt als Neuronen, und die die Neuronen umgeben (Glia = Leim), voneinander isolieren,<br />
mit Energie versorgen, etc.
löst dominoartig das nächste aus, meist sind hierbei sogar mehrere Schnürringe gleichzeitig<br />
aktiv. Durch das „Springen“ des Impulses von einem Schnürring zum nächsten<br />
kommt diese Impulsleitung auch zu ihrem Namen: Saltatorische Impulsleitung.<br />
Es ist offensichtlich, dass der Impuls schneller voran kommt, wenn seine Sprünge größer<br />
sind. So wird bei Axonen mit großen Internodien (2 mm) eine Signalausbreitungsgeschwindigkeit<br />
von ca. 180 Metern pro Sekunde erreicht. Die Internodien können aber<br />
nicht beliebig groß werden, da das weiterzuleitende Aktionspotential sonst bis zum<br />
nächsten Schnürring zu sehr verblassen würde. Die Schnürringe haben also auch die<br />
Aufgabe, das Signal regelmäßig zu verstärken. Am Ende des Axons hängen dann –<br />
oft über Dendriten und Synapsen verbunden – die Zellen, welche das Aktionspotenzial<br />
empfangen. Wie oben schon angedeutet, können Aktionspotentiale aber nicht nur<br />
durch über die Dendriten eingehende Information von anderen Neuronen entstehen.<br />
2.3 Rezeptorzellen sind abgewandelte Neurone<br />
Aktionspotentiale können auch durch sensorische Informationen, die ein Lebewesen aus<br />
seiner Umwelt mittels Sinneszellen aufnimmt, herrühren. Spezialisierte Rezeptorzellen<br />
können für sie spezifische Reizenergien wie Licht, Temperatur und Schall oder das<br />
Vorhandensein bestimmter Moleküle wahrnehmen (wie es z.B. der Geruchssinn tut).<br />
Dies funktioniert, da diese Sinneszellen eigentlich abgewandelte Neurone sind: Hier<br />
werden keine elektrischen Signale über Dendriten aufgenommen, sondern das Vorhandensein<br />
des für die Rezeptorzelle spezifischen Reizes sorgt dafür, dass sich Ionenkanäle<br />
öffnen und ein Aktionspotential ausgebildet wird. Dieser Vorgang des Umwandelns von<br />
Reizenergie in Veränderungen im Membranpotential nennt sich Sensorische Transduktion.<br />
In aller Regel ist die Reizenergie selbst zu schwach, um direkt Nervensignale<br />
auszulösen, und so findet entweder während der Transduktion oder durch den Reizleitenden<br />
Apparat auch gleich eine Signalverstärkung statt. Das resultierende Aktionspotential<br />
kann von anderen Neuronen verarbeitet werden und gelangt dann in den<br />
Thalamus, der, wie wir schon gelernt haben, als Tor zum Cerebralen Cortex Sinneseindrücke<br />
nach der momentanen Relevanz aussortieren und so einen Überfluss an zu<br />
verwaltenden Informationen verhindern kann.<br />
2.3.1 Es existieren verschiedenste Rezeptorzellen für viele Arten von<br />
Wahrnehmungen<br />
Primärrezeptoren senden ihre Impulse direkt ans Nervenssystem. Schmerzempfindung<br />
ist hierfür ein gutes Beispiel. Hier ist die Reizstärke proportional zur Amplitude
des Aktionspotentials, technisch ausgedrückt findet hier also eine Amplitudenmodulation<br />
statt.<br />
Sekundärrezeptoren senden hingegen durchgehend Impulse. Diese Impulse steuern<br />
dann die Menge des zugehörigen Neurotransmitters zur Weitergabe des Reizes, der<br />
wiederum die Frequenz der Aktionspotentiale des empfangenden Neurons steuert. Hier<br />
handelt es sich um Frequenzmodulation, eine Kodierung des Reizes, bei der man Zuund<br />
Abnahme eines Reizes besser wahrnehmen kann.<br />
Rezeptorzellen können einzeln vorkommen oder aber komplexe Sinnesorgane bilden<br />
(z.B. Augen oder Ohren). Es können sowohl Reize im Körper empfangen werden (das<br />
machen dann Enterorezeptoren) wie auch Reize außerhalb des Körpers (hierfür sind<br />
die Exterorezeptoren zuständig).<br />
Nachdem wir nun skizziert haben, wie Information aus der Umwelt aufgenommen wird,<br />
ist interessant zu betrachten, auf welche Weise sie verarbeitet wird.<br />
2.3.2 Informationsverarbeitung findet auf jeder Ebene des Nervensystems<br />
statt<br />
Es ist nämlich keinesfalls so, dass alle Informationen ins Gehirn geleitet werden, dort<br />
verarbeitet werden, und das Gehirn danach für eine „Ausgabe“ in Form von motorischen<br />
Impulsen sorgt (das einzige, was ein Lebewesen in seiner Umwelt wirklich tun<br />
kann, ist ja, sich zu bewegen). Die Informationsverarbeitung ist komplett dezentral<br />
angelegt. Um das Prinzip zu verdeutlichen, wollen wir kurz ein paar Beispiele betrachten,<br />
für die wir in unserer Informationsverarbeitungshierarchie wieder vom Abstrakten<br />
zum Grundlegenden wandern.<br />
⊲ Dass im Großhirn als höchstentwickelter Informationsverarbeitender Struktur in<br />
der Natur Informationsverarbeitung stattfindet, ist klar.<br />
⊲ In der Hierarchie deutlich tiefer liegt das Mittelhirn und der Thalamus, den wir<br />
als Tor zur Großhirnrinde schon kennengelernt haben: Auch das von ihm betriebene<br />
Filtern von Informationen nach aktueller Relevanz ist eine sehr wichtige<br />
Art der Informationsverarbeitung. Doch auch der Thalamus erhält keine Reize<br />
von außen, die nicht bereits vorverarbeitet wurden. Machen wir einen Sprung zur<br />
untersten Ebene, den Sinneszellen.<br />
⊲ Bereits auf der untersten Ebene, den Rezeptorzellen, wird Information nicht<br />
nur aufgenommen und weitergeleitet, sondern auch direkt verarbeitet. Einer der<br />
Hauptaspekte zu diesem Thema ist die Verhinderung von „Dauerreizen“ an das
Zentralnervensystem durch sensorische Adaption: Bei kontinuierlicher Reizung<br />
werden sehr viele Rezeptorzellen automatisch unempfindlicher. Rezeptorzellen<br />
stellen also keine direkte Abbildung von spezifischer Reizenergie auf Aktionspotentiale<br />
da, sondern sind abhängig von der Vergangenheit. Weitere Sensoren<br />
ändern die Empfindlichkeit je nach Situation: Es gibt Geschmacksrezeptoren, die<br />
je nach Ernährungszustand des Organismus mehr oder weniger stark auf denselben<br />
Reiz ansprechen.<br />
⊲ Selbst bevor ein Reiz zu den Rezeptorzellen vorstößt, kann durch einen vorgeschalteten<br />
signalführenden Apparat schon Informationsverarbeitung stattfinden,<br />
beispielsweise in Form von Verstärkung: Die Ohrmuschel und das Innenohr haben<br />
eine spezifische schallverstärkende Form, welche es – in Verbindung mit den<br />
Sinneszellen des Hörsinns – ebenfalls ermöglich, dass der Nervenreiz nur logarithmisch<br />
mit der Intensität des gehörten Signals ansteigt. Dies ist bei näherer<br />
Betrachtung auch sehr notwendig, da der Schalldruck der Signale, für die das<br />
Ohr gemacht ist, über viele Zehnerpotenzen variieren kann. Eine logarithmische<br />
Messweise ist hier von Vorteil. Erstens wird Überlastung vermieden, und dass<br />
zweitens die Intensitätsmessung bei intensiven Signalen dadurch weniger genau<br />
wird, macht auch nichts: Wenn neben einem gerade ein Düsenjet startet, sind<br />
winzige Schwankungen im Lärmpegel zu vernachlässigen.<br />
Um noch etwas mehr Bauchgefühl über Sinnesorgane und Informationsverarbeitung<br />
im Organismus zu erhalten, sollen nun kurz „gängige“, also in der Natur häufig anzutreffende<br />
Lichtsinnesorgane beschrieben werden. Beim dritten beschriebenen Lichtsinnesorgan,<br />
dem Einzellinsenauge, gehen wir dann auf Informationsverarbeitung ein, die<br />
noch direkt im Auge stattfindet.<br />
2.3.3 Eine Skizze häufiger Lichtsinnesorgane<br />
Für viele Lebewesen hat es sich als extrem nützlich erwiesen, elektromagnetische Strahlung<br />
in bestimmten Bereichen wahrzunehmen. Konsequenterweise sind Sinnesorgane<br />
entstanden, welche solch elektromagnetische Strahlung feststellen können, und der Wellenlängenbereich<br />
dieser Strahlung, welcher für den Menschen wahrnehmbar ist, heißt<br />
dadurch sichtbarer Bereich oder schlicht Licht. Verschiedene Wellenlängen dieser sichtbaren<br />
Strahlung nehmen wir Menschen durch verschiedene Farben wahr. Der sichtbare<br />
Bereich der elektromagnetischen Strahlung ist nicht bei allen Lebewesen gleich, manche<br />
Lebewesen können Farben (=Wellenlängenbereiche) nicht sehen, die wir sehen können,<br />
andere Lebewesen können sogar zusätzliche Wellenlängenbereiche (z.B. im UV-Bereich)<br />
wahrnehmen. Bevor wir zum Menschen kommen, wollen wir kurz – um etwas breiter
Abbildung 2.5: Facettenaugen einer Raubfliege<br />
angelegtes Wissen zum Sehsinn zu erhalten – zwei Sehsinnesorgane betrachten, die<br />
evolutionär gesehen vor dem Menschen da waren.<br />
2.3.3.1 Komplexaugen und Lochkameraaugen bieten nur zeitlich bzw. örtlich<br />
hohe Auflösung<br />
Betrachten wir als erstes das sogenannte Komplexauge (Abb. 2.5), auch Facettenauge<br />
genannt, welches beispielsweise bei Insekten und Krustentieren vorkommt. Das<br />
Komplexauge besteht aus vielen kleinen, separaten Einzelaugen, die, wenn man das<br />
Komplexauge von außen betrachtet, auch deutlich sichtbar sind und ein wabenähnliches<br />
Muster erzeugen. Jedes Einzelauge im Komplexauge verfügt über eine eigene Nervenfaser<br />
als Anbindung an das Insektengehirn. Da wir die Einzelaugen sehen können, ist<br />
klar, dass die Anzahl der Bildpunkte, also die spatiale Auflösung bei Komplexaugen<br />
recht niedrig liegen muss: Das Bild ist unscharf. Komplexaugen bieten aber auch Vorteile,<br />
gerade für schnellfliegende Insekten: Bestimmte Arten Komplexaugen verarbeiten<br />
mehr als 300 Bilder pro Sekunde (dem Menschen hingegen erscheinen schon Kinofilme<br />
mit 25 Bildern pro Sekunde als flüssige Bewegung).<br />
Lochkameraaugen kommen zum Beispiel bei Krakenarten vor und funktionieren –<br />
man errät es – ähnlich einer Lochkamera. Es gibt ein winziges Lichteintrittsloch,<br />
welches ein scharfes Bild auf dahinterliegende Sinneszellen projiziert, die räumliche<br />
Auflösung ist hier also deutlich höher als beim Komplexauge. Aufgrund des winzigen<br />
Eintrittsloches ist das Bild aber sehr lichtschwach.
2.3.3.2 Einzellinsenaugen kombinieren beide Stärken, sind aber komplexer<br />
aufgebaut<br />
Die bei Wirbeltieren verbreitete Art des Lichtsinnesorgans ist das Einzellinsenauge:<br />
Es vermittelt ein scharfes, hochaufgelöstes Bild der Umwelt, bei hoher bzw. variabler<br />
Lichtstärke. Dafür ist es komplizierter aufgebaut. Wie beim Lochkameraauge fällt<br />
Licht durch eine Öffnung ein (Pupille) und wird im Auge auf eine Schicht Sinneszellen<br />
projiziert (Netzhaut oder Retina). Im Unterschied zum Lochkameraauge kann<br />
der Öffnungsgrad der Pupille allerdings den Helligkeitsverhältnissen angepasst werden<br />
(dies geschieht durch den Iris-Muskel, der die Pupille vergrößert oder verkleinert).<br />
Diese Unterschiede im Pupillenöffnungsgrad machen eine aktive Scharfstellung des Bildes<br />
notwendig, weswegen das Einzellinsenauge noch eine ebenfalls verstellbare Linse<br />
enthält.<br />
2.3.3.3 Die Retina ist nicht nur Empfänger, sondern verarbeitet Informationen<br />
Die auftreffenden Lichtsignale werden in der Retina aufgenommen und direkt durch<br />
mehrere Schichten informationsverarbeitender Zellen vorverarbeitet. Wir wollen kurz<br />
verschiedene Punkte dieser Informationsvorverarbeitung betrachten und gehen dabei<br />
den Weg, den die vom Licht eingebrachte Information nimmt:<br />
Photorezeptoren empfangen das Lichtsignal und lösen Aktionspotentiale aus (es gibt<br />
verschiedene Rezeptoren für verschiedene Farbanteile und Lichtintensitäten). Diese<br />
Rezeptoren sind der eigentlich lichtempfangende Teil der Retina und derart<br />
empfindlich, dass bereits das Auftreffen von einem einzigen Photon ein Aktionspotential<br />
auslösen kann. Mehrere Photorezeptoren leiten dann ihre Signale an<br />
eine einzige<br />
Bipolarzelle weiter, hier findet also bereits eine Zusammenfassung der Information<br />
statt. Schlussendlich gelangt das nun umgewandelte Lichtsignal wieder von jeweils<br />
mehreren Bipolarzellen 2 in die<br />
Ganglienzellen. Es können verschieden viele Bipolarzellen ihre Information an eine<br />
Ganglienzelle weiterleiten. Je höher die Zahl der Photorezeptoren, von denen<br />
die Ganglienzelle betroffen ist, um so größer ist der Wahrnehmungsbereich, das<br />
Rezeptive Feld, welches die Ganglien abdeckt – und um so weniger Bildschärfe<br />
ist im Bereich dieser Ganglienzelle gegeben. Hier werden also direkt in der Retina<br />
bereits Informationen aussortiert und das Gesamtbild z.B. in Randsichtbereichen<br />
verunschärft. Bis jetzt haben wir die Informationsverarbeitung in der Retina aber<br />
2 Es gibt wieder verschiedene Arten Bipolarzellen, deren Betrachtung hier aber zu weit führen würde.
als reine Top-Down-Struktur kennengelernt. Dies bringt uns nun zur Betrachtung<br />
der<br />
Horizontal- und Amakrinzellen. Diese Zellen sind nicht von vorne nach hinten, sondern<br />
lateral verbunden und machen es möglich, dass Lichtsignale sich direkt während<br />
der Informationsverarbeitung in der Retina lateral beeinflussen – eine viel<br />
mächtigere Art der Informationsverarbeitung als komprimieren und verunschärfen.<br />
Horizontalzellen ist es hierbei möglich, von einem Photorezeptor angeregt,<br />
andere nahe Photorezeptoren ebenfalls anzuregen und gleichzeitig weiter entfernte<br />
Bipolarzellen und Rezeptoren zu hemmen. Dies sorgt für die klare Wahrnehmung<br />
von Konturen und hellen Punkten. Amakrinzellen können weiter bestimmte<br />
Reize verstärken, indem sie Informationen von Bipolarzellen auf mehrere Ganglienzellen<br />
verteilen oder auch Ganglien hemmen.<br />
Wir sehen an diesem Anfang des Wegs visueller Information ins Hirn, dass Informationsverarbeitung<br />
zum einen vom ersten Moment der Informationsaufnahme stattfindet<br />
– und zum anderen parallel in Millionen von informationsverarbeitenden Zellen stattfindet.<br />
Kein Systembestandteil ruht jemals, und aus dieser massiven Verteilung der<br />
Arbeit zieht das Nervensystem seine Macht und Fehlerresistenz.<br />
2.4 Neuronenmengen in unterschiedlich hoch entwickelten<br />
Lebewesen<br />
Hier nun ein Überblick, welche verschiedenen Lebewesen was für eine Kapazität an<br />
Neuronen besitzen (zum Großteil aus [RD05]):<br />
302 Neuronen benötigt das Nervensystem eines Fadenwurms, der einen beliebten Modellorganismus<br />
in der Biologie darstellt. Fadenwürmer leben im Erdboden und<br />
ernähren sich von Bakterien.<br />
10 4 Neuronen ergeben eine Ameise (der Einfachheit halber sei vernachlässigt, dass<br />
manche Ameisenarten auch mehr oder weniger leistungsfähige Nervensysteme<br />
aufweisen können). Durch verschiedene Lockstoffe und Düfte sind Ameisen zu<br />
komplexem Sozialverhalten und zur Bildung von riesigen Staaten mit Millionen<br />
von Individuen in der Lage. Sieht man nicht die Ameise, sondern einen solchen<br />
Staat als Individuum an, so kommt man ungefähr auf die kognitive Leistungsfähigkeit<br />
eines Schimpansen bis hin zum Menschen.<br />
Mit 10 5 Neuronen können wir das Nervensystem einer Fliege bauen. Eine Fliege kann<br />
im dreidimensionalen Raum in Echtzeit ausweichen, durch einen Looping an der
Decke landen, besitzt umfangreiche Sensorik durch Facettenaugen, Tasthaare,<br />
Nerven an den Beinenden und vieles mehr. Eine Fliege hat also „in Hardware“<br />
umfangreiche Differential- und Integralrechnungen in hohen Dimensionen implementiert.<br />
Wir alle wissen, dass eine Fliege schwer zu fangen ist. Natürlich werden<br />
auch die Körperfunktionen von Neuronen gesteuert, diese seien aber hier außen<br />
vor gelassen.<br />
Mit 0.8 · 10 6 Neuronen haben wir genug Gehirnmasse für eine Honigbiene. Honigbienen<br />
bilden Staaten und besitzen erstaunliche Fähigkeiten im Bereich der Luftaufklärung<br />
und Orientierung.<br />
4 · 10 6 Neurone ergeben eine Maus, hier sind wir schon in der Welt der Wirbeltiere<br />
angelangt.<br />
1.5 · 10 7 Neurone reichen bereits für eine Ratte, ein Tier, was als außerordentlich<br />
klug verschrien ist und oft als Teilnehmer für verschiedene anschauliche Intelligenztests<br />
bezüglich der Tierwelt herangezogen wird. Ratten können außerordentlich<br />
gut riechen und sich orientieren, zeigen außerdem Sozialverhalten. In<br />
etwa derselben Größenordnung liegt das Gehirn eines Frosches. Der Frosch besitzt<br />
einen komplizierten und funktionsreichen Körperbau, kann schwimmen und<br />
ist zu komplexen Verhaltensweisen fähig. Er kann besagte Fliege während einer<br />
Sprungbewegung im dreidimensionalen Raum durch seine Augen kontinuierlich<br />
zielerfasssen und durch seine Zunge mit vertretbarer Wahrscheinlichkeit fangen.<br />
5 · 10 7 Neurone ergeben eine Fledermaus. Die Fledermaus kann sich in totaler Dunkelheit<br />
rein akustisch in einem Raum orientieren, auf mehrere Zentimeter genau.<br />
Die Fledermaus kann sich selbst tarnende Insekten (z.B Motten tarnen sich durch<br />
eine bestimmte Flügelstruktur, welche Schall schlecht zurückwirft) während des<br />
Fluges akustisch orten und ebenso während des Fluges fressen.<br />
1.6 · 10 8 Neurone benötigt das Gehirn eines Hundes, der seit jeher Weggefährte des<br />
Menschen ist. Kommen wir zu einem weiteren beliebten Gefährten des Menschen:<br />
3 · 10 8 Neurone, also ca. doppelt so viele wie ein Hund, besitzt eine Katze. Wie wir<br />
wissen, sind Katzen sehr elegante, geduldige Raubtiere, fähig zu einer Vielzahl<br />
von Verhaltensweisen. In derselben Größenordnung liegt übrigens der Octopus,<br />
von dem nur wenige wissen, dass er z. B. in Labyrinth-Orientierungstests der<br />
Ratte deutlich überlegen ist.<br />
Für 6 · 10 9 Neurone gibt es bereits einen Schimpansen, eines der Tiere, die dem Menschen<br />
schon sehr ähneln.
10 11 Neurone besitzt ein Mensch. Der Mensch besitzt meist sehr umfangreiche kognitive<br />
Fähigkeiten und ist in der Lage zu sprechen, zu abstrahieren, zu erinnern<br />
und Werkzeuge sowie das Wissen von anderen Menschen zu nutzen, um fortgeschrittene<br />
Technologien und vielfältige soziale Strukturen zu entwickeln.<br />
Mit 2 · 10 11 Neuronen gibt es Nervensysteme, die mehr Neuronen besitzen als die<br />
des Menschen: Hier seien Elephanten und bestimmte Walarten genannt.<br />
Bereits mit der oben (sehr dünn) beschriebenen Rechenleistung einer Fliege können<br />
unsere aktuellen Computer schon nicht mehr mithalten. Neuere Forschungsergebnisse<br />
legen sogar nahe, dass die in Nervensystemen ablaufenden Prozesse noch einmal deutlich<br />
mächtiger sind, als man bis vor kurzem noch dachte: Michaeva et al. beschreiben<br />
eine eigene Synapsen-integrierte Informationsverarbeitung [MBW + 10]. Inwiefern sich<br />
das bestätigt, wird die Zeit zeigen.<br />
2.5 Übergang zu technischen Neuronen: <strong>Neuronale</strong> <strong>Netze</strong><br />
sind eine Karikatur der Biologie<br />
Wie kommen wir nun von den biologischen <strong>Neuronale</strong>n <strong>Netze</strong>n zu den technischen?<br />
Durch radikalste Vereinfachung. Hierzu möchte ich nun die für die technische Seite<br />
relevanten Erkenntnisse noch einmal kurz zusammenfassen:<br />
Wir haben gesehen, dass die biologischen Neurone miteinander auf gewichtete Weise<br />
vernetzt sind und ihr Signal bei Reizung elektrisch über das Axon übertragen. Von<br />
dort gelangen sie aber nicht direkt in die Nachfolgeneurone, sondern überwinden erst<br />
den synaptischen Spalt, in dem das Signal durch variierbare chemische Vorgänge noch<br />
einmal verändert wird. Im empfangenden Neuron werden dann die vielen durch den<br />
synaptischen Spalt nachverarbeiteten Inputs zu einem Impuls zusammengefasst bzw.<br />
aufkumuliert. Je nachdem, wie sehr das Neuron durch den kumulierten Input gereizt<br />
wird, gibt es dann selbst einen Impuls ab, oder nicht – der Output ist also nichtlinear,<br />
er ist nicht etwa proportional zum kumulierten Input. Unsere kurze Zusammenfassung<br />
entspricht nun genau den wenigen Faktoren biologischer <strong>Neuronale</strong>r <strong>Netze</strong>, welche wir<br />
in die technische Approximation übernehmen wollen:<br />
Vektorieller Input: Der Input von technischen Neuronen hat viele Komponenten, ist<br />
also ein Vektor. In der Natur empfängt ein Neuron ja auch Impulse von durchschnittlich<br />
10 3 bis 10 4 anderen Neuronen.<br />
Skalarer Output: Der Output eines Neurons ist ein Skalar, hat also nur eine Komponente.<br />
Viele skalare Outputs bilden dann wieder einen vektoriellen Input eines
anderen Neurons. Dies bedeutet insbesondere, dass irgendwo im Neuron die vielen<br />
Inputkomponenten so zusammengefasst werden müssen, dass nur eine Komponente<br />
übrig bleibt.<br />
Synapsen verändern Input: Auch in technischen <strong>Neuronale</strong>n <strong>Netze</strong>n werden die Inputs<br />
vorverarbeitet, nämlich mit einer Zahl (dem Gewicht) multipliziert – also<br />
gewichtet. Die Menge aller dieser synaptischen Gewichte stellen – sowohl im biologischen<br />
als auch im technischen Sinne – den Informationsspeicher des neuronalen<br />
<strong>Netze</strong>s dar.<br />
Aufkumulieren der Inputs: In der Biologie werden die Inputs nach der chemischen Veränderung<br />
zu einem Impuls zusammengefasst, also aufkumuliert – in der Technik<br />
geschieht dies oft durch die gewichtete Summe, die wir noch kennenlernen werden.<br />
Im Neuron arbeiten wir also anstatt mit einem Vektor nach der Aufkumulierung<br />
mit nur einem Wert, einem Skalar, weiter.<br />
Nichtlineare Kennlinie: Auch unsere technischen Neurone haben keinen zum Input<br />
proportionalen Output.<br />
Gewichte einstellbar: Die Gewichte, mit denen die Inputs gewichtet werden, sind variabel,<br />
ähnlich den chemischen Prozessen am synaptischen Spalt. Dies verleiht<br />
dem Netz eine große Dynamik, denn in den Gewichten bzw. der Art und Stärke<br />
der chemischen Vorgänge in einem synaptischen Spalt wird das „Wissen“ eines<br />
<strong>Neuronale</strong>n <strong>Netze</strong>s zu großen Teilen gespeichert.<br />
Unser aktuelles, nur salopp formuliertes, sehr einfaches Neuronenmodell erhält also<br />
einen vektoriellen Input<br />
x,<br />
mit Komponenten xi. Es kumuliert diese multipliziert mit den zugehörigen Gewichten<br />
wi auf: <br />
wixi.<br />
i<br />
Obiger Term wird auch gewichtete Summe genannt. Die nichtlineare Abbildung f bestimmt<br />
dann den skalaren Output y:<br />
<br />
<br />
y = f wixi .<br />
i<br />
Nach dieser Überleitung wollen wir nun unser Neuronenmodell genauer spezifizieren<br />
und ihm noch einige Kleinigkeiten hinzufügen. Auf welche Weise Gewichte eingestellt<br />
werden können, werden wir anschließend ebenfalls betrachten.
Übungsaufgaben<br />
Aufgabe 4. Es wird geschätzt, dass ein menschliches Gehirn etwa 10 11 Nervenzellen<br />
besitzt, von denen jede etwa 10 3 – 10 4 Synapsen aufweist. Gehen wir für diese Aufgabe<br />
von 10 3 Synapsen pro Neuron aus. Nehmen wir weiter an, eine einzelne Synapse könnte<br />
4 Bit an Information speichern. Naiv gerechnet: Welche Speicherkapazität hat das<br />
Gehirn also? Beachten Sie, dass die Information, welches Neuron mit welchem anderen<br />
eine Verbindung besitzt, auch von Bedeutung ist.
Kapitel 3<br />
Bausteine künstlicher <strong>Neuronale</strong>r <strong>Netze</strong><br />
Formale Definitionen und umgangssprachliche Erklärungen der Bestandteile,<br />
die die technischen Adaptionen der biologischen <strong>Neuronale</strong>n <strong>Netze</strong> ausmachen.<br />
Erste Beschreibungen, wie man diese Bestandteile zu einem <strong>Neuronale</strong>n Netz<br />
zusammensetzen kann.<br />
Dieses Kapitel beinhaltet die formalen Definitionen für den Großteil der Bausteine <strong>Neuronale</strong>r<br />
<strong>Netze</strong>, die wir später verwenden werden. Nach dem Ende dieses Kapitels kann<br />
man ohne weiteres auch einzelne Kapitel des Skriptums lesen, ohne die vorangehenden<br />
zu betrachten (auch wenn das natürlich nützlich wäre).<br />
3.1 Der Zeitbegriff bei <strong>Neuronale</strong>n <strong>Netze</strong>n<br />
Bei manchen Definitionen verwenden wir in dieser Arbeit einen Begriff der Zeit bzw.<br />
der Durchlaufanzahl des <strong>Neuronale</strong>n <strong>Netze</strong>s. Die Zeitrechnung unterteilt sich hierbei<br />
in diskrete Zeitschritte:<br />
Definition 3.1 (Zeitbegriff). Die aktuelle Zeit (Jetzt-Zeit) wird dabei als (t) bezeichnet,<br />
der nächste Zeitschritt mit (t+1), der vorherige mit (t−1) und sämtliche anderen<br />
analog. Beziehen sich verschiedene mathematische Größen (z.B. netj oder oi) in den<br />
folgenden Kapiteln auf einen bestimmten Zeitpunkt, so lautet die Schreibweise hierfür<br />
z.B. netj(t − 1) oder oi(t).<br />
Biologisch ist das natürlich nicht sehr plausibel (bei unserem Gehirn wartet auch kein<br />
Neuron auf ein anderes), aber die Implementierung wird dadurch ganz wesentlich vereinfacht.<br />
41
3.2 Bestandteile <strong>Neuronale</strong>r <strong>Netze</strong><br />
Ein technisches <strong>Neuronale</strong>s Netz besteht aus simplen Recheneinheiten, den Neuronen,<br />
sowie gerichteten, gewichteten Verbindungen zwischen diesen. Die Verbindungsstärke<br />
(bzw. das Verbindungsgewicht) zwischen zwei Neuronen i und j wollen wir als wi,j<br />
bezeichnen 1 .<br />
Definition 3.2 (<strong>Neuronale</strong>s Netz). Ein <strong>Neuronale</strong>s Netz ist ein sortiertes Tripel<br />
(N, V, w) mit zwei Mengen N, V sowie einer Funktion w, wobei N die Menge der<br />
Neurone bezeichnet und V eine Menge {(i, j)|i, j ∈ N} ist, deren Elemente Verbindungen<br />
von Neuron i zu Neuron j heißen. Die Funktion w : V → R definiert die<br />
Gewichte, wobei w((i, j)), das Gewicht der Verbindung von Neuron i zu Neuron j,<br />
kurz mit wi,j bezeichnet wird. Sie ist je nach Auffassung entweder undefiniert oder 0<br />
für Verbindungen, welche in dem Netz nicht existieren.<br />
SNIPE: In Snipe instantiiert man zunächst ein Objekt der Klasse NeuralNetworkDescriptor,<br />
dass den groben Umriss eines <strong>Netze</strong>s definiert (z.B. die Anzahl der Neuronenschichten). Mittels<br />
des Descriptors kann man dann beliebig viele konkrete <strong>Neuronale</strong> <strong>Netze</strong> in Form von Objekten<br />
der Klasse NeuralNetwork instantiieren. Um mit der Snipe-Programmierung anzufangen, sind<br />
die Dokumentationen genau dieser beiden Klassen – in dieser Ordnung – der richtige Ort zum<br />
Lesen. Dieses Layout aus Descriptor und abhängigen konkreten <strong>Netze</strong>n ist implementierungstechnisch<br />
durchaus sinnvoll, denn man kann damit effizient auch große Mengen ähnlicher (aber<br />
nicht unbedingt gleicher) <strong>Netze</strong> erzeugen, und verschiedene Parameter zentral ändern.<br />
Die Gewichtungen lassen sich also in einer quadratischen Gewichtsmatrix W oder<br />
wahlweise einem Gewichtsvektor W implementieren, wobei im Falle der Matrix die<br />
Zeilennummer angibt, von wo die Verbindung ausgeht, und die Spaltennummer, welches<br />
Neuron ihr Ziel ist. In diesem Fall markiert die Zahl 0 in der Tat eine nicht<br />
existierende Verbindung. Diese Matrixdarstellung wird auch Hinton-Darstellung<br />
genannt 2 .<br />
Die Neurone und Verbindungen sind ihrerseits aus folgenden Bestandteilen und Größen<br />
zusammengesetzt (ich gehe dabei den Weg, den die Daten innerhalb eines Neurons<br />
nehmen, der Abb. 3.1 auf der rechten Seite nach von oben nach unten):<br />
1 Vorsicht beim Literaturstudium: Bei manchen Literaturstellen können die i und j in wi,j vertauscht sein<br />
– hier gibt es keinen einheitlichen Standard. Generell bemühe ich mich aber, in diesem Skriptum die<br />
Schreibweise zu finden, die ich häufiger und an prominenteren Literaturstellen antreffe.<br />
2 Wieder Vorsicht bei Literaturstudium: Bei manchen Literaturstellen können Achsen und Zeilen vertauscht<br />
sein. Auch hier gibt es keine Konsistenz über die Gesamtliteratur.
Eingaben anderer<br />
Neuronen<br />
Propagierungsfunktion<br />
(oft gewichtete Summe, verarbeitet<br />
Eingaben zur <strong>Netze</strong>ingabe)<br />
<strong>Netze</strong>ingabe<br />
Aktivierungsfunktion<br />
(Erzeugt aus <strong>Netze</strong>ingabe und alter<br />
Aktivierung die neue Aktivierung)<br />
Aktivierung<br />
Ausgabefunktion<br />
(Erzeugt aus Aktivierung die Ausgabe,<br />
ist oft Identität)<br />
Eingaben anderer<br />
Neuronen<br />
Propagierungsfunktion<br />
(oft gewichtete Summe, verarbeitet<br />
Eingaben zur <strong>Netze</strong>ingabe)<br />
<strong>Netze</strong>ingabe<br />
Aktivierungsfunktion<br />
(Erzeugt aus <strong>Netze</strong>ingabe und alter<br />
Aktivierung die neue Aktivierung)<br />
Aktivierung<br />
Ausgabefunktion<br />
(Erzeugt aus Aktivierung die Ausgabe,<br />
ist oft Identität)<br />
Ausgabe zu<br />
anderen Neuronen<br />
Ausgabe zu<br />
anderen Neuronen<br />
Abbildung 3.1: Datenverarbeitung eines Neurons. Die Aktivierungsfunktion eines Neurons beinhaltet<br />
den Schwellenwert.
3.2.1 Verbindungen übertragen Informationen, die von den Neuronen<br />
verarbeitet werden<br />
Über die Verbindungen werden Daten zwischen Neuronen übertragen, wobei das Verbindungsgewicht<br />
entweder verstärkend oder hemmend wirkt. Die Definition von Verbindungen<br />
ist bereits in der Definition des <strong>Neuronale</strong>n <strong>Netze</strong>s eingeschlossen.<br />
SNIPE: Verbindungsgewichte lassen sich mit der Methode NeuralNetwork.setSynapse ändern.<br />
3.2.2 Die Propagierungsfunktion verwandelt vektorielle Eingaben zur<br />
skalaren <strong>Netze</strong>ingabe<br />
Wenn man ein Neuron j betrachtet, so findet man meistens eine ganze Menge Neurone,<br />
von denen eine Verbindung zu j ausgeht, die also Ausgaben an j weiterleiten.<br />
Die Propagierungsfunktion nimmt für ein Neuron j Ausgaben oi1 , . . . , oin anderer<br />
Neurone i1, i2, . . . , in entgegen (von denen eine Verbindung zu j existiert), und verarbeitet<br />
diese unter Berücksichtigung der Verbindungsgewichte wi,j zur <strong>Netze</strong>ingabe netj,<br />
welche von der Aktivierungsfunktion weiterverwendet werden kann. Die <strong>Netze</strong>ingabe<br />
ist also das Ergebnis der Propagierungsfunktion.<br />
Definition 3.3 (Propagierungsfunktion und <strong>Netze</strong>ingabe). Es sei I = {i1, i2, . . . , in}<br />
die Menge der Neurone, bei denen gilt ∀z ∈ {1, . . . , n} : ∃wiz,j. Dann berechnet sich<br />
die <strong>Netze</strong>ingabe von j, genannt netj, durch die Propagierungsfunktion fprop:<br />
netj = fprop(oi1 , . . . , oin, wi1,j, . . . , win,j) (3.1)<br />
Beliebt ist hier die Gewichtete Summe: Die Multiplikation der Ausgabe eines jeden<br />
i mit wi,j, und die Aufsummierung der Ergebnisse:<br />
netj = <br />
(oi · wi,j) (3.2)<br />
i∈I<br />
SNIPE: Die Gewichtete Summe ist exakt so in Snipe als Propagierungsfunktion realisiert.
3.2.3 Die Aktivierung ist der „Schaltzustand“ eines Neurons<br />
Nach dem Vorbild der Natur ist jedes Neuron zu jeder Zeit zu einem bestimmten<br />
Grad aktiv, gereizt, oder was man sonst für Ausdrücke verwenden möchte. Von diesem<br />
Aktivierungszustand hängen die Reaktionen des Neurons auf Eingaben ab. Der<br />
Aktivierungszustand gibt also den Grad der Aktivierung eines Neurons an und wird<br />
oft kurz als Aktivierung bezeichnet. Seine formale Definition wird von der gleich folgenden<br />
Definition der Aktivierungsfunktion eingeschlossen. Allgemein kann man aber<br />
definieren:<br />
Definition 3.4 (Aktivierungszustand / Aktivierung allgemein). Sei j Neuron. Der Aktivierungszustand<br />
aj, kurz Aktivierung genannt, ist j eindeutig zugeordnet, bezeichnet<br />
den Grad der Aktivität des Neurons und ergibt sich aus der Aktivierungsfunktion.<br />
SNIPE: Der Aktivierungszustand von Neuronen lässt sich mit den Methoden getActivation<br />
bzw. setActivation der Klasse NeuralNetwork abrufen bzw. setzen.<br />
3.2.4 Neuronen werden aktiviert, wenn die <strong>Netze</strong>ingabe ihren<br />
Schwellenwert überschreitet<br />
Um den Schwellenwert herum reagiert die Aktivierungsfunktion eines Neurons besonders<br />
empfindlich. Biologisch gesehen stellt der Schwellenwert die Reizschwelle dar, ab<br />
der ein Neuron feuert. Der Schwellenwert wird ebenfalls weitestgehend in der Definition<br />
der Aktivierungsfunktion mitdefiniert, allerdings kann man allgemein definieren:<br />
Definition 3.5 (Schwellenwert allgemein). Sei j Neuron. Der Schwellenwert Θj ist<br />
j eindeutig zugeordnet und markiert die Stelle der größten Steigung der Aktivierungsfunktion.<br />
3.2.5 Die Aktivierungsfunktion berechnet abhängig von Schwellenwert<br />
und <strong>Netze</strong>ingabe, wie stark ein Neuron aktiviert ist<br />
Wie wir schon gehört haben, hängt die Aktivierung aj eines Neurons j zu einem bestimmten<br />
Zeitpunkt davon ab, wie aktiviert das Neuron bereits war 3 und welche Eingaben<br />
es von außen erhalten hat.<br />
3 Die vorherige Aktivierung muss nicht immer in die Berechnung des neuen Aktivierungszustandes miteinbezogen<br />
werden – wir werden für beide Varianten Beispiele kennenlernen.
Definition 3.6 (Aktivierungsfunktion und Aktivierung). Sei j Neuron. Die Aktivierungsfunktion<br />
ist definiert als<br />
aj(t) = fact(netj(t), aj(t − 1), Θj) (3.3)<br />
und verarbeitet also die <strong>Netze</strong>ingabe netj und den alten Aktivierungszustand aj(t − 1)<br />
zu einem neuen Aktivierungszustand aj(t), wobei der Schwellenwert Θ wie oben schon<br />
erläutert eine große Rolle spielt.<br />
Im Unterschied zu anderen Größen innerhalb des <strong>Neuronale</strong>n <strong>Netze</strong>s (insbesondere zu<br />
den bisher definierten) ist die Aktivierungsfunktion oft global für alle oder zumindest<br />
eine Menge von Neuronen definiert, nur die Schwellenwerte unterscheiden sich dann<br />
von Neuron zu Neuron. Auch sollten wir im Hinterkopf behalten, dass sich die Schwellenwerte<br />
z.B. durch einen Lernvorgang ändern sollten, so dass es insbesondere nötig<br />
werden kann, die Schwellenwerte auf die Zeit zu beziehen und z.B. Θj als Θj(t) zu<br />
schreiben (das habe ich hier der Übersichtlichkeit zuliebe erst einmal unterlassen). Die<br />
Aktivierungsfunktion wird auch oft als Transferfunktion bezeichnet.<br />
SNIPE: Aktivierungsfunktionen sind in Snipe generalisiert zu „Neuronenverhaltensweisen“<br />
(Neuron Behaviors). Diese können zum einen ganz normale Aktivierungsfunktionen repräsentieren,<br />
aber auch interne Zustände besitzen. Diesbezügliche Programmbestandteile befinden sich<br />
im Paket neuronbehavior, wo auch einige der gleich vorgestellten Aktivierungsfunktionen implementiert<br />
sind. Das Interface NeuronBehavior erlaubt die Implementierung eigener Verhaltensweisen.<br />
Objekte, die von diesem Interface erben, können einem NeuralNetworkDescriptor übergeben<br />
werden; pro Neuronenschicht kann eine Neuronenverhaltensweise festgelegt werden.<br />
3.2.6 Gängige Aktivierungsfunktionen<br />
Die einfachste Aktivierungsfunktion ist die binäre Schwellenwertfunktion<br />
(Abb. 3.2 auf Seite 48), welche nur zwei Werte annehmen kann (auch Heaviside-<br />
Funktion genannt). Sie wechselt am Schwellenwert von einem Wert auf den andern,<br />
ist aber ansonsten konstant. Dies impliziert, dass sie am Schwellenwert nicht<br />
differenzierbar ist und die Ableitung ansonsten 0 ist. Dies macht z.B. das Lernen<br />
mit Backpropagation unmöglich (später mehr dazu). Beliebt ist weiterhin die auch<br />
Logistische Funktion genannte Fermifunktion (Abb. 3.2)<br />
1<br />
, (3.4)<br />
1 + e−x
welche einen Wertebereich von (0, 1) aufweist, sowie der Tangens Hyperbolicus (Abb.<br />
3.2) mit einem Wertebereich von (−1, 1) – beide differenzierbar. Die Fermifunktion ist<br />
einfach um einen Temperaturparameter T zu der Form<br />
1<br />
1 + e −x<br />
T<br />
erweiterbar, der, je kleiner man ihn wählt, die Funktion auf der x-Achse zusammenstaucht.<br />
So kann man sie beliebig an die Heaviside-Funktion annähern. Es existieren<br />
übrigens auch Aktivierungsfunktionen, welche nicht eindeutig bestimmt sind, sondern<br />
nach einer Zufallsverteilung von der Eingabe abhängen (stochastische Aktivierungsfunktionen).<br />
Eine wirklich erwähnenswerte Alternative zum Tangens Hyperbolicus wurde von Anguita<br />
et al. vorgeschlagen [APZ93]. Inspiriert von den eher langsamen Computern, die<br />
es 1993 gab, haben sie sich Gedanken gemacht, wie man ein <strong>Neuronale</strong>s Netz beschleunigen<br />
könnte, und kamen schnell darauf, dass die Approximation der e-Funktion im<br />
Tangens Hyperbolicus rechenzeitmäßig sehr lange dauert. So haben sie den Tangens<br />
Hyperbolicus näherungsweise mit zwei Parabelbögen und zwei Halbgeraden nachgebaut.<br />
Die resultierende Funktion bietet zwar statt des Werteberichs von [−1; 1] „nur“<br />
einen Wertebereich von [−0.96016; 0.96016], lässt sich aber – je nach CPU – um den<br />
Faktor 200 schneller mittels einer Addition und zwei Multiplikationen berechnen und<br />
bietet auch noch weitere Vorteile, die an anderer Stelle genannt werden.<br />
SNIPE: Die hier vorgestellten stetigen Aktivierungsfunktionen finden sich in den Klassen Fermi<br />
sowie TangensHyperbolicus im Paket neuronbehavior wieder. Die schnelle Approximation des<br />
Tangens Hyperbolicus befindet sich in der Klasse TangensHyperbolicusAnguita.<br />
3.2.7 Eine Ausgabefunktion kann genutzt werden, um die Aktivierung<br />
nochmals zu verarbeiten<br />
Die Ausgabefunktion eines Neurons j berechnet die Werte, die an die anderen Neurone,<br />
zu welchen eine Verbindung von j besteht, weitergegeben werden. Formaler:<br />
Definition 3.7 (Ausgabefunktion). Sei j Neuron. Die Ausgabefunktion<br />
fout(aj) = oj<br />
berechnet dann den Ausgabewert oj des Neurons j aus seinem Aktivierungszustand aj.<br />
(3.5)<br />
(3.6)
f(x)<br />
1<br />
0.5<br />
0<br />
−0.5<br />
−1<br />
Heaviside−Funktion<br />
−4 −2 0 2 4<br />
x<br />
tanh(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
−0.2<br />
−0.4<br />
−0.6<br />
−0.8<br />
−1<br />
f(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
Tangens Hyperbolicus<br />
−4 −2 0 2 4<br />
x<br />
Fermi−Funktion mit Temperaturparameter<br />
−4 −2 0 2 4<br />
Abbildung 3.2: Verschiedene gängige Aktivierungsfunktionen, von oben nach unten: Heavisidebzw.<br />
Binäre Schwellenwertfunktion, Fermifunktion, Tangens hyperbolicus. Die Fermifunktion wurde<br />
um einen Temperaturparameter erweitert. Die ursprüngliche Fermifunktion ist hierbei dunkel<br />
herausgestellt, die Temperaturparameter bei den modifizierten Fermifunktionen betragen (aufstei-<br />
gend geordnet nach Anstieg) 1<br />
2<br />
, 1<br />
5<br />
, 1<br />
10<br />
und 1<br />
25 .<br />
x
Auch die Ausgabefunktion ist i.d.R. global definiert. Oft ist diese Funktion die Identität,<br />
d.h. es wird direkt die Aktivierung aj ausgegeben 4 :<br />
fout(aj) = aj, also oj = aj<br />
Solange nicht explizit anders angegeben, werden wir innerhalb dieser Arbeit die Identität<br />
als Ausgabefunktion verwenden.<br />
3.2.8 Lernverfahren passen ein Netz auf unsere Bedürfnisse an<br />
Da wir uns diesem Thema später noch sehr ausführlich widmen werden und erst einmal<br />
die Grundsätze des Aufbaus <strong>Neuronale</strong>r <strong>Netze</strong> kennen lernen möchten, sei hier nur kurz<br />
und allgemein definiert:<br />
Definition 3.8 (Lernregel, allgemein). Ein Lernverfahren ist ein Algorithmus, der<br />
das <strong>Neuronale</strong> Netz verändert und ihm so beibringt, für eine vorgegebene Eingabe eine<br />
gewünschte Ausgabe zu produzieren.<br />
3.3 Verschiedene Netztopologien<br />
Nachdem wir nun den Aufbau der Bestandteile <strong>Neuronale</strong>r <strong>Netze</strong> kennengelernt haben,<br />
möchte ich einen Überblick über die gängigen Topologien (= Bauarten) von <strong>Neuronale</strong>n<br />
<strong>Netze</strong>n geben – also aus den Bausteinen <strong>Netze</strong> bauen. Jede beschriebene Topologie<br />
wird sowohl mit Abbildung als auch durch seine Hinton-Darstellung illustriert, damit<br />
der Leser sofort die Charakteristika sehen und bei der Betrachtung anderer <strong>Netze</strong><br />
anwenden kann.<br />
Die gepunktet eingezeichneten Gewichte werden in der Hinton-Darstellung als hellgraue<br />
Kästchen dargestellt, die durchgezogenen als dunkelgraue. Die der Übersichtlichkeit<br />
halber hinzugefügten Input- und Outputpfeile sind in der Hinton-Darstellung nicht<br />
zu finden. Um zu verdeutlichen, dass die Verbindungen von den Zeilenneuronen zu den<br />
Spaltenneuronen gehen, ist in der oberen linken Zelle der kleine Pfeil eingefügt.<br />
SNIPE: Snipe ist dafür ausgelegt, verschiedenste Netztopologien realisieren zu können. Hierfür<br />
unterscheidet Snipe verschiedene Synapsenklassen (abhängig von Synapsenstart und -Ziel), die<br />
in einer NeuralNetworkDescriptor-Instanz für die davon abhängenden <strong>Netze</strong> nach Belieben<br />
mittels der setAllowed-Methoden erlaubt oder verboten werden können.<br />
4 Andere Definitionen der Ausgabe können sinnreich sein, wenn der Wertebereich einer Aktivierungsfunktion<br />
nicht ausreichend ist.<br />
(3.7)
3.3.1 FeedForward-<strong>Netze</strong> bestehen aus Schichten und Verbindungen zur<br />
jeweils nächsten Schicht<br />
FeedForward-<strong>Netze</strong> (Abb. 3.3 auf der rechten Seite) sind in dieser Arbeit die <strong>Netze</strong>,<br />
die wir zunächst erforschen werden (wenn auch später andere Topologien verwendet<br />
werden). Die Neurone sind in Schichten eingeteilt: Eine Eingabeschicht, n versteckte<br />
Verarbeitungsschichten (unsichtbar von außen, weswegen man die Neurone<br />
darin auch als versteckt bezeichnet) und eine Ausgabeschicht. Die Verbindungen<br />
von einem jeden Neuron dürfen bei einem FeedForward-Netz ausschließlich ein Neuron<br />
der nächsten Schicht (in Richtung Ausgabeschicht) treffen. Die für ein FeedForward-<br />
Netz zugelassenen Verbindungen sind in Abb. 3.3 auf der rechten Seite durchgezogen<br />
dargestellt. Sehr oft begegnet man FeedForward-<strong>Netze</strong>n, in denen jedes Neuron i eine<br />
Verbindung zu allen Neuronen der nachfolgenden Schicht besitzt (diese Schichten nennt<br />
man dann untereinander vollverknüpft). Outputneurone werden zur Vermeidung von<br />
Benennungskonflikten oft mit Ω bezeichnet.<br />
Definition 3.9 (FeedForward-Netz). Ein FeedForward-Netz (Abb. 3.3 auf der rechten<br />
Seite) besitzt klar abgetrennte Schichten von Neuronen: Eine Eingabeschicht, eine<br />
Ausgabeschicht und beliebig viele innere, von außen nicht sichtbare Verarbeitungsschichten<br />
(auch versteckte Schichten bzw. hidden layer genannt). Verbindungen sind<br />
nur zu Neuronen der jeweils nächsten Schicht erlaubt.<br />
3.3.1.1 ShortCut-Verbindungen überspringen Schichten<br />
Manche FeedForward-<strong>Netze</strong> gestatten sog. ShortCut-Connections (Abb. 3.4 auf Seite<br />
52): Verbindungen, welche eine oder mehrere Ebenen überspringen. Auch diese Verbindungen<br />
dürfen ausschließlich in Richtung der Ausgabeschicht zeigen.<br />
Definition 3.10 (FeedForward-Netz mit ShortCut-Connections). Wie beim<br />
FeedForward-Netz, doch dürfen Verbindungen nicht nur die nächste, sondern auch<br />
jede andere nachfolgende Schicht zum Ziel haben.<br />
3.3.2 Rückgekoppelte <strong>Netze</strong> beeinflussen sich selbst<br />
Man spricht von einer Rückkopplung oder Rekurrenz, wenn ein Neuron sich auf<br />
irgendeine Weise oder durch irgendeinen Verbindungsweg selbst beeinflussen kann. Bei<br />
rückgekoppelten oder rekurrenten <strong>Netze</strong>n sind nicht immer Input- oder Outputneurone<br />
explizit definiert, daher lasse ich die diesbezügliche Beschriftung in den Abbildungen<br />
weg und nummeriere die Neurone nur durch.
i1<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥<br />
❆<br />
❯ ❯<br />
<br />
❆<br />
❯<br />
i2<br />
❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
<br />
❯ ❯ ❯<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
⑥<br />
❯ ❯ ❯ <br />
⑥⑥⑥⑥⑥⑥⑥⑥<br />
❆❆❆<br />
❆❆❆<br />
❆❆❆<br />
<br />
h1 ❆<br />
❯ ❯<br />
<br />
❆<br />
❯<br />
h2<br />
❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
<br />
⑥<br />
❯ ❯ ❯ ❯ ❯ ❯ <br />
⑥⑥⑥⑥⑥⑥⑥⑥<br />
h3<br />
❆<br />
<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
Ω1<br />
Ω2<br />
<br />
i1 i2 h1 h2 h3 Ω1 Ω2<br />
i1<br />
i2<br />
h1<br />
h2<br />
h3<br />
Ω1<br />
Ω2<br />
Abbildung 3.3: Ein FeedForward-Netz mit drei Schichten: Zwei Inputneurone, drei versteckte<br />
Neurone und zwei Outputneurone. Charakteristisch in der Hinton-Darstellung für vollverknüpfte<br />
FeedForward-<strong>Netze</strong>: Die Blockbildung über der Diagonalen.
i1<br />
i2<br />
<br />
<br />
<br />
<br />
<br />
<br />
h1<br />
h2<br />
h3<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ω1<br />
Ω2<br />
<br />
i1 i2 h1 h2 h3 Ω1 Ω2<br />
i1<br />
i2<br />
h1<br />
h2<br />
h3<br />
Ω1<br />
Ω2<br />
Abbildung 3.4: Ein FeedForward-Netz mit durchgezogen dargestellten Shortcut-Connections.<br />
Rechts der FeedForward-Blöcke sind in der Hinton-Darstellung neue Verbindungen hinzugekommen.
1<br />
<br />
2<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3 4 5<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6 7<br />
1 2 3 4 5 6 7<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
Abbildung 3.5: Ein FeedForward-ähnliches Netz mit direkt rückgekoppelten Neuronen. Die direkten<br />
Rückkopplungen sind durchgezogen dargestellt. Sie entsprechen in der Hinton-Darstellung genau<br />
der Diagonalen der Matrix.<br />
3.3.2.1 Direkte Rückkopplungen starten und enden an demselben Neuron<br />
Manche <strong>Netze</strong> lassen Verbindungen von einem Neuron zu sich selbst zu, was als direkte<br />
Rückkopplung (manchmal auch Selbstrückkopplung oder Selbstrekurrenz) bezeichnet<br />
wird (Abb. 3.5). Neurone hemmen und stärken sich so selbst, um an ihre Aktivierungsgrenzen<br />
zu gelangen.<br />
Definition 3.11 (Direkte Rückkopplung). Wir erweitern wieder das FeedForward-<br />
Netz, diesmal um Verbindungen von einem Neuron j zu sich selbst, deren Gewichte<br />
dann den Namen wj,j tragen. Anders ausgedrückt darf die Diagonale der Gewichtsmatrix<br />
W ungleich 0 sein.
1<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3<br />
4<br />
5<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6<br />
7<br />
1 2 3 4 5 6 7<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
Abbildung 3.6: Ein FeedForward-ähnliches Netz mit indirekt rückgekoppelten Neuronen. Die indirekten<br />
Rückkopplungen sind durchgezogen dargestellt. Wie wir sehen, können hier auch Verbindungen<br />
zu vorherigen Schichten existieren. Die zu den FeedForward-Blöcken symmetrischen Felder in<br />
der Hinton-Darstellung sind nun belegt.<br />
3.3.2.2 Indirekte Rückkopplungen beeinflussen ihr Startneuron nur über Umwege<br />
Sind Verbindungen in Richtung der Eingabeschicht gestattet, so nennt man diese indirekte<br />
Rückkopplungen. Ein Neuron j kann sich dann durch Umwege nach vorne<br />
selbst beeinflussen, indem es z.B. die Neurone der nächsten Schicht beeinflusst und die<br />
Neurone dieser nächsten Schicht wieder j (Abb. 3.6).<br />
Definition 3.12 (Indirekte Rückkopplung). Wieder vom FeedForward-Netz ausgehend,<br />
sind diesmal zusätzlich Verbindungen von Neuronen zur vorherigen Schicht erlaubt,<br />
also dürfen die Werte im Bereich unter der Diagonalen von W ungleich 0 sein.
1 <br />
<br />
2<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3 <br />
<br />
<br />
4 <br />
5<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6 <br />
7<br />
1 2 3 4 5 6 7<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
Abbildung 3.7: Ein FeedForward-ähnliches Netz mit lateral rückgekoppelten Neuronen. Die direkten<br />
Rückkopplungen sind durchgezogen dargestellt. Rückkopplungen existieren hier nur ebenenweise.<br />
In der Hinton-Darstellung sammeln sich um die Diagonale gefüllte Quadrate in Höhe der<br />
FeedForward-Blöcke an, die jedoch die Diagonale frei lassen.<br />
3.3.2.3 Laterale Rückkopplungen verbinden Neuronen in ein- und derselben<br />
Ebene<br />
Verbindungen von Neuronen innerhalb einer Ebene heißen laterale Rückkopplungen<br />
(Abb. 3.7). Oft hemmt hier jedes Neuron die anderen Neurone der Ebene und<br />
verstärkt sich selbst, es wird dann nur das stärkste Neuron aktiv (Winner-Takes-<br />
All-Schema).<br />
Definition 3.13 (Laterale Rückkopplung). Ein lateral rückgekoppeltes Netz erlaubt<br />
Verbindungen innerhalb einer Schicht.
1 ❚<br />
<br />
❚<br />
<br />
<br />
❃<br />
❚❚<br />
<br />
<br />
❃ ❚❚<br />
<br />
2<br />
❃ ❚❚<br />
<br />
❃<br />
❚❚<br />
❃ ❚❚<br />
❃ ❚❚<br />
❃<br />
❚❚<br />
❃<br />
❚❚<br />
<br />
❚❚<br />
❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥<br />
<br />
❚❚❚<br />
<br />
<br />
<br />
❃<br />
❃<br />
<br />
3 ❚ ❚❚❚❚❚❚❚❚❚<br />
❚❚❚❚❚❚❚❚❚<br />
❚❚❚❚<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4<br />
<br />
5<br />
❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥<br />
<br />
<br />
<br />
<br />
<br />
❃❃❃❃❃❃❃❃❃<br />
<br />
❃<br />
❃❃❃❃❃❃❃❃<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6 <br />
<br />
7<br />
1 2 3 4 5 6 7<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
Abbildung 3.8: Ein vollständig verbundenes Netz mit symmetrischen Verbindungen, ohne direkte<br />
Rückkopplungen. Nur die Diagonale in der Hinton-Darstellung bleibt frei.<br />
3.3.3 Vollständig verbundene <strong>Netze</strong> erlauben jede denkbare Verbindung<br />
Vollständig verbundene <strong>Netze</strong> erlauben Verbindungen zwischen allen Neuronen, außer<br />
direkten Rückkopplungen; außerdem müssen die Verbindungen symmetrisch sein<br />
(Abb. 3.8). Ein populäres Beispiel sind die selbstorganisierenden Karten, welche in Kap.<br />
10 vorgestellt werden.<br />
Definition 3.14 (Vollständiger Verbund). Hier darf prinzipiell jedes Neuron zu jedem<br />
eine Verbindung unterhalten – allerdings kann so auch jedes Neuron Eingabeneuron<br />
werden, weshalb direkte Rückkopplungen i.d.R. hier nicht angewandt werden, und es<br />
keine klar definierten Schichten mehr gibt. Die Matrix W darf also überall ungleich 0<br />
sein, außer auf ihrer Diagonalen.
3.4 Das Biasneuron ist ein technischer Trick, Schwellwerte als<br />
Verbindungsgewichte zu behandeln<br />
Wir wissen mittlerweile, dass Neurone in vielen Netzparadigmen einen Schwellenwert<br />
besitzen, der angibt, ab wann ein Neuron aktiv ist. Der Schwellenwert ist also ein<br />
Parameter der Aktivierungsfunktion eines Neurons. Dies ist zwar biologisch am plausibelsten,<br />
es ist jedoch kompliziert, zwecks Training des Schwellenwerts zur Laufzeit auf<br />
die Aktivierungsfunktion zuzugreifen.<br />
Man kann allerdings Schwellenwerte Θj1 , . . . , Θjn für Neurone j1, j2, . . . , jn auch als<br />
Gewicht einer Verbindung von einem immer feuernden Neuron realisieren: Zu diesem<br />
Zweck integriert man ein zusätzliches, immer 1 ausgebendes Biasneuron in das Netz,<br />
verbindet es mit den Neuronen j1, j2, . . . , jn und gibt diesen neuen Verbindungen die<br />
Gewichte −Θj1 , . . . , −Θjn, also die negativen Schwellenwerte.<br />
Definition 3.15. Ein Biasneuron ist ein Neuron, welches immer 1 ausgibt und als<br />
BIAS<br />
dargestellt wird. Es wird verwendet, um Schwellwerte als Gewichte zu repräsentieren,<br />
so dass beliebige Lernverfahren sie direkt mitsamt den Gewichten trainieren können.<br />
Den Schwellenwert der Neurone j1, j2, . . . , jn setzt man dann auf 0. Nun sind die Schwellenwerte<br />
als Verbindungsgewichte implementiert (Abb. 3.9 auf der folgenden Seite) und<br />
können beim Training von Verbindungsgewichten direkt mittrainiert werden, was uns<br />
das Lernen erheblich vereinfacht.<br />
Anders ausgedrückt: Wir verschieben die Einrechnung des Schwellenwerts von der Aktivierungsfunktion<br />
in die Propagierungsfunktion. Noch kürzer: Der Schwellenwert wird<br />
jetzt einfach von der <strong>Netze</strong>ingabe subtrahiert, ist also Teil der <strong>Netze</strong>ingabe. Formaler:<br />
Seien j1, j2, . . . , jn Neurone mit Schwellenwerten Θj1 , . . . , Θjn. Durch Einsetzen eines<br />
immer 1 ausgebenden Biasneurons, Erstellen von Verbindungen von diesem zu den<br />
Neuronen j1, j2, . . . , jn und Gewichtung dieser Verbindungen wBIAS,j1 , . . . , wBIAS,jnmit<br />
−Θj1 , . . . , −Θjn kann man Θj1 = . . . = Θjn = 0 setzen und erhält ein äquivalentes <strong>Neuronale</strong>s<br />
Netz, bei dem sämtliche Schwellenwerte durch Verbindungsgewichte realisiert<br />
sind.<br />
Der Vorteil des Biasneurons ist ohne Zweifel die vielfach einfachere Implementierung<br />
des <strong>Netze</strong>s. Als Nachteil sei genannt, dass die Darstellung des <strong>Netze</strong>s schon bei nur
Θ1 ❇❇❇<br />
❇❇❇<br />
❇❇<br />
⑤<br />
❇<br />
⑤⑤⑤⑤⑤⑤⑤⑤<br />
Θ2<br />
Θ3<br />
<br />
<br />
<br />
BIAS −Θ1 <br />
❆❚<br />
<br />
❆<br />
❚❚<br />
❆ ❚<br />
0<br />
❚<br />
❆ ❚❚❚❚❚<br />
−Θ2 ❆ −Θ3 ❆ ❚<br />
❆<br />
❚❚<br />
❆<br />
❚❚<br />
<br />
<br />
❚❚❚❚❚<br />
<br />
0<br />
0<br />
Abbildung 3.9: Zwei äquivalente <strong>Neuronale</strong> <strong>Netze</strong>, links eins ohne, rechts eins mit Biasneuron. Die<br />
Neuronenschwellenwerte stehen in den Neuronen, Verbindungsgewichte an den Verbindungen. Der<br />
Übersichtlichkeit zuliebe habe ich Gewichte der schon vorhandenen (rechts gepunktet dargestellten)<br />
Verbindungen nicht extra aufgeschrieben.<br />
wenigen Neuronen recht unansehnlich wird, von einer großen Neuronenanzahl ganz zu<br />
schweigen. Übrigens wird ein Biasneuron auch oft On-Neuron genannt.<br />
Wir wollen mit dem Biasneuron so verfahren, dass es ab hier der Übersichtlichkeit<br />
halber nicht mehr mit abgebildet wird, wir aber wissen, dass es so etwas gibt und dass<br />
man die Schwellenwerte damit einfach als Gewichte behandeln kann.<br />
SNIPE: Auch in Snipe wurde anstatt Schwellwerten ein Biasneuron implementiert, es trägt den<br />
Index 0.<br />
3.5 Darstellung von Neuronen<br />
Wir haben oben bereits gesehen, dass man in Neuronen ihren Namen oder aber ihren<br />
Schwellenwert schreiben kann. Eine weitere sinnvolle Darstellungsmethode, welche wir<br />
auch in der weiteren Arbeit mehrfach anwenden werden, ist, Neurone nach ihrer Datenverarbeitungsart<br />
darzustellen. Einige Beispiele ohne weitere Erläuterungen seien in<br />
Abb. 3.10 auf der rechten Seite gegeben – erläutert werden die Neuronenarten, sobald<br />
sie gebraucht werden.
||c,x||<br />
Gauß<br />
Σ<br />
Tanh<br />
<br />
Σ<br />
Fermi<br />
Σ<br />
<br />
Σ<br />
fact<br />
Σ<br />
<br />
BIAS<br />
Abbildung 3.10: Verschiedene Neuronenarten, denen wir im Text noch begegnen werden.<br />
3.6 Es ist nicht egal, in welcher Reihenfolge<br />
Neuronenaktivierungen berechnet werden<br />
Für ein <strong>Neuronale</strong>s Netz ist es von großer Bedeutung, in welcher Reihenfolge die<br />
einzelnen Neurone ihre Eingaben empfangen, verarbeiten, und Ergebnisse ausgeben.<br />
Hierbei werden zwei Modellklassen unterschieden:<br />
3.6.1 Synchrone Aktivierung<br />
Alle Neurone ändern ihre Werte synchron, berechnen also simultan <strong>Netze</strong>ingaben,<br />
Aktivierung und Ausgabe und geben diese weiter. Synchrone Aktivierung kommt dem<br />
biologischen Vorbild am nächsten, macht aber – wenn sie in Hardware implementiert<br />
werden soll – nur auf bestimmten Parallelrechnern Sinn und speziell keinen Sinn für<br />
FeedForward-<strong>Netze</strong>. Diese Variante ist die allgemeinste und kann mit <strong>Netze</strong>n beliebiger<br />
Topologie sinnvoll angewandt werden.<br />
Definition 3.16 (Synchrone Aktivierung). Alle Neurone eines <strong>Netze</strong>s berechnen<br />
gleichzeitig <strong>Netze</strong>ingaben mittels Propagierungsfunktion, Aktivierung mittels Aktivierungsfunktion<br />
und Ausgabe mittels Ausgabefunktion. Hiernach ist der Aktivierungszyklus<br />
abgeschlossen.<br />
SNIPE: Softwaretechnisch würde man diese sehr allgemeine Aktivierungsreihenfolge realisieren,<br />
indem man in jedem neuen Zeitschritt zunächst alle <strong>Netze</strong>ingaben aus den existierenden<br />
Aktivierungen berechnet, zwischenspeichert, und anschließend aus den <strong>Netze</strong>ingaben alle Aktivierungen.<br />
Und so ist das auch genau das, was in Snipe passiert, denn Snipe muss ja beliebige<br />
Topologien realisieren können.
3.6.2 Asynchrone Aktivierung<br />
Hier ändern die Neurone ihre Werte nicht simultan, sondern zu verschiedenen Zeitpunkten.<br />
Hierfür gibt es verschiedene Ordnungen, von denen ich ausgewählte vorstelle:<br />
3.6.2.1 Zufällige Ordnung<br />
Definition 3.17 (Zufällige Aktivierungsordnung). Bei der zufälligen Aktivierungsordnung<br />
wird jeweils ein Neuron i zufällig gewählt und dessen neti, ai und oi<br />
aktualisiert. Bei n vielen Neuronen ist ein Zyklus die n-malige Durchführung dieses<br />
Schrittes. Offensichtlich werden manche Neurone pro Zyklus mehrfach aktualisiert,<br />
andere hingegen gar nicht.<br />
Es ist klar, dass diese Aktivierungsordnung nicht immer sinnreich ist.<br />
3.6.2.2 Zufällige Permutation<br />
Bei der Zufälligen Permutation wird pro Zyklus jedes Neuron genau einmal berücksichtigt,<br />
das Ganze allerdings in zufälliger Reihenfolge.<br />
Definition 3.18 (Zufällige Permutation). Zunächst wird eine Permutation der Neurone<br />
zufällig berechnet, welche die Aktivierungsreihenfolge festlegt. In dieser Reihenfolge<br />
werden die Neurone dann sukzessive abgearbeitet.<br />
Auch diese Aktivierungsreihenfolge wird nicht oft eingesetzt, weil erstens die Reihenfolge<br />
im Allgemeinen nicht sinnvoll ist und es zweitens sehr zeit- bzw. rechenaufwändig<br />
ist, bei jedem Zyklus eine neue Permutation zu berechnen. Wir werden in Form<br />
der Hopfield-<strong>Netze</strong> (Kap. 8) zwar eine Topologie kennenlernen, welche nominell eine<br />
zufällige oder zufällig permutierte Aktivierungsreihenfolge besitzt – die praktische Umsetzung<br />
sieht dort allerdings so aus, dass man aus o.g. Gründen eine feste Reihenfolge<br />
verwendet.<br />
Bei allen Ordnungen können wahlweise entweder die alten Aktivierungen der Neurone<br />
des Zeitpunkts t als Ausgangspunkt genommen werden, oder aber, wo vorhanden,<br />
bereits die Aktivierungen des Zeitpunkts t + 1, für den wir eigentlich gerade die Aktivierungen<br />
errechnen.
3.6.2.3 Topologische Ordnung<br />
Definition 3.19 (Topologische Aktivierung). Bei der Topologischen Aktivierungsordnung<br />
werden die Neurone pro Zyklus in fester Ordnung aktualisiert, welche<br />
durch die Netztopologie definiert ist.<br />
Dieses Verfahren kommt nur für zyklenfreie, also rückkopplungsfreie <strong>Netze</strong> in Frage, da<br />
man sonst keine Aktivierungsreihenfolge finden kann. In FeedForward-<strong>Netze</strong>n (für die<br />
das Verfahren äußerst günstig ist) würden so erst die Eingabeneurone aktualisiert, danach<br />
die inneren Neurone, als letztes die Ausgabeneurone. Dies spart eine Menge Zeit:<br />
Bei synchroner Aktivierung würde man für ein Feed-Forward-Netz mit drei Schichten<br />
beispielsweise drei vollständige Propagierungszyklen benötigen, damit eine Eingabe<br />
auch Auswirkungen auf die Ausgabeneurone haben kann. Mittels topologischer Aktivierung<br />
ist dies mit nur einem Propagierungszyklus geschafft. Allerdings lässt sich<br />
nicht für jede Netztopologie eine sinnvolle Ordnung finden, um auf diese Weise Zeit zu<br />
sparen.<br />
SNIPE: Wenn der Leser mit Snipe FeedForward-<strong>Netze</strong> realisieren und auf diese Weise Rechenzeit<br />
einsparen möchte, so kann er in der Dokumentation zur Klasse NeuralNetworkDescriptor<br />
nach der Funktion Fastprop suchen und diese aktivieren. Während der Propagierung werden<br />
die Neurone dann nacheinander durchgegangen und für jedes Neuron <strong>Netze</strong>ingabe und Aktivierung<br />
auf einmal berechnet. Da die Neurone von Eingabeschicht über die verschiedenen Schichten<br />
bis hin zur Ausgabeschicht durchgehend aufsteigend nummeriert sind, entspricht diese Propagierungsvariante<br />
der topologisch sinnvollen Ordnung für FeedForward-<strong>Netze</strong>.<br />
3.6.2.4 Feste Aktivierungsordnungen in der Implementierung<br />
Offensichtlich kann man sich auch feste Aktivierungsordnungen definieren. Es ist<br />
daher eine beliebte Methode bei der Implementierung von z.B. FeedForward-<strong>Netze</strong>n,<br />
die Aktivierungsreihenfolge einmal nach der Topologie zu ermitteln und zur Laufzeit<br />
diese ermittelte Reihenfolge ohne weitere Prüfung weiter zu verwenden. Dies ist jedoch<br />
bei <strong>Netze</strong>n, die ihre Topologie verändern können, nicht unbedingt sinnvoll.<br />
3.7 Kommunikation mit der Außenwelt: Ein- und Ausgabe<br />
von Daten in und von <strong>Neuronale</strong>n <strong>Netze</strong>n<br />
Zuletzt sei noch betrachtet, dass in viele Arten von <strong>Neuronale</strong>n <strong>Netze</strong>n natürlich auch<br />
Daten eingegeben werden können. Diese werden dann verarbeitet und können eine
Ausgabe hervorrufen. Betrachten wir beispielsweise das FeedForward-Netz aus Abb. 3.3<br />
auf Seite 51: Es hat zwei Eingabe- und zwei Ausgabeneurone, also auch zwei numerische<br />
Eingaben x1, x2 und Ausgaben y1, y2. Diese Schreibweise wird natürlich für <strong>Netze</strong> mit<br />
vielen Ein- und Ausgabeneuronen mühselig – insofern machen wir es uns einfach und<br />
fassen die Ein- und Ausgabekomponenten für n Ein- bzw. Ausgabeneurone in den<br />
Vektoren x = (x1, x2, . . . , xn) und y = (y1, y2, . . . , yn) zusammen.<br />
Definition 3.20 (Eingabevektor). Ein Netz mit n vielen Eingabeneuronen benötigt<br />
n Eingaben x1, x2, . . . , xn. Wir fassen diese als Eingabevektor x = (x1, x2, . . . , xn)<br />
auf. Die Eingabedimension bezeichnen wir also mit n. Daten werden in ein <strong>Neuronale</strong>s<br />
Netz eingegeben, indem die Komponenten des Eingabevektors einfach bei den<br />
Eingabeneuronen als <strong>Netze</strong>ingabe verwendet werden.<br />
Definition 3.21 (Ausgabevektor). Ein Netz mit m vielen Ausgabeneuronen liefert<br />
m Ausgaben y1, y2, . . . , ym. Wir fassen diese als Ausgabevektor y = (y1, y2, . . . , ym)<br />
auf. Die Ausgabedimension bezeichnen wir also mit m. Daten werden von einem<br />
<strong>Neuronale</strong>n Netz ausgegeben, indem die Komponenten des Ausgabevektors von den<br />
Ausgabewerten der Ausgabeneurone übernommen werden.<br />
SNIPE: Um Daten durch eine NeuralNetwork-Instanz zu propagieren, wird die propagate-<br />
Methode genutzt. Sie nimmt den Eingabevektor als Array von Doubles entgegen und liefert<br />
einen ebensolchen Ausgabevektor.<br />
Wir haben nun die Grundbausteine der <strong>Neuronale</strong>n <strong>Netze</strong> definiert und näher betrachtet<br />
– ohne jedoch ein Netz einmal in Aktion zu sehen. Wir wollen mit dieser rein<br />
erklärenden Ansicht zunächst etwas weiter fortfahren und ganz allgemein beschreiben,<br />
wie ein <strong>Neuronale</strong>s Netz lernen könnte.<br />
Übungsaufgaben<br />
Aufgabe 5. Ist es (Ihrer Meinung nach) sinnvoll, bei schichtenbasierten <strong>Netze</strong>n wie<br />
z.B. FeedForward-<strong>Netze</strong>n ein Biasneuron pro Schicht einzufügen? Erörtern Sie dies in<br />
Bezug auf die Darstellung und die Implementierung des <strong>Netze</strong>s. Ändert sich etwas am<br />
Ergebnis des <strong>Netze</strong>s?<br />
Aufgabe 6. Zeigen Sie sowohl für die Fermifunktion f(x), als auch für den Tangens<br />
Hyperbolicus tanh(x), dass sich die Ableitungen der Funktionen durch die Funktion<br />
selbst ausdrücken lassen, dass also die beiden Behauptungen<br />
1. f ′ (x) = f(x) · (1 − f(x)) und
2. tanh ′ (x) = 1 − tanh 2 (x)<br />
gelten.
Kapitel 4<br />
Grundlagen zu Lernprozess und<br />
Trainingsbeispielen<br />
Ansätze und Gedanken, auf welche Arten Maschinen etwas beizubringen ist.<br />
Korrigiert man <strong>Neuronale</strong> <strong>Netze</strong>? Bestärkt man sie nur? Lässt man sie gar<br />
ganz alleine ohne Hilfe lernen? Gedanken darüber, was wir während des<br />
Lernvorganges überhaupt verändern möchten, wie wir es verändern, über<br />
Fehlermessung und wann wir mit dem Lernen fertig sind.<br />
Wie schon beschrieben, besteht das interessanteste Merkmal <strong>Neuronale</strong>r <strong>Netze</strong> in ihrer<br />
Fähigkeit, sich Problemen durch Training vertraut zu machen und, nach ausreichendem<br />
Training, auch bis dato unbekannte Probleme derselben Klasse lösen zu können, was<br />
man als Generalisierung bezeichnet. Bevor wir konkrete Lernverfahren kennenlernen,<br />
möchte ich in diesem Kapitel zunächst grundsätzliche Gedanken zum Lernprozess<br />
anregen.<br />
4.1 Es gibt verschiedene Paradigmen zu lernen<br />
Lernen ist ein weiter Begriff. Es bedeutet, das ein System sich in irgendeiner Form<br />
verändert, um sich z.B. an Veränderungen in seiner Umwelt anzupassen. Grundsätzlich<br />
verändert sich ein <strong>Neuronale</strong>s Netz mit der Veränderung seiner Bestandteile, die wir<br />
eben kennengelernt haben. Theoretisch könnte ein <strong>Neuronale</strong>s Netz also lernen, indem<br />
es<br />
1. neue Verbindungen entwickelt,<br />
2. vorhandene Verbindungen löscht,<br />
65
3. Verbindungsgewichte verändert,<br />
4. Schwellenwerte von Neuronen ändert,<br />
5. eine oder mehrere der drei Neuronenfunktionen (wir erinnern uns: Aktivierungs-,<br />
Propagierungs- und Ausgabefunktion) abwandelt,<br />
6. neue Neurone entwickelt<br />
7. oder aber vorhandene Neurone löscht (und damit natürlich Verbindungen).<br />
Wir behandeln die Gewichtsveränderung zunächst als die gängigste. Weiterhin kann<br />
das Löschen von Verbindungen hierdurch realisiert werden, dass man zusätzlich noch<br />
dafür Sorge trägt, dass eine zum Löschen auf 0 gesetzte Verbindung nicht weiter trainiert<br />
wird. Man kann weiterhin Verbindungen entwickeln durch das Setzen einer nicht<br />
vorhandenen Verbindung (welche ja in der Verbindungsmatrix den Wert 0 innehat)<br />
auf einen von 0 verschiedenen Wert. Für die Modifikation der Schwellenwerte verweise<br />
ich auf die Möglichkeit, diese als Gewichte zu implementieren (Abschnitt 3.4). Wir<br />
erschlagen also gleich vier der obigen Punkte durch reines Training von Verbindungsgewichten.<br />
Die Veränderung von Neuronenfunktionen ist schwierig zu implementieren, nicht sehr<br />
intuitiv und auch nicht wirklich biologisch motiviert. Sie ist daher nicht verbreitet und<br />
wird hier zunächst nicht behandelt werden. Die Möglichkeiten, Neurone zu entwickeln<br />
oder zu löschen, liefern während des Trainings eines <strong>Neuronale</strong>n <strong>Netze</strong>s nicht nur gut<br />
eingestellte Gewichte, sondern optimieren auch noch die Netztopologie - sie gewinnen<br />
daher immer mehr an Interesse und werden oft mit evolutionären Verfahren realisiert.<br />
Da wir aber einsehen, dass wir einen Großteil der Lernmöglichkeiten bereits durch<br />
Gewichtsveränderungen abdecken können, sind auch sie zunächst nicht Gegenstand<br />
dieser Arbeit (es ist aber geplant, die Arbeit in diese Richtung zu erweitern).<br />
SNIPE: Methoden der Klasse NeuralNetwork erlauben das Ändern von Verbindungsgewichten<br />
und Schwellenwerten sowie das Hinzufügen und Entfernen von Verbindungen sowie ganzen<br />
Neuronen. Methoden der Klasse NeuralNetworkDescriptor erlauben das Ändern der Aktivierungsfunktion<br />
pro Schicht.<br />
Wir lassen also unser <strong>Neuronale</strong>s Netz lernen, indem wir es die Verbindungsgewichte<br />
modifizieren lassen nach Regeln, die wir in Algorithmen fassen können – ein Lernverfahren<br />
ist also immer ein Algorithmus, den wir einfach mithilfe einer Programmiersprache<br />
implementieren können. Ich werde später voraussetzen, dass wir definieren können,<br />
was eine erwünschte, lernenswerte Ausgabe ist (und an dieser stelle auch die Trainingsbeispiele<br />
formal definieren) und dass wir eine Trainingsmenge an Lernbeispielen<br />
besitzen. Eine Trainingsmenge sei folgendermaßen definiert:
Definition 4.1 (Trainingsmenge). Als Trainingsmenge P bezeichnen wir eine Menge<br />
von Trainingsbeispielen, welche wir zum Training unseres <strong>Neuronale</strong>s <strong>Netze</strong>s verwenden.<br />
Ich stelle nun die drei wesentlichen Paradigmen des Lernens anhand der Unterschiede<br />
in der Beschaffenheit der Trainingsmenge vor.<br />
4.1.1 Unüberwachtes Lernen gibt dem Netz nur Eingabemuster, aber<br />
keine Lernhilfen<br />
Unüberwachtes Lernen (engl. unsupervised learning) ist die biologisch plausibelste<br />
Methode, die aber nicht für alle Fragestellungen geeignet ist. Gegeben sind nur<br />
Eingabemuster; das Netz versucht, ähnliche Muster zu identifizieren und in ähnliche<br />
Kategorien zu klassifizieren.<br />
Definition 4.2 (Unüberwachtes Lernen). Die Trainingsmenge besteht nur aus Eingabemustern,<br />
das Netz versucht selbst, Ähnlichkeiten herauszufinden und Musterklassen<br />
zu bilden.<br />
Als bekanntes Beispiel sei wieder auf die selbstorganisierenden Karten von Kohonen<br />
(Kap. 10) verwiesen.<br />
4.1.2 Bestärkendes Lernen gibt dem Netz Feedback, ob es sich gut oder<br />
schlecht verhält<br />
Beim bestärkenden Lernen (engl. reinforcement learning) wird dem Netz nach<br />
erfolgtem Durchlauf immerhin ein Wahrheits- oder reeller Wert geliefert, der definiert,<br />
ob das Ergebnis richtig oder falsch ist. Intuitiv ist klar, dass dieses Verfahren für viele<br />
Anwendungen zielstrebiger funktionieren sollte als unüberwachtes Lernen, erhält das<br />
Netz doch konkrete Anhaltspunkte zur Lösungsfindung.<br />
Definition 4.3 (Bestärkendes Lernen). Die Trainingsmenge besteht aus Eingabemustern,<br />
nach erfolgtem Durchlauf wird dem Netz ein Wert zurückgegeben, ob das Ergebnis<br />
falsch oder richtig war, u.U. noch wie falsch oder richtig es war.
4.1.3 Überwachtes Lernen hilft dem Netz mit Trainingsbeispielen und<br />
zugehörigen Lösungen<br />
Beim überwachten Lernen (engl. supervised learning) existiert eine Trainingsmenge<br />
von Eingabemustern sowie deren korrekte Ergebnisse in Form der genauen Aktivierung<br />
sämtlicher Ausgabeneurone. Für jedes in das Netz eingegebene Trainingsmuster<br />
kann so beispielsweise die Ausgabe direkt mit der korrekten Lösung verglichen werden<br />
und anhand der Differenz die Netzgewichtungen geändert werden. Ziel ist eine<br />
Veränderung der Gewichte dahingehend, dass das Netz nach dem Training nicht nur<br />
selbstständig Ein- und Ausgabemuster assoziieren, sondern bis dato unbekannte, ähnliche<br />
Eingabemuster einem plausiblen Ergebnis zuführen, also generalisieren kann.<br />
Definition 4.4 (Überwachtes Lernen). Die Trainingsmenge besteht aus Eingabemustern<br />
mit jeweiliger korrekter Lösung, so dass dem Netz nach Ausgabe ein genauer<br />
Fehlervektor 1 zurückgegeben werden kann.<br />
Dieses Lernverfahren ist biologisch nicht immer plausibel, aber exorbitant zielgerichteter<br />
als die anderen und daher sehr praktikabel.<br />
Wir möchten hier zunächst die überwachten Lernverfahren allgemein betrachten, welche<br />
sich innerhalb dieser Abeit zunächst an folgendes Schema halten:<br />
Eingabe des Eingabemusters (Aktivierung der Eingabeneurone),<br />
Vorwärtspropagierung der Eingabe durch das Netz, Erzeugung der Ausgabe,<br />
Vergleich der Ausgabe mit der korrekten Ausgabe (Teaching Input), liefert Fehlervektor<br />
(Differenzvektor),<br />
Verbesserungen des <strong>Netze</strong>s werden aufbauend auf den Fehlervektor berechnet.<br />
Anwendung der Verbesserung um die vorher berechneten Werte.<br />
4.1.4 Offline oder Online lernen?<br />
Zu beachten ist, dass das Lernen offline erfolgen kann (eine Menge von Trainingsbeispielen<br />
wird präsentiert, danach werden die Gewichte verändert, der Gesamtfehler<br />
wird mit Hilfe einer Fehlerfunktion errechnet bzw. einfach aufkumuliert; näheres<br />
hierzu im Abschnitt 4.4) oder aber online (nach jedem präsentierten Beispiel werden<br />
die Gewichte verändert). Beides bietet Vor- und Nachteile, auf die wir bei den<br />
1 Den Begriff des Fehlervektors werden wir in Abschnitt 4.2 noch definieren, wenn es an die mathematische<br />
Formalisierung des Lernens geht.
Lernverfahren nötigenfalls eingehen werden. Offline-Trainingsverfahren werden auch<br />
Batch-Trainingsverfahren genannt, da ein Stapel Ergebnisse auf einmal korrigiert<br />
wird. Einen solchen Trainingsabschnitt eines ganzen Stapels Trainingsbeispiele samt<br />
der zugehörigen Veränderung der Gewichtswerte nennt man Epoche.<br />
Definition 4.5 (Offline-Lernen). Man gibt mehrere Trainingsbeispiele auf einmal in<br />
das Netz ein, kumuliert die Fehler auf, und lernt für alle Trainingsbeispiele gleichzeitig.<br />
Definition 4.6 (Online-Lernen). Man lernt direkt durch den Fehler eines jeden Trainingsbeispiels.<br />
4.1.5 Fragen, über die man sich vor dem Lernen Gedanken machen sollte<br />
Die Anwendung der Schemata setzt natürlich voraus, dass man sich vorher über einige<br />
Fragen Gedanken gemacht hat, die ich hier gewissermaßen als Checkliste einbringen<br />
und im Laufe der Arbeit sukzessive beantworten möchte, soweit möglich:<br />
⊲ Woher kommt die Lerneingabe und in welcher Form erhalten wir sie?<br />
⊲ Auf welche Weise muss man die Gewichte modifizieren, so dass man möglichst<br />
schnell und sicher lernt?<br />
⊲ Wie kann man objektiv messen, wie erfolgreich der Lernprozess ist?<br />
⊲ Kann man ermitteln, welches das „beste“ Lernverfahren ist?<br />
⊲ Kann man vorhersagen, ob ein Lernverfahren terminiert, ob es also nach endlicher<br />
Zeit einen optimalen Zustand erreicht oder z.B. zwischen verschiedenen<br />
Zuständen oszilliert?<br />
⊲ Wie wird das Gelernte im Netz gespeichert?<br />
⊲ Kann man verhindern, dass neu gelernte Muster alte erlernte Assoziationen wieder<br />
zerstören (das sog. Stabilitäts-Plastizitäts-Dilemma)?<br />
Wir werden feststellen, dass alle diese Fragen nicht allgemein beantwortet werden können,<br />
sondern für jedes Lernverfahren und jede Topologie von Netzwerk neu diskutiert<br />
werden müssen.
4.2 Trainingsmuster und Teaching Input<br />
Bevor wir unsere erste Lernregel kennenlernen, muss der Teaching Input eingeführt<br />
werden. Im (hier vorliegenden) Falle des überwachten Lernens setzen wir voraus, dass<br />
eine Trainingsmenge aus Trainingsmustern und dazugehörigen richtigen Ausgabewerten<br />
vorliegt, die man nach erfolgtem Training an den Ausgabeneuronen sehen möchte.<br />
Diese Ausgabewerte werden, bis das Netz trainiert ist d.h. solange es falsche Ausgaben<br />
erzeugt, als sogenannter Teaching Input bezeichnet, und zwar für jedes Neuron<br />
einzeln. Für ein Neuron j mit fehlerhafter Ausgabe oj ist tj also die Bezeichnung für<br />
den Teaching Input, die richtige oder gewünschte Ausgabe zu einem Trainingsmuster<br />
p.<br />
Definition 4.7 (Trainingsmuster). Als Trainingsmuster bezeichnen wir einen Eingabevektor<br />
p mit Komponenten p1, p2, . . . , pn, dessen gewünschte Ausgabe wir kennen.<br />
Indem wir das Trainingsmuster in das Netz eingeben, erhalten wir eine Ausgabe, die<br />
wir mit dem Teaching Input, also der gewünschten Ausgabe vergleichen. Die Menge<br />
der Trainingsmuster nennen wir P . Sie enthält eine endliche Anzahl geordneter<br />
Paare (p, t) von Trainingsmustern mit zugehörigem gewünschten Output.<br />
Trainingsmuster heißen im englischen Pattern, weswegen sie hier mit p bezeichnet<br />
werden. Sie besitzen in der Literatur und in der weiteren Arbeit viele Synonyme, wie<br />
z.B. Pattern, Trainingsbeispiel, Muster, usw.<br />
Definition 4.8 (Teaching Input). Sei j Ausgabeneuron. Der Teaching Input tj ist<br />
definiert als der gewünschte, korrekte Wert, den j nach der Eingabe eines bestimmten<br />
Trainingsmusters ausgeben sollte. Analog zum Vektor p kann man auch Teaching Inputs<br />
t1, t2, . . . , tn der Neurone zu einem Vektor t zusammenfassen. t ist immer auf ein<br />
bestimmtes Trainingsmuster p bezogen und ist, wie oben schon gesagt, in der Menge<br />
P der Trainingsmuster enthalten.<br />
SNIPE: Für die Trainingsdaten relevante Klassen befinden sich im Paket training. Die Klasse<br />
TrainingSampleLesson ist zum Speichern von Trainingsmustern und Teaching Inputs gedacht<br />
und erlaubt auch einfache Vorverarbeitung der daten.<br />
Definition 4.9 (Fehlervektor). Für mehrere Ausgabeneurone Ω1, Ω2, . . . , Ωn wird die<br />
Differenz von Ausgabevektor und Teaching Input unter einem Trainingsbeispiel p<br />
Ep =<br />
⎛<br />
⎜<br />
⎝<br />
t1 − y1<br />
.<br />
tn − yn<br />
⎞<br />
⎟<br />
⎠
als Fehlervektor, manchmal auch als Differenzvektor bezeichnet. Je nachdem, ob<br />
man offline oder online lernt, bezieht er sich auf ein bestimmtes Trainingsmuster, oder<br />
den auf bestimmte Weise normalisierten Fehler aus einer Menge von Trainingsmustern.<br />
Ich fasse noch einmal kurz zusammen, was wir jetzt an diesbezüglichen Vektoren definiert<br />
haben. Es gibt einen<br />
Eingabevektor x, der in das <strong>Neuronale</strong> Netz eingegeben werden kann. Das <strong>Neuronale</strong><br />
Netz gibt dann je nach Netzart einen<br />
Ausgabevektor y aus. Das<br />
Trainingsbeispiel p ist im Grunde nichts weiter als ein Eingabevektor. Wir verwenden<br />
ihn nur zum Trainieren, weil wir den dazugehörigen<br />
Teaching Input t kennen, der nichts anderes als der gewünschte Ausgabevektor zu<br />
dem Trainingsbeispiel ist. Der<br />
Fehlervektor Ep ist die Differenz zwischen Teaching Input t und tatsächlicher Ausgabe<br />
y.<br />
Was also x und y für den allgemeinen Betrieb des <strong>Netze</strong>s sind, sind p und t für das<br />
Training des <strong>Netze</strong>s – und während des Trainings versuchen wir, y möglichst nah an<br />
t heranzubringen. Noch ein Tip zur Nomenklatur. Wir haben die Ausgabewerte eines<br />
Neurons i mit oi bezeichnet. Die Ausgabe eines Ausgabeneurons Ω heißt also oΩ. Wir<br />
nennen aber Ausgabewerte des <strong>Netze</strong>s yΩ. Diese Netzausgaben sind natürlich auch nur<br />
Neuronenausgaben, allerdings von Ausgabeneuronen. Insofern gilt<br />
yΩ = oΩ.<br />
4.3 Umgang mit Trainingsbeispielen<br />
Wir haben gesehen, wie wir grundsätzlich lernen können und welche Schritte wir dafür<br />
durchführen müssen. Nun sollten wir noch die Wahl der Trainingsdaten und die Lernkurve<br />
betrachten. Insbesondere interessant nach erfolgtem Lernvorgang ist auch die<br />
Frage, ob das Netz vielleicht nur auswendig gelernt hat – also unsere Trainingsbeispiele<br />
recht exakt der richtigen Ausgabe zuführen kann, jedoch für sämtliche anderen<br />
Probleme derselben Klasse falsche Antworten liefert.<br />
Angenommen, wir wollen das Netz eine Abbildung R 2 → B 1 trainieren lassen, und<br />
die Trainingsbeispiele aus Abb. 4.1 auf der folgenden Seite ansetzen: Dann könnte<br />
es sein, dass das Netz zum Schluss exakt die farblich markierten Bereiche um die
Abbildung 4.1: Veranschaulichung von Trainingsergebnissen derselben Trainingsmenge auf <strong>Netze</strong>n<br />
zu hoher (oben), richtiger (Mitte) oder zu niedriger Kapazität (unten).
Trainingsbeispiele herum mit der Ausgabe 1 markiert (Abb. 4.1 oben), und ansonsten<br />
überall 0 ausgibt – es hat also genug Speicherkapazität gehabt, sich auf die sechs<br />
Trainingsbeispiele mit einer 1 als Ausgabe zu konzentrieren, was auf ein zu großes<br />
Netz mit zu viel freier Speicherkapazität schließen lässt.<br />
Andersherum kann auch ein Netz zu wenig Kapazität haben (Abb. 4.1 unten) – diese<br />
grobe Darstellung der Eingangsdaten entspricht auch nicht der guten Generalisierung,<br />
die wir uns wünschen. Es gilt also, hier den Mittelweg zu finden (Abb. 4.1 Mitte).<br />
4.3.1 Es ist nützlich, die Menge der Trainingsbeispiele zu unterteilen<br />
Ein Lösungsansatz für diese Probleme ist häufig, die Trainingsmenge zu teilen, und<br />
zwar<br />
⊲ in eine Trainingsmenge, mit der wir wirklich trainieren,<br />
⊲ und eine Testmenge, mit der wir unsere Fortschritte testen<br />
– vorausgesetzt, wir haben ausreichend Trainingsbeispiele. Übliche Teilungsrelationen<br />
sind z.B. 70% für Trainingsdaten und 30% für Testdaten (zufällig gewählt). Wir können<br />
das Training beenden, wenn das Netz auf den Trainings- und Testdaten gute Werte<br />
liefert.<br />
SNIPE: Die Methode splitLesson der Klasse TrainingSampleLesson erlaubt, eine Training-<br />
SampleLesson anhand eines wählbaren Verhältnisses entzwei zu teilen.<br />
Doch Achtung: Wenn man aufgrund eines schlechten Ergebnisses in den Testdaten an<br />
der Netzstruktur schraubt, bis auch diese gute Ergebnisse liefern, läuft man schnell<br />
Gefahr, das Netz auch auf die Testdaten zuzuschneiden, so dass diese zumindest indirekt<br />
auch ins Training eingehen, auch wenn sie nicht explizit für das Training genutzt<br />
werden. Abhilfe schafft ein dritter Validierungsdatensatz, der nach dem mutmaßlich<br />
erfolgreichen Training zum reinen Validieren benutzt wird.<br />
Offensichtlich enthalten wir dem <strong>Neuronale</strong>n Netz dadurch, dass wir weniger Muster<br />
trainieren, Information vor und laufen damit Gefahr, dass es schlechter lernt. Es geht<br />
uns hier aber nicht um das 100% exakte Reproduzieren gegebener Beispiele, sondern<br />
um erfolgreiches Generalisieren und um Approximation einer ganzen Funktion – wofür<br />
es durchaus von Nutzen sein kann, weniger Informationen in das Netz zu trainieren.
4.3.2 Reihenfolgen der Musterpräsentation<br />
Man kann auch verschiedene Strategien finden, in welcher Reihenfolge man Muster<br />
präsentiert: Präsentiert man sie zufällig, so gibt es keine Garantie, dass die Muster<br />
gleichverteilt erlernt werden (dennoch ist dies die gängigste Methode). Immer dieselbe<br />
Musterreihenfolge hingegen provoziert z.B. bei rekurrenten <strong>Netze</strong>n (später mehr dazu)<br />
ein Auswendiglernen der Muster. Abhilfe gegen beide Probleme würde hier eine zufällige<br />
Permutation schaffen, die aber – wie schon erwähnt – aufwändig zu berechnen<br />
ist.<br />
SNIPE: Die Methode shuffleSamples der Klasse TrainingSampleLesson permutiert die Lesson.<br />
4.4 Lernkurve und Fehlermessung<br />
Die Lernkurve beschreibt den zeitlichen Verlauf des Fehlers, der auf verschiedene Weisen<br />
ermittelt werden kann – die Motivation für die Erschaffung einer Lernkurve liegt<br />
darin, dass man mit ihr darstellen kann, ob das Netz Fortschritte macht oder nicht.<br />
Der Fehler sollte hierbei normiert sein, also ein Abstandsmaß zwischen richtigem und<br />
aktuellem Output des <strong>Netze</strong>s darstellen. Beispielsweise können wir den musterspezifischen,<br />
quadratischen Fehler mit Vorfaktor nehmen, wie wir ihn für die Herleitung<br />
von Backpropagation of Error verwenden werden (Seien Ω Outputneurone und O die<br />
Menge derselben.):<br />
Errp = 1<br />
2<br />
<br />
(tΩ − yΩ) 2<br />
Ω∈O<br />
Definition 4.10 (Spezifischer Fehler). Der spezifische Fehler Errp wird über ein<br />
einziges Trainingsbeispiel, also online, gebildet.<br />
Weiter üblich sind der Root-Mean-Square (kurz: RMS) sowie der Euklidische<br />
Abstand.<br />
Der Euklidische Abstand (Verallgemeinerung des Satzes des Pythagoras) ist gut für<br />
niedere Dimensionen, wo wir uns seinen Nutzen auch noch bildlich vorstellen können.<br />
Definition 4.11 (Euklidischer Abstand).<br />
t und y ist definiert zu<br />
Der Euklidische Abstand zweier Vektoren<br />
<br />
<br />
Errp = (tΩ − yΩ) 2 . (4.2)<br />
Ω∈O<br />
(4.1)
Der Root-Mean-Square wird allgemein häufig verwendet, weil er auf grobe Ausreißer<br />
mehr Rücksicht nimmt.<br />
Definition 4.12 (Root-Mean-Square). Der Root-Mean-Square zweier Vektoren t und<br />
y ist definiert zu<br />
Ω∈O<br />
Errp =<br />
(tΩ − yΩ) 2<br />
. (4.3)<br />
|O|<br />
Für Offline-Lernen ist auch der gesamte Fehler über eine Trainingsepoche von Interesse<br />
und Nutzen:<br />
Err = <br />
Errp<br />
p∈P<br />
Definition 4.13 (Gesamtfehler). Der Gesamtfehler Err wird über alle Trainingsbeispiele,<br />
also offline, gebildet.<br />
Analog können wir einen Gesamt-RMS und einen Gesamt-Euklidischen Abstand über<br />
eine ganze Epoche bilden. Natürlich sind auch andere Fehlermaße als das euklidische<br />
oder der RMS denkbar. Für weitere Varianten der Fehlermessungen kann ich nur raten,<br />
einen Blick in den Technical Report von Prechelt [Pre94] zu werfen – hier werden sowohl<br />
Fehlermaße als auch Beispielproblemstellungen intensiv diskutiert (darum kommt dazu<br />
später auch noch einmal eine ähnliche Anmerkung im Rahmen der Diskussion von<br />
Beispielproblemen).<br />
SNIPE: In der Klasse ErrorMeasurement befinden sich verschiedene statische Methoden, welche<br />
verschiedene Verfahren der Fehlermessung implementieren.<br />
Abhängig von unserem Fehlermessverfahren sieht natürlich unsere Lernkurve auch anders<br />
aus. Eine ideale Lernkurve sieht aus wie eine negative Exponentialfunktion, ist<br />
also proportional zu e −t (Abb. 4.2 auf der folgenden Seite). Insofern stellt man die<br />
Lernkurve am anschaulichsten mit einer logarithmischen Skala dar (Abb. 4.2, zweites<br />
Diagramm von unten) – bei dieser Skalierungskombination bedeutet eine absinkende<br />
Gerade einen exponentiellen Abfall des Fehlers.<br />
Bei guter Arbeit des <strong>Netze</strong>s, einfachen Problemstellungen und logarithmischer Darstellung<br />
von Err sieht man also bildlich gesprochen eine absinkende Gerade, die unten<br />
oft „Zacken“ bildet – hier stoßen wir an das Auflösungsvermögen unserer 64-Bit-<br />
Darstellung im Computer und haben tatsächlich das Optimum dessen erlernt, was<br />
unser Netz lernen kann.<br />
(4.4)
Fehler<br />
Fehler<br />
0.00025<br />
0.0002<br />
0.00015<br />
0.0001<br />
5e−005<br />
0<br />
0 100 200 300 400 500 600 700 800 900 1000<br />
1<br />
1e−005<br />
1e−010<br />
1e−015<br />
1e−020<br />
1e−025<br />
1e−030<br />
Epoche<br />
1e−035<br />
0 100 200 300 400 500 600 700 800 900 1000<br />
Epoche<br />
Fehler<br />
Fehler<br />
0.0002<br />
0.00018<br />
0.00016<br />
0.00014<br />
0.00012<br />
0.0001<br />
8e−005<br />
6e−005<br />
4e−005<br />
2e−005<br />
1<br />
1e−005<br />
1e−010<br />
1e−015<br />
1e−020<br />
1e−025<br />
1e−030<br />
0<br />
1 10 100 1000<br />
Epoche<br />
1e−035<br />
1 10 100 1000<br />
Epoche<br />
Abbildung 4.2: Alle vier Abbildungen stellen dieselbe (idealisierte, da sehr glatte) Lernkurve dar.<br />
Achten Sie auf die wechselnden logarithmischen und linearen Skalierungen! Beachten Sie auch den<br />
kleinen „Ungenauigkeits-Zacken“, sichtbar am Knick der Kurve im ersten und zweiten Diagramm<br />
von unten.
Typische Lernkurven können auch einige wenige flache Bereiche aufweisen, also Stufen<br />
beschreiben, dies ist kein Zeichen für einen schlecht funktionierenden Lernvorgang. Wie<br />
wir weiterhin an der Abbildung 4.2 sehen, kann man mit geeigneter Darstellung fast<br />
jede nur etwas sinkende Lernkurve schön aussehen lassen – insofern sollte man beim<br />
Lesen der Literatur etwas vorsichtig sein.<br />
4.4.1 Wann hört man auf zu lernen?<br />
Nun ist die große Frage: Wann hört man auf zu lernen? Üblicherweise hört das Training<br />
auf, wenn derjenige, der vor dem trainierenden Computer sitzt, das „Gefühl“ hat, der<br />
Fehler wäre gering genug. In der Tat gibt es dafür wie so oft keine Patentlösung und so<br />
kann ich hier wieder nur Denkansätze geben, welche allerdings alle für eine objektivere<br />
Sicht auf das Vergleichen mehrerer Lernkurven setzen.<br />
Es stärkt beispielsweise das Vertrauen in ein Ergebnis, wenn das Netz für mehrere verschiedene<br />
zufällige Initialisierungen immer ungefähr die gleiche Endfehlerrate erreicht –<br />
mehrmals initialisieren und trainieren macht das Ergebnis also ein wenig objektiver.<br />
Auf der anderen Seite kann sich auch ein Bild ergeben, bei dem eine anfangs schneller<br />
fallende Kurve nach längerem Lernen von einer anderen Kurve noch überholt wird:<br />
Dies kann darauf hinweisen, dass entweder die Lernrate der schlechteren Kurve zu<br />
hoch war oder aber die schlechtere einfach in einem Nebenminimum hängen geblieben<br />
ist, dieses aber schneller gefunden hat.<br />
Noch einmal zur Erinnerung: Größere Fehlerwerte sind schlechter.<br />
Auf jeden Fall sei aber beachtet: Worauf sich viele beim Lernen verlassen (und sich<br />
danach wundern, dass wenig funktioniert), ist, die Lernkurve nur in Bezug auf die<br />
Trainingsdaten zu bilden – man sollte also der Objektivität halber nicht vergessen,<br />
die Testdaten der Übersichtlichkeit halber auf eine zweite Lernkurve aufzutragen, die<br />
üblicherweise etwas schlechtere Werte liefert und auch stärker oszilliert, aber bei guter<br />
Generalisierung auch sinkt.<br />
Wenn das Netz dann irgendwann anfängt, die Beispiele auswendig zu lernen, kann man<br />
so durch die Lernkurve Hinweise darauf erhalten: Wenn die Lernkurve der Testbeispiele<br />
plötzlich rapide steigt, während die Lernkurve für die Trainingsdaten weiter sinkt,<br />
kann dies ein Indikator für Auswendiglernen und schlechter werdende Generalisierung<br />
sein. Hier könnte man dann entscheiden, ob das Netz am nächsten Punkt der beiden<br />
Kurven bereits gut genug gelernt hat und der Endzeitpunkt des Lernens vielleicht hier<br />
anzusetzen ist (dieses Verfahren wird Early Stopping genannt).
Abbildung 4.3: Veranschaulichung des Gradientenabstiegs auf zweidimensionaler Fehlerfunktion.<br />
Wir gehen entgegengesetzt von g, also mit dem steilsten Abstieg einem Tiefpunkt entgegen,<br />
wobei die Schrittweite proportional zu |g| ist (je steiler der Abstieg, desto größer<br />
die Schrittweite). Links ist die Fläche in 3D gezeigt, rechts die Schritte über die<br />
Höhenlinien in 2D. Hier wird ersichtlich, wie eine Bewegung in Gegenrichtung von g in<br />
Richtung Minimum der Funktion erfolgt und proportional zu |g| ständig langsamer wird.<br />
Quelle: http://webster.fhs-hagenberg.ac.at/staff/sdreisei/Teaching/WS2001-2002/<br />
PatternClassification/graddescent.pdf<br />
Ich weise noch einmal darauf hin, dass dies alles nur Indikatoren und keine Wenn-Dann-<br />
Schlüsse sind.<br />
4.5 Gradientenbasierte Optimierungsverfahren<br />
Um die mathematische Grundlage für einige der folgenden Lernverfahren zu schaffen,<br />
möchte ich zunächst kurz erklären, was man unter einem Gradientenabstieg versteht –<br />
das Lernverfahren Backpropagation of Error beispielsweise baut auf diesen mathematischen<br />
Grundlagen auf und erbt so die Vor- und Nachteile des Gradientenabstiegs.<br />
Gradientenabstiegsverfahren werden im Allgemeinen verwendet, um Maxima oder Minima<br />
n-dimensionaler Funktionen auszumachen. In der Illustration (Abb. 4.3) beschränke<br />
ich mich übersichtlicherweise auf zwei Dimensionen, der Dimensionsanzahl sind aber<br />
prinzipiell keine Grenzen gesetzt.
Hierbei ist der Gradient ein Vektor g, der für jeden differenzierbaren Punkt einer Funktion<br />
definiert ist, genau in die Richtung des steilsten Anstiegs von diesem Punkt aus<br />
deutet und durch seinen Betrag |g| den Steigungsgrad in diese Richtung angibt. Der<br />
Gradient ist also die Verallgemeinerung der Ableitung für mehrdimensionale Funktionen.<br />
Folglich deutet der negative Gradient −g genau in die Richtung des steilsten Abstiegs.<br />
Der Operator für einen Gradienten ∇ wird als Nabla-Operator bezeichnet, die<br />
Gesamtschreibweise für den Gradienten g des Punktes (x, y) einer zweidimensionalen<br />
Funktion f lautet dabei z.B. g(x, y) = ∇f(x, y).<br />
Definition 4.14 (Gradient). Sei g Gradient. Dann ist g ein n-komponentiger<br />
Vektor, der für jeden Punkt einer (differenzierbaren) n-dimensionalen Funktion<br />
f(x1, x2, . . . , xn) bestimmt ist. Die Operatorschreibweise für den Gradienten ist<br />
definiert als<br />
g(x1, x2, . . . , xn) = ∇f(x1, x2, . . . , xn)<br />
g zeigt für jeden Punkt von f in Richtung des stärksten Anstiegs von diesem Punkt<br />
aus, wobei |g| dem Grad dieser Steigung entspricht.<br />
Als Gradientenabstieg bezeichnen wir, von beliebigem Startpunkt unserer Funktion<br />
aus entgegen dem Gradienten g schrittweise bergab zu gehen (anschaulich gesprochen<br />
in die Richtung, in die auch eine Kugel vom Startpunkt aus rollen würde), wobei die<br />
Schrittgröße proportional zu |g| ist. Auf flachen Plateaus bewegen wir uns also langsam,<br />
bei großer Steigung schnell den steilsten Weg hinab. Geraten wir in ein Tal, so werden<br />
wir es je nach Größe unserer Schritte überspringen oder auf dem gegenüberliegenden<br />
Hang wieder ins Tal umkehren, um durch hin- und hergehen dem tiefsten Punkt des<br />
Tals immer näher zu kommen, ähnlich der Bewegung unserer Kugel innerhalb einer<br />
runden Schüssel.<br />
Definition 4.15 (Gradientenabstieg). Sei f eine n-dimensionale Funktion und s =<br />
(s1, s2, . . . , sn) gegebener Startpunkt. Als Gradientenabstieg bezeichnen wir, von<br />
f(s) aus entgegen der Richtung von g, also in Richtung von −g mit Schritten in Größe<br />
von |g| in Richtung immer kleinerer Werte von f zu gehen.<br />
Gradientenabstiegsverfahren sind kein fehlerfreies Optimierungsverfahren (wie wir in<br />
den nächsten Abschnitten sehen werden), aber sie funktionieren doch so gut, dass<br />
sie in der Praxis häufig eingesetzt werden. Dennoch wollen wir uns ihre potenziellen<br />
Nachteile kurz vor Augen führen.
Err<br />
b)<br />
c)<br />
Globales Minimum<br />
Abbildung 4.4: Mögliche Fehler während eines Gradientenabstiegs: a) Finden schlechter Minima,<br />
b) Quasi-Stillstand bei kleinem Gradienten, c) Oszillation in Schluchten, d) Verlassen guter Minima.<br />
4.5.1 Gradientenverfahren bringen verschiedene Probleme mit sich<br />
Wie in Abschnitt 4.5 angedeutet, ist der Gradientenabstieg (und damit Backpropagation)<br />
erfolgversprechend, jedoch nicht fehlerresistent, wobei eines der Probleme ist,<br />
dass man nicht immer anhand des Ergebnisses ersehen kann, ob ein Fehler passiert ist.<br />
4.5.1.1 Häufig konvergieren Gradientenverfahren nur gegen suboptimale Minima<br />
Jedes Gradientenabstiegsverfahren kann zum Beispiel in einem lokalen Minimum hängen<br />
bleiben (ein Beispiel findet sich in Teil a der Abb. 4.4) – dieses Problem wächst mit<br />
der Größe der Fehlerfläche an und hierfür gibt es keine allgemeingültige Lösung. In der<br />
Realität kann man nicht wissen, ob man das optimale Minimum gefunden hat – also<br />
gibt man sich zufrieden, sobald man ein Minimum ausreichender Qualität gefunden<br />
hat.<br />
a)<br />
d)<br />
W
4.5.1.2 Flache Plateaus in der Fehleroberfläche können das Training sehr<br />
verlangsamen<br />
Auch wird der Gradient beispielsweise beim Durchlaufen eines flachen Plateaus verschwindend<br />
klein (es ist eben kaum Steigung vorhanden (Teil b der Abb. 4.4), was<br />
sehr viele weitere Schritte nötig macht. Ein theoretisch möglicher Gradient von 0 würde<br />
den Abstieg gar ganz zum Stillstand bringen.<br />
4.5.1.3 Gute Minima können wieder verlassen werden<br />
Auf der anderen Seite ist der Gradient an einem steilen Hang sehr groß, so dass man<br />
große Schritte macht und u.U. ein gutes Minimum übersieht (Teil d der Abb. 4.4).<br />
4.5.1.4 Steile Schluchten in der Fehlerfunktion können Oszillationen hervorrufen<br />
Ein plötzlicher Wechsel von einem sehr stark negativen zu einem sehr stark positiven<br />
Gradienten kann sogar zu einer Oszillation führen (Teil c der Abb. 4.4). An und für sich<br />
hört man von diesem Fehler in der Natur selten, so dass wir uns über Möglichkeiten b<br />
und d Gedanken machen können.<br />
4.6 Beispielproblemstellungen sind nützlich, um das selbst<br />
programmierte Netz und Lernverfahren zu testen<br />
Wir haben nun das Lernen noch nicht sehr, aber zumindest ein wenig von der formalen<br />
Seite betrachtet – nun ist es an der Zeit, dass ich ein paar Beispielprobleme vorstelle,<br />
mit denen man sehr gut ausprobieren kann, ob ein implementiertes Netz und ein<br />
Lernverfahren korrekt arbeiten.<br />
4.6.1 Boolesche Funktionen<br />
Gerne wird als Beispiel das genommen, was in den 1960er Jahren nicht ging: Die XOR-<br />
Funktion (B 2 → B 1 ), welches wir noch ausführlich besprechen werden. Trivial erwarten<br />
wir hier die Ausgaben 1.0 bzw. −1.0 je nachdem , ob die Funktion XOR 1 oder 0 ausgibt<br />
– und genau hier liegt der erste Anfängerfehler, den man machen kann.
i1 i2 i3 Ω<br />
0 0 0 1<br />
0 0 1 0<br />
0 1 0 0<br />
0 1 1 1<br />
1 0 0 0<br />
1 0 1 1<br />
1 1 0 1<br />
1 1 1 0<br />
Tabelle 4.1: Darstellung der Paritätsfunktion mit drei Eingaben.<br />
Für Ausgaben nahe 1 oder -1, also nahe den Grenzwerten des Tangens Hyperbolicus<br />
(bzw. im Falle der Fermifunktion 0 oder 1), benötigt das Netz sehr große <strong>Netze</strong>ingaben.<br />
Die einzige Chance, diese <strong>Netze</strong>ingaben zu erreichen, ist durch große Gewichte, die<br />
erlernt werden müssen: Der Lernvorgang wird sehr verlängert. Es ist also klüger, als<br />
gewünschte Ausgaben in die Teaching Inputs 0.9 bzw. −0.9 einzugeben oder aber<br />
zufrieden zu sein, wenn das Netz diese anstatt 1 und −1 ausgibt.<br />
Beliebt als Beispiel für Singlelayerperceptrons sind auch die Booleschen Funktionen<br />
AND und OR.<br />
4.6.2 Die Paritätsfunktion<br />
Die Paritätsfunktion bildet eine Menge von Bits auf 1 oder 0 ab, je nachdem, ob eine<br />
gerade Anzahl Inputbits auf 1 gesetzt ist oder nicht – es handelt sich also grundsätzlich<br />
um eine Funktion B n → B 1 . Sie ist durch leichte Lernbarkeit bis ca. n = 3 gekennzeichnet<br />
(dargestellt in Tab. 4.1), der Lernaufwand steigt aber ab n = 4 rapide an. Der Leser<br />
möge doch einmal eine Wertetabelle für die 2-bit-Paritätsfunktion erstellen – was fällt<br />
auf?<br />
4.6.3 Das 2-Spiralen-Problem<br />
Nehmen wir als Trainingsbeispiel für eine Funktion zwei ineinander gewundene Spiralen<br />
(Abb. 4.5 auf der rechten Seite), wobei die Funktion natürlich eine Abbildung R 2 → B 1<br />
repräsentiert. Eine der Spiralen ist mit dem Outputwert 1 belegt, die andere mit 0. Hier
Abbildung 4.5: Skizze zum Trainingsbeispiel des 2-Spiralen-Problems<br />
hilft Auswendiglernen nicht groß weiter, das Netz muss wirklich die Abbildung an sich<br />
verstehen. Auch dieses Beispiel kann mit einem MLP gelöst werden.<br />
4.6.4 Das Schachbrettproblem<br />
Wir kreieren uns wieder eine zweidimensionale Funktion der Form R 2 → B 1 und geben<br />
schachbrettartige Trainingsbeispiele an (Abb. 4.6 auf der folgenden Seite), wobei ein<br />
eingefärbtes Feld eine 1 repräsentiert, alle anderen 0. Hier steigt die Schwierigkeit<br />
wieder mit Größe der Funktion: Während ein 3 × 3-Feld noch leicht zu lernen ist, sieht<br />
es mit größeren Feldern schon schwierig aus.<br />
Das 2-Spiralen-Problem ist dem Schachbrettproblem sehr ähnlich, nur dass bei ersterem<br />
mathematisch gesehen Polarkoordinaten statt kartesischen Koordinaten verwendet<br />
werden. Eine letzte Kleinigkeit möchte ich noch als Beispiel vorstellen: Die Identität.<br />
4.6.5 Die Identitätsfunktion<br />
Mit linearen Aktivierungsfunktionen wäre die Identitätsabbildung von R 1 nach R 1<br />
(natürlich fairerweise im Wertebereich der verwendeten Aktivierungsfunktion) für das
Abbildung 4.6: Skizze von Trainingsbeispielen des Schachbrettproblems<br />
Netz kein Problem, doch wir legen ihm durch Verwendung unserer sigmoiden Funktionen<br />
Steine in den Weg, so dass es für das Netz sehr schwierig ist, die Identität zu<br />
lernen. Versuchen Sie es doch einmal spaßeshalber.<br />
4.6.6 Es gibt eine Vielzahl von Beispielproblemstellungen<br />
Für die Einarbeitung in weitere beispielhafte Problemstellungen möchte ich ausdrücklich<br />
den Technical Report von Prechelt [Pre94] ans Herz legen, der auch schon im<br />
Rahmen der Fehlermessungsverfahren erwähnt wurde.<br />
Nun können wir unsere erste mathematische Lernregel betrachten.<br />
4.7 Die Hebbsche Lernregel ist der Grundstein für die<br />
meisten anderen Lernregeln<br />
Die 1949 von Donald O. Hebb formulierte Hebbsche Lernregel [Heb49] bildet den<br />
Grundstein für die meisten komplizierteren Lernregeln, welche wir in dieser Arbeit
esprechen. Hierbei wird unterschieden zwischen der Urform und der allgemeineren<br />
Form, einer Art Grundgerüst für viele andere Lernregeln.<br />
4.7.1 Urform<br />
Definition 4.16 (Hebbsche Lernregel). „Wenn Neuron j eine Eingabe von Neuron i<br />
erhält und beide gleichzeitig stark aktiv sind, dann erhöhe das Gewicht wi,j (also die<br />
Stärke der Verbindung von i nach j).“ Mathematisch ausgedrückt lautet sie also:<br />
∆wi,j ∼ ηoiaj<br />
wobei ∆wi,j die Änderung des Gewichtes von i nach j bezeichnet, welche proportional<br />
zu folgenden Faktoren ist:<br />
⊲ der Ausgabe oi des Vorgängerneurons i,<br />
⊲ der Aktivierung aj des Nachfolgerneurons j,<br />
⊲ sowie einer Konstante η, der Lernrate, auf die wir in Abschnitt 5.4.3 noch genau<br />
eingehen.<br />
Gewichtsänderungen ∆wi,j werden einfach auf das Gewicht wi,j aufaddiert.<br />
Warum spreche ich in der umgangssprachlichen Formulierung zweimal von Aktivierung,<br />
schreibe jedoch in der Formel von oi und aj, also von der Ausgabe des Neurons i und<br />
der Aktivierung des Neurons j? Wir erinnern uns, dass sehr oft die Identität als Ausgabefunktion<br />
verwendet wird und so ai und oi eines Neurons oft identisch sind – weiterhin<br />
postulierte Hebb seine Lernregel weit vor der Spezifikation technischer Neurone. Wenn<br />
man bedenkt, dass diese Lernregel gerne bei binären Aktivierungen verwendet wurde,<br />
ist klar, dass die Gewichte bei möglichen Aktivierungen (1, 0) entweder anwachsen<br />
oder gleichbleiben. Sie würden also über kurz oder lang ins unendliche gehen, da sie<br />
bei Fehlern nur „nach oben“ korrigiert werden können. Dies kann ausgeglichen werden,<br />
indem man die Aktivierungen (−1, 1) verwendet 2 . So werden die Gewichte bei Nichtübereinstimmung<br />
der Aktivierung von Vorgänger- und Nachfolgerneuron verringert,<br />
sonst verstärkt.<br />
2 Das ist dann aber nicht mehr die „Originalversion“ der Hebbschen Lernregel.<br />
(4.5)
4.7.2 Verallgemeinerte Form<br />
Die meisten weiteren hier besprochenen Lernregeln sind eine Spezialisierung der mathematisch<br />
allgemeineren Form [MR86] der Hebbschen Lernregel.<br />
Definition 4.17 (Hebb-Regel, allgemeiner). Die verallgemeinerte Form der<br />
Hebbschen Regel benennt nur die Proportionalität der Gewichtsänderung zum<br />
Produkt zweier nicht näher definierter Funktionen, allerdings mit definierten<br />
Eingabewerten.<br />
Hierbei ergibt das Produkt der Funktionen<br />
⊲ g(aj, tj) und<br />
⊲ h(oi, wi,j)<br />
⊲ sowie wieder der konstanten Lernrate η<br />
∆wi,j = η · h(oi, wi,j) · g(aj, tj) (4.6)<br />
die Gewichtsänderung. Wie man sieht, nimmt h also die Ausgabe der Vorgängerzelle<br />
oi sowie das Gewicht von Vorgänger zu Nachfolger wi,j entgegen, während g die<br />
tatsächliche und gewünschte Aktivierung des Nachfolgers aj sowie tj (t steht hier für<br />
den erwähnten Teaching Input) erwartet. In dieser allgemeinen Definition sind g und<br />
h, wie schon angemerkt, nicht konkretisiert – wir werden uns daher jetzt auf den<br />
vor Gleichung 4.6 angesprochenen Pfad der Spezialisierung begeben und unser erstes<br />
Netzparadigma samt Lernverfahren kennenlernen, nachdem wir nun eine kurze Ansicht<br />
dessen gehabt haben, wie eine Lernregel aussehen kann und uns Gedanken zum Lernen<br />
an sich gemacht haben.<br />
Übungsaufgaben<br />
Aufgabe 7. Berechnen Sie für die folgenden Datenpunkte den Mittelwert µ und die<br />
Standardabweichung σ.<br />
p1 = (2, 2, 2)<br />
p2 = (3, 3, 3)<br />
p3 = (4, 4, 4)<br />
p4 = (6, 0, 0)<br />
p5 = (0, 6, 0)<br />
p6 = (0, 0, 6)
Teil II<br />
Überwacht lernende<br />
Netzparadigmen<br />
87
Kapitel 5<br />
Das Perceptron, Backpropagation und<br />
seine Varianten<br />
Der Klassiker unter den <strong>Neuronale</strong>n <strong>Netze</strong>n. Wenn von einem <strong>Neuronale</strong>n<br />
Netz gesprochen wird, ist meistens ein Perceptron oder eine Variation davon<br />
gemeint. Perceptrons sind mehrschichtige <strong>Netze</strong> ohne Rückkopplung, mit<br />
festen Eingabe- und Ausgabeschichten. Beschreibung des Perceptrons, seiner<br />
Grenzen und seiner Erweiterungen, welche die Grenzen umgehen sollen.<br />
Herleitung von Verfahren, es lernen zu lassen, und Diskussion über deren<br />
Probleme.<br />
Wie schon in der Geschichte <strong>Neuronale</strong>r <strong>Netze</strong> erwähnt, wurde das Perceptron von<br />
Frank Rosenblatt 1958 beschrieben [Ros58]. Rosenblatt legte als Komponenten des<br />
Perceptrons zunächst die schon besprochene gewichtete Summe, sowie eine nichtlineare<br />
Aktivierungsfunktion fest.<br />
Obwohl es keine wirklich feste Definition des Perceptrons gibt, ist meistens<br />
ein FeedForward-Netz mit ShortCut-Connections gemeint, das eine Schicht von<br />
Abtastneuronen (Retina) mit statisch gewichteten Verbindungen zur nächsten Schicht<br />
besitzt, die wir Eingabeschicht nennen (Abb. 5.1 auf Seite 91); alle Gewichte ab<br />
der Eingabeschicht dürfen aber verändert werden. Die der Retina nachgeordneten<br />
Neuronen stellen Musterdetektoren dar. Wir verwenden hier zunächst ein binäres<br />
Perceptron, bei dem jedem Outputneuron genau zwei mögliche Ausgabewerte zur<br />
Verfügung stehen (z.B. {0, 1} oder {−1, 1}). Wir verwenden also eine binäre Schwellenwertfunktion<br />
als Aktivierungsfunktion, abhängig vom jeweiligen Schwellenwert Θ<br />
des Outputneurons.<br />
89
Gewissermaßen stellt eine binäre Aktivierungsfunktion also eine IF-Abfrage dar, die<br />
man durch negative Gewichte auch negieren kann – man kann also mit dem Perceptron<br />
wirkliche logische Informationsverarbeitung durchführen.<br />
Ob das sinnvoll ist, sei einmal dahingestellt – Boolesche Logik kann man natürlich<br />
auch einfacher haben. Ich möchte nur darstellen, dass Perceptrons durchaus als simple<br />
logische Bausteine nutzbar sind und man mit geschickten hintereinander- und zusammengeschalteten<br />
Perceptrons theoretisch jede Boolesche Funktion realisieren kann.<br />
Wir werden aber noch sehen, dass dies ohne Hintereinanderschaltung nicht möglich ist.<br />
Bevor wir das Perceptron an sich definieren, möchte ich zunächst einige Neuronenarten,<br />
welche wir in diesem Kapitel verwenden werden, definieren.<br />
Definition 5.1 (Eingabeneuron). Ein Eingabeneuron (auch Inputneuron<br />
genannt) ist ein Identitätsneuron – es gibt genau das weiter, was es als Eingabe<br />
erhält. Es repräsentiert also die Identitätsfunktion, die wir durch das Symbol <br />
andeuten wollen. Wir stellen ein Eingabeneuron daher mit dem Symbol dar.<br />
Definition 5.2 (Informationsverarbeitendes Neuron). Informationsverarbeitende<br />
Neurone verarbeiten die eingegebene Information auf irgendeine Weise, repräsentieren<br />
also nicht die Identitätsfunktion. Ein Binäres Neuron summiert alle Eingaben,<br />
die es erhält, durch die gewichtete Summe als Propagierungsfunktion auf, was wir<br />
mit dem Summenzeichen Σ skizzieren wollen. Die Aktivierungsfunktion des Neurons<br />
ist dann die binäre Schwellenwertfunktion, die mit skizziert werden kann. Dies<br />
bringt uns insgesamt zu der Symboldarstellung Σ<br />
. Analog werden andere Neurone<br />
mit gewichteter Summe als Propagierungsfunktion, jedoch den Aktivierungsfunktionen<br />
Tangens Hyperbolicus, Fermifunktion oder einer separat definierten Aktivierungsfunktion<br />
fact als<br />
Σ<br />
Tanh<br />
Σ<br />
Fermi<br />
<br />
Σ<br />
dargestellt. Diese Neurone bezeichnen wir dann z.B. auch als Fermi-Neuron oder<br />
Tanh-Neuron.<br />
Ausgabeneurone werden auch oft Outputneuron genannt. Nachdem wir nun die Bestandteile<br />
eines Perceptrons kennen, können wir es auch definieren.<br />
Definition 5.3 (Perceptron). Das Perceptron (Abb. 5.1 auf der rechten Seite) ist 1<br />
ein FeedForward-Netz, in welchem es eine Retina gibt, die der reinen Datenaufnahme<br />
1 Es mag dem einen oder anderen Leser sauer aufstoßen, dass ich behaupte, es gäbe keine Definition für ein<br />
Perceptron, das Perceptron aber im nächsten Absatz definiere. Ich schlage daher vor, meine Definition<br />
im Hinterkopf zu behalten, aber nur für diese Arbeit als wirklich gegeben anzusehen.<br />
fact
Kapitel 5 Das Perceptron dkriesel.com<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Σ<br />
<br />
<br />
i1 <br />
<br />
i2<br />
i3<br />
i4<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
i5<br />
<br />
<br />
Ω<br />
Abbildung Abbildung 5.1: Aufbau 5.1: eines Aufbau Perceptrons eines Perceptrons mit einer mitSchicht einer Schicht variabler variabler Verbindungen in verschiede- in verschiedenen<br />
Ansichten. nen Ansichten. Die durchgezogene Die durchgezogene Gewichtsschicht Gewichtsschicht in deninunteren den unteren beiden beiden Abbildungen ist ist trainierbar.bar.<br />
Links: AmOben: Beispiel Amder Beispiel Informationsabtastung der Informationsabtastung im Auge. im Auge.<br />
Mitte: Skizze desselben mit eingezeichneter fester Gewichtsschicht unter Verwendung der definier-<br />
Rechts oben: Skizze desselben mit eingezeichneter fester Gewichtsschicht unter Verwendung der<br />
ten funktionsbeschreibenden Designs für Neurone.<br />
definierten funktionsbeschreibenden Designs für Neurone.<br />
Unten: Ohne eingezeichnete feste Gewichtsschicht, mit Benennung der einzelnen Neuronen nach<br />
Rechts unten: unserer Ohne Konvention. eingezeichnete Wir werden feste dieGewichtsschicht, feste Gewichtschicht mitimBenennung weiteren Verlauf der einzelnen der Arbeit Neuronen nicht mehr<br />
nach unserer betrachten. Konvention. Wir werden die feste Gewichtschicht im weiteren Verlauf der Arbeit nicht<br />
mehr betrachten.<br />
70 D. <strong>Kriesel</strong> – Ein kleiner Überblick über <strong>Neuronale</strong> <strong>Netze</strong> (EPSILON-DE)
dient und fest gewichtete Verbindungen zur ersten Neuronenschicht (Eingabeschicht)<br />
besitzt. Der festen Gewichtsschicht folgt mindestens eine trainierbare Gewichtsschicht.<br />
Eine Neuronenschicht ist zur jeweils nächsten vollverknüpft. Die erste Schicht des Perceptrons<br />
besteht aus den oben definierten Eingabeneuronen.<br />
Oft enthält ein FeedForward-Netz auch ShortCuts, was aber nicht exakt der ursprünglichen<br />
Beschreibung entspricht und daher hier auch nicht der Definition hinzugefügt<br />
wird. Wir sehen, dass die Retina gar nicht in den unteren Teil der Abb. 5.1 mit einbezogen<br />
wird – in der Tat wird meist (vereinfachend und für die Implementierung<br />
ausreichend) die erste Neuronenschicht nach der Retina als Eingabeschicht betrachtet,<br />
da diese die Inputwerte sowieso nur weitergibt. Die Retina selbst und die statischen<br />
Gewichte dahinter werden also nicht weiter erwähnt oder abgebildet, da sie sowieso<br />
nicht informationsverarbeitend sind. Die Abbildung eines Perceptrons beginnt also bei<br />
den Inputneuronen.<br />
SNIPE: Die Methoden setSettingsTopologyFeedForward sowie die Variante -WithShortcuts<br />
einer NeuralNetworkDescriptor-Instanz konfigurieren den Descriptor für FeedForward-<strong>Netze</strong><br />
bzw. solche mit Shortcuts, indem sie die entsprechenden Verbindungsklassen erlauben. Andere<br />
Verbindungsklassen werden verboten und Fastprop wird aktiviert.<br />
5.1 Das Singlelayerperceptron besitzt nur eine trainierbare<br />
Gewichtsschicht<br />
Hier gehen von der Eingabeschicht Verbindungen mit trainierbaren Gewichten zu einem<br />
Ausgabeneuron Ω, welches ausgibt, ob das an den Eingabeneuronen eingegebene<br />
Muster erkannt wird oder nicht. Ein Singlelayerperceptron (kurz: SLP) besitzt also<br />
nur eine Ebene trainierbarer Gewichte (Abb. 5.1 auf der vorangehenden Seite).<br />
Definition 5.4 (Singlelayerperceptron). Als Singlelayerperceptron (SLP) wird<br />
ein Perceptron bezeichnet, welches nach der Schicht Eingabeneurone nur eine variable<br />
Gewichtsschicht und eine Schicht Ausgabeneurone Ω besitzt. Die technische Sicht eines<br />
SLPs findet sich in Abb. 5.2 auf der rechten Seite.<br />
Es ändert am Prinzip des Perceptrons natürlich nichts wesentlich, wenn mehrere Ausgabeneurone<br />
Ω1, Ω2, . . . , Ωn vorkommen (Abb. 5.3 auf der rechten Seite): Ein Perceptron<br />
mit mehreren Ausgabeneuronen kann man auch als mehrere verschiedene Perceptrone<br />
mit derselben Eingabe ansehen.<br />
Als triviale, zusammensetzbare Beispiele sind die in Abb. 5.4 auf Seite 94 dargestellten<br />
Booleschen Funktionen AND und OR zu sehen.
BIAS<br />
i1<br />
wBIAS,Ωwi1<br />
,Ω wi2 ,Ω ⑧⑧⑧⑧<br />
<br />
<br />
⑧⑧⑧⑧<br />
Ω<br />
<br />
i2<br />
Abbildung 5.2: Ein Singlelayerperceptron mit zwei Eingabeneuronen und einem Outputneuron.<br />
Durch den aus dem Netz herausführenden Pfeil gibt das Netz die Ausgabe aus. In der Mitte befindet<br />
sich die trainierbare Schicht von Gewichten (beschriftet). Zur Erinnerung habe ich hier noch einmal<br />
das Biasneuron mit abgebildet. Obwohl das Gewicht wBIAS,Ω ein ganz normales Gewicht ist und auch<br />
so behandelt wird, habe ich es hier nur gepunktet gezeichnet – dies erhöht die Übersichtlichkeit bei<br />
größeren <strong>Netze</strong>n stark. In Zukunft werden wir das Biasneuron nicht mehr mit abbilden.<br />
i1 ❅<br />
❯ ❯<br />
<br />
❅<br />
❯<br />
i2<br />
❯<br />
❅<br />
❯<br />
<br />
<br />
❯<br />
i3<br />
❯<br />
❆<br />
❅<br />
<br />
❯ ❯<br />
❆ <br />
❅ ❯ ❯<br />
❆ <br />
❅<br />
<br />
❯ ❆<br />
<br />
❯<br />
❅ <br />
❆<br />
<br />
❯<br />
<br />
❯ ❯<br />
❅ ❆ <br />
❯<br />
<br />
❯<br />
❅<br />
<br />
❆ <br />
❯ <br />
❯<br />
<br />
<br />
❆<br />
❯<br />
<br />
❯<br />
<br />
<br />
❯ <br />
⑥<br />
❆<br />
❯ <br />
❯ ❯<br />
<br />
⑥⑥⑥⑥⑥⑥⑥⑥<br />
i4 ❆❆❆<br />
❆❆❆<br />
❆<br />
<br />
❆❆<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
⑥<br />
<br />
<br />
⑥⑥⑥⑥⑥⑥⑥⑥<br />
i5<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
Ω1<br />
Ω2<br />
Ω3<br />
<br />
<br />
Abbildung 5.3: Singlelayerperceptron mit mehreren Ausgabeneuronen
❆<br />
<br />
❆<br />
1❆<br />
❆ 1<br />
❆<br />
<br />
⑥⑥⑥⑥<br />
⑥⑥⑥⑥<br />
1.5<br />
<br />
<br />
<br />
❆<br />
<br />
❆<br />
1❆<br />
❆ 1<br />
❆<br />
<br />
⑥⑥⑥⑥<br />
⑥⑥⑥⑥<br />
0.5<br />
<br />
Abbildung 5.4: Zwei Singlelayerperceptrons für Boolesche Funktionen. Das obere Singlelayerperceptron<br />
realisiert ein AND, das untere ein OR. Die Aktivierungsfunktion des informationsverarbeitenden<br />
Neurons ist jeweils die binäre Schwellenwertfunktion, wo vorhanden stehen die Schwellenwerte<br />
in den Neuronen.
Wir möchten nun erfahren, wie wir ein Singlelayerperceptron trainieren können, und betrachten<br />
hierzu zunächst den Perceptron-Lernalgorithmus und anschließend die Delta-<br />
Regel.<br />
5.1.1 Perceptron-Lernalgorithmus und Konvergenz-Theorem<br />
Der ursprüngliche Perceptron-Lernalgorithmus mit binärer Aktivierungsfunktion<br />
in den Neuronen ist beschrieben in Alg. 1. Es ist bewiesen, dass der Algorithmus<br />
in endlicher Zeit konvergiert – das Perceptron also in endlicher Zeit alles lernen kann,<br />
was ihm möglich ist, zu repräsentieren (Perceptron-Konvergenz-Theorem, [Ros62]).<br />
Der Leser sollte sich hierbei nicht zu früh freuen. Was das Perceptron repräsentieren<br />
kann, werden wir noch erforschen.<br />
Während der Erforschung der linearen Separierbarkeit von Problemen werden wir noch<br />
behandeln, dass zumindest das Singlelayerperceptron leider viele Probleme nicht repräsentieren<br />
kann.<br />
5.1.2 Die Delta-Regel als gradientenbasiertes Lernverfahren für SLPs<br />
Im Folgenden weichen wir von unserer binären Schwellenwertfunktion als Aktivierungsfunktion<br />
ab, denn zumindest für Backpropagation of Error brauchen wir, wie wir gleich<br />
sehen werden, eine differenzierbare oder gar semilineare Aktivierungsfunktion – für<br />
die nun folgende Delta-Regel (ebenfalls hergeleitet in [MR86]) ist sie nicht zwangsweise<br />
erforderlich, aber nützlich. Auf diesen Umstand wird aber auch noch einmal<br />
an Ort und Stelle hingewiesen. Die Delta-Regel hat gegenüber dem obigen Perceptron-<br />
Lernalgorithmus im Wesentlichen die Vorteile, für nicht-binäre Aktivierungsfunktionen<br />
geeignet zu sein und, bei großer Entfernung zum Lernziel, automatisch schneller zu lernen.<br />
Angenommen, wir besitzen ein Singlelayerperceptron mit zufällig gesetzten Gewichten,<br />
dem wir eine Funktion anhand von Trainingsbeispielen beibringen möchten. Die Menge<br />
dieser Trainingsbeispiele nennen wir P – sie enthält, wie schon definiert, Paare (p, t)<br />
von Trainingsbeispielen p und zugehörigem Teaching Input t. Ich rufe auch noch einmal<br />
in Erinnerung, dass<br />
⊲ x Inputvektor und<br />
⊲ y Outputvektor eines <strong>Neuronale</strong>n <strong>Netze</strong>s ist,<br />
⊲ Outputneurone Ω1, Ω2, . . . , Ω |O| genannt werden und
1: while ∃p ∈ P and Fehler zu groß do<br />
2: Gebe ein p in Netz ein, berechne Ausgabe y {P Menge der Trainingsmuster}<br />
3: for jedes Ausgabeneuron Ω do<br />
4: if yΩ = tΩ then<br />
5: Ausgabe richtig, keine Gewichtsänderung<br />
6: else<br />
7: if yΩ = 0 then<br />
8: for jedes Eingabeneuron i do<br />
9: wi,Ω := wi,Ω + oi {...Gewicht zu Ω um oi vergrößern}<br />
10: end for<br />
11: end if<br />
12: if yΩ = 1 then<br />
13: for jedes Eingabeneuron i do<br />
14: wi,Ω := wi,Ω − oi {...Gewicht zu Ω um oi verkleinern}<br />
15: end for<br />
16: end if<br />
17: end if<br />
18: end for<br />
19: end while<br />
Algorithmus 1: Perceptron-Lernalgorithmus. Der Perceptron-Lernalgorithmus verringert<br />
Gewichte zu Ausgabeneuronen, welche 1 statt 0 ausgeben, und erhöht Gewichte<br />
im umgekehrten Fall.
⊲ i Input sowie<br />
⊲ o Output eines Neurons ist.<br />
Ferner haben wir definiert, dass<br />
⊲ der Fehlervektor Ep die Differenz (t − y) unter einem bestimmten Trainingsbeispiel<br />
p darstellt.<br />
⊲ Sei weiterhin wie gehabt O die Menge der Ausgabeneurone und<br />
⊲ I die Menge der Eingabeneurone.<br />
Als weitere Namenskonvention wollen wir vereinbaren, dass z.B. für Output o und<br />
Teaching Input t ein zusätzlicher Index p gesetzt werden darf, um anzuzeigen, dass<br />
diese Größe musterspezifisch ist – dies erhöht manchmal die Übersichtlichkeit ganz<br />
erheblich.<br />
Unser Lernziel ist jetzt natürlich, dass bei allen Trainingsbeispielen der Output y des<br />
<strong>Netze</strong>s annähernd gleich dem gewünschten Output t ist, also formal gilt<br />
∀p : y ≈ t bzw. ∀p : Ep ≈ 0.<br />
Hierfür müssen wir erst lernen, den Gesamtfehler Err als Funktion der Gewichte zu<br />
betrachten: Der Gesamtfehler nimmt zu oder ab, je nachdem, wie wir die Gewichte<br />
ändern.<br />
Definition 5.5 (Fehlerfunktion). Die Fehlerfunktion<br />
Err : W → R<br />
fasst die Menge 2 der Gewichte W als Vektor auf und bildet die Gewichtswerte auf den<br />
normalisierten Ausgabefehler ab (normalisiert daher, weil man sämtliche Ausgabefehler<br />
sonst nicht in einem einzelnen e ∈ R abbilden kann, um einen Gradientenabstieg darauf<br />
durchzuführen). Dass sich analog eine spezifische Fehlerfunktion für ein einzelnes<br />
Muster p bilden lässt, ist offensichtlich.<br />
Wie wir bereits in Abschnitt 4.5 zum Thema Gradientenabstiegsverfahren gesehen haben,<br />
berechnen Gradientenabstiegsverfahren den Gradienten einer beliebig- aber endlichdimensionalen<br />
Funktion (hier der Fehlerfunktion Err(W )) und gehen entgegen dem<br />
Gradienten nach unten, bis ein Minimum erreicht ist. Err(W ) ist auf der Menge sämtlicher<br />
Gewichte definiert, die wir hier als Vektor W ansehen. Es wird also versucht,<br />
2 Der Tradition anderer Literatur folgend, habe ich W vorher als Gewichtsmatrix definiert – ich bin mir<br />
dieses Konfliktes bewusst, er wird uns hier aber nicht weiter stören.
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
−2<br />
−1<br />
w1<br />
0<br />
1<br />
2<br />
Abbildung 5.5: Beispielhafte Fehlerfläche eines <strong>Neuronale</strong>n <strong>Netze</strong>s mit zwei trainierbaren Verbindungen<br />
w1 und w2. In der Regel haben <strong>Neuronale</strong> <strong>Netze</strong> mehr als zwei Verbindungen, was hier nicht<br />
so übersichtlich abzubilden gewesen wäre. Weiterhin ist die Fehlerfläche meist sehr viel zerklüfteter,<br />
was die Suche nach dem Minimum erschwert.<br />
den Fehler zu verringern bzw. zu minimieren, indem man, salopp gesagt, an den Gewichten<br />
dreht – man bekommt also Informationen darüber, wie man die Gewichte<br />
verändern soll (die Veränderung aller Gewichte bezeichnen wir mit ∆W ), indem man<br />
die Fehlerfunktion Err(W ) nach diesen ableitet:<br />
−2<br />
−1<br />
0<br />
1<br />
w2<br />
∆W ∼ −∇Err(W ). (5.1)<br />
Aufgrund dieser Proportionalität gibt es eine Proportionalitätskonstante η, so dass<br />
Gleichheit gilt (η wird bald noch eine weitere Bedeutung und wirklich praktischen<br />
Nutzen außerhalb der bloßen Bedeutung als Proportionalitätskonstante bekommen.<br />
Ich möchte den Leser bitten, sich bis dahin noch etwas zu gedulden.):<br />
∆W = −η∇Err(W ). (5.2)<br />
Die Ableitung der Fehlerfunktion nach den Gewichten schreiben wir jetzt als normale<br />
partielle Ableitung nach einem Gewicht wi,Ω (es gibt nur variable Gewichte zu Ausgabeneuronen<br />
Ω), um damit rechnerisch etwas mehr anfangen zu können. Wir drehen<br />
also an jedem einzelnen Gewicht und schauen, wie sich die Fehlerfunktion dabei ändert,<br />
leiten also die Fehlerfunktion nach einem Gewicht wi,Ω ab und erhalten so die<br />
Information ∆wi,Ω, wie wir dieses Gewicht verändern sollen.<br />
∂Err(W )<br />
∆wi,Ω = −η . (5.3)<br />
∂wi,Ω<br />
Nun stellt sich langsam die Frage: Wie ist denn genau unsere Fehlerfunktion definiert?<br />
Es ist schlecht für uns, wenn sich viele Ergebnisse fern der gewünschten finden, die<br />
2
Fehlerfunktion sollte dann also große Werte liefern – auf der anderen Seite ist es auch<br />
nicht gut, wenn viele Ergebnisse nahe der gewünschten sind, es aber vielleicht einen<br />
sehr weit entfernten Ausreißer gibt. Es bietet sich also der Quadratische Abstand<br />
zwischen dem Ausgabevektor y und dem Teaching Input t an, der uns den für ein<br />
Trainingsbeispiel p spezifischen Fehler Errp über die Ausgabe aller Outputneurone Ω<br />
liefert:<br />
Errp(W ) = 1<br />
2<br />
<br />
(tp,Ω − yp,Ω) 2 . (5.4)<br />
Ω∈O<br />
Wir quadrieren also die Differenzen der Komponenten der Vektoren t und y unter einem<br />
Muster p und summieren diese Quadrate auf. Die Fehlerdefinition Err und damit die<br />
der Fehlerfunktion Err(W ) ergibt sich dann einfach durch die Aufsummierung der<br />
spezifischen Fehler Errp(W ) aller Muster p:<br />
Err(W ) = <br />
Errp(W ) (5.5)<br />
p∈P<br />
= 1<br />
2<br />
Summe über alle p<br />
⎛ <br />
<br />
⎝ <br />
(tp,Ω − yp,Ω) 2<br />
⎞<br />
⎠ . (5.6)<br />
p∈P Ω∈O<br />
<br />
Summe über alle Ω<br />
Der aufmerksame Leser wird sich natürlich fragen, woher denn in Gleichung 5.4 der<br />
Faktor 1<br />
2 plötzlich kommt, und wo denn, da die Gleichung dem euklidischen Abstand<br />
so ähnlich sieht, die Wurzel geblieben ist. Beides folgt aus einfacher Pragmatik: Es<br />
geht nur um die Fehlerminimierung. Die Wurzelfunktion ist monoton und sinkt mit<br />
ihrem Argument, also können wir sie auch dem Rechen- und Implementationsaufwand<br />
zuliebe weglassen, da wir sie für die Minimierung nicht brauchen. Ebenso ist egal, ob<br />
wir den zu minimierenden Term durch den Vorfaktor 1<br />
2 halbieren: Ich darf also mit<br />
1<br />
2 multiplizieren – aus der reinen Faulheit heraus, damit es sich im weiteren Verlauf<br />
unserer Rechnungen gegen eine 2 herauskürzt.<br />
Nun wollen wir fortfahren, die Delta-Regel für lineare Aktivierungsfunktionen herzuleiten.<br />
Wir haben bereits behandelt, dass man etwas an den einzelnen Gewichten wi,Ω<br />
dreht und schaut, wie sich der Fehler Err(W ) verändert – was der Ableitung der Fehlerfunktion<br />
Err(W ) nach eben diesem Gewicht wi,Ω entspricht. Diese Ableitung entspricht
(da sich der Gesamtfehler Err(W ) aus der Summe der spezifischen Fehler ergibt) der<br />
Summe der Ableitungen aller spezifischen Fehler Errp nach diesem Gewicht:<br />
∂Err(W )<br />
∆wi,Ω = −η<br />
∂wi,Ω<br />
= <br />
p∈P<br />
(5.7)<br />
−η ∂Errp(W )<br />
. (5.8)<br />
∂wi,Ω<br />
An dieser Stelle möchte ich noch einmal darüber nachdenken, wie ein <strong>Neuronale</strong>s Netz<br />
denn Daten verarbeitet. Im Grunde werden die Daten nur durch eine Funktion geschickt,<br />
das Ergebnis der Funktion durch eine weitere und so weiter und so fort. Lassen<br />
wir die Outputfunktion einmal außen vor, so besteht der Weg von Neuronenausgaben<br />
oi1 und oi2 , die von Neuronen i1 und i2 in ein Neuron Ω eingegeben werden,<br />
zunächst aus der Propagierungsfunktion (hier gewichtete Summe), aus der wir dann<br />
die <strong>Netze</strong>ingabe erhalten. Diese wird dann durch die Aktivierungsfunktion des Neurons<br />
Ω geschickt, so dass wir den Output dieses Neurons erhalten, der auch gleichzeitig eine<br />
Komponente des Ausgabevektors y ist:<br />
netΩ → fact<br />
= fact(netΩ)<br />
= oΩ<br />
= yΩ.<br />
Wie wir sehen, resultiert dieser Output aus vielen ineinander geschachtelten Funktionen:<br />
oΩ = fact(netΩ) (5.9)<br />
= fact(oi1 · wi1,Ω + oi2 · wi2,Ω). (5.10)<br />
Dass wir den Output auch bis in die Eingabeneurone aufschlüsseln können, ist klar<br />
(das ist hier nicht notwendig, da diese bei einem SLP keine Informationsverarbeitung<br />
betreiben). Wir wollen also die Ableitungen von Gleichung 5.8 durchführen und können<br />
durch die Funktionsschachtelung die Kettenregel anwenden, um die in Gleichung 5.8<br />
enthaltene Ableitung zu zerlegen.<br />
∂Errp(W )<br />
∂wi,Ω<br />
∂Errp(W )<br />
∂wi,Ω<br />
= ∂Errp(W )<br />
∂op,Ω<br />
· ∂op,Ω<br />
. (5.11)<br />
∂wi,Ω
Betrachten wir den ersten multiplikativen Faktor der obigen Gleichung 5.11 auf der<br />
linken Seite, der die Ableitung des spezifischen Fehlers Errp(W ) nach dem Output<br />
darstellt, also die Veränderung des Fehlers Errp mit dem Output op,Ω: Es ist bei Betrachtung<br />
von Errp (Gleichung 5.4 auf Seite 99) klar, dass diese Veränderung sich genau<br />
mit der Differenz zwischen Teaching Input und Ausgabe (tp,Ω − op,Ω) verändert (wir<br />
erinnern uns: Da Ω Ausgabeneuron, gilt op,Ω = yp,Ω). Ist der Output dem Teaching<br />
Input näher, so ist der spezifische Fehler kleiner. Wir können also das eine durch das<br />
andere ersetzen, wobei wir diese Differenz auch δp,Ω nennen (daher hat die Delta-Regel<br />
ihren Namen):<br />
∂Errp(W )<br />
∂wi,Ω<br />
= −(tp,Ω − op,Ω) · ∂op,Ω<br />
∂wi,Ω<br />
= −δp,Ω · ∂op,Ω<br />
∂wi,Ω<br />
(5.12)<br />
(5.13)<br />
Der zweite multiplikative Faktor der Gleichung 5.11 auf der linken Seite und der folgenden<br />
ist die Ableitung des Outputs des Neurons Ω zum Muster p nach dem Gewicht wi,Ω.<br />
Wie verändert sich also op,Ω bei der Veränderung des Gewichts von i nach Ω? Da wir<br />
nach der Forderung am Anfang der Herleitung nur eine lineare Aktivierungsfunktion<br />
fact haben, können wir genauso gut die Veränderung der <strong>Netze</strong>ingabe bei Veränderung<br />
von wi,Ω betrachten:<br />
<br />
∂Errp(W ) ∂ i∈I<br />
= −δp,Ω · (op,iwi,Ω)<br />
. (5.14)<br />
Diese Ableitung<br />
tion <br />
∂wi,Ω<br />
<br />
∂<br />
i∈I (op,iwi,Ω)<br />
∂wi,Ω<br />
∂wi,Ω<br />
können wir nun vereinfachen: Die abzuleitende Funk-<br />
i∈I (op,iwi,Ω) besteht aus vielen Summanden, und nur der Summand op,iwi,Ω<br />
<br />
∂<br />
i∈I (op,iwi,Ω)<br />
= op,i und<br />
∂wi,Ω<br />
enthält die Variable wi,Ω, nach der wir ableiten. Es gilt also<br />
damit:<br />
∂Errp(W )<br />
∂wi,Ω<br />
= −δp,Ω · op,i<br />
(5.15)<br />
= −op,i · δp,Ω. (5.16)<br />
Dies setzen wir in die Gleichung 5.8 auf der linken Seite ein und erhalten so unsere<br />
Modifikationsregel für ein Gewicht wi,Ω:<br />
∆wi,Ω = η · <br />
op,i · δp,Ω. (5.17)<br />
p∈P
Allerdings: Wir haben die Herleitung schon von Anfang an als Offline-Regel begonnen,<br />
indem wir uns Gedanken gemacht haben, wie wir die Fehler aller Muster aufsummieren<br />
und jeweils nach der Präsentation aller Muster lernen. Dies ist der mathematisch korrekte<br />
Weg, aber aufwändiger zu implementieren und, wie wir später in diesem Kapitel<br />
sehen werden, auch teilweise rechenaufwändiger während des Trainings.<br />
Für die „Online-Learning-Version“ der Delta-Regel wird die Aufsummierung einfach<br />
weggelassen und direkt nach der Präsentation jedes Musters gelernt, was uns auch die<br />
Schreibweise vereinfacht (sie muss nicht mehr auf ein Muster p bezogen sein):<br />
∆wi,Ω = η · oi · δΩ. (5.18)<br />
Diese Version der Delta-Regel möchte ich auch für die folgende Definition verwenden.<br />
Definition 5.6 (Delta-Regel). Bestimmen wir analog zu obiger Herleitung, dass die<br />
Funktion h aus der Hebb-Regel (Gleichung 4.6 auf Seite 86) nur den Ausgabewert oi des<br />
Vorgängerneurons i wieder ausgibt und die Funktion g die Differenz von gewünschter<br />
Aktivierung tΩ und tatsächlicher Aktivierung aΩ ist, so erhalten wir die Delta-Regel,<br />
auch bekannt als Widrow-Hoff-Regel:<br />
∆wi,Ω = η · oi · (tΩ − aΩ) = ηoiδΩ<br />
(5.19)<br />
Wenn man als Teaching Input die gewünschte Ausgabe anstatt Aktivierung anlegt, die<br />
Ausgabefunktion der Outputneurone also keine Identität darstellt, erhält man<br />
∆wi,Ω = η · oi · (tΩ − oΩ) = ηoiδΩ<br />
und δΩ entspricht dann der Differenz zwischen tΩ und oΩ.<br />
(5.20)<br />
Bei der Delta-Regel ist die Gewichtsänderung aller Gewichte zu einem Ausgabeneuron<br />
Ω proportional<br />
⊲ zur Differenz der aktuellen Aktivierung bzw. Ausgabe aΩ bzw. oΩ und dem dazugehörigen<br />
Teaching Input tΩ. Diesen Faktor möchten wir δΩ nennen, er wird<br />
auch „Delta“ gesprochen.<br />
Offensichtlich gilt die Delta-Regel jedoch nur für SLPs, da sich die Formel immer auf<br />
den Teaching Input bezieht und für innere Verarbeitungsschichten von Neuronen kein<br />
Teaching Input existiert.
Ein. 1 Ein. 2 Ausgabe<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 0<br />
Tabelle 5.1: Definition des logischen XORs. Links die Eingabewerte, rechts die definierte Ausgabe.<br />
<br />
<br />
i1<br />
i2<br />
❇<br />
wi1 ,Ω wi ❇<br />
2 ,Ω<br />
❇<br />
<br />
⑤⑤⑤⑤<br />
⑤⑤⑤⑤<br />
Ω<br />
<br />
XOR?<br />
Abbildung 5.6: Skizze für ein Singlelayerperceptron, welches die XOR-Funktion darstellen soll –<br />
solch ein SLP kann es aber nicht geben.<br />
5.2 Ein SLP kann nur linear separierbare Daten repräsentieren<br />
Sei f die XOR-Funktion, welche zwei binäre Eingaben erwartet und eine binäre Ausgabe<br />
erzeugt (genaue Definition siehe Tabelle 5.1).<br />
Versuchen wir, durch ein SLP mit zwei Eingabeneuronen i1, i2 und einem Ausgabeneuron<br />
Ω die XOR-Funktion darzustellen (Abb. 5.6).<br />
Wir verwenden hier die gewichtete Summe als Propagierungsfunktion, eine binäre Aktivierungsfunktion<br />
mit Schwellenwert Θ und die Identität als Ausgabefunktion. Ω muss<br />
also in Abhängigkeit von i1 und i2 den Wert 1 ausgeben, wenn gilt:<br />
netΩ = oi1 wi1,Ω + oi2 wi2,Ω ≥ ΘΩ<br />
(5.21)
Abbildung 5.7: Lineare Separierung von n = 2 Eingaben von Inputneuronen i1 und i2 durch 1dimensionale<br />
Gerade. A und B bezeichnen die Zugehörigkeit der Eckpunkte zu den zu separierenden<br />
Mengen der XOR-Funktion.<br />
Gehen wir von einem positiven Gewicht wi2,Ω aus, so ist Ungleichung 5.21 auf der<br />
vorangehenden Seite äquivalent zu der Ungleichung<br />
oi1<br />
1<br />
≥ (ΘΩ − oi2<br />
wi1,Ω<br />
wi2,Ω) (5.22)<br />
Bei konstantem Schwellenwert ΘΩ stellt der rechte Teil der Ungleichung 5.22 eine<br />
Gerade durch ein von den möglichen Ausgaben oi1 und oi2 der Eingabeneurone i1 und<br />
i2 aufgespanntes Koordinatensystem (Abb. 5.7) dar.<br />
Für ein (wie für Ungleichung 5.22 gefordertes) positives wi2,Ω feuert das Ausgabeneuron<br />
Ω bei den Eingabekombinationen, welche über der erzeugten Geraden liegen. Für<br />
ein negatives wi2,Ω würde es für alle Eingabekombinationen feuern, welche unter der<br />
Geraden liegen. Es sei angemerkt, dass nur die vier Eckpunkte des Einheitsquadrates<br />
mögliche Eingaben sind, da die XOR-Funktion nur binäre Eingaben kennt.<br />
Um das XOR-Problem zu lösen, müssen wir also die Gerade so drehen und verschieben,<br />
dass sie die Eingabemenge A = {(0, 0), (1, 1)} von der Eingabemenge B =<br />
{(0, 1), (1, 0)} abgrenzt - was offensichtlich nicht möglich ist.
Abbildung 5.8: Lineare Separierung von n = 3 Eingaben von Inputneuronen i1, i2 und i3 durch<br />
2-dimensionale Ebene.<br />
Allgemein lassen sich die Eingabemöglichkeiten n vieler Eingabeneurone in einem ndimensionalen<br />
Würfel darstellen, der von einem SLP durch eine (n − 1)-dimensionale<br />
Hyperebene separiert wird (Abb. 5.8) – nur Mengen, die durch eine solche Hyperebene<br />
trennbar, also linear separierbar sind, kann ein SLP klassifizieren.<br />
Es spricht leider viel dafür, dass der Prozentsatz der linear separierbaren Probleme<br />
mit steigendem n schnell abnimmt (siehe Tabelle 5.2 auf der folgenden Seite), was die<br />
Funktionalität des SLPs einschränkt – weiterhin sind Prüfungen auf lineare Separierbarkeit<br />
schwierig. Für schwierigere Aufgaben mit mehr Eingaben benötigen wir also<br />
etwas Mächtigeres als das SLP. Das XOR-Problem stellt schon eine dieser Aufgaben<br />
dar, braucht doch ein Perceptron, das die XOR-Funktion repräsentieren will, bereits<br />
eine verdeckte Ebene (Abb. 5.9 auf der folgenden Seite).<br />
5.3 Ein Multilayerperceptron enthält mehr trainierbare<br />
Gewichtsschichten<br />
Mächtiger als ein SLP ist ein Perceptron mit zwei oder mehr trainierbaren Gewichtsschichten<br />
(Multilayerperceptron bzw. MLP genannt). Wie wir wissen, kann ein Single-
n Anzahl<br />
binärer<br />
Funktionen<br />
davon lin.<br />
separierbar<br />
Anteil<br />
1 4 4 100%<br />
2 16 14 87.5%<br />
3 256 104 40.6%<br />
4 65, 536 1, 772 2.7%<br />
5 4.3 · 10 9 94, 572 0.002%<br />
6 1.8 · 10 19 5, 028, 134 ≈ 0%<br />
Tabelle 5.2: Anzahl der Funktionen bezüglich n binärer Eingaben und Anzahl und Anteil der davon<br />
linear separierbaren Funktionen. Nach [Zel94, Wid89, Was89].<br />
<br />
<br />
❆<br />
<br />
✶✶<br />
❆<br />
✶ ❆<br />
✶<br />
❆<br />
✶ 1<br />
✶<br />
❆<br />
1<br />
✶ ❆<br />
✶ ❆<br />
1✶✶✶✶<br />
✶✶✶✶<br />
<br />
⑥⑥⑥⑥<br />
⑥⑥⑥⑥<br />
1 ✌✌✌✌✌✌✌✌<br />
✌✌✌✌✌✌✌✌<br />
1.5<br />
−2<br />
<br />
0.5<br />
<br />
XOR<br />
Abbildung 5.9: <strong>Neuronale</strong>s Netz, welches die XOR-Funktion realisiert. Schwellenwerte stehen (soweit<br />
vorhanden) innerhalb der Neurone.
layerperceptron den Inputraum durch eine Hyperebene (bei zweidimensionalem Inputraum<br />
eine Geraden) teilen. Ein zweistufiges Perceptron (2 trainierbare Gewichtsschichten,<br />
3 Schichten Neurone) kann konvexe Polygone klassifizieren, indem es diese<br />
Geraden weiterbehandelt, zum Beispiel in der Form „erkenne Muster, die über Gerade<br />
1, unter Gerade 2 und unter Gerade 3 liegen“. Wir haben also bildlich gesprochen ein<br />
SLP mit mehreren Ausgabeneuronen genommen und ein weiteres SLP „angehangen“<br />
(oberer Teil der Abb. 5.10 auf der folgenden Seite). Ein Multilayerperceptron stellt<br />
einen universellen Funktionsapproximator dar, wie aus dem Cybenko-Theorem<br />
hervorgeht [Cyb89].<br />
Eine weitere trainierbare Gewichtsschicht verfährt genauso, nur eben mit den konvexen<br />
Polygonen, die nun wieder durch eine Gewichtsschicht aufeinander addiert, voneinander<br />
abgezogen oder mit anderen Operationen nachbearbeitet werden können (unterer Teil<br />
der Abb. 5.10 auf der folgenden Seite).<br />
Allgemein kann mathematisch bewiesen werden, dass schon ein Multilayerperceptron<br />
mit einer Schicht versteckter Neurone eine Funktion mit endlich vielen Unstetigkeitsstellen<br />
sowie deren erste Ableitung beliebig genau approximieren kann – leider ist der<br />
Beweis aber nicht konstruktiv, und so ist es uns selbst überlassen, die richtige Neuronenanzahl<br />
und Gewichte zu finden.<br />
Im Folgenden möchten wir für verschiedene Multilayerperceptrons eine Kurzschreibweise<br />
verwenden, welche weite Verbreitung findet: So ist ein zweistufiges Perceptron<br />
mit 5 Neuronen in der Eingabeschicht, 3 Neuronen in der versteckten Schicht und 4<br />
Neuronen in der Ausgabeschicht ein 5-3-4-MLP.<br />
Definition 5.7 (Multilayerperceptron). Perceptrons mit mehr als einer Schicht variabel<br />
gewichteter Verbindungen bezeichnen wir als Multilayerperceptron (MLP).<br />
Ein n-Layer-Perceptron bzw. n-stufiges Perceptron hat dabei genau n variable Gewichtsschichten<br />
und n + 1 Schichten Neurone (die Retina lassen wir außer Acht), die<br />
Neuronenschicht 1 ist hierbei die Schicht Eingabeneurone.<br />
Da dreistufige Perceptrons durch Vereinigung und Schnitt beliebig vieler konvexer<br />
Polygone Mengen beliebiger Form klassifizieren können, bringt uns eine weitere Stufe<br />
für Funktionsdarstellungen durch <strong>Neuronale</strong> <strong>Netze</strong> keinen Vorteil mehr. Vorsicht beim<br />
Literaturlesen: An der Schichtendefinition scheiden sich die Geister. Manche Quellen<br />
zählen die Neuronenschichten, manche die Gewichtsschichten. Manche zählen die Retina<br />
hinzu, manche zählen die trainierbaren Gewichtsschichten. Manche zählen (aus<br />
welchen Gründen auch immer) die Ausgabeneuronenschicht nicht mit. Ich habe hier<br />
die Definition gewählt, die meiner Meinung nach am meisten über die Lernfähigkeiten<br />
aussagt – und werde sie hier auch konsistent durchhalten. Nochmal zur Erinnerung:
i1<br />
⑧⑧⑧⑧⑧⑧⑧⑧⑧<br />
❅<br />
❯ ❯<br />
<br />
❅<br />
❯<br />
i2<br />
❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯ ❯<br />
❅ ❯ ❯<br />
❅ ❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
<br />
⑧<br />
❯ ❯ ❯ ❯ ❯ ❯ <br />
⑧⑧⑧⑧⑧⑧⑧⑧<br />
❅<br />
❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥<br />
<br />
h1 <br />
<br />
<br />
h2<br />
h3<br />
<br />
<br />
<br />
<br />
<br />
<br />
♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦<br />
Ω<br />
<br />
i1<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦<br />
i2<br />
❅❅❅<br />
❅❅❅<br />
❅<br />
<br />
❅❅<br />
<br />
<br />
<br />
<br />
<br />
⑦<br />
<br />
<br />
⑦⑦⑦⑦⑦⑦⑦⑦<br />
❅❅❅<br />
❅❅❅<br />
❅<br />
<br />
❅❅<br />
<br />
h1 <br />
<br />
h2<br />
h3<br />
h4<br />
h5<br />
<br />
❅<br />
<br />
❅<br />
❅<br />
<br />
❅<br />
<br />
❅<br />
❅<br />
<br />
❅<br />
❅<br />
<br />
❅<br />
<br />
<br />
<br />
<br />
<br />
<br />
⑦<br />
<br />
⑦⑦⑦⑦⑦⑦⑦⑦<br />
h6<br />
<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
h7<br />
h8<br />
❅<br />
<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦<br />
Ω<br />
<br />
Abbildung 5.10: Wie wir wissen, repräsentiert ein SLP eine Gerade. Mit 2 trainierbaren Gewichtsschichten<br />
kann man mehrere Geraden zu konvexen Polygonen zusammensetzen (oben). Unter Verwendung<br />
von 3 trainierbaren Gewichtsschichten kann man mit mehreren Polygonen beliebige Mengen<br />
modellieren (unten).
n klassifizierbare Menge<br />
1 Hyperebene<br />
2 konvexes Polygon<br />
3 jede beliebige Menge<br />
4 auch jede beliebige Menge,<br />
also kein weiterer Vorteil<br />
Tabelle 5.3: Hier wird dargestellt, mit welchem Perceptron sich Mengen welcher Art klassifizieren<br />
lassen, wobei das n die Anzahl der trainierbaren Gewichtsschichten darstellt.<br />
Ein n-stufiges Perceptron besitzt genau n trainierbare Gewichtsschichten. Eine Zusammenfassung,<br />
welche Perceptrons welche Art von Menge klassifizieren können, findet<br />
sich noch einmal in Tabelle 5.3. Wir werden uns jetzt der Herausforderung widmen,<br />
Perceptrons mit mehr als einer Gewichtsschicht zu trainieren.<br />
5.4 Backpropagation of Error verallgemeinert die Delta-Regel<br />
auf MLPs<br />
Im Folgenden möchte ich die Backpropagation of Error-Lernregel (Kurz: Backpropagation,<br />
Backprop oder auch BP) herleiten und näher erläutern, mit der man mehrstufige<br />
Perceptrons, welche semilineare 3 Aktivierungsfunktionen besitzen, trainieren<br />
kann. Binäre Schwellenwertfunktionen und sonstige nicht-differenzierbare Funktionen<br />
werden nicht mehr unterstützt, das macht aber nichts: Wir haben ja gesehen, dass man<br />
die Fermifunktion bzw. den Tangens Hyperbolicus durch einen Temperatur-Parameter<br />
T der binären Schwellenwertfunktion beliebig annähern kann. Weitgehend werde ich<br />
der Herleitung nach [Zel94] bzw. [MR86] folgen – ich möchte aber noch einmal darauf<br />
hinweisen, dass das Verfahren bereits früher von Paul Werbos in [Wer74] publiziert<br />
wurde, jedoch wesentlich weniger Leser fand als in [MR86].<br />
Backpropagation ist ein Gradientenabstiegsverfahren (mit all den Stärken und Schwächen<br />
des Gradientenabstiegs), wobei die Fehlerfunktion Err(W ) hier sämtliche n Gewichte<br />
als Argument entgegennimmt (Abb. 5.5 auf Seite 98) und diese dem Ausgabefehler<br />
zuordnet, also n-dimensional ist. Auf Err(W ) sucht man durch Gradientenabstieg<br />
einen Punkt geringen oder gar geringsten Fehlers. Backpropagation trainiert also wie<br />
die Delta-Regel die Gewichte des <strong>Neuronale</strong>n <strong>Netze</strong>s – und genau die Delta-Regel bzw.<br />
3 Semilineare Funktionen sind monoton und differenzierbar – aber im Allgemeinen nicht linear.
ihre Größe δi für ein Neuron i wird durch Backpropagation von einer auf mehrere<br />
trainierbare Gewichtsschichten erweitert.<br />
5.4.1 Die Herleitung erfolgt völlig analog zur Deltaregel, aber mit<br />
allgemeinerem Delta<br />
Im Vorfeld sei definiert, dass sich die <strong>Netze</strong>ingabe der einzelnen Neurone i durch die<br />
gewichtete Summe ergibt. Weiterhin seien op,i, netp,i etc. wie schon bei Herleitung der<br />
Delta-Regel definiert als die gewohnten oi, neti, etc. unter dem Eingabemuster p, welches<br />
wir zum Trainieren verwenden. Auch sei die Ausgabefunktion wieder die Identität,<br />
es gilt also oi = fact(netp,i) für jedes Neuron i. Da es sich um eine Verallgemeinerung<br />
der Delta-Regel handelt, benutzen wir wieder das gleiche Formelgerüst wie bei der<br />
Delta-Regel (Gleichung 5.20 auf Seite 102). Was wir verallgemeinern müssen, ist, wie<br />
schon angedeutet, die Größe δ für jedes Neuron.<br />
Zunächst: Wo befindet sich das Neuron, für das wir ein δ errechnen wollen? Es liegt<br />
nahe, ein beliebiges inneres Neuron h zu wählen, welches eine Menge K von Vorgängerneuronen<br />
k sowie eine Menge L von Nachfolgerneuronen l besitzt, welche ebenfalls<br />
innere Neurone sind (Siehe Abb. 5.11 auf der rechten Seite). Es ist dabei irrelevant,<br />
ob die Vorgängerneurone bereits die Eingabeneurone sind.<br />
Wir führen nun das gleiche Spiel wie bei der Herleitung der Delta-Regel durch und<br />
spalten Funktionen durch die Kettenregel. Ich werde bei dieser Herleitung nicht ganz<br />
so ausführlich sein, das Prinzip ist aber dem der Delta-Regel ähnlich (die Unterschiede<br />
liegen eben wie gesagt im verallgemeinerten δ). Wir leiten also zunächst die Fehlerfunktion<br />
Err nach einem Gewicht wk,h ab.<br />
∂Err(wk,h)<br />
∂wk,h<br />
= ∂Err<br />
∂neth<br />
<br />
=−δh<br />
· ∂neth<br />
∂wk,h<br />
(5.23)<br />
Der erste Faktor der Gleichung 5.23 ist −δh, welches wir gleich noch betrachten wollen.<br />
Der zweite Faktor der Gleichung trägt im Zähler die <strong>Netze</strong>ingabe, also die gewichtete<br />
Summe, so dass wir diese auch direkt ableiten können. Es fallen wieder alle Summanden<br />
der Summe weg bis auf denjenigen, der wk,h enthält. Dieser Summand heißt wk,h · ok.<br />
Leitet man diesen ab, bleibt also der Output des Neurons k übrig:<br />
∂neth<br />
∂wk,h<br />
= ∂ <br />
= ok<br />
k∈K wk,hok<br />
∂wk,h<br />
(5.24)<br />
(5.25)
▲<br />
<br />
▲▲<br />
❂<br />
<br />
▲ ❂<br />
. . . k<br />
▲▲<br />
❂<br />
▲ ❂<br />
▲ ❂<br />
▲▲<br />
❂<br />
▲ ❂<br />
▲ ❂<br />
wk,h<br />
▲▲<br />
❂<br />
▲<br />
❂<br />
<br />
<br />
<br />
♣♣♣♣♣♣♣♣ K<br />
♣♣♣♣♣♣♣<br />
Σ<br />
fact<br />
<br />
✁✁✁✁✁✁✁✁✁✁<br />
◆ h H<br />
◆<br />
wh,l◆◆<br />
◆◆◆<br />
<br />
◆◆◆<br />
<br />
<br />
. . . l L<br />
Abbildung 5.11: Skizze der Lage unseres Neurons h im <strong>Neuronale</strong>n Netz. Es liegt in der Schicht<br />
H, Vorgängerschicht ist K, nachfolgende Schicht ist L.<br />
Wie versprochen, behandeln wir nun das −δh der Gleichung 5.23 auf der linken Seite,<br />
welches wir wieder mit der Kettenregel aufspalten:<br />
δh = − ∂Err<br />
∂neth<br />
= − ∂Err<br />
∂oh<br />
· ∂oh<br />
∂neth<br />
(5.26)<br />
(5.27)<br />
Die Ableitung des Outputs nach der <strong>Netze</strong>ingabe (der zweite Faktor in Gleichung 5.27)<br />
kommt natürlich der Ableitung der Aktivierungsfunktion nach der <strong>Netze</strong>ingabe<br />
gleich:<br />
∂oh<br />
∂neth<br />
= ∂fact(neth)<br />
∂neth<br />
(5.28)<br />
= fact ′ (neth) (5.29)<br />
Analog leiten wir nun den ersten Faktor in Gleichung 5.27 ab. Diese Stelle möge sich der<br />
Leser bitte gut durch den Kopf gehen lassen. Wir müssen uns hierfür nur klarmachen,<br />
dass die Ableitung der Fehlerfunktion nach dem Output einer inneren Neuronenschicht
abhängig ist vom Vektor sämtlicher <strong>Netze</strong>ingaben der Nachfolgeschicht. Dies schlägt in<br />
Gleichung 5.30 zu Buche:<br />
− ∂Err<br />
∂oh<br />
= − ∂Err(netl1 , . . . , netl |L| )<br />
∂oh<br />
l∈L<br />
(5.30)<br />
Nach der Definition der mehrdimensionalen Kettenregel folgt dann sofort die Gleichung<br />
5.31:<br />
− ∂Err<br />
=<br />
∂oh<br />
<br />
<br />
− ∂Err<br />
·<br />
∂netl<br />
∂netl<br />
<br />
(5.31)<br />
∂oh<br />
Die Summe in Gleichung 5.31 besitzt zwei Faktoren. Mit diesen Faktoren, summiert<br />
über die Nachfolgeschicht L, wollen wir uns nun beschäftigen. Wir rechnen den zweiten<br />
Faktor in der folgenden Gleichung 5.33 einfach aus:<br />
∂netl<br />
∂oh<br />
= ∂ <br />
h∈H wh,l · oh<br />
= wh,l<br />
∂oh<br />
Analog gilt für den ersten Faktor nach der Definition unseres δ:<br />
Wir setzen nun ein:<br />
− ∂Err<br />
∂netl<br />
⇒ − ∂Err<br />
∂oh<br />
= δl<br />
= <br />
l∈L<br />
δlwh,l<br />
(5.32)<br />
(5.33)<br />
(5.34)<br />
(5.35)<br />
Eine graphisch aufbereitete Version der δ-Verallgemeinerung mit allen Aufspaltungen<br />
findet sich in Abbildung 5.12 auf der rechten Seite.<br />
Dem Leser wird bereits aufgefallen sein, dass einige Zwischenergebnisse umrahmt wurden.<br />
Umrahmt wurden genau die Zwischenergebnisse, die in der Gewichtsveränderung<br />
von wk,h einen Faktor ausmachen. Führt man die obigen Gleichungen mit den umrahmten<br />
Zwischenergebnissen zusammen, so ergibt sich die gesuchte Gewichtsänderung<br />
∆wk,h zu<br />
∆wk,h = ηokδh mit (5.36)<br />
δh = f ′ act(neth) · <br />
l∈L<br />
(δlwh,l)
δh<br />
− ∂Err<br />
∂neth<br />
<br />
<br />
∂oh<br />
∂neth<br />
f ′ act(neth) − ∂Err<br />
∂netl<br />
− ∂Err<br />
∂oh<br />
<br />
<br />
δl<br />
<br />
l∈L ∂netl<br />
∂oh<br />
∂ <br />
h∈H wh,l·oh<br />
∂oh<br />
Abbildung 5.12: Graphische Darstellung der Gleichsetzungen (durch langgezogene Gleichzeichen)<br />
und Kettenregel-Aufspaltungen (durch Pfeile) im Rahmen der Herleitung von Backpropagation. Die<br />
Blätter des Baumes spiegeln die in der Herleitung umrahmten Endergebnisse aus der Verallgemeinerung<br />
des δ wieder.<br />
wh,l
– natürlich nur für den Fall, dass h ein inneres Neuron ist (sonst gibt es ja auch keine<br />
Nachfolgeschicht L).<br />
Den Fall, dass h Ausgabeneuron ist, haben wir ja schon in der Herleitung der Delta-<br />
Regel behandelt. Insgesamt ergibt sich also unsere Verallgemeinerung der Delta-Regel,<br />
genannt Backpropagation of Error, zu:<br />
∆wk,h = ηokδh <br />
mit<br />
f<br />
δh =<br />
′ act(neth) · (th − yh) (h außen)<br />
f ′ act(neth) · <br />
l∈L (δlwh,l) (h innen)<br />
(5.37)<br />
Im Unterschied zur Delta-Regel ist also die Behandlung des δ, je nachdem, ob es sich bei<br />
h um ein Ausgabe- oder aber inneres (also verdecktes) Neuron handelt, verschieden:<br />
1. Ist h Ausgabeneuron, so gilt<br />
δp,h = f ′ act(netp,h) · (tp,h − yp,h) (5.38)<br />
Das Gewicht wk,h von k nach h wird also unter unserem Übungsmuster p proportional<br />
zu<br />
⊲ Lernrate η,<br />
⊲ Ausgabe op,k des Vorgängerneurons k,<br />
⊲ Gradient der Aktivierungsfunktion an der Stelle der <strong>Netze</strong>ingabe des Nachfolgerneurons<br />
f ′ act(netp,h) und<br />
⊲ Differenz aus Teaching Input tp,h und Ausgabe yp,h des Nachfolgerneurons<br />
h<br />
geändert. In diesem Fall arbeitet Backpropagation also auf zwei Neuronenschichten,<br />
der Ausgabeschicht mit dem Nachfolgerneuron h und der Schicht davor mit<br />
dem Vorgängerneuron k.<br />
2. Ist h inneres, verdecktes Neuron, so gilt<br />
δp,h = f ′ act(netp,h) · <br />
(δp,l · wh,l) (5.39)<br />
An dieser Stelle sei ausdrücklich erwähnt, dass Backpropagation nun auf drei<br />
Schichten arbeitet. Hierbei ist das Neuron k der Vorgänger der zu ändernden<br />
Verbindung mit dem Gewicht wk,h, das Neuron h der Nachfolger der zu ändernden<br />
Verbindung, und die Neurone l liegen in der Schicht nach dem Nachfolgerneuron.<br />
Das Gewicht wk,h von k nach h wird also unter unserem Übungsmuster<br />
p proportional zu<br />
l∈L
⊲ Lernrate η,<br />
⊲ Ausgabe des Vorgängerneurons op,k,<br />
⊲ Gradient der Aktivierungsfunktion an der Stelle der <strong>Netze</strong>ingabe des Nachfolgerneurons<br />
f ′ act(netp,h),<br />
⊲ sowie, und hier liegt der Unterschied, aus der gewichteten Summe der Gewichtsveränderungen<br />
zu allen Neuronen, die h nachfolgen, <br />
l∈L (δp,l · wh,l)<br />
geändert.<br />
Definition 5.8 (Backpropagation). Fassen wir die Formeln 5.38 auf der linken Seite<br />
und 5.39 auf der linken Seite zusammen, so erhalten wir folgende Gesamtformel für<br />
Backpropagation (die Bezeichner p werden der Übersichtlichkeit halber weggelassen):<br />
∆wk,h = ηokδh <br />
mit<br />
f<br />
δh =<br />
′ act(neth) · (th − yh) (h außen)<br />
f ′ act(neth) · <br />
l∈L (δlwh,l) (h innen)<br />
SNIPE: Eine online-Variante von Backpropagation ist in der Methode<br />
trainBackpropagationOfError der Klasse NeuralNetwork implementiert.<br />
(5.40)<br />
Offensichtlich ist also, dass Backpropagation zunächst die hinterste Gewichtsschicht<br />
direkt mit dem Teaching Input bearbeitet und sich anschließend ebenenweise unter<br />
Berücksichtigung der jeweils vorhergehenden Gewichtsänderungen weiter nach vorn arbeitet.<br />
Der Teaching Input hinterlässt also Spuren in sämtlichen Gewichtsschichten.<br />
Ich beschreibe hier gerade den ersten Teil (Delta-Regel) und zweiten Teil von Backpropagation<br />
(Verallgemeinerte Delta-Regel auf mehr Schichten) in einem Zug, was<br />
vielleicht der Sache, nicht jedoch der Forschung daran gerecht wird. Der erste Teil<br />
ist offensichtlich, das werden wir gleich im Rahmen einer mathematischen Spielerei<br />
sehen. Zwischen dem ersten und zweiten, rekursiven Teil liegen jedoch Jahrzehnte an<br />
Entwicklungszeit und -arbeit, denn wie bei vielen bahnbrechenden Erfindungen merkte<br />
man auch dieser erst nach der Entwicklung an, wie einleuchtend sie eigentlich ist.<br />
5.4.2 Der mathematische Rückweg: Reduktion von Backpropagation auf<br />
Delta-Regel<br />
Wie oben erläutert, ist die Delta-Regel ein Spezialfall von Backpropagation für einstufige<br />
Perceptrons und lineare Aktivierungsfunktionen – diesen Umstand möchte ich<br />
hier kurz näher erläutern und die Delta-Regel aus Backpropagation entwickeln, um
das Verständnis für beide Regeln noch etwas zu schärfen. Wir haben gesehen, dass<br />
Backpropagation durch<br />
∆wk,h = ηokδh <br />
mit<br />
f<br />
δh =<br />
′ act(neth) · (th − yh) (h außen)<br />
f ′ act(neth) · <br />
l∈L (δlwh,l) (h innen)<br />
(5.41)<br />
definiert ist. Da wir sie nur für einstufige Perceptrons verwenden, fällt der zweite Teil<br />
von Backpropagation (heller dargestellt) ersatzlos weg, wir erhalten also:<br />
∆wk,h = ηokδh mit<br />
δh = f ′ act(neth) · (th − oh)<br />
(5.42)<br />
Weiterhin wollen wir nur lineare Aktivierungsfunktionen verwenden, so dass f ′ act (heller<br />
dargestellt) konstant ist. Konstanten lassen sich bekanntlich zusammenfassen, wir<br />
fassen also die konstante Ableitung f ′ act und die (mindestens pro Lernzyklus konstante)<br />
Lernrate η (auch heller dargestellt) direkt in η zusammen. Es ergibt sich also:<br />
Dies entspricht genau der Definition der Delta-Regel.<br />
∆wk,h = ηokδh = ηok · (th − oh) (5.43)<br />
5.4.3 Die Wahl der Lernrate hat enormen Einfluss auf den Lernprozeß<br />
Wie mittlerweile vielfach gesehen, ist die Gewichtsänderung in jedem Fall proportional<br />
zur Lernrate η. Die Wahl von η ist also sehr entscheidend für das Verhalten von<br />
Backpropagation und allgemein für Lernverfahren.<br />
Definition 5.9 (Lernrate). Die Geschwindigkeit und Genauigkeit eines Lernverfahrens<br />
ist immer steuerbar von und proportional zu einer Lernrate, welche als η geschrieben<br />
wird.<br />
Wird η zu groß gewählt, so sind die Sprünge auf der Fehlerfläche zu groß und es könnten<br />
z.B. enge Täler, also gute Werte, einfach übersprungen werden, zudem bewegt man sich<br />
sehr unkontrolliert über die Fehleroberfläche. Das Wunschmittel ist also ein kleines η,<br />
was aber einen riesigen, oft inakzeptablen Zeitaufwand mit sich bringen kann. Die<br />
Erfahrung zeigt, dass gute Werte für die Lernrate im Bereich<br />
0.01 ≤ η ≤ 0.9<br />
liegen. Die Wahl von η hängt maßgeblich von Problem, Netz und Trainingsdaten ab,<br />
so dass man kaum praktische Wahlhilfen geben kann. Beliebt ist jedoch, mit einem<br />
relativ großen η, z.B. 0.9, den Anfang des Lernens zu machen und η dann langsam<br />
bis auf z.B. 0.1 zu verringern, während für einfachere Probleme η oft einfach konstant<br />
gehalten werden kann.
5.4.3.1 Variation der Lernrate über die Zeit<br />
Weiteres Stilmittel beim Training kann eine variable Lernrate sein: Eine große Lernrate<br />
lernt am Anfang gut, aber später nicht mehr genau, eine kleinere ist aufwändiger,<br />
lernt aber genauer. Also verringert man einmal oder mehrere Male die Lernrate um<br />
eine Größenordnung – während des Lernvorgangs.<br />
Ein beliebter Fehler (der obendrein noch auf den ersten Blick sehr elegant wirkt) ist,<br />
die Lernrate kontinuierlich sinken zu lassen: Hier kommt es sehr leicht vor, dass der<br />
Abfall der Lernrate größer ist als die Steigung eines Hügels der Fehlerfunktion, die<br />
wir gerade erklimmen – was zur Folge hat, dass wir an dieser Steigung einfach hängen<br />
bleiben. Lösung: Lieber wie beschrieben die Lernrate stufenweise verringern.<br />
5.4.3.2 Verschiedene Schichten – verschiedene Lernraten<br />
Je weiter man sich während des Lernvorganges von der Ausgabeschicht wegbewegt,<br />
um so langsamer lernt Backpropagation – es ist also eine gute Idee, für die Gewichtsschichten<br />
nahe der Eingabeschicht eine größere Lernrate zu nehmen als für diejenigen<br />
nahe der Ausgabeschicht. Der Unterschied kann hier ruhig bis zu einer Größenordnung<br />
betragen.<br />
5.5 Resilient Backpropagation ist eine Erweiterung von<br />
Backpropagation of Error<br />
Gerade haben wir zwei Backpropagation-spezifische Eigenschaften angesprochen, die<br />
hin und wieder zum Problem werden können (zusätzlich zu denjenigen, die Gradientenabstiege<br />
ohnehin schon mit sich bringen): Zum einen kann der Benutzer von Backpropagation<br />
eine schlechte Lernrate wählen, und zum anderen lernt Backpropagation<br />
immer langsamer, je weiter die Gewichte von der Ausgabeschicht entfernt sind. Aus<br />
diesem Grund haben Martin Riedmiller et al. Backpropagation weiterentwickelt,<br />
und ihre Variante Resilient Backpropagation (kurz: Rprop) getauft [RB93,Rie94].<br />
Ich möchte Backpropagation und Rprop hier gegenüberstellen, ohne ausdrücklich eine<br />
Variante als „besser“ zu deklarieren. Bevor wir uns nun wirklich mit Formeln auseinandersetzen,<br />
wollen wir die zwei primären Ideen hinter Rprop (und ihre Folgen) erst<br />
einmal umgangsprachlich dem schon bekannten Backpropagation gegenüberstellen.
Lernrate: Backpropagation benutzt standardmäßig eine Lernrate η, die vom Benutzer<br />
gewählt wird, und für das ganze Netz gilt. Sie bleibt statisch, bis sie manuell geändert<br />
wird. Die Nachteile dieser Vorgehensweise haben wir schon erforscht. Rprop<br />
verfolgt hier einen komplett anderen Ansatz: Es gibt keine globale Lernrate. Erstens<br />
hat jedes einzelne Gewicht wi,j seine eigene Lernrate ηi,j, und zweitens<br />
werden diese Lernraten nicht vom Benutzer gewählt, sondern von Rprop selbst<br />
festgelegt. Drittens bleiben die Gewichtsänderungen nicht statisch, sondern werden<br />
von Rprop für jeden Zeitschritt angepasst. Um die zeitliche Änderung miteinzubeziehen,<br />
nennen wir sie korrekterweise ηi,j(t). Dies ermöglich nicht nur<br />
gezielteres Lernen, auch das Problem des schichtweise verlangsamten Lernens<br />
wird auf elegante Weise gelöst.<br />
Gewichtsänderung: In Backpropagation werden die Gewichte proportional zum Gradienten<br />
der Fehlerfunktion geändert. Das ist auf den ersten Blick wirklich intuitiv,<br />
allerdings übernehmen wir so jegliche Zerklüftung, die die Fehleroberfläche<br />
aufweist, mit in die Gewichtsänderung. Ob das immer sinnvoll ist, darf zumindest<br />
angezweifelt werden. Auch hier geht Rprop andere Wege: Der Betrag der<br />
Gewichtsänderung ∆wi,j entspricht einfach direkt der zugehörigen, automatisch<br />
angepassten Lernrate ηi,j. So ist die Gewichtsänderung nicht proportional zum<br />
Gradienten, nur noch das Vorzeichen des Gradienten geht in die Gewichtsänderung<br />
mit ein. Bis jetzt wissen wir noch nicht, auf welche Weise die ηi,j zur<br />
Laufzeit angepasst werden, aber es sei vorweggenommen, dass der Ergebnisprozess<br />
deutlich weniger zerklüftet aussieht als eine Fehlerfunktion.<br />
Gegenüber Backprop wird also der Gewichts-Updateschritt ersetzt, und ein zusätzlicher<br />
Lernraten-Anpassungsschritt hinzugefügt. Wie werden diese Ideen nun genau<br />
umgesetzt?<br />
5.5.1 Gewichtsänderungen sind nicht proportional zum Gradienten<br />
Betrachten wir zunächst die Gewichtsänderung. Wir haben schon bemerkt, dass die<br />
gewichtsspezifischen Lernraten direkt als Beträge der Gewichtsänderungen für ihr jeweiliges<br />
Gewicht herhalten. Bleibt die Frage, woher das Vorzeichen kommt – und das ist<br />
eine Stelle, bei welcher der Gradient ins Spiel kommt. Wie schon bei der Herleitung von<br />
Backpropagation, leiten wir die Fehlerfunktion Err(W ) nach den einzelnen Gewichten<br />
∂Err(W )<br />
wi,j ab und erhalten so Gradienten . Jetzt kommt der große Unterschied: An-<br />
∂wi,j<br />
statt den Betrag des Gradienten multiplikativ mit in die Gewichtsänderung einfließen<br />
zu lassen, betrachten wir nur das Vorzeichen des Gradienten. Der Gradient bestimmt<br />
also nicht mehr die Stärke, sondern nur noch die Richtung der Gewichtsänderung. Ist<br />
∂Err(W )<br />
das Vorzeichen des Gradienten ∂wi,j positiv, müssen wir das Gewicht wi,j verringern.
Vom Gewicht wird also ηi,j abgezogen. Ist das Vorzeichen des Gradienten hingegen negativ,<br />
so bedarf das Gewicht einer Verstärkung, bekommt also ηi,j addiert. Ist der<br />
Gradient genau 0, passiert einfach gar nichts. Wir gießen diese umgangssprachliche<br />
Beschreibung nun in eine Formel. Wir fügen jeweils ein (t) an, um darzustellen, dass<br />
alles im gleichen Zeitschritt passiert. Das ist unübersichtlicher, aber trotzdem wichtig,<br />
denn gleich werden wir noch eine weitere Formel betrachten, die über verschiedene<br />
Zeitschritte operiert. Dafür kürzen wir den Gradienten ab: g = .<br />
Definition 5.10 (Gewichtsänderung in Rprop).<br />
⎧<br />
⎪⎨ −ηi,j(t), wenn g(t) > 0<br />
∆wi,j(t) = +ηi,j(t),<br />
⎪⎩<br />
0<br />
wenn g(t) < 0<br />
sonst.<br />
∂Err(W )<br />
∂wi,j<br />
(5.44)<br />
Wir wissen nun, wie die Gewichte an sich geändert werden - jetzt bleibt noch die Frage,<br />
auf welche Weise die Lernraten selbstständig angepasst werden. Zuletzt, wenn wir das<br />
Gesamtsystem verstanden haben, klären wir dann die verbleibenden Kleinigkeiten wie<br />
Initialisierungswerte und ein paar konkrete Konstanten.<br />
5.5.2 Viele dynamisch angepasste Lernraten statt einer statischen<br />
Um die Lernraten ηi,j anzupassen, müssen wir wieder die zugehörigen Gradienten g<br />
betrachten, und zwar über zwei Zeitschritte hinweg: Den gerade vergangenen (t − 1)<br />
und den jetzigen (t). Wieder ist für uns nur das Vorzeichen des Gradienten wichtig,<br />
und wir müssen uns nun fragen: Was kann mit dem Vorzeichen über zwei Schritte<br />
hinweg passieren? Es kann gleich bleiben, und es kann wechseln.<br />
Wechselt das Vorzeichen von g(t − 1) zu g(t), so haben wir im Gradienten ein lokales<br />
Minimum übersprungen, das letzte Update ist also zu groß gewesen, folglich muss<br />
ηi,j(t) im Vergleich zu dem vorherigen ηi,j(t − 1) verkleinert werden, die Suche muss<br />
genauer werden. Mathematisch ausgedrückt: Wir erhalten ein neues ηi,j(t), in dem wir<br />
das alte ηi,j(t − 1) mit einer Konstante η ↓ multiplizieren, die zwischen 1 und 0 liegt.<br />
In diesem Falle wissen wir ja, dass im letzten Zeitschritt (t − 1) etwas schiefgelaufen<br />
ist – also wird zusätzlich noch das Gewichtsupdate für das Gewicht wi,j im Zeitschritt<br />
(t) hart auf 0 gesetzt, also gar nicht erst durchgeführt (nicht in der folgenden Formel<br />
angegeben).<br />
Bleibt das Vorzeichen aber gleich, kann eine (behutsame!) Vergrößerung von ηi,j stattfinden,<br />
um über flache Bereiche der Fehlerfunktion hinwegzukommen. Hier erhalten wir
unser neues ηi,j(t), in dem wir das alte ηi,j(t−1) mit einer Konstante η ↑ multiplizieren,<br />
die größer als 1 ist.<br />
Definition 5.11 (Anpassung der Lernraten in Rprop).<br />
⎧<br />
⎪⎨<br />
ηi,j(t) =<br />
⎪⎩<br />
ηi,j(t − 1) sonst.<br />
η ↑ ηi,j(t − 1), g(t − 1)g(t) > 0<br />
η ↓ ηi,j(t − 1), g(t − 1)g(t) < 0<br />
(5.45)<br />
Achtung: Daraus folgt auch, dass Rprop ausschließlich für Offline-Lernen konzipiert<br />
ist, denn wenn die Gradienten nicht eine gewisse Kontinuität aufweisen, bremst das<br />
Lernverfahren auf niedrigstes Tempo ab (und verweilt dort). Wer online lernt, wechselt<br />
ja – salopp gesprochen – mit jeder neuen Epoche die Fehlerfunktion, da diese nur auf<br />
jeweils ein Trainingsmuster bezogen ist. Das geht zwar bei Backpropagation oft sehr gut<br />
und sogar sehr oft schneller als die Offline-Variante, weshalb es dort gerne eingesetzt<br />
wird. Es fehlt aber die saubere mathematische Motivation, und genau diese benötigen<br />
wir hier.<br />
5.5.3 Uns fehlen noch ein paar Kleinigkeiten, um Rprop in der Praxis zu<br />
verwenden<br />
Es bleiben noch ein paar kleinere Fragen offen, nämlich<br />
1. Wie groß sind η ↑ und η ↓ (wie stark werden Lernraten verstärkt, bzw. abgeschwächt)?<br />
2. Wie groß ist ηi,j(0) (wie werden die gewichtsspezifischen Lernraten initialisiert)? 4<br />
3. Wie sind die oberen und unteren Grenzen ηmin bzw. ηmax für die ηi,j gesetzt?<br />
Die Antworten auf diese Fragen handeln wir nun mit kurzer Motivation ab. Der Initialisierungswert<br />
für die Lernraten sollte irgendwo in der Größenordnung der Gewichtsinitialisierung<br />
liegen, und so hat sich bewährt, ηi,j(0) = 0.1 zu setzen. Die Autoren der<br />
Rprop-Veröffentlichung beschreiben einleuchtenderweise, dass dieser Wert – solange er<br />
positiv gesetzt wird und keinen exorbitant hohen Betrag hat – eher unkritisch zu sehen<br />
ist, da er ohnehin schnell von der automatischen adaption überschrieben wird.<br />
Ebenso unkritisch ist ηmax, für das ohne weitere mathematische Begründung ein Wert<br />
von 50 empfohlen und über die meiste weitere Literatur verwendet wird. Man kann<br />
4 Protipp: Da die ηi,j ausschließlich durch Multiplikation verändert werden, ist 0 als Initialisierungswert<br />
eher suboptimal :-)
diesen Parameter niedriger setzen, um ausschließlich sehr vorsichtige Updateschritte<br />
zu erlauben. Kleine Updateschritte sollten in jedem Fall erlaubt sein, also setzen wir<br />
ηmin = 10 −6 .<br />
Bleiben die Parameter η ↑ und η ↓ . Fangen wir mit η ↓ an: Wenn dieser Wert zum Einsatz<br />
kommt, haben wir ein Minimum übersprungen, von dem wir nicht genau wissen, wo<br />
auf der übersprungenen Strecke es liegt. Analog zur Vorgehensweise der binären Suche,<br />
wo das Zielobjekt ebenfalls oft übersprungen wird, gehen wir davon aus, es läge in der<br />
Mitte der übersprungenen Strecke. Also müssen wir die Lernrate halbieren, weswegen<br />
sich ein η ↓ = 0.5 kanonischerweise anbietet. Wenn der Wert η ↑ zum Einsatz kommt,<br />
sollen Lernraten umsichtig vergrößert werden, hier können wir also nicht die binäre<br />
Suche generalisieren und einfach den Wert 2.0 verwenden, sonst besteht das Lernraten-<br />
Update nachher fast nur noch aus Richtungswechseln. Problemunabhängig hat sich<br />
ein Wert von η ↑ = 1.2 als erfolgsversprechend erwiesen, wobei leichte Änderungen die<br />
Konvergenzgeschwindigkeit nicht signifikant beeinflusst haben. So konnte auch dieser<br />
Wert einfach als Konstante gesetzt werden.<br />
Mit fortschreitender Rechengeschwindigkeit der Computer ist eine immer größere Verbreitung<br />
von sehr tiefen Netzwerken (Deep networks) , also Netzwerken mit sehr<br />
vielen Schichten, zu beobachten. Für solche <strong>Netze</strong> ist Rprop dem originalen Backpropagation<br />
unbedingt vorzuziehen, weil Backprop, wie schon angedeutet, auf Gewichten<br />
fern der Ausgabeschicht sehr langsam lernt. Bei Problemen mit kleineren Schichtenzahlen<br />
würde ich empfehlen, das verbreitete Backpropagation (sowohl mit offline- als<br />
auch mit online-Lernen) und das weniger verbreitete Rprop zunächst gleichwertig zu<br />
testen.<br />
SNIPE: Resilient Backpropagation wird in Snipe über die Methode<br />
trainResilientBackpropagation der Klasse NeuralNetwork unterstützt. Wahlweise kann<br />
man hier auch noch eine weitere Verbesserung zu Resilient Propagation zuschalten, die in<br />
dieser Arbeit jedoch nicht weiter behandelt wird. Für die verschiedenen Rprop-Parameter<br />
finden sich Getter und Setter.<br />
5.6 Backpropagation wurde auch außerhalb von Rprop<br />
vielfach erweitert und variiert<br />
Backpropagation ist vielfach erweitert worden – viele dieser Erweiterungen kann man<br />
einfach als optionale Features von Backpropagation implementieren, um größeren Testspielraum<br />
zu haben. Ich möchte im folgenden einige von ihnen kurz beschreiben.
5.6.1 Masseträgheit zum Lernprozeß hinzufügen<br />
Angenommen, wir fahren auf Skiern einen steilen Hang hinab – was hindert uns, am<br />
Rande des Hangs zum Plateau sofort stehenzubleiben? Genau – der Schwung. Der<br />
Momentum-Term [RHW86b] sorgt bei Backpropagation dafür, dass der Schrittweite<br />
eine Art Trägheitsmoment (Momentum) hinzugefügt wird (Abb. 5.13 auf der rechten<br />
Seite), indem jeder neuen Gewichtsänderung immer ein Anteil der vorherigen Änderung<br />
hinzuaddiert wird:<br />
(∆pwi,j)jetzt = ηop,iδp,j + α · (∆pwi,j)vorher<br />
Diese Schreibweise dient natürlich nur dem besseren Verständnis; in der Regel wird, wie<br />
bereits durch den Zeitbegriff definiert, der Zeitpunkt des aktuellen Durchlaufs durch<br />
(t) bezeichnet, der vorherige Durchlauf wird dann durch (t − 1) gekennzeichnet, was<br />
man sukzessive fortführt. Wir kommen also zur formalen Definition des Momentum-<br />
Terms:<br />
Definition 5.12 (Momentum-Term). Die Variation von Backpropagation durch den<br />
Momentum-Term ist wie folgt definiert:<br />
∆wi,j(t) = ηoiδj + α · ∆wi,j(t − 1) (5.46)<br />
Wir beschleunigen also auf Plateaus (verhindert Quasi-Stillstand auf Plateaus) und<br />
bremsen auf zerklüfteten Flächen (gegen Oszillationen). Weiterhin kann man den Effekt<br />
der Trägheit über den Vorfaktor α variieren, übliche Werte befinden sich zwischen<br />
0.6 und 0.9. Außerdem macht das Momentum den positiven Effekt möglich, dass unser<br />
Skifahrer in einem Minimum ein paar mal hin- und herpendelt, und schlussendlich in<br />
dem Minimum landet. Leider tritt trotz des schönen Aussehens im eindimensionalen<br />
der ansonsten seltene Fehler des Verlassens guter Minima durch den Momentum-Term<br />
häufiger auf – so dass auch hier wieder keine Patentlösung gegeben ist (wir gewöhnen<br />
uns ja langsam an diese Aussage).<br />
5.6.2 Flat spot elimination verhindert, dass sich Neurone verfangen<br />
Es ist zu beachten, dass sowohl beim Tangens Hyperbolicus sowie der Fermifunktion die<br />
Ableitung außerhalb unmittelbarer Nähe zu Θ fast 0 ist. Dieser Umstand führt dazu,<br />
dass sich Neurone nur schwer wieder aus den Grenzwerten der Aktivierung (flat spots)<br />
entfernen können , was die Lernzeit extrem verlängern kann. Diesem Problem kann<br />
durch Modifikation der Ableitung, z.B. Addition einer Konstanten (z.B. 0.1), begegnet<br />
werden, was als Flat spot elimination oder – umgangssprachlicher – Zuckern<br />
bezeichnet wird.
Abbildung 5.13: Wir möchten den Gradientenabstieg durchführen wie ein Skifahrer seine Abfahrt,<br />
der wohl kaum sofort an der Grenze zum Plateau anhalten wird.<br />
Eine interessante Beobachtung ist, dass man auch schon reinen Konstanten als Ableitungen<br />
Erfolge erzielt hat [Fah88]. Auch die schon in Abschnitt 3.2.6 auf Seite 46<br />
erwähnte schnelle Appoximation des Tangens Hyperbolicus von Anguita et al. benutzt<br />
in den äußeren Bereichen der ebenfalls approximierten Ableitung eine kleine Konstante.<br />
5.6.3 Die zweite Ableitung kann mit einbezogen werden<br />
Second Order Backpropagation nach David Parker [Par87] verwendet auch den<br />
zweiten Gradienten, also die zweite mehrdimensionale Ableitung der Fehlerfunktion,<br />
um genauere Schätzungen der korrekten ∆wi,j zu erhalten. Höhere Ableitungen verbessern<br />
die Schätzungen nur noch selten. So braucht man weniger Trainingszyklen,<br />
diese sind aber weitaus rechenaufwändiger.<br />
Bei Methoden höherer Ordnung im Allgemeinen werden weitere Ableitungen (also<br />
Hessesche Matrizen, da die Funktionen mehrdimensional sind) verwendet. Erwartungsgemäß<br />
reduzieren die Verfahren die Anzahl der Lernepochen, machen die einzelnen<br />
Epochen aber signifikant rechenaufwändiger – so dass am Ende die Lernzeit oft sogar<br />
länger ist als mit Backpropagation.
Das Lernverfahren Quickpropagation [Fah88] verwendet die zweite Ableitung der<br />
Fehlerfunktion und sieht die Fehlerfunktion lokal als eine Parabel an, deren Scheitelpunkt<br />
wir analytisch bestimmen und wohin wir direkt springen. Dieses Lernverfahren<br />
ist also ein Verfahren zweiter Ordnung. Es funktioniert natürlich nicht bei Fehleroberflächen,<br />
die nicht lokal durch eine Parabel approximierbar sind (ob das der Fall ist,<br />
kann man natürlich nicht immer direkt sagen).<br />
5.6.4 Weight Decay: Große Gewichte können bestraft werden<br />
Bei der Modifikation Weight Decay (zu Deutsch: Dämpfung der Gewichte) von Paul<br />
Werbos [Wer88] wird der Fehler um einen Term erweitert, der große Gewichte bestraft.<br />
Der Fehler unter Weight Decay<br />
ErrWD<br />
steigt also nicht nur mit dem eigentlichen Fehler, sondern auch mit dem Quadrat der<br />
Gewichte – was zur Folge hat, dass das Netz beim Lernen die Gewichte klein hält.<br />
ErrWD = Err + β · 1 <br />
(w)<br />
2<br />
w∈W<br />
2<br />
<br />
Bestrafung<br />
(5.47)<br />
Dies ist von der Natur inspiriert, in der synaptische Gewichte ebenfalls nicht unendlich<br />
stark werden können. Klein gehaltene Gewichte sorgen außerdem häufig dafür, dass<br />
die Fehlerfunktion weniger starke Schwankungen beinhaltet, was das Lernen einfacher<br />
und kontrollierter macht.<br />
Der Vorfaktor 1<br />
2 ist wieder aus einfacher Pragmatik heraus entstanden. Der Faktor β<br />
regelt die Stärke der Bestrafung: Werte von 0.001 bis 0.02 werden hier oft verwendet.<br />
5.6.5 Das Netz zurechtstutzen: Pruning und Optimal Brain Damage<br />
Wenn wir das Weight Decay lange genug durchgeführt haben und feststellen, dass<br />
bei einem Neuron im Eingabelayer alle Nachfolgegewichte Null oder fast Null sind,<br />
können wir das Neuron entfernen, haben ein Neuron und einige Gewichte verloren<br />
und reduzieren so die Chance, dass das Netz auswendig lernt. Dieser Vorgang wird als<br />
Pruning („Stutzen“) bezeichnet.<br />
Solch ein Verfahren, unnötige Gewichte und Neurone zu detektieren und wegzustreichen,<br />
nennt sich Optimal Brain Damage [lCDS90]. Es sei hier nur kurz beschrieben:
Der Fehler pro Outputneuron setzt sich hierbei aus zwei konkurrierenden Termen zusammen.<br />
Während der eine wie gewohnt die Differenz zwischen Output und Teaching<br />
Input berücksichtigt, versucht der andere, ein Gewicht gegen 0 zu „pressen“. Wird ein<br />
Gewicht nun stark benötigt, um den Fehler zu minimieren, gewinnt der erste Term<br />
– ist dies nicht der Fall, gewinnt der zweite. Neurone, die nur Nullgewichte besitzen,<br />
können zum Schluss wieder gestutzt werden.<br />
Es gibt noch viele weitere Variationen von Backprop bzw. ganze Bücher eigens hierüber<br />
– da mein Ziel aber ist, einen Überblick über <strong>Neuronale</strong> <strong>Netze</strong> zu bieten, möchte ich<br />
hier nur die obigen als Anstoß zum Weiterlesen nennen.<br />
Es ist bei manchen dieser Erweiterungen offensichtlich, dass sie nicht nur bei<br />
FeedForward-<strong>Netze</strong>n mit Backpropagation-Lernverfahren angewendet werden<br />
können.<br />
Wir haben nun Backpropagation und die FeedForward-Topologie kennen gelernt – nun<br />
fehlt uns noch Erfahrung, wie wir ein Netz aufbauen. Diese Erfahrung ist im Rahmen<br />
dieser Arbeit natürlich nicht vermittelbar, und um ein wenig davon zu erwerben, empfehle<br />
ich nun, ein paar der Beispielproblemstellungen aus Abschnitt 4.6 anzugehen.<br />
5.7 Wie fängt man an? Initialkonfiguration eines<br />
Multilayerperzeptrons<br />
Nachdem wir jetzt das Lernverfahren Backpropagation of Error behandelt haben und<br />
wissen, wie wir ein einmal vorhandenes Netz trainieren, ist es noch sinnvoll zu betrachten,<br />
wie wir denn überhaupt an so ein Netz gelangen können.<br />
5.7.1 Anzahl der Schichten: Zwei oder drei sind oft genug, mehr werden<br />
aber auch benutzt<br />
Fangen wir mit dem trivialen Umstand an, dass ein Netz eine Schicht Inputneurone<br />
und eine Schicht Outputneurone haben sollte, was uns zu mindestens zwei Schichten<br />
führt.<br />
Weiterhin benötigen wir, wie wir bereits während unserer Untersuchung der linearen<br />
Separierbarkeit erfahren haben, mindestens eine versteckte Schicht Neurone, falls unser<br />
Problem nicht linear separierbar ist (wie wir gesehen haben, ist das wahrscheinlich).
Es kann, wie schon gesagt, mathematisch bewiesen werden, dass dieses MLP mit einer<br />
versteckten Neuronenschicht bereits beliebige Funktionen beliebig genau approximieren<br />
kann 5 – doch müssen wir nicht nur die Repräsentierbarkeit eines Problems durch<br />
ein Perceptron betrachten, sondern auch die Lernbarkeit. Repräsentierbarkeit bedeutet,<br />
dass ein Perceptron eine Abbildung grundsätzlich realisieren kann – Lernbarkeit<br />
bezeichnet aber, dass wir sie ihm auch beibringen können.<br />
Insofern zeigt uns die Erfahrung, dass zwei versteckte Neuronenschichten bzw. drei<br />
trainierbare Gewichtsschichten für die Realisierung eines Problems sehr nützlich sein<br />
können, da viele Probleme zwar durchaus von einer versteckten Schicht repräsentiert<br />
werden können, jedoch leider nur schwer lernbar sind.<br />
Jede weitere Schicht erzeugt auch weitere Nebenminima der Fehlerfunktion, was bei<br />
der Wahl der Schichtenzahl beachtet werden sollte. Ein erfolgversprechender Weg ist<br />
also zusammenfassend, es erst mit einer versteckten Schicht zu probieren. Wenn das<br />
nicht klappt, versucht man es mit zweien, und erst wenn das nicht funktioniert auf mehr<br />
Schichten auszuweichen. Dennoch werden mit zunehmender Rechenkraft der Computer<br />
für manche Probleme bereits Deep networks mit sehr vielen Schichten erfolgreich<br />
angewandt.<br />
5.7.2 Anzahl der Neurone sollte getestet werden<br />
Die Zahl der Neurone (abseits von Eingabe- und Ausgabeschicht, die Anzahl der<br />
Eingabe- und Ausgabeneurone ist ja durch die Problemstellung bereits fest definiert)<br />
entspricht grundsätzlich der Zahl der freien Parameter des zu repräsentierenden Problems.<br />
Da wir ja schon die Netzkapazität in Bezug auf Auswendiglernen oder eine zu ungenaue<br />
Problemrepräsentation erforscht haben, ist klar, dass unser Ziel so wenig wie möglich,<br />
aber so viel wie nötig freie Parameter sind.<br />
Wie wir aber auch wissen, gibt es keine Patentformel, wie viele Neurone zu verwenden<br />
sind – die sinnvollste Herangehensweise besteht also darin, zunächst mit wenigen Neuronen<br />
zu trainieren und so lange neue <strong>Netze</strong> mit mehr Neuronen zu trainieren, wie das<br />
Ergebnis noch signifikant verbessert und vor allem die Generalisierungsleistung nicht<br />
beeinträchtigt wird (Bottom-Up-Ansatz).<br />
5 Achtung: Wir haben keine Aussage über die Neuronenanzahl in der versteckten Schicht gemacht, nur<br />
über die theoretische Möglichkeit.
tanh(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
−0.2<br />
−0.4<br />
−0.6<br />
−0.8<br />
−1<br />
Tangens Hyperbolicus<br />
−4 −2 0 2 4<br />
x<br />
f(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
Fermi−Funktion mit Temperaturparameter<br />
−4 −2 0 2 4<br />
Abbildung 5.14: Zur Erinnerung noch einmal die Darstellung des Tangens Hyperbolicus (links)<br />
und der Fermifunktion (rechts). Die Fermifunktion wurde um einen Temperaturparameter erweitert.<br />
Die ursprüngliche Fermifunktion ist hierbei dunkel herausgestellt, die Temperaturparameter bei den<br />
modifizierten Fermifunktionen betragen von außen nach innen (aufsteigend geordnet nach Anstieg)<br />
1<br />
2<br />
, 1<br />
5<br />
, 1<br />
10<br />
und 1<br />
25 .<br />
5.7.3 Wahl der Aktivierungsfunktion<br />
Ein weiterer sehr wichtiger Parameter für die Informationsverarbeitungsweise eines<br />
<strong>Neuronale</strong>n <strong>Netze</strong>s ist die Wahl der Aktivierungsfunktion. Für die Inputneuronen<br />
steht die Aktivierungsfunktion ja fest, da sie nicht informationsverarbeitend sind.<br />
Eine Frage, die man sich zunächst stellen kann, ist, ob man überhaupt in der versteckten<br />
und der Ausgabeschicht die gleiche Aktivierungsfunktion verwenden möchte – niemand<br />
hindert uns daran, hier zu variieren. In aller Regel ist die Aktivierungsfunktion<br />
aber für alle versteckten Neurone untereinander gleich, ebenso für die Outputneurone.<br />
Für Aufgaben der Funktionsapproximation hat es sich als sinnvoll erwiesen, als<br />
Aktivierungsfunktion der versteckten Neurone den Tangens Hyperbolicus (linker Teil<br />
der Abb. 5.14) zu verwenden, während eine lineare Aktivierungsfunktion in der Ausgabe<br />
verwendet wird – letzteres ist unbedingt erforderlich, damit wir kein begrenztes<br />
Ausgabeintervall erzeugen. Da die Outputschicht im Gegensatz zur ebenfalls linearen<br />
Inputschicht Schwellenwerte besitzt, ist sie trotzdem informationsverarbeitend. Lineare<br />
Aktivierungsfunktionen in der Ausgabe können aber auch für riesige Lernschritte<br />
sorgen, und dafür, dass man gute Minima in der Fehleroberfläche überspringt. Dies<br />
kann verhindert werden, indem man die Lernrate an der Ausgabeschicht auf sehr kleine<br />
Werte setzt.<br />
x
Für Aufgaben der Mustererkennung 6 ist ein unbegrenztes Ausgabeintervall nicht<br />
unbedingt erforderlich. Verwendet man überall den Tangens Hyperbolicus, so ist das<br />
Ausgabeintervall etwas größer. Die Fermifunktion (rechter Teil der Abb. 5.14 auf der<br />
vorangehenden Seite) hat im Gegensatz zum Tangens Hyperbolicus weit vor dem<br />
Schwellenwert (wo ihr Ergebnis nahe 0 ist) kaum Möglichkeiten etwas zu lernen. Hier<br />
ist allerdings wieder viel Ermessensspielraum bei der Wahl der Aktivierungsfunktion<br />
gegeben. Sigmoide Funktionen haben allgemein aber den Nachteil, dass sie weit weg<br />
von ihrem Schwellenwert kaum noch etwas lernen, wenn man das Netz nicht etwas<br />
modifiziert.<br />
5.7.4 Gewichte sollten klein und zufällig initialisiert werden<br />
Die Initialisierung der Gewichte ist nicht so trivial wie man vielleicht denken mag:<br />
Initialisiert man sie einfach mit 0, wird gar keine Gewichtsänderung stattfinden. Initialisiert<br />
man sie alle mit demselben Wert, werden sie im Training immer gleichermaßen<br />
geändert. Die einfache Lösung dieses Problems nennt man Symmetry Breaking. So<br />
wird die Initialisierung der Gewichte mit kleinen, zufälligen Werten bezeichnet. Als<br />
Bereich für die Zufallswerte könnte man das Intervall [−0.5; 0.5] verwenden, jedoch<br />
ohne die Null oder Werte, die sehr nah bei Null liegen. Diese Zufallsinitialisierung<br />
hat einen schönen Nebeneffekt, nämlich dass der Durchschnitt der <strong>Netze</strong>ingaben wahrscheinlich<br />
nahe 0 ist. Dies ist nützlich, denn bei den gängigen Aktivierungsfunktionen<br />
liegt die 0 im Bereich der stärksten Ableitung der Aktivierungsfunktion, was kräftige<br />
Lernimpulse direkt zu Beginn des Lernens ermöglicht.<br />
SNIPE: In Snipe werden die Gewichte zufällig initialisiert, falls eine Synapseninitialisierung<br />
gewünscht ist. Den maximalen Absolutbetrag eines Gewichts kann man in einem<br />
NeuralNetworkDescriptor mit der Methode setSynapseInitialRange festlegen.<br />
5.8 Das 8-3-8-Kodierungsproblem und verwandte Probleme<br />
Das 8-3-8-Kodierungsproblem ist ein Klassiker unter den Testtrainingsproblemen für<br />
Multilayerperceptrons. Wir besitzen in unserem MLP eine Eingabeschicht von acht<br />
Neuronen i1, i2, . . . , i8, eine Ausgabeschicht von acht Neuronen Ω1, Ω2, . . . , Ω8, und<br />
eine versteckte Schicht von drei Neuronen. Dieses Netz repräsentiert also eine Funktion<br />
B 8 → B 8 . Die Trainingsaufgabe ist nun, dass, wenn in ein Neuron ij der Wert 1<br />
6 Mustererkennung wird in der Regel als Spezialfall der Funktionsapproximation mit wenigen diskreten<br />
Ausgabemöglichkeiten gesehen.
Abbildung 5.15: Skizze der Funktionsweise der Kodierung eines 8-2-8 <strong>Netze</strong>s. Die Punkte repräsentieren<br />
die Vektoren der Aktivierung der beiden inneren Neuronen. Wie Sie sehen, lassen sich<br />
durchaus Aktivierungsformationen finden, so dass jeder der Punkte durch eine Gerade vom Rest der<br />
Punkte separierbar ist. Diese Separierung ist im Bild für einen der Punkte exemplarisch durchgeführt.<br />
eingegeben wird, genau im Neuron Ωj der Wert 1 ausgegeben wird (es soll jeweils nur<br />
ein Neuron aktiviert werden, dies führt uns zu 8 Trainingsbeispielen).<br />
Sie werden bei Analyse des trainierten <strong>Netze</strong>s sehen, dass das Netz mit den 3 versteckten<br />
Neuronen eine Art Binärkodierung repräsentiert und die obige Abbildung so<br />
möglich ist (mutmaßliche Trainingszeit hierfür sind ≈ 10 4 Epochen). Wir haben mit<br />
unserem Netz also eine Maschine gebaut, die Daten kodiert und diese anschließend<br />
wieder dekodiert.<br />
Analog hierzu kann man ein 1024-10-1024 Kodierungsproblem trainieren –<br />
doch geht das auch effizienter? Kann es beispielsweise ein 1024-9-1024 oder ein<br />
8-2-8-Kodierungsnetz geben?<br />
Ja, selbst das geht, da das Netz nicht auf binäre Kodierungen angewiesen ist: Ein 8-<br />
2-8-Netz funktioniert also für unsere Problemstellung. Die Kodierung, die dieses Netz<br />
realisiert, ist allerdings schwieriger zu durchschauen (Abb. 5.15) und es muss auch<br />
wesentlich länger trainiert werden.
Ein 8-1-8-Netz funktioniert nicht mehr, da die Möglichkeit vorhanden sein muss, dass<br />
die Ausgabe eines Neurons von einem anderen ausgeglichen wird, und bei nur einem<br />
versteckten Neuron natürlich kein Ausgleichsneuron vorhanden ist.<br />
SNIPE: Die statische Methode getEncoderSampleLesson der Klasse TrainingSampleLesson<br />
erlaubt es, einfache Trainingsamples für derartige Encoderprobleme beliebiger Dimensionalität<br />
zu generieren.<br />
Übungsaufgaben<br />
Aufgabe 8. Ein 2-15-15-2-MLP soll durch ein MLP mit nur einer einzigen verdeckten<br />
Schicht, aber gleich vielen Gewichten ersetzt werden. Berechnen Sie, wieviele Neurone<br />
dieses Netz in seiner verdeckten Schicht hat. Hinweis: Vergessen Sie das BIAS-Neuron<br />
nicht.<br />
Aufgabe 9. In Abb. 5.4 auf Seite 94 sehen Sie jeweils ein kleines Netz für die Booleschen<br />
Funktionen AND und OR. Schreiben Sie Tabellen, die sämtliche Berechnungsgrößen<br />
in den <strong>Neuronale</strong>n <strong>Netze</strong>n beinhalten (z.B. <strong>Netze</strong>ingabe, Aktivierungen, etc).<br />
Exerzieren Sie die vier möglichen Eingaben der <strong>Netze</strong> durch und notieren Sie die Werte<br />
dieser Größen für die jeweiligen Eingaben. Verfahren Sie in gleicher Weise für XOR-Netz<br />
(Abb. 5.9 auf Seite 106).<br />
Aufgabe 10.<br />
1. Nennen Sie alle Booleschen Funktionen B 3 → B 1 , welche linear separierbar sind,<br />
bzw. charakterisieren Sie sie genau.<br />
2. Nennen Sie diejenigen, die es nicht sind, bzw. charakterisieren Sie sie genau.<br />
Aufgabe 11. Ein einfaches 2-1-Netz soll mittels Backpropagation of Error und η = 0.1<br />
mit einem einzigen Muster trainiert werden. Prüfen Sie, ob der Fehler<br />
Err = Errp = 1<br />
(t − y)2<br />
2<br />
konvergiert und wenn ja, zu welchem Wert. Wie sieht die Fehlerkurve aus? Das Muster<br />
(p, t) sei definiert zu p = (p1, p2) = (0.3, 0.7) und tΩ = 0.4. Initialisieren Sie die<br />
Gewichte zufällig im Intervall [1; −1].<br />
Aufgabe 12. Ein einstufiges Perceptron mit zwei Inputneuronen, Biasneuron und<br />
binärer Schwellenwertfunktion als Aktivierungsfunktion trennt den zweidimensionalen<br />
Raum durch eine Gerade g in zwei Teile. Berechnen Sie für ein solches Perceptron
analytisch einen Satz Gewichtswerte, so dass die folgende Menge P der 6 Muster der<br />
Form (p1, p2, tΩ) mit ε ≪ 1 richtig klassifiziert wird.<br />
P ={(0, 0, −1);<br />
(2, −1, 1);<br />
(7 + ε, 3 − ε, 1);<br />
(7 − ε, 3 + ε, −1);<br />
(0, −2 − ε, 1);<br />
(0 − ε, −2, −1)}<br />
Aufgabe 13. Berechnen Sie einmal und nachvollziehbar den Vektor ∆W sämtlicher<br />
Gewichtsänderungen mit dem Verfahren Backpropagation of Error mit η = 1. Gegeben<br />
Sei ein 2-2-1-MLP mit Biasneuron, das Muster sei definiert zu<br />
p = (p1, p2, tΩ) = (2, 0, 0.1).<br />
Die Initialwerte der Gewichte sollen bei allen Gewichten, welche Ω als Ziel haben, 1<br />
betragen – sämtliche anderen Gewichte sollten den Initialwert 0.5 besitzen. Was fällt<br />
an den Änderungen auf?
Kapitel 6<br />
Radiale Basisfunktionen<br />
RBF-<strong>Netze</strong> nähern Funktionen an, indem sie Gaußglocken strecken, stauchen<br />
und anschließend räumlich versetzt aufsummieren. Beschreibung ihrer<br />
Funktion und ihres Lernvorganges, Gegenüberstellung mit<br />
Multilayerperceptrons.<br />
Radiale Basisfunktionennetze (RBF-<strong>Netze</strong>) nach Poggio und Girosi [PG89] sind ein<br />
Paradigma <strong>Neuronale</strong>r <strong>Netze</strong>, welches deutlich später entstand als das der Perceptrons.<br />
Sie sind wie Perceptrons schichtartig aufgebaute <strong>Netze</strong>, allerdings in diesem Fall mit<br />
exakt drei Schichten, also nur einer einzigen Schicht versteckter Neurone.<br />
Wie Perceptrons besitzen die <strong>Netze</strong> eine reine FeedForward-Struktur und Vollverknüpfung<br />
zwischen den Schichten, und auch hier trägt die Inputschicht nicht zur Informationsverarbeitung<br />
bei. Auch sind die RBF-<strong>Netze</strong> wie MLPs universelle Funktionsapproximatoren.<br />
Bei allen Gemeinsamkeiten: Was unterscheidet die RBF-<strong>Netze</strong> nun von den Perceptrons?<br />
Es ist die Informationsverarbeitung selbst bzw. die Berechnungsvorschriften<br />
innerhalb der Neurone, welche nicht in der Inputschicht liegen. Wir werden also gleich<br />
eine bis jetzt völlig unbekannte Art Neurone neu definieren.<br />
6.1 Bestandteile und Aufbau eines RBF-<strong>Netze</strong>s<br />
Wir wollen nun zunächst einige Begriffe rund um die RBF-<strong>Netze</strong> erst umgangssprachlich<br />
betrachten und danach definieren.<br />
133
Ausgabeneurone in einem RBF-Netz enthalten nur die Identität als Aktivierungsfunktion<br />
und eine gewichtete Summe als Propagierungsfunktion. Sie machen also<br />
nichts weiter, als alles, was in sie eingegeben wird, aufzusummieren und die Summe<br />
auszugeben.<br />
Versteckte Neurone heißen auch RBF-Neurone (so wie die Schicht, in der sie sich<br />
befinden, auch RBF-Schicht genannt wird). Jedes versteckte Neuron erhält als<br />
Propagierungsfunktion eine Norm, welche den Abstand zwischen der Eingabe in<br />
das Netz und dem sogenannten Ort des Neurons (Zentrum) errechnet. Diese wird<br />
in eine radiale Aktivierungsfunktion eingegeben, die die Aktivierung des Neurons<br />
berechnet und ausgibt.<br />
Definition 6.1 (RBF-Eingabeneuron). Die Definition und Darstellung ist identisch<br />
mit der Eingabeneuron-Definition 5.1 auf Seite 90.<br />
Definition 6.2 (Zentrum eines RBF-Neurons). Das Zentrum ch eines RBF-Neurons<br />
h ist der Punkt im Eingaberaum, in dem das RBF-Neuron angesiedelt ist. Je näher<br />
der Eingabevektor am Zentrumsvektor eines RBF-Neurons liegt, umso höher ist in der<br />
Regel seine Aktivierung.<br />
Definition 6.3 (RBF-Neuron). Die sogenannten RBF-Neurone h besitzen eine<br />
Propagierungsfunktion fprop, welche den Abstand zwischen dem Zentrum ch eines<br />
Neurons und dem Eingabevektor y feststellt. Dieser Abstand repräsentiert dann die<br />
<strong>Netze</strong>ingabe. Die <strong>Netze</strong>ingabe wird dann durch eine Radialbasisfunktion fact geschickt,<br />
welche die Aktivierung bzw. Ausgabe des Neurons ausgibt. RBF-Neurone werden durch<br />
das Symbol ||c,x||<br />
Gauß<br />
dargestellt.<br />
Definition 6.4 (RBF-Ausgabeneuron). RBF-Ausgabeneurone Ω besitzen die gewichtete<br />
Summe als Propagierungsfunktion fprop, und die Identität als Aktivierungs-<br />
funktion fact. Wir stellen sie durch das Symbol Σ<br />
dar.<br />
Definition 6.5 (RBF-Netz). Ein RBF-Netz besitzt exakt drei Schichten in der folgenden<br />
Reihenfolge: Die Eingabeschicht aus Eingabeneuronen, die versteckte Schicht<br />
(auch RBF-Schicht genannt) aus RBF-Neuronen und die Ausgabeschicht aus RBF-<br />
Ausgabeneuronen. Jede Schicht ist mit der nächsten vollverknüpft, ShortCuts existieren<br />
nicht (Abb. 6.1 auf der rechten Seite) – es handelt sich also um eine reine<br />
FeedForward-Topologie. Die Verbindungen zwischen Eingabeschicht und RBF-Schicht<br />
sind ungewichtet, leiten die Eingabe also nur weiter. Die Verbindungen zwischen RBFund<br />
Ausgabeschicht sind gewichtet. Die ursprüngliche Definition eines RBF-<strong>Netze</strong>s bezog<br />
sich auf nur ein Ausgabeneuron, analog zu den Perceptrons ist aber klar, dass sich
②②②②②②②②②②<br />
❊❘<br />
❱<br />
❊<br />
❘❱<br />
<br />
❘❱<br />
❊ ❘❱<br />
<br />
❊<br />
❘❱<br />
❘<br />
❱<br />
❊<br />
❘<br />
❱<br />
❊<br />
❱<br />
❘<br />
❱<br />
❊ ❘<br />
❱<br />
❊<br />
❱<br />
❊<br />
❘<br />
❱<br />
❊<br />
❘<br />
❱ ❱<br />
❊<br />
❘<br />
❱<br />
❊<br />
❘<br />
❱ ❱<br />
❊<br />
<br />
❊ ❘<br />
❱<br />
❊<br />
❘<br />
❱ ❱<br />
❊<br />
❘<br />
❱<br />
<br />
❘<br />
❱ ❊<br />
❱<br />
❘ ❱<br />
❘<br />
❱<br />
❊<br />
❱<br />
❘ ❱ ❊<br />
②<br />
<br />
<br />
❱ ❱ ❱<br />
❊<br />
❱ ❱<br />
<br />
<br />
②②②②②②②②②<br />
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤<br />
❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧❧<br />
||c,x||<br />
Gauß ❈◗❱<br />
||c,x|| ||c,x||<br />
❈<br />
◗❱<br />
◗❱<br />
❈<br />
◗❱<br />
◗<br />
❱ Gauß ❱<br />
❈ ◗❱<br />
❈<br />
◗<br />
❱<br />
❈◗<br />
◗<br />
❱ ❱ ❈<br />
◗◗<br />
Gauß<br />
❈ ◗<br />
❱<br />
◗<br />
❱ ❱<br />
❈<br />
◗◗<br />
❈ ◗ ❱ ❈ ◗<br />
❈<br />
◗<br />
❱ ❈<br />
◗<br />
◗<br />
❱<br />
◗<br />
❈❱<br />
◗<br />
❈ ◗<br />
❱ ◗<br />
❈<br />
◗<br />
❈ ❱ ❱<br />
◗<br />
◗ ❱<br />
<br />
<br />
❈<br />
◗<br />
◗<br />
❱ ❱<br />
◗<br />
◗<br />
❈ ❱<br />
◗<br />
◗<br />
❱<br />
◗<br />
❈ ❱<br />
◗<br />
❱<br />
◗<br />
④<br />
<br />
<br />
❱ ◗<br />
❱ ◗<br />
❱ ◗<br />
❱ ◗<br />
④④④④④④④④④<br />
||c,x||<br />
❈<br />
Gauß<br />
❈❈❈<br />
❈❈❈<br />
<br />
❈❈❈<br />
♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠<br />
④<br />
<br />
④④④④④④④④④<br />
||c,x||<br />
Gauß<br />
<br />
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤<br />
♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠<br />
④④④④④④④④④④<br />
Σ Σ Σ<br />
<br />
<br />
<br />
<br />
<br />
<br />
i1, i2, . . . , i |I|<br />
h1, h2, . . . , h |H|<br />
Ω1, Ω2, . . . , Ω |O|<br />
Abbildung 6.1: Ein beispielhaftes RBF-Netz mit zwei Eingabeneuronen, fünf versteckten Neuronen<br />
und drei Ausgabeneuronen. Die Verbindungen zu den versteckten Neuronen besitzen keine Gewichte,<br />
sie leiten die Eingabe nur weiter. Rechts der Skizze ist die Benennung der Neurone zu finden, welche<br />
sich analog zu der bekannten Benennung der Neurone im MLP verhält: Inputneurone heißen i,<br />
versteckte Neurone h, Ausgabeneurone Ω. Die zugehörigen Mengen bezeichnen wir mit I, H und<br />
O.<br />
dies verallgemeinern lässt. Ein Biasneuron kennt das RBF-Netz nicht. Wir wollen die<br />
Menge der Eingabeneurone mit I, die Menge der versteckten Neurone mit H und die<br />
Menge der Ausgabeneurone mit O bezeichnen.<br />
Die inneren Neurone heißen daher Radiale Basisneurone, weil aus deren Definition<br />
direkt folgt, dass alle Eingabevektoren, welche den gleichen Abstand vom Zentrum<br />
eines Neurons haben, auch den gleichen Ausgabewert produzieren (Abb. 6.2 auf der<br />
folgenden Seite).<br />
6.2 Informationsverarbeitung eines RBF-<strong>Netze</strong>s<br />
Die Frage ist nun, was durch dieses Netz realisiert wird und wo der Sinn liegt. Gehen<br />
wir doch einmal das RBF-Netz von oben nach unten durch: Der Input wird durch die
Abbildung 6.2: Sei ch das Zentrum eines RBF-Neurons h. Dann liefert die Aktivierungsfunktion<br />
facth für alle Eingaben, welche auf dem Kreis liegen, den gleichen Wert.<br />
ungewichteten Verbindungen in ein RBF-Neuron eingebracht. Dieses schickt den Inputvektor<br />
durch eine Norm, so dass ein Skalar herauskommt. Dieser Skalar (der aufgrund<br />
der Norm übrigens nur positiv sein kann) wird durch eine Radiale Basisfunktion, also<br />
zum Beispiel eine Gaußglocke (Abb. 6.3 auf der rechten Seite) verarbeitet.<br />
Die Ausgabewerte der verschiedenen Neurone der RBF-Schicht bzw- der verschiedenen<br />
Gaußglocken werden nun in der dritten Schicht aufsummiert: Faktisch werden, auf den<br />
ganzen Eingaberaum bezogen, also Gaußglocken aufsummiert.<br />
Stellen wir uns vor, wir haben ein zweites, drittes und viertes RBF-Neuron und daher<br />
insgesamt vier unterschiedlich lokalisierte Zentren. Jedes dieser Neurone misst nun<br />
einen anderen Abstand von der Eingabe zum eigenen Zentrum und liefert de facto<br />
selbst bei gleicher Gaußglocke andere Werte. Da diese zum Schluß in der Ausgabeschicht<br />
nur aufkumuliert werden, ist leicht einsehbar, dass man durch Zerren, Stauchen<br />
und Verschieben von Gaußglocken und durch das anschließende Aufkumulieren jede beliebige<br />
Oberfläche modellieren kann. Die Entwicklungsterme für die Superposition der<br />
Gaußglocken liegen hierbei in den Gewichten der Verbindungen von RBF-Schicht zu<br />
Outputschicht.
h(r)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
Gauss−Glocke in 1D<br />
0<br />
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2<br />
r<br />
−2<br />
−1<br />
0<br />
Gauss−Glocke in 2D<br />
Abbildung 6.3: Zwei einzelne Gaußglocken im Ein- und Zweidimensionalen. In beiden Fällen gilt<br />
σ = 0.4 und in beiden Fällen ist das Zentrum der Gaußglocke im Nullpunkt. Der Abstand r zum<br />
Zentrum (0, 0) berechnet sich schlicht aus dem Satz des Pythagoras: r = x 2 + y 2 .<br />
Die Netzarchitektur bietet weiterhin die Möglichkeit, Höhe und Breite der Gaußglocken<br />
frei zu bestimmen oder zu trainieren – was dieses Netzparadigma noch vielfältiger<br />
macht. Methoden und Vorgehensweisen hierzu werden wir noch kennenlernen.<br />
6.2.1 RBF-Neurone verarbeiten Information durch Normen und<br />
Radialbasisfunktionen<br />
Nehmen wir zunächst ein einfaches 1-4-1-RBF-Netz als Beispiel. Es ist hier klar, dass<br />
wir eine eindimensionale Ausgabe erhalten werden, die wir als Funktion darstellen können<br />
(Abb. 6.4 auf der folgenden Seite). Das Netz besitzt weiterhin Zentren c1, c2, . . . , c4<br />
der vier inneren Neurone h1, h2, . . . , h4, und somit Gaußglocken, die zum Schluss im<br />
Ausgabeneuron Ω aufsummiert werden. Das Netz besitzt auch vier Werte σ1, σ2, . . . , σ4,<br />
welche die Breite der Gaußglocken beeinflussen. Die Höhe der Gaußglocke wird hingegen<br />
von den nachfolgenden Gewichten beeinflusst, da damit die einzelnen Ausgabewerte<br />
der Glocken multipliziert werden.<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
h(r)<br />
x<br />
1<br />
−2<br />
−1<br />
0<br />
y<br />
1<br />
2
y<br />
1.4<br />
1.2<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
−0.2<br />
−0.4<br />
−0.6<br />
−2 0 2 4 6 8<br />
Abbildung 6.4: Vier verschiedene durch RBF-Neurone gebildete Gaußglocken im Eindimensionalen<br />
werden von einem Outputneuron des RBF-<strong>Netze</strong>s aufsummiert. Die Gaußglocken haben verschiedene<br />
Höhen, Breiten und Orte. Die Zentren c1, c2, . . . , c4 lagen bei 0, 1, 3, 4, die Breiten σ1, σ2, . . . , σ4<br />
bei 0.4, 1, 0.2, 0.8. Ein Beispiel für den zweidimensionalen Fall findet sich in Abb. 6.5 auf der rechten<br />
Seite.<br />
Da wir eine Norm zum Berechnen des Abstands des Inputvektors zum Neuronenzentrum<br />
eines Neurons h verwenden, haben wir verschiedene Wahlmöglichkeiten: Oft wird<br />
der Euklidische Abstand zur Abstandsberechnung gewählt:<br />
x<br />
rh = ||x − ch|| (6.1)<br />
<br />
<br />
= (xi − ch,i) 2<br />
(6.2)<br />
i∈I<br />
Wir erinnern uns: Mit x haben wir den Eingabevektor benannt. Hierbei durchläuft der<br />
Index i die Eingabeneurone und damit die Komponenten des Eingabevektors und des<br />
Neuronenzentrums. Wie wir sehen, bildet der Euklidische Abstand die Quadrate der<br />
Differenzen aller Vektorkomponenten, summiert sie auf und zieht aus der Summe die<br />
Wurzel, was im zweidimensionalen dem Satz des Pythagoras gleich kommt. Aus der<br />
Definition einer Norm folgt direkt, dass der Abstand nur positiv sein kann, weswegen<br />
wir genaugenommen den positiven Teil der Aktivierungsfunktion verwenden. Übrigens<br />
sind auch andere Aktivierungsfunktionen als die Gaußglocke möglich, in aller Regel<br />
werden Funktionen gewählt, die im Intervall [0; ∞] monoton abfallen.
−0.5<br />
−1<br />
0<br />
0.5<br />
1<br />
1.5<br />
2<br />
−2<br />
−0.5<br />
−1<br />
0<br />
0.5<br />
1<br />
1.5<br />
2<br />
−2<br />
h(r)<br />
h(r)<br />
−1<br />
x<br />
−1<br />
x<br />
0<br />
0<br />
2<br />
1.75<br />
1.5<br />
1.25<br />
1<br />
0.75<br />
0.5<br />
0.25<br />
0<br />
−0.25<br />
−0.5<br />
−0.75<br />
−1<br />
1<br />
1<br />
Gaussglocke 1<br />
−2<br />
−1<br />
Gaussglocke 3<br />
−2<br />
−1<br />
0<br />
0<br />
1<br />
y<br />
1<br />
y<br />
2<br />
2<br />
−0.5<br />
−1<br />
0<br />
0.5<br />
1<br />
1.5<br />
2<br />
−2<br />
−0.5<br />
−1<br />
0<br />
0.5<br />
1<br />
1.5<br />
2<br />
−2<br />
h(r)<br />
h(r)<br />
−1<br />
x<br />
−1<br />
x<br />
0<br />
0<br />
1<br />
1<br />
Gaussglocke 2<br />
−2<br />
−1<br />
Gaussglocke 4<br />
||c,x|| ||c,x||<br />
||c,x||<br />
Gauß ◗◗<br />
Gauß ◗◗◗<br />
❆<br />
Gauß<br />
◗◗<br />
❆<br />
◗ ❆<br />
◗◗<br />
❆<br />
◗ ❆<br />
◗◗<br />
❆<br />
◗◗<br />
❆<br />
◗ ❆<br />
◗◗<br />
❆<br />
◗ ❆<br />
◗<br />
<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥⑥<br />
||c,x||<br />
Gauß<br />
♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠♠<br />
Σ<br />
<br />
−2<br />
−1.5<br />
−1<br />
−0.5<br />
x<br />
0<br />
0.5<br />
1<br />
<br />
Aufsummierung der 4 Gaussglocken<br />
1.5<br />
2 −2<br />
Abbildung 6.5: Vier verschiedene durch RBF-Neurone gebildete Gaußglocken im Zweidimensionalen<br />
werden von einem Outputneuron des RBF-<strong>Netze</strong>s aufsummiert. Für den Abstand gilt wieder<br />
r = x 2 + y 2 . Die Höhen w, Breiten σ und Zentren c = (x, y) sind: w1 = 1, σ1 = 0.4, c1 =<br />
(0.5, 0.5), w2 = −1, σ2 = 0.6, c2 = (1.15, −1.15), w3 = 1.5, σ3 = 0.2, c3 = (−0.5, −1),<br />
w4 = 0.8, σ4 = 1.4, c4 = (−2, 0).<br />
−1.5<br />
−1<br />
−0.5<br />
0<br />
0.5<br />
−2<br />
y<br />
1<br />
−1<br />
1.5<br />
0<br />
0<br />
2<br />
1<br />
y<br />
1<br />
y<br />
2<br />
2
Nachdem wir nun den Abstand rh des Inputvektors x zum Zentrum ch des RBF-<br />
Neurons h kennen, muss dieser Abstand durch die Aktivierungsfunktion fact geschickt<br />
werden – wir verwenden hier, wie schon gesagt, eine Gaußglocke:<br />
<br />
fact(rh) = e<br />
−r 2 h<br />
Es ist klar, dass sowohl Zentrum ch als auch die Breite σh als Bestandteil der Aktivierungsfunktion<br />
fact gesehen werden können und nach dieser Ansicht die Aktivierungsfunktionen<br />
nicht alle mit fact bezeichnet werden dürften. Eine Lösung wäre, die<br />
Aktivierungsfunktionen nach dem Muster fact1, fact2, . . . , fact|H| mit H als Menge der<br />
versteckten Neurone durchzunummerieren – was die Erklärungen aber unübersichtlich<br />
macht. Insofern verwende ich einfach für alle Aktivierungsfunktionen die Bezeichnung<br />
fact und betrachte σ und c als Größen, die zwar für einzelne Neurone definiert, aber<br />
nicht direkt in der Aktivierungsfunktion enthalten sind.<br />
Dem Leser fällt bestimmt auf, dass die Gaußglocke bei ihren vielen Verwendungen<br />
in anderer Literatur oft mit einem multiplikativen Faktor versehen wird – aufgrund<br />
der sowieso vorhandenen Multiplikation durch die nachfolgenden Gewichte und der<br />
Aufwiegbarkeit von Konstantenmultiplikationen brauchen wir diesen Faktor jedoch<br />
hier nicht (zumal das Integral der Gaußglocke für unsere Zwecke nicht immer 1 sein<br />
darf) und lassen ihn daher einfach weg.<br />
6.2.2 Einige analytische Gedanken im Vorfeld zum Training<br />
Die Ausgabe yΩ eines RBF-Ausgabeneurons Ω ergibt sich also, indem wir die Funktionen<br />
eines RBF-Neurons zusammensetzen zu<br />
yΩ = <br />
h∈H<br />
2σ 2 h<br />
(6.3)<br />
wh,Ω · fact (||x − ch||) . (6.4)<br />
Nehmen wir an, wir besitzen wie beim Multilayerperceptron eine Menge P , die |P | viele<br />
Trainingsbeispiele (p, t) enthält. Dann erhalten wir |P | viele Funktionen der Form<br />
yΩ = <br />
h∈H<br />
nämlich für jedes Trainingsbeispiel p eine.<br />
wh,Ω · fact (||p − ch||) , (6.5)<br />
Das Ziel des Aufwands ist es natürlich wieder, die Ausgabe y für alle Trainingsmuster<br />
p gegen den zugehörigen Teaching Input t gehen zu lassen.
6.2.2.1 Gewichte können einfach als Lösung eines Gleichungssystems<br />
ausgerechnet werden<br />
Wir sehen also, dass wir |P | viele Gleichungen gegeben haben. Betrachten wir nun die<br />
Breiten σ1, σ2, . . . , σk, die Zentren c1, c2, . . . , ck und die Trainingsbeispiele p samt Teaching<br />
Input t als gegeben. Gesucht sind die Gewichte wh,Ω, wovon es |H| Stück für ein<br />
einzelnes Ausgabeneuron Ω gibt. Wir können unser Problem also als Gleichungssystem<br />
sehen, da das einzige, was wir im Moment verändern möchten, die Gewichte sind.<br />
Dies bringt uns dazu, eine Fallunterscheidung zu treffen bezüglich der Anzahl der<br />
Trainingsbeispiele |P | und der Anzahl der RBF-Neurone |H|:<br />
|P | = |H|: Ist die Zahl der RBF-Neurone gleich der Zahl der Muster, also |P | = |H|,<br />
so können wir die Gleichung auf eine Matrixmultiplikation<br />
zurückführen, wobei<br />
T = M · G (6.6)<br />
⇔ M −1 · T = M −1 · M · G (6.7)<br />
⇔ M −1 · T = E · G (6.8)<br />
⇔ M −1 · T = G (6.9)<br />
⊲ T der Vektor der Teaching Inputs für alle Trainingsbeispiele ist,<br />
⊲ M die |P | × |H|-Matrix der Ausgaben von allen |H| RBF-Neuronen zu |P |<br />
vielen Beispielen (Wir erinnern uns: |P | = |H|, die Matrix ist quadratisch<br />
und daher können wir versuchen, sie zu invertieren),<br />
⊲ G der Vektor der gewünschten Gewichte und<br />
⊲ E eine Einheitsmatrix passend zu G.<br />
Wir können also die Gewichte mathematisch gesehen einfach ausrechnen: Im Fall<br />
|P | = |H| haben wir pro Trainingsbeispiel genau ein RBF-Neuron zur Verfügung.<br />
Das heißt nichts anderes, als dass das Netz nach erfolgtem Errechnen der Gewichte<br />
die |P | vielen Stützstellen, die wir haben, exakt trifft, also eine exakte<br />
Interpolation durchführt – für ein solches Gleichungs-Ausrechnen benötigen wir<br />
aber natürlich kein RBF-Netz, so dass wir zum nächsten Fall übergehen wollen.<br />
Exakte Interpolation ist nicht mit dem bei den MLPs erwähnten Auswendiglernen<br />
zu verwechseln: Erstens reden wir im Moment noch gar nicht über das Trainieren
von RBF-<strong>Netze</strong>n, zweitens kann es auch sehr gut für uns und durchaus gewollt<br />
sein, wenn das Netz zwischen den Stützstellen exakt interpoliert.<br />
|P | < |H|: Das Gleichungssystem ist unterbestimmt, es existieren mehr RBF-Neurone<br />
als Trainingsbeispiele, also |P | < |H|. Dieser Fall taucht natürlich normalerweise<br />
nicht sehr oft auf. In diesem Fall gibt es eine Lösungsvielfalt, die wir gar nicht<br />
im Detail brauchen: Wir können uns aus vielen offensichtlich möglichen Sätzen<br />
von Gewichten einen auswählen.<br />
|P | > |H|: Für die weitere Betrachtung am interessantesten ist jedoch der Fall, dass es<br />
signifikant mehr Trainingsbeispiele gibt als RBF-Neurone, also gilt |P | > |H| –<br />
wir wollen also wieder die Generalisierungsfähigkeit der <strong>Neuronale</strong>n <strong>Netze</strong> nutzen.<br />
Wenn wir viel mehr Trainingsmuster als RBF-Neurone haben, können wir fairerweise<br />
nicht mehr davon ausgehen, dass jedes Trainingsmuster exakt getroffen<br />
wird. Wenn wir die Punkte also nicht exakt treffen können und daher auch nicht<br />
nur interpolieren können wie im obigen Idealfall |P | = |H|, so müssen wir versuchen,<br />
eine Funktion zu finden, die unsere Trainingsmenge P so genau wie möglich<br />
approximiert: Wir versuchen wie beim MLP, die Summe der Fehlerquadrate<br />
auf ein Minimum zu reduzieren.<br />
Wie fahren wir also im Fall |P | > |H| mit der Berechnung fort? Wie oben müssen<br />
wir, um das Gleichungssystem zu lösen, eine Matrixmultiplikation<br />
T = M · G (6.10)<br />
mit einer Matrix M lösen. Problem ist aber, dass wir die |P |×|H|-Matrix M dieses<br />
mal nicht invertieren können, weil sie nicht quadratisch ist (es gilt |P | = |H|).<br />
Hier müssen wir also, um überhaupt weiterzukommen, die Moore-Penrose-<br />
Pseudoinverse mit<br />
M + = (M T · M) −1 · M T<br />
(6.11)
verwenden. Die Moore-Penrose-Pseudoinverse ist nicht die Inverse einer Matrix,<br />
kann aber in diesem Fall so verwendet werden 1 . Wir erhalten Gleichungen, die<br />
denen im Fall |P | = |H| sehr ähnlich sind:<br />
T = M · G (6.12)<br />
⇔ M + · T = M + · M · G (6.13)<br />
⇔ M + · T = E · G (6.14)<br />
⇔ M + · T = G (6.15)<br />
Ein weiterer Hauptgrund für die Verwendung der Moore-Penrose-Pseudoinversen<br />
ist hier, dass sie die quadratische Abweichung minimiert (was unser Ziel ist): Die<br />
Schätzung des Vektors G in Gleichung 6.15 entspricht dem aus der Statistik<br />
bekannten Gauß-Markov-Modell zur Minimierung des quadratischen Fehlers.<br />
In den obigen Gleichungen 6.11 auf der linken Seite und folgenden sei das T<br />
in M T (der transponierten Matrix M) bitte nicht mit dem T des Vektors aller<br />
Teaching Inputs zu verwechseln.<br />
6.2.2.2 Die Verallgemeinerung auf mehrere Ausgaben ist trivial und wenig<br />
rechenintensiv<br />
Wir haben also jeweils einen mathematisch exakten Weg gefunden, die Gewichte direkt<br />
zu errechnen. Was passiert nun bei mehreren Ausgabeneuronen, also |O| > 1, wobei O<br />
wie gewohnt die Menge der Ausgabeneurone Ω ist?<br />
In diesem Fall ändert sich, wie wir schon angedeutet haben, nicht viel: Diese weiteren<br />
Ausgabeneurone haben ja einen eigenen Satz Gewichte, während wir die σ und c der<br />
RBF-Schicht nicht ändern. Für ein RBF-Netz ist es also für gegebene σ und c einfach,<br />
sehr viele Outputneurone zu realisieren, da wir nur für jedes neue Outputneuron Ω<br />
einzeln den Vektor der zu ihm führenden Gewichte<br />
GΩ = M + · TΩ<br />
(6.16)<br />
errechnen müssen, wobei die sehr aufwändig zu errechnende Matrix M + immer gleich<br />
bleibt: Das Hinzufügen von mehr Ausgabeneuronen ist also, was die Berechnungskomplexität<br />
angeht, recht preiswert.<br />
1 Insbesondere gilt M + = M −1 , falls M invertierbar. Auf die Begründung für diese Umstände und Verwendungsmöglichkeiten<br />
von M + möchte ich hier nicht weiter eingehen – diese sind aber in der Linearen<br />
Algebra einfach zu finden.
6.2.2.3 Berechnungsaufwand und Genauigkeit<br />
Bei realistischen Problemstellungen gilt jedoch in aller Regel, dass es wesentlich mehr<br />
Trainingsbeispiele als RBF-Neurone gibt, also |P | ≫ |H|: Man kann ohne weiteres den<br />
Wunsch haben, mit 10 6 Trainingsbeispielen zu trainieren. Wir können zwar theoretisch<br />
mathematisch korrekt an der Tafel die Terme für die richtige Lösung finden (in sehr<br />
sehr langer Zeit), die Berechnung am Computer erweist sich aber oft als ungenau und<br />
sehr zeitaufwändig (Matrixinversionen haben einen großen Rechenaufwand).<br />
Weiterhin ist unsere Moore-Penrose-Pseudoinverse, trotz numerischer Stabilität, noch<br />
keine Garantie dafür, dass der Outputvektor dem Teachingvektor entspricht, da bei<br />
den aufwändigen Berechnungen sehr viele Ungenauigkeiten auftreten können, obwohl<br />
die Rechenwege mathematisch natürlich korrekt sind: Unsere Computer können uns<br />
die pseudoinversen Matrizen auch nur näherungsweise liefern (wenn auch gute Näherungen).<br />
De facto erhalten wir also auch nur eine Näherung der richtigen Gewichte<br />
(womöglich mit vielen aufgeschaukelten Ungenauigkeiten) und damit auch nur eine<br />
(vielleicht sehr grobe oder gar unerkennbare) Näherung der Outputwerte an den gewünschten<br />
Output.<br />
Falls wir genug Rechenpower besitzen, um einen Gewichtsvektor analytisch zu bestimmen,<br />
sollten wir ihn also auf jeden Fall nur als Startwert für unseren Lernvorgang<br />
benutzen, womit wir zu den wirklichen Trainingsverfahren kommen – aber sonst wäre<br />
es ja auch langweilig, oder?<br />
6.3 Kombinationen aus Gleichungssystem und<br />
Gradientenverfahren sind zum Training sinnvoll<br />
Analog zum MLP führen wir also zum Finden passender Gewichte einen Gradientenabstieg<br />
durch, und zwar über die bereits hinlänglich bekannte Delta-Regel. Backpropagation<br />
ist hier gar nicht notwendig, da wir nur eine einzige Gewichtsschicht trainieren<br />
müssen – ein Umstand, der sehr rechenzeitfreundlich ist.<br />
Wie wir wissen, lautet die Delta-Regel an sich<br />
wobei wir in unserem Fall nun einsetzen:<br />
∆wh,Ω = η · δΩ · oh, (6.17)<br />
∆wh,Ω = η · (tΩ − yΩ) · fact(||p − ch||) (6.18)
Ich möchte noch einmal ausdrücklich darauf hinweisen, dass es sehr beliebt ist, das Training<br />
in zwei Phasen zu unterteilen, indem man zunächst einen Gewichtssatz analytisch<br />
berechnet und diesen mit der Delta-Regel nachtrainiert.<br />
Oft wird das Training sogar in drei Phasen gegliedert: Es bleibt nämlich noch die Frage<br />
zu klären, ob man offline oder online lernt. Hier kann man Ähnliches sagen wie bei<br />
Multilayerperceptrons: Es wird oft zunächst online gelernt (schnellere Bewegung über<br />
die Fehleroberfläche). Anschließend, wenn man der Meinung ist, sich der Lösung zu<br />
nähern, werden in einer dritten Lernphase noch einmal die Fehler aufkumuliert und<br />
für eine noch genauere Annäherung offline gelernt. Ähnlich wie bei den MLPs erreicht<br />
man aber hier mit vielen Methoden gute Erfolge.<br />
Wir haben aber schon angedeutet, dass man auch andere Dinge an einem RBF-Netz<br />
optimieren kann als nur die Gewichte vor der Outputschicht – betrachten wir also<br />
einmal die Möglichkeiten, die σ und c zu variieren.<br />
6.3.1 Zentren und Breiten von RBF-Neuronen zu bestimmen, ist nicht<br />
immer trivial<br />
Es ist klar, dass man die Approximationsgenauigkeit von RBF-<strong>Netze</strong>n erhöhen kann,<br />
indem man die Breiten und Positionen der Gaußglocken im Inputraum an das zu<br />
approximierende Problem anpasst. Es gibt mehrere Methoden, mit den Zentren c und<br />
Breiten σ der Gaußglocken zu verfahren:<br />
Feste Wahl: Die Zentren und Breiten kann man fest und ohne Rücksicht auf die Muster<br />
wählen – hiervon sind wir bis jetzt ausgegangen.<br />
Bedingte, feste Wahl: Wieder werden Zentren und Breiten fest gewählt, man besitzt<br />
allerdings Vorwissen über die zu approximierende Funktion und kann sich etwas<br />
danach richten.<br />
Adaptiv zum Lernprozess: Zweifellos die eleganteste Variante, aber natürlich auch die<br />
anspruchsvollste. Eine Realisierung dieses Ansatzes wird in diesem Kapitel nicht<br />
besprochen, ist aber im Zusammenhang mit einer anderen Netztopologie zu finden<br />
(Abschnitt 10.6.1).<br />
6.3.1.1 Feste Wahl<br />
In jedem Fall ist es das Ziel, den Eingangsraum möglichst gleichmäßig abzudecken. Hier<br />
des Abstandes der Zentren zueinander wählen, so dass<br />
kann man dann Breiten von 2<br />
3
Abbildung 6.6: Beispiel einer gleichmäßigen Abdeckung eines zweidimensionalen Inputraumes<br />
durch Radialbasisfunktionen.<br />
sich die Gaußglocken zu ca. „einem Drittel“ 2 überlappen (Abb. 6.6). Je dichter wir die<br />
Glocken setzen, desto genauer, aber desto Rechenaufwändiger wird das Ganze.<br />
Dies mag sehr unelegant aussehen, allerdings kommen wir in Bereichen der Funktionsapproximation<br />
kaum um die gleichmäßige Abdeckung herum – hier bringt es uns<br />
nämlich im Allgemeinen wenig, wenn die zu approximierende Funktion an einigen Stellen<br />
sehr genau repräsentiert wird, an anderen Stellen aber nur 0 als Rückgabewert<br />
geliefert wird.<br />
Allerdings erfordert eine hohe Eingangsdimension gigantisch viele RBF-Neurone, was<br />
den Rechenaufwand exponentiell zur Dimension in die Höhe schnellen läßt – und dafür<br />
sorgt, dass wir sechs- bis zehndimensionale Probleme bei RBF-<strong>Netze</strong>n bereits „hochdimensional“<br />
nennen (ein MLP macht hier beispielsweise überhaupt keine Probleme).<br />
2 Es ist klar, dass eine Gaußglocke mathematisch unendlich breit ist, ich bitte also den Leser, diese saloppe<br />
Formulierung zu entschuldigen.
Abbildung 6.7: Beispiel einer ungleichmäßigen Abdeckung eines zweidimensionalen Inputraumes,<br />
über den wir Vorwissen besitzen, durch Radialbasisfunktionen.<br />
6.3.1.2 Bedingte, feste Wahl<br />
Angenommen, unsere Trainingsbeispiele sind nicht gleichmäßig über den Eingangsraum<br />
verteilt – dann liegt es nahe, die Zentren und Sigmas der RBF-Neurone anhand der<br />
Musterverteilung auszurichten. Man kann also seine Trainingsmuster mit statistischen<br />
Verfahren wie einer Clusteranalyse analysieren und so herausfinden, ob es statistische<br />
Gegebenheiten gibt, nach denen wir unsere Verteilung der Zentren und Sigmas richten<br />
sollten (Abb. 6.7).<br />
Eine trivialere Möglichkeit wäre es, |H| viele Zentren auf zufällig aus der Mustermenge<br />
ausgewählte Positionen zu setzen: Es bestünde also bei dieser Vorgehensweise für jedes<br />
Trainingsmuster p die Möglichkeit, direkt Zentrum eines Neurons zu sein (Abb. 6.8 auf<br />
der folgenden Seite). Das ist auch noch nicht sehr elegant, aber keine schlechte Lösung,<br />
wenn es schnell gehen soll. Bei dieser Vorgehensweise werden die Breiten in der Regel<br />
fest gewählt.<br />
Wenn wir Grund zu der Annahme haben, dass die Menge der Trainingsbeispiele Häufungspunkte<br />
besitzt, können wir Clusteringverfahren benutzen, um diese zu finden. Es<br />
gibt verschiedene Arten, Cluster in einer beliebigdimensionalen Menge von Punkten<br />
zu finden, von denen wir einige im Exkurs A kennenlernen werden. Ein neuronales
Abbildung 6.8: Beispiel einer ungleichmäßigen Abdeckung eines zweidimensionalen Inputraumes<br />
durch Radialbasisfunktionen. Die Breiten wurden fest gewählt, die Zentren der Neurone zufällig über<br />
die Trainingsmuster verteilt. Diese Verteilung kann natürlich leicht zu unrepräsentativen Ergebnissen<br />
führen, wie auch deutlich an dem allein stehenden Datenpunkt unten links zu sehen ist.<br />
Clusteringverfahren sind die sogenannten ROLFs (Abschnitt A.5), und auch Self Organizing<br />
Maps haben sich als sinnvoll im Zusammenhang mit der Positionsbestimmung<br />
von RBF-Neuronen erwiesen (Abschnitt 10.6.1). Bei den ROLFs können sogar Anhaltspunkte<br />
für sinnvolle Radien der RBF-Neurone gefunden werden. Auch mit Learning<br />
Vector Quantisation (Kap. 9) wurden schon gute Ergebnisse erzielt. Alle diese Verfahren<br />
haben nichts direkt mit den RBF-<strong>Netze</strong>n zu tun, sondern dienen der reinen<br />
Erzeugung von Vorwissen – wir behandeln sie daher nicht in diesem Kapitel, sondern<br />
eigenständig in den genannten Kapiteln.<br />
Ein weiterer Ansatz ist, auf Bewährtes zurückzugreifen: Wir können an den Positionen<br />
der Zentren drehen und schauen, wie sich unsere Fehlerfunktion Err damit verändert<br />
– einen Gradientenabstieg, wie von den MLPs gewohnt. Wir können auch auf gleiche<br />
Weise schauen, wie der Fehler von den Werten σ abhängt. Analog zur Herleitung von<br />
Backpropagation bilden wir also die Ableitungen<br />
∂Err(σhch)<br />
∂σh<br />
und ∂Err(σhch)<br />
.<br />
∂ch
Da die Herleitung dieser Terme sich analog zu der von Backpropagation verhält, wollen<br />
wir sie hier nicht ausführen.<br />
Die Erfahrung zeigt aber, dass es keine sehr überzeugenden Ergebnisse liefert, wenn<br />
wir betrachten, wie sich der Fehler abhängig von den Zentren und Sigmas verhält.<br />
Auch wenn die Mathematik uns lehrt, dass Verfahren dieser Art erfolgversprechend<br />
sind, ist der Gradientenabstieg, wie wir wissen, problembehaftet bei sehr zerklüfteten<br />
Fehleroberflächen.<br />
Genau hier liegt der Knackpunkt: RBF-<strong>Netze</strong> bilden naturgemäß sehr zerklüftete Fehleroberflächen,<br />
denn wenn wir an einem c oder σ etwas verändern, verändern wir das<br />
Aussehen der Fehlerfunktion sehr stark.<br />
6.4 Wachsende RBF-<strong>Netze</strong> passen die Neuronendichte<br />
automatisch an<br />
Bei wachsenden RBF-<strong>Netze</strong>n ist die Anzahl |H| der RBF-Neurone nicht konstant.<br />
Man wählt vorab eine bestimmte Zahl |H| Neurone, sowie deren Zentren ch und Breiten<br />
σh (beispielsweise anhand eines Clusteringverfahrens) und erweitert bzw. reduziert<br />
diese anschließend. Im Folgenden werden nur einfache Mechanismen angeschnitten,<br />
genauere Informationen finden Sie unter [Fri94].<br />
6.4.1 Neurone werden Stellen großen Fehlers hinzugefügt<br />
Nach Bildung dieser Startkonfiguration berechnet man analytisch den Vektor der Gewichte<br />
G. Man errechnet als nächstes alle spezifischen Fehler Errp bezüglich der Menge<br />
P der Trainingsbeispiele und sucht den maximalen spezifischen Fehler<br />
max<br />
P (Errp).<br />
Die Erweiterung des <strong>Netze</strong>s ist einfach: An die Stelle dieses größten Fehlers setzen wir<br />
nun ein neues RBF-Neuron. Hierbei müssen wir natürlich ein wenig aufpassen: Bei kleinen<br />
σ beeinflussen sich die Neurone nur bei wenig Entfernung zueinander. Bei großen σ<br />
hingegen findet aufgrund der Überlappung der Gaußglocken eine große Beeinflussung<br />
der schon vorhandenen Neurone durch das neue Neuron statt.<br />
Es liegt also nahe, dass wir beim Hinzufügen eines neuen Neurons die bereits vorhandenen<br />
RBF-Neurone etwas anpassen.
Diese Anpassung geschieht salopp gesagt, indem man die Zentren c der anderen Neurone<br />
etwas von dem neuen Neuron wegbewegt und deren Breite σ etwas verkleinert.<br />
Danach wird der aktuelle Outputvektor y des <strong>Netze</strong>s mit dem Teaching Input t verglichen<br />
und der Gewichtsvektor G durch Training verbessert. Anschließend kann man,<br />
sofern erforderlich, wieder ein neues Neuron einfügen. Dieses Verfahren eignet sich<br />
insbesondere für Funktionsapproximationen.<br />
6.4.2 Begrenzung der Neuronenanzahl<br />
Es ist hierbei unbedingt darauf zu achten, dass das Netz nicht ins Unendliche wächst,<br />
was sehr schnell passieren kann. Es ist also sinnvoll, sich im Vorhinein eine Maximalanzahl<br />
für Neurone |H|max zu definieren.<br />
6.4.3 Weniger wichtige Neurone werden gelöscht<br />
Dies bringt uns zu der Frage, ob man noch weiterlernen kann, wenn diese Grenze |H|max<br />
erreicht ist. Auch hier ist dem Lernen noch kein Riegel vorgeschoben: Man sucht sich<br />
das „unwichtigste“ Neuron und löscht es. Ein Neuron ist beispielsweise für das Netz<br />
nicht wichtig, wenn es ein anderes Neuron gibt, welches fast genau das gleiche tut: Es<br />
kommt oft vor, dass sich zwei Gaußglocken genau überlappen, an solchen Stellen würde<br />
beispielsweise ein einziges Neuron mit entsprechend größerer Höhe seiner Gaußglocke<br />
genügen.<br />
Automatisierte Verfahren für das Finden von weniger relevanten Neuronen zu entwickeln,<br />
ist aber sehr stark problemabhängig und sei an dieser Stelle dem Programmierer<br />
überlassen.<br />
Mit RBF-<strong>Netze</strong>n und Multilayerperceptrons haben wir nun bereits zwei Netzparadigmen<br />
für ähnliche Problemstellungen kennengelernt und ausführlich betrachtet. Wir<br />
wollen diese beiden Paradigmen daher einander gegenüberstellen und ihre Vor- und<br />
Nachteile vergleichen.<br />
6.5 Gegenüberstellung von RBF-<strong>Netze</strong>n und<br />
Multilayerperceptrons<br />
Wir nehmen den Vergleich von Multilayerperceptrons und RBF-<strong>Netze</strong>n anhand verschiedener<br />
Aspekte vor.
Eingabedimension: Bei RBF-<strong>Netze</strong>n ist in hochdimensionalen Funktionsräumen etwas<br />
Vorsicht geboten, da das Netz sehr schnell sehr speicher- und rechenaufwändig<br />
werden kann – hier macht ein Multilayerperceptron weniger Probleme, da dessen<br />
Neuronenanzahl nicht exponentiell mit der Eingabedimension wächst.<br />
Wahl der Zentren: Allerdings ist die Wahl der Zentren c bei RBF-<strong>Netze</strong>n (trotz der<br />
hier vorgestellten Ansätze) nach wie vor ein großes Problem – bitte nutzen Sie bei<br />
deren Anwendung also wirklich jedes Vorwissen, das sie haben. Solche Probleme<br />
haben wir beim MLP nicht.<br />
Ausgabedimension: Vorteil der RBF-<strong>Netze</strong> ist, dass es dem Training wenig macht,<br />
wenn das Netz eine hohe Output-Dimension aufweist – ein Lernverfahren wie<br />
Backpropagation bei einem MLP wird dabei sehr in die Länge gezogen.<br />
Extrapolation: Vorteil und Nachteil von RBF-<strong>Netze</strong>n ist die mangelnde Extrapolationsfähigkeit:<br />
Ein RBF-Netz liefert weit weg von den Zentren der RBF-Schicht<br />
das Ergebnis 0. Dies ist gut und schlecht: Zum einen extrapoliert es eben nicht,<br />
es ist im Gegensatz zum MLP hierfür nicht verwertbar (wobei wir beim MLP<br />
nie wissen können, ob die extrapolierten Werte vernünftig sind, die Erfahrung<br />
zeigt aber, dass MLPs hier gutmütig sind). Zum anderen hat das Netz aber im<br />
Gegensatz zum MLP die Möglichkeit, uns durch diese 0 zu sagen „Ich weiss es<br />
nicht“, was sehr vom Vorteil sein kann.<br />
Läsionstoleranz: Für den Output eines MLPs ist es nicht so wichtig, wenn irgendwo<br />
ein Gewicht oder Neuron fehlt, er wird insgesamt ein wenig schlechter werden.<br />
Fehlt ein Gewicht oder Neuron beim RBF-Netz, so sind weite Teile des Outputs<br />
so gut wie unbeeinflusst – eine Stelle des Outputs ist jedoch sehr betroffen, weil<br />
eben direkt eine Gaußglocke fehlt. Hier kann man also wählen zwischen starkem<br />
lokalem Fehler bei Läsion und schwachem, aber globalem Fehler.<br />
Verbreitung: Hier ist das MLP „im Vorteil“, da RBF-<strong>Netze</strong> wesentlich weniger angewandt<br />
werden – ein Umstand, der von professionellen Stellen nicht immer<br />
verstanden wird (was niedrigdimensionale Eingaberäume angeht). MLPs haben<br />
anscheinend eine wesentlich höhere Tradition und funktionieren zu gut, als dass<br />
es nötig wäre, sich ein paar Seiten in dieser Arbeit über RBF-<strong>Netze</strong> durchzulesen<br />
:-).<br />
Übungsaufgaben<br />
Aufgabe 14. Mit einem |I|-|H|-|O|-RBF-Netz mit festen Breiten und Zentren der<br />
Neurone soll eine Zielfunktion u approximiert werden. Hierfür sind |P | viele Trainings-
eispiele der Form (p, t) der Funktion u gegeben. Es gelte |P | > |H|. Die Bestimmung<br />
der Gewichte soll analytisch über die Moore-Penrose-Pseudoinverse erfolgen. Geben<br />
Sie das Laufzeitverhalten bezüglich |P | und |O| möglichst genau an.<br />
Hinweis: Für Matrixmultiplikationen und Matrixinvertierungen existieren Verfahren,<br />
welche effizienter sind als die kanonischen Verfahren. Für bessere Abschätzungen recherchieren<br />
Sie nach solchen Verfahren (und deren Komplexität). Geben Sie bei Ihrer<br />
Komplexitätsberechnung die verwendeten Verfahren samt ihrer Komplexität an.
Kapitel 7<br />
Rückgekoppelte <strong>Netze</strong><br />
Gedanken über <strong>Netze</strong>, welche eigene interne Zustände besitzen.<br />
Rückgekoppelte <strong>Netze</strong> im Allgemeinen bezeichnen <strong>Netze</strong>, die die Fähigkeit haben, sich<br />
durch Rückkopplungen selbst zu beeinflussen, beispielsweise indem die Ausgabe des<br />
<strong>Netze</strong>s in die folgenden Berechnungsschritte mit eingeht. Es gibt viele Arten rückgekoppelter<br />
<strong>Netze</strong> von nahezu beliebiger Gestalt, fast alle überschneidend als rückgekoppelte<br />
<strong>Neuronale</strong> <strong>Netze</strong> bezeichnet – demzufolge verwende ich für die wenigen<br />
hier vorgestellten Paradigmen den Namen rückgekoppelte Multilayerperceptrons.<br />
W Dass man mit einem rückgekoppelten Netz mehr berechnen kann als mit einem<br />
normalen MLP, ist offensichtlich: Setzt man die Rückkopplungsgewichte auf 0, reduziert<br />
man das rückgekoppelte Netz ja auf ein normales MLP. Insbesondere erzeugt die<br />
Rückkopplung verschiedene netzinterne Zustände, so dass auch auf gleiche Eingaben<br />
im Kontext des Netzzustands verschiedene Ausgaben ausgegeben werden können.<br />
Rückgekoppelte <strong>Netze</strong> an sich besitzen eine große Dynamik, die mathematisch sehr<br />
schwer zu erfassen und äußerst umfangreich zu betrachten ist. Das Ziel dieses Kapitels<br />
wird es nur sein, kurz zu betrachten, wie Rückkopplungen aufgebaut sein können und<br />
netzinterne Zustände erzeugt werden können. So werde ich nur kurz zwei Paradigmen<br />
rückgekoppelter <strong>Netze</strong> vorstellen, und anschließend grob deren Training umreißen.<br />
Bei einem rückgekoppelten Netz können für eine zeitlich konstante Eingabe x verschiedene<br />
Dinge passieren: Zum einen kann das Netz konvergieren, sich also in einen festen<br />
Zustand bringen und irgendwann eine feste Ausgabe y ausgeben, oder es konvergiert<br />
eben nicht bzw. nach so langer Zeit, dass wir es nicht mehr mitbekommen, was eine<br />
ständige Veränderung von y zur Folge hat.<br />
Falls es nicht konvergiert, kann man beispielsweise die Ausgabe auf Periodika oder<br />
Attraktoren (Abb. 7.1 auf der folgenden Seite) untersuchen – wir können hier die<br />
153
Abbildung 7.1: Der Rössler-Attraktor<br />
komplette Vielfalt von dynamischen Systemen erwarten, weswegen ich auch speziell<br />
auf die Literatur zu dynamischen Systemen verweisen möchte.<br />
Durch weitergehende Betrachtungen kann man dann herausfinden, was passiert, wenn<br />
bei rückgekoppelten <strong>Netze</strong>n der Input verändert wird.<br />
Vorgestellt werden sollen in diesem Kapitel die verwandten Paradigmen rückgekoppelter<br />
<strong>Netze</strong> nach Jordan und Elman.<br />
7.1 Jordannetze<br />
Ein Jordannetz [Jor86] ist ein Multilayerperceptron mit einer Menge K von sogenannten<br />
Kontextneuronen k1, k2, . . . , k |K| – pro Output-Neuron existiert ein Kontextneuron<br />
(illustriert in Abb. 7.2 auf der rechten Seite). Ein Kontextneuron macht im<br />
Grunde nichts anderes, als einen Output zwischenzuspeichern, so dass er im nächsten<br />
Zeitschritt verwertet werden kann. Es gibt also gewichtete Verbindungen von jedem
i1<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥ <br />
<br />
<br />
<br />
❆<br />
❯ ❯<br />
<br />
❆<br />
❯<br />
i2<br />
❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯ ❯ ❯ ❯<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
⑥ ❯ ❯ ❯<br />
⑥⑥⑥⑥⑥⑥⑥⑥<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
❆❆❆<br />
❆❆❆<br />
❆❆❆<br />
h1 ❆<br />
❯ ❯<br />
<br />
❆<br />
❯<br />
h2<br />
❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯<br />
❆<br />
❯ ❯ ❯<br />
❆ ❯ ❯<br />
❆<br />
❯ ❯<br />
⑥<br />
❯ ❯ ❯ ❯ ❯ ❯<br />
k2<br />
k1<br />
⑥⑥⑥⑥⑥⑥⑥⑥ <br />
<br />
h3<br />
❆<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥ <br />
<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
Ω1<br />
Ω2<br />
<br />
<br />
<br />
Abbildung 7.2: Darstellung eines Jordannetzes. Die Ausgabe des <strong>Netze</strong>s wird in den Kontextneuronen<br />
gepuffert und beim nächsten Zeitschritt zusammen mit der neuen Eingabe in das Netz<br />
eingebracht.<br />
Ausgabeneuron zu einem Kontextneuron. Die gespeicherten Werte werden durch Vollverknüpfungen<br />
von den Kontextneuronen zur Eingabeschicht wieder an das eigentliche<br />
Netz zurückgegeben.<br />
In der ursprünglichen Definition eines Jordannetzes sind die Kontextneurone auch<br />
noch über ein Verbindungsgewicht λ zu sich selbst rückgekoppelt – in den meisten Anwendungen<br />
wird diese Rückkopplung aber weggelassen, da das Jordannetz ohne diese<br />
zusätzlichen Rückkopplungen schon sehr dynamisch und schwer analysierbar ist.<br />
Definition 7.1 (Kontextneuron). Ein Kontextneuron k nimmt einen Outputwert<br />
eines anderen Neurons i zu einem Zeitpunkt t entgegen und gibt diesen im Zeitpunkt<br />
(t + 1) wieder in das Netz ein.<br />
Definition 7.2 (Jordannetz). Ein Jordannetz ist ein Multilayerperceptron, welches<br />
pro Outputneuron ein Kontextneuron besitzt. Die Menge der Kontextneurone nennen<br />
wir K. Die Kontextneurone sind vollverknüpft in Richtung der Eingabeschicht des<br />
<strong>Netze</strong>s.
i1<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦⑦ <br />
<br />
<br />
<br />
❅<br />
❯ ❯<br />
<br />
❅<br />
❯<br />
i2<br />
❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯ ❯ ❯ ❯<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
⑦ ❯ ❯ ❯<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦ <br />
<br />
<br />
<br />
<br />
❅<br />
h1 ❅<br />
❯ ❯<br />
<br />
❅<br />
❯<br />
h2<br />
❯<br />
❅<br />
❯ ❯ ❯<br />
❅ ❯ ❯<br />
❅<br />
❯ ❯<br />
❅<br />
❯ ❯ ❯<br />
❅ ❯ ❯<br />
❅ ❯ ❯<br />
❅<br />
❯ ❯<br />
⑦<br />
❯ ❯ ❯ ❯ ❯ ❯<br />
⑦⑦⑦⑦⑦⑦⑦⑦<br />
<br />
<br />
<br />
h3<br />
❅❅❅ ❅❅❅<br />
❅❅❅<br />
⑦⑦⑦⑦⑦⑦⑦⑦⑦ <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
Ω1<br />
Ω2<br />
kh1<br />
kΩ1<br />
kh2<br />
kΩ2<br />
kh3<br />
<br />
<br />
Abbildung 7.3: Darstellung eines Elmannetzes. Der ganze informationsverarbeitende Teil des <strong>Netze</strong>s<br />
ist sozusagen zweimal vorhanden. Die Ausgabe eines jeden Neurons (bis auf die der Eingabeneurone)<br />
wird gepuffert und in die zugeordnete Schicht wieder eingegeben. Ich habe die Kontextneurone<br />
zur Übersichtlichkeit anhand ihrer Vorbilder im eigentlichen Netz benannt, das muss man aber nicht<br />
so machen.<br />
7.2 Elmannetze<br />
Auch die Elmannetze (eine Variation der Jordannetze) [Elm90] haben Kontextneurone<br />
– allerdings pro informationsverarbeitender Neuronenschicht eine Schicht Kontextneurone<br />
(Abb. 7.3). Die Ausgaben eines jeden versteckten Neurons oder Ausgabeneurons<br />
werden also in die zugehörige Kontextschicht geleitet (wieder pro Neuron<br />
genau ein Kontextneuron) und von da im nächsten Zeitschritt wieder in die komplette<br />
Neuronenschicht eingegeben (auf dem Rückweg also wieder eine Vollverknüpfung).<br />
Es existiert also der gesamte informationsverarbeitende Teil 1 des MLPs noch einmal<br />
als „Kontextversion“ – was die Dynamik und Zustandsvielfalt noch einmal wesentlich<br />
erhöht.<br />
Gegenüber Jordannetzen haben Elmannetze oft den Vorteil, etwas zielgerichteter zu<br />
agieren, da jede Schicht auf ihren eigenen Kontext zurückgreifen kann.<br />
1 Wir erinnern uns: die Inputschicht ist nicht informationsverarbeitend
Definition 7.3 (Elmannetz). Ein Elmannetz ist ein MLP, welches pro informationsverarbeitendem<br />
Neuron ein Kontextneuron besitzt. Die Menge der Kontextneurone<br />
nennen wir K. Pro informationsverarbeitender Neuronenschicht existiert also eine<br />
Kontextschicht mit exakt gleichvielen Kontextneuronen. Jedes Neuron besitzt eine gewichtete<br />
Verbindung zu exakt einem Kontextneuron, während die Kontextschicht in<br />
Richtung ihrer Ursprungsschicht vollverknüpft ist.<br />
Interessant ist nun, das Training rückgekoppelter <strong>Netze</strong> zu betrachten, da z.B. das<br />
normale Backpropagation of Error nicht auf rückgekoppelten <strong>Netze</strong>n funktionieren<br />
kann. Dieser Teil ist wieder etwas informeller gehalten, so dass ich dort keine formalen<br />
Definitionen verwenden werde.<br />
7.3 Training rückgekoppelter <strong>Netze</strong><br />
Um das Training so anschaulich wie möglich darzustellen, müssen wir einige Vereinfachungen<br />
verabreden, die das Lernprinzip an sich aber nicht beeinträchtigen.<br />
Gehen wir für das Training also davon aus, dass die Kontextneurone zu Anfang mit<br />
einer Eingabe initiiert werden, da sie sonst eine undefinierte Eingabe haben (das ist<br />
keine Vereinfachung, sondern wird tatsächlich gemacht).<br />
Weiterhin verwenden wir für unsere Trainingsgehversuche ein Jordannetz, welches keine<br />
versteckte Neuronenschicht hat, so dass die Outputneurone direkt wieder Input liefern.<br />
Dies ist eine starke Vereinfachung, da in der Regel kompliziertere <strong>Netze</strong> verwendet<br />
werden. Dies verändert soweit aber nichts am Lernprinzip.<br />
7.3.1 Unfolding in Time<br />
Erinnern wir uns an unser eigentliches Lernverfahren für MLPs, Backpropagation of<br />
Error, das die Deltawerte rückwärts propagiert. Im Falle rückgekoppelter <strong>Netze</strong> würden<br />
die Deltawerte also zyklisch immer wieder rückwärts durch das Netz propagiert, was<br />
das Training schwieriger macht. Zum einen kann man nicht wissen, welche der vielen<br />
generierten Deltawerte für ein Gewicht nun für das Training gewählt werden sollen,<br />
also sinnvoll sind, zum anderen können wir auch nicht unbedingt wissen, wann das<br />
lernen nun beendet werden soll. Der Vorteil von rückgekoppelten <strong>Netze</strong>n ist eine große<br />
Zustandsdynamik innerhalb des Netzbetriebs – der Nachteil rückgekoppelter <strong>Netze</strong> ist,<br />
dass diese Dynamik auch dem Training zuteil wird und dieses somit erschwert.
Ein Lernansatz wäre der Versuch, die zeitlichen Zustände des <strong>Netze</strong>s aufzufalten<br />
(Abb. 7.4 auf der rechten Seite): Man löst die Rekursionen auf, indem man ein<br />
gleichförmiges Netz über die Kontextneurone setzt, also die Kontextneurone sozusagen<br />
die Ausgabeneurone des angefügten <strong>Netze</strong>s bilden. Allgemeiner ausgedrückt, Verfolgt<br />
man die Rekurrenzen zurück und hängt so „frühere“ Instanzen von Neuronen in<br />
das Netz ein. So erzeugt man ein Großes, vorwärtsgerichtetes Netz, verliert aber im<br />
Gegenzug die Rekurrenzen und kann so das Netz mit Verfahren für nicht-rekurrente<br />
<strong>Netze</strong> trainieren In jede „Kopie“ der Eingabeneurone wird hierbei die Eingabe als<br />
Teaching Input eingegeben. Dies kann man für eine diskrete Anzahl Zeitschritte<br />
tun. Wir nennen dieses Trainingsparadigma Unfolding in Time [MP69]. Nach der<br />
Auffaltung ist ein Training durch Backpropagation of Error möglich.<br />
Offensichtlich erhält man für ein Gewicht wi,j aber mehrere Änderungswerte ∆wi,j,<br />
mit denen man auf verschiedene Weise verfahren kann: Aufkumulieren, Durchschnittsberechnung,<br />
etc. Kumuliert man sie einfach auf, können sich u.U. zu große Änderungen<br />
pro Gewicht ergeben, falls alle Änderungen das gleiche Vorzeichen haben. Demzufolge<br />
ist auch der Durchschnitt nicht zu verachten. Man könnte auch einen discounting factor<br />
einführen, der den Einfluss weiter in der Vergangenheit liegender ∆wi,j abschwächt.<br />
Unfolding in Time ist besonders dann sinnvoll, wenn man den Eindruck hat, dass die<br />
nähere Vergangenheit wichtiger für das Netz ist als die weiter entfernte, da Backpropagation<br />
in den von der Ausgabe weiter entfernten Schichten nur wenig Einfluss hat (wir<br />
erinnern uns: Der Einfluss von Backpropagation wird immer kleiner, je weiter man von<br />
der Ausgabeschicht weggeht).<br />
Nachteile: Das Training des so auseinandergefalteten <strong>Netze</strong>s kann sehr lange dauern,<br />
da man unter Umständen eine große Anzahl Schichten produziert. Ein nicht mehr vernachlässigbares<br />
Problem ist die begrenzte Rechengenauigkeit normaler Computer, die<br />
bei derartig vielen geschachtelten Rechnungen sehr schnell erschöpft ist (der Einfluss<br />
von Backpropagation wird, je weiter man von den Ausgabeschichten weg kommt, immer<br />
kleiner, so dass man an diese Grenze stößt). Weiterhin kann das Verfahren bei<br />
mehreren Ebenen Kontextneurone sehr große zu trainierende <strong>Netze</strong> produzieren.<br />
7.3.2 Teacher Forcing<br />
Weitere Verfahren sind die deckungsgleichen Teacher Forcing und Open Loop Learning.<br />
Sie schneiden während des Lernens die Rückkopplung auf: Während des Lernens<br />
tun wir einfach so, als gäbe es die Rückkopplung nicht, und legen den Teaching Input
i1 ❖❯<br />
❖❯<br />
<br />
❖❯<br />
i2<br />
❖❯<br />
❖<br />
❯<br />
❖<br />
❯ ❅<br />
<br />
❯<br />
❖ ❯<br />
❖<br />
❯<br />
❅<br />
i3<br />
k1<br />
<br />
❯<br />
❖ ❯<br />
❅ ❆<br />
❖<br />
❯ ❅<br />
<br />
❆<br />
❅❯<br />
❆<br />
❖ ❅❯<br />
<br />
❖<br />
❯<br />
❖ ❅ ❯<br />
<br />
❆<br />
❯<br />
<br />
❖ ❅ ❯ <br />
❆<br />
❖<br />
❯ ❯<br />
❆<br />
❖❅<br />
❯<br />
<br />
❯ <br />
❆<br />
❯ ❆<br />
❯ <br />
❯ ❆<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥ <br />
<br />
<br />
k2<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
Ω1<br />
Ω2<br />
<br />
<br />
<br />
.<br />
<br />
<br />
<br />
❘❱<br />
❘❱<br />
❘❱<br />
<br />
❘❱<br />
❘❱<br />
❘❱<br />
❈<br />
❘❱<br />
❘<br />
❱<br />
❈<br />
<br />
❘<br />
❱ ❱ ❈<br />
❘ ❱<br />
❘<br />
❱ ❈<br />
<br />
❄<br />
<br />
❄<br />
❘<br />
❱ ❈ <br />
❱<br />
❘<br />
❈<br />
❄<br />
❱ <br />
<br />
<br />
<br />
❘ ❈❱<br />
❘<br />
❱<br />
<br />
❄<br />
❱<br />
❘<br />
❈<br />
❄<br />
❱<br />
❘❈<br />
❱<br />
<br />
<br />
❱ ❄<br />
<br />
❱ <br />
❱ <br />
❄<br />
❱ ❄<br />
♦♦♦♦♦♦♦♦♦♦♦♦♦♦<br />
<br />
⑧⑧⑧⑧⑧⑧⑧⑧<br />
<br />
❘❱<br />
❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥<br />
♦♦♦♦♦♦♦♦♦♦♦♦♦♦<br />
❘❱<br />
❘❱<br />
<br />
❘❱<br />
❘❱<br />
❘❱<br />
❉◗<br />
❘<br />
❱<br />
❘<br />
❱<br />
❉◗<br />
<br />
❱<br />
❘ ❱ ❉◗<br />
❘<br />
❱<br />
❘<br />
❱ ❱<br />
❉<br />
◗<br />
❈<br />
<br />
◗<br />
❘<br />
❱ ❉ ◗<br />
❈<br />
❉<br />
◗ ❈<br />
❘<br />
❱<br />
◗<br />
❉❱<br />
◗ ❈<br />
<br />
<br />
<br />
❘ ❱ ◗<br />
❘<br />
❉ ❱ ❱<br />
◗<br />
❈<br />
❘ ❉ ❱ ◗<br />
❘<br />
❱<br />
❘<br />
❉ ❱<br />
◗<br />
❈<br />
❱<br />
◗ ❈<br />
<br />
<br />
<br />
❱ ◗<br />
❱ ◗ ❈<br />
❱ ◗❱<br />
◗<br />
❈<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
<br />
<br />
⑧⑧⑧⑧⑧⑧⑧⑧⑧<br />
<br />
❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥❥<br />
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣<br />
i1 ❖❯<br />
❖❯<br />
<br />
❖❯<br />
i2<br />
❖❯<br />
❖<br />
❯<br />
❖<br />
❯ ❅<br />
<br />
❯<br />
❖ ❯<br />
❖<br />
❯<br />
❅<br />
i3<br />
k1<br />
<br />
❯<br />
❖ ❯<br />
❅ ❆<br />
❖<br />
❯ ❅<br />
<br />
❆<br />
❅❯<br />
❆<br />
❖ ❅❯<br />
<br />
❖<br />
❯<br />
❖ ❅ ❯<br />
<br />
❆<br />
❯<br />
<br />
❖ ❅ ❯ <br />
❆<br />
❖<br />
❯ ❯<br />
❆<br />
❖❅<br />
❯<br />
<br />
<br />
<br />
❯ <br />
❆<br />
<br />
❯ ❆<br />
❯ <br />
❯ ❆<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
<br />
<br />
⑥⑥⑥⑥⑥⑥⑥⑥⑥<br />
k2<br />
✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐✐<br />
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥<br />
Ω1<br />
Ω2<br />
<br />
<br />
Abbildung 7.4: Darstellung des Unfolding in Time bei einem kleinen beispielhaften rückgekoppelten<br />
MLP. Oben: Das rückgekoppelte MLP. Unten: Das aufgefaltete Netz. Um der Übersichtlichkeit<br />
zu dienen, habe ich im aufgefalteten Netz nur dem untersten Teilnetz Benennungen hinzugefügt.<br />
Gepunktete Pfeile, welche in das Netz hineinführen, markieren Eingaben. Gepunktete Pfeile, welche<br />
aus dem Netz herausführen, markieren Ausgaben. Jede „Netzkopie“ repräsentiert einen Zeitschritt<br />
des <strong>Netze</strong>s, unten ist der aktuellste Zeitschritt.<br />
.<br />
.<br />
.<br />
.
während des Trainings an den Kontextneuronen an. Auch so wird ein Backpropagation-<br />
Training möglich. Nachteil: Ein Teaching Input bei Kontextneuronen oder allgemein<br />
nicht-ausgabe-Neuronen ist ja nicht verfügbar.<br />
7.3.3 Rekurrentes Backpropagation<br />
Ein weiteres beliebtes Verfahren ohne beschränkten Zeithorizont ist rekurrentes<br />
Backpropagation, das dem Problem mit Hilfe von Lösungsmethoden für<br />
Differentialgleichungen zu Leibe rückt [Pin87].<br />
7.3.4 Training mit Evolution<br />
Gerade bei rückgekoppelten <strong>Netze</strong>n haben sich aufgrund des ohnehin langen Trainings<br />
evolutionäre Algorithmen bewährt, da diese nicht nur in Bezug auf Rückkopplungen<br />
keinen Beschränkungen unterliegen, sondern bei geeigneter Wahl der Mutationsmechanismen<br />
auch weitere Vorteile haben: So können zum Beispiel Neurone und Gewichte<br />
angepasst und so die Netztopologie optimiert werden (es muss dann nach dem Lernen<br />
natürlich kein Jordan- oder Elmannetz herauskommen). Bei normalen MLPs hingegen<br />
sind die Evolutionsstrategien weniger gefragt, da sie natürlich viel mehr Zeit benötigen<br />
als ein gerichtetes Lernverfahren wie Backpropagation.
Kapitel 8<br />
Hopfieldnetze<br />
In einem magnetischen Feld übt jedes Teilchen Kraft auf jedes andere Teilchen<br />
aus, so dass sich die Teilchen insgesamt so ausrichten, wie es am energetisch<br />
günstigsten für sie ist. Wir kopieren diesen Mechanismus der Natur, um<br />
verrauschte Eingaben zu ihren richtigen Vorbildern zu korrigieren.<br />
Ein weiteres überwacht lernendes Beispiel aus dem Zoo der <strong>Neuronale</strong>n <strong>Netze</strong> wurde<br />
von John Hopfield entwickelt: die nach ihm benannten Hopfieldnetze [Hop82].<br />
Hopfield und seine physikalisch motivierten <strong>Netze</strong> haben viel zur Renaissance der <strong>Neuronale</strong>n<br />
<strong>Netze</strong> beigetragen.<br />
8.1 Hopfieldnetze sind inspiriert durch Teilchen in einem<br />
magnetischen Feld<br />
Die Idee für die Hopfieldnetze ist aus dem Verhalten von Teilchen im Magnetismus<br />
entstanden: Jedes Teilchen „redet“ (durch die magnetischen Kräfte) mit jedem anderen<br />
(also eine Vollverknüpfung), wobei es aber jeweils versucht, einen energetisch<br />
günstigen Zustand (sozusagen ein Minimum der Energiefunktion) zu erreichen. Diesen<br />
Eigenzustand kennen wir bei den Neuronen als Aktivierung. Die Teilchen bzw. Neurone<br />
drehen sich also alle und animieren sich dadurch wieder gegenseitig zur Drehung.<br />
Unser <strong>Neuronale</strong>s Netz ist also sozusagen eine Wolke von Teilchen.<br />
Ausgehend von der Tatsache, dass die Teilchen die Minima in der Energiefunktion<br />
selbsttätig aufspüren, hatte Hopfield nun die Idee, den „Drehwinkel“ der Teilchen<br />
zu nutzen, um Informationsverarbeitung zu betreiben: Warum nicht die Teilchen auf<br />
selbstdefinierten Funktionen Minima suchen lassen? Selbst wenn wir nur zwei dieser<br />
161
↑ ❙<br />
<br />
❙<br />
<br />
<br />
❁<br />
❙❙<br />
<br />
<br />
❁ ❙❙<br />
<br />
↓<br />
❁ ❙❙<br />
<br />
❁<br />
❙❙<br />
❁<br />
❙❙❙<br />
❁ ❙❙<br />
❁ ❙❙<br />
❁ ❙❙<br />
<br />
❙❙<br />
❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦<br />
✂<br />
❙❙❙<br />
<br />
<br />
<br />
✂✂✂✂✂✂✂✂ ❁<br />
❁<br />
<br />
↑ ❙❙❙❙❙❙<br />
❙❙❙❙❙❙<br />
❙❙❙❙❙❙<br />
❙❙❙❙❙❙<br />
<br />
<br />
<br />
✂<br />
✂<br />
✂<br />
✂<br />
✂<br />
✂<br />
<br />
↓<br />
<br />
↑<br />
❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦<br />
<br />
<br />
<br />
✂✂✂✂✂✂✂✂✂<br />
<br />
❁❁❁❁❁❁❁❁❁<br />
✂<br />
❁<br />
✂ ❁❁❁❁❁❁❁❁<br />
✂<br />
✂<br />
<br />
✂<br />
<br />
✂<br />
✂<br />
<br />
↓ <br />
<br />
↑<br />
Abbildung 8.1: Darstellung eines beispielhaften Hopfieldnetzes. Die Pfeile ↑ und ↓ markieren die<br />
binären „Drehwinkel“. Durch die vollständige Verknüpfung der Neurone können keine Schichten<br />
voneinander abgegrenzt werden, so dass ein Hopfieldnetz einfach eine Menge von Neuronen umfasst.<br />
Drehwinkel (Spins) verwenden, also eine binäre Aktivierung, werden wir feststellen,<br />
dass das entwickelte Hopfieldnetz erstaunliche Dynamik besitzt.<br />
8.2 In einem Hopfieldnetz beeinflussen sich alle Neurone<br />
symmetrisch gegenseitig<br />
Kurz gesagt besteht ein Hopfieldnetz also aus einer Menge K von untereinander vollverknüpften<br />
Neuronen mit binärer Aktivierung (wir verwenden ja nur zwei Drehwinkel),<br />
wobei die Gewichte zwischen den einzelnen Neuronen symmetrisch sind und ein Neuron<br />
keine Direktverbindung zu sich selbst aufweist (Abb. 8.1). Der Zustand von |K|<br />
vielen Neuronen mit zwei möglichen Zuständen ∈ {−1, 1} lässt sich also durch eine<br />
Zeichenkette x ∈ {−1, 1} |K| beschreiben.<br />
Die Vollverknüpfung sorgt dafür, dass wir eine volle quadratische Matrix an Gewichten<br />
unter den Neuronen haben. Was die Gewichte bedeuten, wollen wir gleich erforschen.<br />
Weiter werden wir gleich durchschauen, nach welchen Regeln die Neurone sich drehen,<br />
also ihren Zustand ändern.<br />
Die Vollverknüpfung sorgt weiterhin dafür, dass wir keine Input-, Output- oder versteckten<br />
Neurone kennen. Wir müssen uns also Gedanken machen, wie wir etwas in<br />
die |K| Neurone eingeben.
Definition 8.1 (Hopfieldnetz). Ein Hopfieldnetz besteht aus einer Menge K von<br />
vollverknüpften Neuronen ohne direkte Rückkopplungen. Die Aktivierungsfunktion der<br />
Neurone ist die binäre Schwellenwertfunktion mit Ausgaben ∈ {1, −1}.<br />
Definition 8.2 (Zustand eines Hopfieldnetzes). Die Gesamtheit der Aktivierungszustände<br />
aller Neurone ist der Zustand des <strong>Netze</strong>s. Der Netzzustand kann also als<br />
Binärstring z ∈ {−1, 1} |K| aufgefasst werden.<br />
8.2.1 Eingabe und Ausgabe eines Hopfieldnetzes werden durch<br />
Neuronenzustände repräsentiert<br />
Wir haben gelernt, dass das Netz, also die Menge der |K| vielen Teilchen, von einem<br />
Zustand aus selbsttätig ein Minimum sucht. Ein Inputmuster eines Hopfieldnetzes ist<br />
genau so ein Zustand: Ein Binärstring x ∈ {−1, 1} |K| , welcher die Neurone initialisiert.<br />
Das Netz sucht dann zur Eingabe das Minimum auf seiner Energieoberfläche (das wir<br />
vorher durch Eingabe von Trainingsbeispielen selbst definiert haben).<br />
Woher wissen wir nun, dass das Minimum gefunden ist? Auch das ist einfach: Wenn<br />
das Netz stillsteht. Man kann beweisen, dass ein Hopfieldnetz mit symmetrischer Gewichtsmatrix<br />
und Nullen in der Diagonale immer konvergiert [CG88] , es wird also<br />
irgendwann still stehen. Die Ausgabe ist dann ein Binärstring y ∈ {−1, 1} |K| , nämlich<br />
die Zustandszeichenkette des <strong>Netze</strong>s, das ein Minimum gefunden hat.<br />
Betrachten wir nun die Inhalte der Gewichtsmatrix und die Regeln für den Zustandswechsel<br />
der Neurone etwas genauer.<br />
Definition 8.3 (Eingabe und Ausgabe eines Hopfieldnetzes). Die Eingabe in ein<br />
Hopfieldnetz ist ein Binärstring x ∈ {−1, 1} |K| , welcher den Netzzustand initialisiert.<br />
Nach erfolgter Konvergenz des <strong>Netze</strong>s ist der aus dem neuen Netzzustand erzeugte<br />
Binärstring y ∈ {−1, 1} |K| die Ausgabe.<br />
8.2.2 Bedeutung der Gewichte<br />
Wir haben gesagt, dass die Neurone ihre Zustände, also ihre Ausrichtung von −1<br />
nach 1 oder umgekehrt ändern. Diese Drehungen finden abhängig von den aktuellen<br />
Zuständen der anderen Neurone und von den Gewichten zu diesen statt. Die Gewichte<br />
sind also in der Lage, die Gesamtveränderung des <strong>Netze</strong>s zu steuern. Die Gewichte<br />
können positiv, negativ oder 0 sein. Hierbei gilt umgangsprachlich für ein Gewicht wi,j<br />
zwischen zwei Neuronen i und j:
Ist wi,j positiv, versucht es die beiden Neurone zur Gleichheit zu zwingen, je größer<br />
wi,j, desto stärker ist der Zwang. Wenn das Neuron i den Zustand 1 hat, das<br />
Neuron j aber den Zustand −1, vermittelt ein hohes positives Gewicht den beiden<br />
Neuronen, dass es energetisch günstiger ist, wenn sie gleich sind.<br />
Ist wi,j negativ, verhält es sich analog, nur werden hier i und j zur Unterschiedlichkeit<br />
gedrängt. Ein Neuron i mit Zustand −1 würde versuchen, ein Neuron j in den<br />
Zustand 1 zu drängen.<br />
Null-Gewichte sorgen dafür, dass sich die beiden beteiligten Neurone nicht beeinflussen.<br />
Die Gesamtheit der Gewichte beschreibt also offensichtlich den Weg zum nächsten<br />
Minimum der Energiefunktion vom aktuellen Netzzustand aus – wir wollen nun untersuchen,<br />
auf welche Weise die Neurone diesen Weg einschlagen.<br />
8.2.3 Ein Neuron wechselt den Zustand anhand des Einflusses der<br />
anderen Neurone<br />
Die Funktionsweise des einmal trainierten und mit einem Anfangszustand initialisierten<br />
<strong>Netze</strong>s liegt darin, die Zustände xk der einzelnen Neurone k nach dem Schema<br />
⎛<br />
xk(t) = fact ⎝ <br />
⎞<br />
wj,k · xj(t − 1) ⎠ (8.1)<br />
j∈K<br />
mit jedem Zeitschritt zu ändern, wobei die Funktion fact in aller Regel die binäre<br />
Schwellenwert-Funktion (Abb. 8.2 auf der rechten Seite) mit Schwellenwert 0 ist. Umgangssprachlich:<br />
Ein Neuron k berechnet die Summe der wj,k · xj(t − 1), die angibt,<br />
wie stark und in welche Richtung das Neuron k von den anderen Neuronen j gedrängt<br />
wird. Der neue Zustand des <strong>Netze</strong>s (Zeitpunkt t) ergibt sich also aus dem Netzzustand<br />
zum vorherigen Zeitpunkt t − 1. Die Summe ergibt dann die Gesamtrichtung, in die<br />
das Neuron k gedrängt wird. Je nach Vorzeichen der Summe nimmt das Neuron den<br />
Zustand 1 oder −1 an.<br />
Ein weiterer Unterschied der Hopfieldnetze zu anderen Netztopologien, welche wir<br />
bereits kennengelernt haben, ist das asynchrone Update: Es wird jedes mal ein Neuron k<br />
zufällig gewählt, welches dann die Aktivierung neu errechnet. Die neuen Aktivierungen<br />
der jeweils vorher geänderten Neurone nehmen also direkt Einfluss, ein Zeitschritt<br />
bezeichnet also die Änderung eines einzigen Neurons.<br />
Ungeachtet der hier beschriebenen zufälligen Wahl des Neurons findet die Implementierung<br />
eines Hopfieldnetzes oft einfacher statt: die Neurone werden einfach nacheinander
f(x)<br />
1<br />
0.5<br />
0<br />
−0.5<br />
−1<br />
Heaviside−Funktion<br />
−4 −2 0 2 4<br />
Abbildung 8.2: Darstellung der binären Schwellenwertfunktion.<br />
durchgegangen und deren Aktivierungen neu berechnet – so lange, bis sich nichts mehr<br />
ändert.<br />
Definition 8.4 (Zustandswechsel eines Hopfieldnetzes). Der Zustandswechsel der<br />
Neurone findet asynchron statt, wobei das zu aktualisierende Neuron jeweils zufällig<br />
bestimmt wird und der neue Zustand durch die Vorschrift<br />
⎛<br />
xk(t) = fact ⎝ <br />
⎞<br />
wj,k · xj(t − 1) ⎠<br />
gebildet wird.<br />
j∈K<br />
Nachdem wir jetzt wissen, wie die Gewichte die Zustandsänderungen der Neurone beeinflussen<br />
und das gesamte Netz in Richtung eines Minimums treiben, ist nun noch die<br />
Frage offen, wie man den Gewichten beibringt, das Netz in Richtung eines bestimmten<br />
Minimums zu treiben.<br />
8.3 Die Gewichtsmatrix wird direkt anhand der<br />
Trainingsbeispiele erzeugt<br />
Es ist das Ziel, Minima auf der genannten Energieoberfläche zu erzeugen, in die das<br />
Netz bei einer Eingabe konvergiert. Wie schon bei vielen anderen Netzparadigmen,<br />
verwenden wir hier wieder eine Menge P von Mustereingaben p ∈ {1, −1} |K| , die die<br />
Minima unserer Energieoberfläche darstellen.<br />
x
Im Unterschied zu vielen anderen Netzparadigmen suchen wir hier nicht die Minima<br />
einer uns unbekannten Fehlerfunktion, sondern definieren uns selbst Minima auf einer<br />
solchen – mit dem Zweck, dass das Netz das naheliegendste Minimum von selbst<br />
annehmen soll, wenn man ihm eine Eingabe präsentiert. Dies ist für uns erst einmal<br />
ungewohnt – den Sinn und Zweck werden wir aber noch verstehen.<br />
Das Training eines Hopfieldnetzes spielt sich grob gesagt so ab, dass man jedes Trainingsmuster<br />
genau einmal mit der im Folgenden beschriebenen Vorschrift trainiert<br />
(Single Shot Learning), wobei pi und pj die Zustände der Neurone i und j in dem<br />
Beispiel p ∈ P sind:<br />
wi,j = <br />
pi · pj<br />
p∈P<br />
Hieraus ergibt sich dann die Gewichtsmatrix W . Umgangssprachlich: Wir initialisieren<br />
das Netz mit einem Trainingsmuster, und gehen dann alle Gewichte wi,j durch. Für<br />
jedes dieser Gewichte schauen wir: Sind die Neurone i, j im gleichen Zustand oder sind<br />
die Zustände unterschiedlich? Im ersten Fall addieren wir 1 zum Gewicht, im zweiten<br />
Fall −1.<br />
Dies machen wir für alle Trainingsmuster p ∈ P . Zum Schluss haben also Gewichte<br />
wi,j hohe Werte, wenn i und j bei vielen Trainingsmustern übereingestimmt haben.<br />
Der hohe Wert sagt diesen Neuronen umgangssprachlich: „Es ist sehr oft energetisch<br />
günstig, wenn ihr den gleichen Zustand innehabt“. Entsprechendes gilt für negative<br />
Gewichte.<br />
Durch dieses Training können wir also eine gewisse feste Anzahl Muster p in der Gewichtsmatrix<br />
abspeichern. Das Netz wird dann bei einer Eingabe x zu dem abgespeicherten<br />
Muster konvergieren, dass der Eingabe p am nächsten liegt.<br />
Leider ist die Zahl der maximal speicherbaren und rekonstruierbaren Muster p auf<br />
(8.2)<br />
|P |MAX ≈ 0.139 · |K| (8.3)<br />
beschränkt, was auch wiederum nur für orthogonale Muster gilt. Dies wurde durch<br />
genaue (und aufwändige) mathematische Analysen gezeigt, auf die wir jetzt nicht<br />
eingehen wollen. Gibt man mehr Muster als diese Anzahl ein, zerstört man bereits<br />
gespeicherte Informationen.<br />
Definition 8.5 (Lernregel für Hopfieldnetze). Die einzelnen Elemente der Gewichtsmatrix<br />
W werden durch das einmalige Ausführen der Lernregel<br />
wi,j = <br />
pi · pj<br />
p∈P
estimmt, wobei die Diagonale der Matrix mit Nullen belegt ist. Hierbei können nicht<br />
mehr als |P |MAX ≈ 0.139 · |K| Trainingsbeispiele funktionserhaltend trainiert werden.<br />
Wir haben nun die Funktionalität von Hopfieldnetzen kennen gelernt, jedoch noch<br />
nicht ihren praktischen Nährwert.<br />
8.4 Autoassoziation und traditionelle Anwendung<br />
Hopfieldnetze, wie sie oben beschrieben wurden, sind sogenannte Autoassoziatoren.<br />
Ein Autoassoziator a legt genau das oben beschriebene Verhalten an den Tag: Erstens<br />
gibt er bei Eingabe eines bekannten Musters p genau dieses bekannte Muster wieder<br />
aus, es gilt also<br />
a(p) = p,<br />
wobei a die Assoziator-Abbildung ist. Zum Zweiten, und genau hier liegt der Nährwert<br />
des Ganzen, funktioniert das auch mit Eingaben, die in der Nähe von einem Muster<br />
liegen:<br />
a(p + ε) = p.<br />
Der Autoassoziator ist hinterher in jedem Fall in einem stabilen Zustand, nämlich im<br />
Zustand p.<br />
Nimmt man als Mustermenge P beispielsweise Buchstaben oder sonstige Schriftzeichen<br />
in Pixelform, so wird das Netz in der Lage sein, deformierte oder verrauschte<br />
Buchstaben mit hoher Wahrscheinlichkeit richtig zu erkennen (Abb. 8.3 auf der folgenden<br />
Seite).<br />
Anwendung von Hopfieldnetzen sind daher prinzipiell Mustererkennung und Mustervervollständigung,<br />
so zum Beispiel Ende der 1980er Jahre die Erkennung von Postleitzahlen<br />
auf Briefen. Bald sind die Hopfieldnetze aber in den meisten ihrer Anwendungsgebiete<br />
von anderen Systemen überholt worden, so in der Buchstabenerkennung<br />
von modernen OCR-Systemen. Heute werden Hopfieldnetze so gut wie überhaupt nicht<br />
mehr verwendet, sie haben sich nicht durchgesetzt.<br />
8.5 Heteroassoziation und Analogien zur neuronalen<br />
Datenspeicherung<br />
Bis jetzt haben wir Hopfieldnetze kennengelernt, die für eine beliebige Eingabe in das<br />
naheliegendste Minimum einer statischen Energieoberfläche konvergieren.
Abbildung 8.3: Darstellung der Konvergenz eines beispielhaften Hopfieldnetzes. Jedes der Bilder<br />
hat 10 × 12 = 120 binäre Pixel. Jeder Pixel entspricht im Hopfieldnetz einem Neuron. Oben sind<br />
die Trainingsbeispiele abgebildet, unten die Konvergenz einer stark verrauschten 3 zum korrespondierenden<br />
Trainingsbeispiel.
Eine weitere Variante wäre eine dynamische Energieoberfläche: Hier sieht die Energieoberfläche<br />
je nach aktuellem Zustand anders aus und wir erhalten keinen Autoassoziator<br />
mehr, sondern einen Heteroassoziator. Für einen Heteroassoziator gilt nicht mehr<br />
sondern vielmehr<br />
a(p + ε) = p,<br />
h(p + ε) = q,<br />
was bedeutet, dass ein Muster auf ein anderes abgebildet wird. h ist die<br />
Heteroassoziator-Abbildung. Man erreicht solche Heteroassoziationen durch eine<br />
asymmetrische Gewichtsmatrix V .<br />
Durch hintereinandergeschaltete Heteroassoziationen der Form<br />
h(p + ε) = q<br />
h(q + ε) = r<br />
h(r + ε) = s<br />
.<br />
h(z + ε) = p<br />
wird es möglich, einen schnellen Zustandsdurchlauf<br />
p → q → r → s → . . . → z → p<br />
zu provozieren, wobei ein einzelnes Muster aber niemals vollständig angenommen wird:<br />
Bevor ein Muster vollständig zustandegekommen ist, versucht die Heteroassoziation ja<br />
bereits, dessen Nachfolger zu erzeugen. Außerdem würde unser Netz nie zum Stillstand<br />
kommen, da es ja nach Erreichen des letzten Zustands z wieder zum ersten Zustand p<br />
übergeht.<br />
8.5.1 Erzeugung der Heteroassoziationsmatrix<br />
Wir erzeugen die Matrix V mit Elementen v sehr ähnlich der Autoassoziationsmatrix,<br />
wobei (pro Übergang) p das Trainingsbeispiel vor dem Übergang ist und q das aus p<br />
zu erzeugende Trainingsbeispiel:<br />
vi,j = <br />
p,q∈P,p=q<br />
piqj<br />
(8.4)
Die Diagonale der Matrix ist wieder mit Nullen belegt. Die Adaption der Neuronenzustände<br />
erfolgt im laufenden Betrieb, wie gehabt. Mehrere Übergänge können einfach<br />
durch Aufsummierung in die Matrix eingebracht werden, wobei auch hier wieder die<br />
genannte Begrenzung gegeben ist.<br />
Definition 8.6 (Lernregel für Heteroassoziationsmatrix). Für zwei Trainingsbeispiele<br />
p als Vorgänger und q als Nachfolger eines Heteroassoziationsübergangs ergeben sich<br />
die Gewichte der Heteroassoziationsmatrix V durch die Lernregel<br />
vi,j = <br />
p,q∈P,p=q<br />
piqj,<br />
wobei sich mehrere Heteroassoziationen durch einfache Aufsummierung in ein Netz<br />
einbringen lassen.<br />
8.5.2 Stabilisierung der Heteroassoziationen<br />
Wir haben oben das Problem angesprochen, dass die Muster nicht vollständig erzeugt<br />
werden, sondern schon vor Ende der Erzeugung bereits das nächste Muster in Angriff<br />
genommen wird.<br />
Dieses Problem kann umgangen werden, indem das Netz nicht nur durch die Heteroassoziationsmatrix<br />
V beeinflusst wird, sondern zusätzlich durch die bereits bekannte<br />
Autoassoziationsmatrix W .<br />
Zusätzlich wird die Neuronenadaptionsregel so verändert, dass konkurrierende Terme<br />
entstehen: Einer, der ein vorhandenes Muster autoassoziiert, und einer, der versucht,<br />
eben dieses Muster in seinen Nachfolger umzuwandeln. Die Assoziationsregel bewirkt<br />
hierbei, dass das Netz ein Muster stabilisiert, dort eine Weile bleibt, zum nächsten<br />
Muster übergeht, und so weiter.<br />
xi(t + 1) = (8.5)<br />
⎛<br />
⎞<br />
⎜ <br />
fact<br />
⎜ wi,jxj(t)<br />
⎝j∈K<br />
<br />
Autoassoziation<br />
+ <br />
⎟<br />
vi,kxk(t − ∆t) ⎟<br />
k∈K<br />
⎠<br />
<br />
Heteroassoziation<br />
Der Wert ∆t bewirkt hierbei anschaulich gesprochen, dass der Einfluss der Matrix V<br />
verzögert eintritt, da sie sich nur auf eine um ∆t zurückliegende Version des <strong>Netze</strong>s<br />
bezieht. Hierdurch ergibt sich ein Zustandswechsel, in dem die einzelnen Zustände aber
zwischendurch für kurze Zeit stabil sind. Setzen wir ∆t auf z.B. zwanzig Schritte, so bekommt<br />
die asymmetrische Gewichtsmatrix jegliche Veränderung im Netz erst zwanzig<br />
Schritte später mit, so dass sie zunächst mit der Autoassoziationsmatrix zusammenarbeitet<br />
(da sie noch das Vorgängermuster vom aktuellen wahrnimmt) und erst später<br />
gegen sie.<br />
8.5.3 Biologische Motivation der Heteroassoziation<br />
Die Übergänge von stabilen in andere stabile Zustände sind hierbei biologisch stark<br />
motiviert: Es gab zumindest Anfang der 1990er Jahre Vermutungen, dass mit dem<br />
Hopfieldmodell eine Näherung der Zustandsdynamik im Gehirn erreicht wird, welches<br />
vieles durch Zustandsketten realisiert: Wenn ich Sie, lieber Leser, nun bitte, das Alphabet<br />
aufzusagen, werden Sie das in der Regel wesentlich besser schaffen als mir (bitte<br />
sofort versuchen) die Frage zu beantworten:<br />
Welcher Buchstabe folgt im Alphabet auf den Buchstaben P ?<br />
Ein anderes Beispiel ist das Phänomen, dass man etwas vergisst, jedoch den Ort noch<br />
kennt, an dem man zuletzt daran gedacht hat. Geht man nun an diesen Ort zurück,<br />
fällt einem das Vergessene oftmals wieder ein.<br />
8.6 Kontinuierliche Hopfieldnetze<br />
Bis jetzt haben wir nur Hopfieldnetze mit binären Aktivierungen erforscht. Hopfield beschrieb<br />
aber auch eine Version seiner <strong>Netze</strong> mit kontinuierlichen Aktivierungen [Hop84],<br />
die wir zumindest kurz anschauen wollen: kontinuierliche Hopfieldnetze. Hier wird<br />
die Aktivierung nicht mehr durch die binäre Schwellenwertfunktion berechnet, sondern<br />
durch die Fermifunktion mit Temperaturparameter (Abb. 8.4 auf der folgenden<br />
Seite).<br />
Auch hier ist das Netz für symmetrische Gewichtsmatrizen mit Nullen auf der Diagonalen<br />
stabil.<br />
Hopfield selbst nennt als Anwendungsbeispiel für kontinuierliche Hopfieldnetze, recht<br />
gute Lösungen für das NP-harte Travelling Salesman Problem zu finden [HT85]. Nach<br />
einem in [Zel94] beschriebenen Feldversuch kann dieses Statement aber nicht ohne<br />
weiteres aufrecht erhalten werden. Es gibt heute aber ohnehin schnellere Algorithmen,<br />
um gute Lösungen für dieses Problem zu finden, weswegen das Hopfieldnetz auch hier<br />
keine Anwendung mehr finden kann.
f(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
Fermi−Funktion mit Temperaturparameter<br />
−4 −2 0 2 4<br />
Abbildung 8.4: Die bereits bekannte Fermifunktion mit verschiedenen Variationen des<br />
Temperaturparameters.<br />
Übungsaufgaben<br />
Aufgabe 15. Geben Sie den Speicherbedarf für ein Hopfieldnetz mit |K| = 1000<br />
Neuronen an, wenn die Gewichte wi,j als ganze Zahlen gespeichert werden sollen. Kann<br />
der Wertebereich der Gewichte eingegrenzt werden, um Speicher zu sparen?<br />
Aufgabe 16. Berechnen Sie die Gewichte wi,j für ein Hopfieldnetz unter Verwendung<br />
der Trainingsmenge<br />
P ={(−1, −1, −1, −1, −1, 1);<br />
(−1, 1, 1, −1, −1, −1);<br />
(1, −1, −1, 1, −1, 1)}.<br />
x
Kapitel 9<br />
Learning Vector Quantization<br />
Learning Vector Quantization ist ein Lernverfahren mit dem Ziel, in<br />
vordefinierte Klassen unterteilte Trainingsmengen von Vektoren durch wenige<br />
Repräsentanten-Vektoren möglichst gut wiederzugeben. Ist dies geschafft, so<br />
ist eine einfache Zuordnung bis dato unbekannter Vektoren in eine dieser<br />
Klassen möglich.<br />
Allmählich neigt sich Teil II dieser Arbeit dem Ende entgegen – und so möchte ich auch<br />
ein Kapitel für den Abschluss dieses Teils schreiben, welches einen schönen Übergang<br />
darstellt: Ein Kapitel über die von Teuvo Kohonen beschriebene Learning Vector<br />
Quantization (Kurz: LVQ) [Koh89], welche man als verwandt mit den Self Organizing<br />
Feature Maps bezeichnen kann. Diese werden direkt im Anschluss beschrieben,<br />
nämlich im nächsten Kapitel, welches sich bereits in Teil III der Arbeit befindet, da<br />
SOMs unüberwacht lernen. Ich möchte also nach der Untersuchung von LVQ Abschied<br />
vom überwachten Lernen nehmen.<br />
Gleich im Voraus möchte ich ankündigen, dass es verschiedene Variationen von LVQ<br />
gibt, die ich zwar erwähnen, aber nicht genau darstellen werde – es ist mehr das Ziel<br />
dieses Kapitels, das zugrundeliegende Prinzip zu erforschen.<br />
9.1 Über Quantisierung<br />
Um die Learning Vector Quantization zu erforschen, sollten wir uns zunächst klarmachen,<br />
was denn Quantization, zu Deutsch Quantisierung ist, die man auch mit<br />
Diskretisierung bezeichnen kann.<br />
173
Jeder von uns kennt den diskreten Zahlenraum<br />
N = {1, 2, 3, . . .},<br />
in dem die natürlichen Zahlen liegen. Diskret bedeutet, dass dieser Raum aus voneinander<br />
abgetrennten Elementen besteht, die nicht miteinander verbunden sind. In<br />
unserem Beispiel sind diese Elemente eben diese Zahlen, denn in den natürlichen Zahlen<br />
gibt es ja beispielsweise keine Zahl zwischen 1 und 2. Kontinuierlich ist dagegen<br />
beispielsweise der Raum der reellen Zahlen R: Egal, wie nah man daraus zwei Zahlen<br />
wählt, es wird immer eine Zahl zwischen ihnen geben.<br />
Quantisierung bedeutet nun die Unterteilung eines kontinuierlichen Raums in diskrete<br />
Abschnitte: Indem man der reellen Zahl 2.71828 beispielsweise alle Nachkommastellen<br />
entfernt, könnte man diese Zahl der natürlichen Zahl 2 zuweisen. Hierbei ist klar, dass<br />
jede andere Zahl mit einer 2 vor dem Komma ebenfalls der natürlichen Zahl 2 zugewiesen<br />
würde, die 2 wäre also eine Art Repräsentant für alle reellen Zahlen im Intervall<br />
[2; 3).<br />
Zu beachten ist, dass wir einen Raum auch unregelmäßig quantisieren können: So wäre<br />
der Zeitstrahl einer Woche beispielsweise in Arbeitstage und Wochenende quantisierbar.<br />
Ein Spezialfall der Quantisierung ist die Digitalisierung: Im Fall der Digitalisierung<br />
sprechen wir immer von einer gleichmäßigen Quantisierung eines kontinuierlichen<br />
Raums in ein Zahlensystem zu einer bestimmten Basis. Geben wir beispielsweise Zahlen<br />
in den Computer ein, werden diese in das Binärsystem (Basis 2) digitalisiert.<br />
Definition 9.1 (Quantisierung). Unterteilung eines kontinuierlichen Raums in diskrete<br />
Abschnitte.<br />
Definition 9.2 (Digitalisierung). Gleichmäßige Quantisierung.<br />
9.2 LVQ unterteilt den Eingaberaum in separate Bereiche<br />
Nun können wir schon fast anhand des Namens beschreiben, was LVQ uns ermöglichen<br />
soll: Es soll einen Eingaberaum durch eine Menge von repräsentativen Vektoren in<br />
Klassen unterteilen, die ihn möglichst gut wiedergeben (Abb. 9.1 auf der rechten Seite).<br />
Jedes Element des Eingaberaums soll also einem Vektor als Repräsentanten, also einer<br />
Klasse zugeordnet werden können, wobei die Menge dieser Repräsentanten den ganzen<br />
Eingaberaum möglichst genau repräsentieren soll. Einen solchen Vektor nennt man<br />
Codebookvektor. Ein Codebookvektor ist dann der Repräsentant genau derjenigen
Abbildung 9.1: Beispielquantisierungen eines zweidimensionalen Eingaberaums. Die Linien stellen<br />
die Klassengrenzen dar, die × markieren die Codebookvektoren.<br />
Vektoren des Eingaberaums, die am nächsten bei ihm liegen, was den Eingaberaum in<br />
besagte diskrete Bereiche unterteilt.<br />
Hervorzuheben ist, dass wir im Voraus wissen müssen, wieviele Klassen wir haben und<br />
welches Trainingsbeispiel zu welcher Klasse gehört. Weiter ist wichtig, dass die Klassen<br />
nicht disjunkt sein müssen, sie dürfen sich also überlappen.<br />
Solche Unterteilungen der Daten in Klassen sind interessant bei vielen Problemstellungen,<br />
bei denen es nützlich ist, anstatt der unter Umständen riesigen Ursprungsmenge<br />
von Daten nur ein paar typische Vertreter zu betrachten – sei es, weil es weniger Aufwand<br />
ist, oder weil es an Genauigkeit einfach genügt.<br />
9.3 Benutzung von Codebookvektoren: Der nächste gewinnt<br />
Die Benutzung eines einmal angefertigten Satzes Codebookvektoren ist sehr einfach:<br />
Für einen Eingabevektor y entscheidet man die Klassenzugehörigkeit ganz einfach<br />
daran, welcher Codebookvektor am nächsten zu ihm liegt – die Codebookvektoren bilden<br />
also ein Voronoidiagramm in unserer Eingabemenge. Da jeder Codebookvektor
eindeutig einer Klasse zuzuordnen ist, ist hierdurch jeder Eingabevektor einer Klasse<br />
zugeordnet.<br />
9.4 Ausrichtung der Codebookvektoren<br />
Wie wir schon angedeutet haben, handelt es sich bei LVQ um ein überwachtes Lernverfahren.<br />
Wir besitzen also einen Teaching Input, der dem Lernverfahren sagt, ob ein<br />
Eingangsmuster richtig oder falsch klassifiziert wurde: Anders ausgedrückt müssen wir<br />
bereits im Vorhinein die Anzahl der zu repräsentierenden Klassen bzw. die Anzahl der<br />
Codebookvektoren kennen.<br />
Das Ziel des Lernvorganges ist also grob gesprochen, dass wir eine im Vorhinein bestimmte<br />
Anzahl zufällig initialisierter Codebookvektoren durch Trainingsbeispiele dazu<br />
bringen, die Trainingsdaten möglichst gut wiederzuspiegeln.<br />
9.4.1 Vorgehensweise beim Lernen<br />
Das Lernen funktioniert nach einem einfachen Schema. Man besitzt (da das Lernen<br />
überwacht ist) eine Menge P von |P | vielen Trainingsbeispielen. Wie wir außerdem<br />
schon wissen, sind auch die Klassen vordefiniert, man besitzt also weiterhin eine Klassenmenge<br />
C. Jeder Klasse ist ein Codebookvektor eindeutig zugeordnet, wir können<br />
also sagen, dass die Klassenmenge |C| viele Codebookvektoren C1, C2, . . . , C |C| enthält.<br />
Dies führt uns zum Aufbau der Trainingsbeispiele: Sie sind von der Form (p, c), enthalten<br />
also zum einen den Trainings-Eingabevektor p und zum anderen dessen Klassenzugehörigkeit<br />
c. Für die Klassenzugehörigkeit gilt hierbei<br />
c ∈ {1, 2, . . . , |C|},<br />
sie ordnet also das Trainingsbeispiel eindeutig einer Klasse bzw. einem Codebookvektor<br />
zu.<br />
Intuitiv könnte man zum Lernen nun sagen: „Wozu ein Lernverfahren? Wir rechnen<br />
den Durchschnitt aller Klassenmitglieder aus, platzieren dort deren Codebookvektor<br />
und gut.“ Dass unser Lernverfahren aber wesentlich mehr macht, werden wir gleich<br />
sehen.<br />
Wir wollen nun kurz die Schritte des grundsätzlichen LVQ-Lernverfahrens betrachten:
Initialisierung: Wir platzieren unseren Satz Codebookvektoren auf zufällige Orte im<br />
Eingaberaum.<br />
Trainingsbeispiel: Ein Trainingsbeispiel p aus unserer Trainingsmenge P wird gewählt<br />
und präsentiert.<br />
Abstandsmessung: Wir messen den Abstand ||p − C|| aller Codebookvektoren<br />
C1, C2, . . . , C |C| zu unserer Eingabe p.<br />
Gewinner: Der naheliegendste Codebookvektor gewinnt, also derjenige mit<br />
min ||p − Ci||.<br />
Ci∈C<br />
Lernvorgang: Der Lernvorgang findet durch die Regel<br />
∆Ci = η(t) · h(p, Ci) · (p − Ci) (9.1)<br />
Ci(t + 1) = Ci(t) + ∆Ci<br />
statt, die wir nun aufschlüsseln wollen.<br />
⊲ Der erste Faktor η(t) ist, wie wir schon oft gesehen haben, eine zeitabhängige<br />
Lernrate, die es uns ermöglicht, zwischen großen Lernschritten und Fine-Tuning<br />
zu differenzieren.<br />
⊲ Der letzte Faktor (p − Ci) ist offensichtlich die Richtung, in die wir den Codebookvektor<br />
verschieben.<br />
⊲ Kernstück aber ist die Funktion h(p, Ci): Sie trifft eine Fallunterscheidung.<br />
Zuweisung richtig: Der Gewinnervektor ist der Codebookvektor der Klasse, der<br />
p zugehörig ist. In diesem Fall liefert die Funktion positive Werte, der Codebookvektor<br />
bewegt sich auf das p zu.<br />
Zuweisung falsch: Der Gewinnervektor repräsentiert nicht die Klasse, der p zugehörig<br />
ist. Er bewegt sich daher von p weg.<br />
Wir sehen, dass wir die Funktion h nicht genau definiert haben. Aus gutem Grund:<br />
Ab hier teilt sich LVQ in verschiedene Nuancen auf, abhängig davon wie exakt h<br />
und die Lernrate bestimmt sein sollen (genannt LVQ1, LVQ2, LVQ3, OLVQ, etc).<br />
Die Unterschiede liegen beispielsweise in der Stärke der Codebookvektor-Bewegungen.<br />
Sie haben aber alle das gleiche hier dargestellte Grundprinzip gemeinsam, und wie<br />
angekündigt möchte ich sie nicht weiter betrachten – insofern schreibe ich auch keine<br />
formalen Definitionen zu obiger Lernregel und LVQ an sich auf.<br />
(9.2)
9.5 Verbindung zu <strong>Neuronale</strong>n <strong>Netze</strong>n<br />
Bis jetzt kann man sich trotz des Lernvorganges fragen, was denn LVQ mit <strong>Neuronale</strong>n<br />
<strong>Netze</strong>n zu tun hat. Man kann die Codebookvektoren als Neuronen mit festem Ort im<br />
Inputraum ansehen, ähnlich wie bei RBF-<strong>Netze</strong>n. Zudem ist es in der Natur oft so, dass<br />
ein Neuron pro Gruppe feuern darf (ein Gewinnerneuron, hier ein Codebookvektor),<br />
während alle anderen von ihm inhibiert werden.<br />
Ich setze das kurze Kapitel über Learning Vector Quantization an diese Stelle im Script,<br />
weil wir im folgenden Kapitel über Self Organizing Maps den Ansatz weiterverfolgen<br />
wollen: Wir werden weitere Eingaben mithilfe von im Eingangsraum verteilten Neuronen<br />
klassifizieren, nur, dass wir diesmal nicht wissen, welche Eingabe zu welcher Klasse<br />
gehört.<br />
Kommen wir nun zu den unüberwacht lernenden <strong>Netze</strong>n!<br />
Übungsaufgaben<br />
Aufgabe 17. Geben Sie eine Quantisierung an, die im 5-dimensionalen Einheitswürfel<br />
H alle Vektoren H ∈ H gleichmäßig in eine von 1024 Klassen einteilt.
Teil III<br />
Unüberwacht lernende<br />
Netzparadigmen<br />
179
Kapitel 10<br />
Self Organizing Feature Maps<br />
Ein Paradigma unüberwacht lernender <strong>Neuronale</strong>r <strong>Netze</strong>, welches einen<br />
Eingaberaum durch seine feste Topologie kartographiert und so selbstständig<br />
nach Ähnlichkeiten sucht. Funktion, Lernverfahren, Variationen und<br />
<strong>Neuronale</strong>s Gas.<br />
Betrachtet man die Konzepte biologischer <strong>Neuronale</strong>r <strong>Netze</strong> in der Einleitung, so kann<br />
man sich die Frage stellen, wie denn unser Gehirn die Eindrücke, die es täglich erhält,<br />
speichert und abruft – hier sei hervorgehoben, dass das Gehirn keine Trainingsbeispiele,<br />
also keine „gewünschte Ausgabe“ hat, und wo wir schon darüber nachdenken, merken<br />
wir, dass auch keine Ausgabe in diesem Sinne vorhanden ist: Unser Gehirn ist nicht<br />
wie eine Abbildung oder ein Perceptron, das Eingabewerte auf Ausgabewerte abbildet.<br />
Unser Gehirn reagiert auf Eingaben von außen mit Zustandsänderungen – diese sind<br />
sozusagen seine Ausgabe.<br />
Basierend auf diesem Grundsatz und der Frage nachgehend, wie biologische <strong>Neuronale</strong><br />
<strong>Netze</strong> sich selbst organisieren können, schuf Teuvo Kohonen in den 1980er Jahren<br />
seine Self Organizing Feature Maps [Koh82,Koh98], kurz Self Organizing Maps oder<br />
SOMs genannt – ein Paradigma <strong>Neuronale</strong>r <strong>Netze</strong>, in dem der Zustand des <strong>Netze</strong>s<br />
die Ausgabe ist, und das vollkommen unüberwacht, also ohne Teacher lernt.<br />
Im Unterschied zu anderen Netzparadigmen, welche wir bereits kennengelernt haben,<br />
stellt man bei SOMs keine Fragen danach, was die Neurone berechnen – man fragt<br />
nur, welches Neuron gerade aktiv ist. Dies ist biologisch sehr gut motiviert: Sind in<br />
der Biologie Neurone mit bestimmten Muskeln verbunden, interessiert es in aller Regel<br />
weniger, wie stark ein bestimmter Muskel kontrahiert wird, sondern welcher Muskel angesteuert<br />
wird. Anders ausgedrückt: Es interessiert nicht, was genau Neurone ausgeben,<br />
sondern welches Neuron etwas ausgibt. SOMs sind also wesentlich biologieverwandter<br />
als z.B. die FeedForward-<strong>Netze</strong>, die wir vermehrt für Rechenaufgaben nutzen.<br />
181
10.1 Aufbau einer Self Organizing Map<br />
SOMs haben – wie das Gehirn – typischerweise die Aufgabe, einen hochdimensionalen<br />
Input (N Dimensionen) auf Bereiche in einem niedrigdimensionalen Gitter (G Dimensionen)<br />
abzubilden, also sozusagen eine Karte von dem hochdimensionalen Raum zu<br />
zeichnen. Um diese Karte zu erschaffen, erhält die SOM einfach beliebig viele Punkte<br />
aus dem Inputraum. Die SOM wird während der Eingabe der Punkte versuchen,<br />
die Orte, auf denen die Punkte auftreten, so gut wie möglich mit ihren Neuronen abzudecken.<br />
Dies bedeutet insbesondere, dass jedes Neuron einem bestimmten Ort im<br />
Inputraum zuzuordnen ist.<br />
Diese Fakten sind zunächst etwas verwirrend, man muss sie kurz durchdenken. Es gibt<br />
also zwei Räume, in denen SOMs arbeiten:<br />
⊲ Den N-dimensionalen Eingaberaum und<br />
⊲ das G-dimensionale Gitter, auf dem die Neurone liegen bzw. das die Nachbarschaftsbeziehungen<br />
der Neurone und damit die Netztopologie angibt.<br />
Bei einem eindimensionalen Gitter könnten die Neurone beispielweise wie an einer Perlenkette<br />
aufgereiht sein, jedes Neuron würde genau zwei Nachbarn besitzen (bis auf<br />
die beiden End-Neurone). Ein zweidimensionales Gitter könnte eine rechtwinklige Anordnung<br />
von Neuronen sein (Abb. 10.1 auf der rechten Seite). Eine weitere denkbare<br />
Anordnung im zweidimensionalen wäre in einer Art Wabenform. Auch ungleichmäßige<br />
Topologien sind möglich, wenn auch nicht sehr häufig. Topologien mit mehr Dimensionen<br />
und wesentlich mehr Nachbarschaftsbeziehungen wären auch denkbar, werden<br />
aber aufgrund der mangelnden Visualisierungsfähigkeit nicht oft eingesetzt.<br />
Auch dann, wenn N = G gilt, sind die beiden Räume nicht gleich und müssen unterschieden<br />
werden – sie haben in diesem Spezialfall nur die gleiche Dimension.<br />
Wir werden die Funktionsweise einer Self Organizing Map nun zunächst kurz formal<br />
betrachten und dann an einigen Beispielen klarmachen.<br />
Definition 10.1 (SOM-Neuron). Ähnlich den Neuronen in einem RBF-Netz besitzt<br />
ein SOM-Neuron k eine feste Position ck (ein Zentrum) im Eingaberaum.<br />
Definition 10.2 (Self Organizing Map). Eine Self Organizing Map ist eine Menge K<br />
von SOM-Neuronen. Bei Eingabe eines Eingabevektors wird genau dasjenige Neuron<br />
k ∈ K aktiv, welches dem Eingabemuster im Eingaberaum am nächsten liegt. Die<br />
Dimension des Eingaberaumes nennen wir N.
Abbildung 10.1: Beispieltopologien einer Self Organizing Map – Oben eine eindimensionale Topologie,<br />
unten eine zweidimensionale.<br />
Definition 10.3 (Topologie). Die Neurone sind untereinander durch Nachbarschaftsbeziehungen<br />
verbunden. Diese Nachbarschaftsbeziehungen nennen wir Topologie. Die<br />
Topologie nimmt starken Einfluss auf das Training einer SOM. Sie wird durch die<br />
Topologiefunktion h(i, k, t) definiert, wobei i das Gewinnerneuron 1 ist, k das gerade<br />
zu adaptierende Neuron (hierzu kommen wir später noch) und t der Zeitschritt. Wir<br />
bezeichnen die Dimension der Topologie mit G.<br />
10.2 SOMs aktivieren immer das Neuron, was der Eingabe<br />
am nächsten liegt<br />
Wie viele andere <strong>Neuronale</strong> <strong>Netze</strong>, muss die SOM erst trainiert werden, bevor man sie<br />
benutzt. Betrachten wir aber vor dem Training noch die sehr einfache Funktionsweise<br />
einer fertigen Self Organizing Map, da sie einige Analogien zum Training besitzt. Die<br />
Funktionsweise setzt sich aus folgenden Schritten zusammen:<br />
Eingabe eines beliebigen Wertes p aus dem Eingangsraum R N .<br />
1 Wir werden noch erfahren, was ein Gewinnerneuron ist.
Abstandsberechnung von jedem Neuron k zu p durch eine Norm – also Berechnung<br />
von ||p − ck||.<br />
Ein Neuron wird aktiv, nämlich genau das Neuron i mit dem kürzesten oben berechneten<br />
Abstand zur Eingabe – alle anderen Neurone sind nicht aktiv. Dieses Paradigma<br />
der Aktivität heißt auch Winner-Takes-All-Schema. Die Ausgabe, welche<br />
wir zu einer Eingabe von einer SOM erwarten, ist, welches Neuron aktiv wird.<br />
Viele Literaturstellen beschreiben die SOM wesentlich formaler: Es wird oft eine Eingabeschicht<br />
beschrieben, die in Richtung einer SOM-Schicht vollverknüpft ist. Die Eingabeschicht<br />
(N Neurone) leitet dann alle Eingaben an die SOM-Schicht weiter. Die<br />
SOM-Schicht ist in sich lateral vollverknüpft, so dass sich ein Gewinnerneuron herausbilden<br />
und die anderen Neurone inhibieren kann. Ich finde diese Art, eine SOM zu<br />
beschreiben, nicht sehr anschaulich und habe versucht, den Netzaufbau hier anschaulicher<br />
zu beschreiben.<br />
Nun ist die Frage, welches Neuron bei welcher Eingabe aktiv wird – und genau dies ist<br />
die Frage, die uns das Netz während des Trainings von alleine beantwortet.<br />
10.3 Training bringt die SOM-Topologie dazu, den<br />
Eingaberaum abzudecken<br />
Das Training einer SOM ist ähnlich überschaubar wie die eben beschriebene Funktionsweise.<br />
Es gliedert sich im Wesentlichen in fünf Schritte, die teilweise deckungsgleich<br />
mit denen der Funktionsweise sind.<br />
Initialisierung: Start des <strong>Netze</strong>s mit zufälligen Neuronenzentren ck ∈ R N aus dem<br />
Eingangsraum.<br />
Anlegen eines Eingangsmusters: Es wird ein Stimulus, also ein Punkt p aus dem<br />
Eingangsraum R N gewählt. Dieser Stimulus wird nun in das Netz eingegeben.<br />
Abstandsmessung: Für jedes Neuron k im Netz wird nun der Abstand ||p − ck|| bestimmt.<br />
Winner takes all: Es wird das Gewinnerneuron i ermittelt, welches den kleinsten<br />
Abstand zu p besitzt, das also der Bedingung<br />
||p − ci|| ≤ ||p − ck|| ∀ k = i<br />
genügt. Wie aus der Bedingung ersichtlich, kann man bei mehreren Gewinnerneuronen<br />
eines nach Belieben wählen.
Adaption der Zentren: Die Zentren der Neurone werden innerhalb des Eingangsraumes<br />
nach der Vorschrift 2<br />
∆ck = η(t) · h(i, k, t) · (p − ck),<br />
versetzt, wobei die Werte ∆ck einfach auf die bisherigen Zentren addiert werden.<br />
Aus dem letzten Faktor wird bereits offensichtlich, dass die Ortsänderung der<br />
Neurone k proportional zu der Entfernung zum eingegebenen Muster p und wie<br />
gewohnt zu einer zeitabhängigen Lernrate η(t) ist. Die oben besprochene Topologie<br />
des <strong>Netze</strong>s nimmt ihren Einfluss durch die Funktion h(i, k, t), die wir im<br />
Folgenden erforschen werden.<br />
Definition 10.4 (SOM-Lernregel). Eine SOM wird trainiert, indem ihr ein Eingabemuster<br />
präsentiert und das Gewinnerneuron dazu ermittelt wird. Das Gewinnerneuron<br />
und seine durch die Topologiefunktion definierten Nachbarneuronen adaptieren dann<br />
ihre Zentren nach der Vorschrift<br />
∆ck = η(t) · h(i, k, t) · (p − ck), (10.1)<br />
ck(t + 1) = ck(t) + ∆ck(t). (10.2)<br />
10.3.1 Die Topologiefunktion bestimmt, wie stark ein lernendes Neuron<br />
seine Nachbarn beeinflusst<br />
Die Topologiefunktion h ist nicht auf dem Eingangsraum, sondern auf dem Gitter<br />
definiert und stellt die Nachbarschaftsbeziehungen zwischen den Neuronen dar – also<br />
die Topologie des <strong>Netze</strong>s. Sie kann zeitabhängig sein (und ist es auch oft) – dies erklärt<br />
den Parameter t. Der Parameter k ist der durch alle Neurone laufende Index, und der<br />
Parameter i ist der Index des Gewinnerneurons.<br />
Prinzipiell ist der Sinn der Funktion, einen großen Wert anzunehmen, falls k Nachbar<br />
des Gewinners oder gar der Gewinner selbst ist, und kleine Werte, falls nicht. Schärfer<br />
definiert: Die Topologiefunktion muss unimodal sein, also genau ein Maximum besitzen<br />
– dieses Maximum muss beim Gewinnerneuron i liegen, das zu sich selbst natürlich die<br />
Entfernung 0 hat.<br />
Zusätzlich macht es uns die Zeitabhängigkeit beispielsweise möglich, die Nachbarschaft<br />
mit der Zeit schrumpfen zu lassen.<br />
2 Achtung: Viele Quellen schreiben diese Vorschrift ηh(p − ck), was dem Leser fälschlicherweise suggeriert,<br />
dass es sich bei h um eine Konstante handelt. Dieses Problem ist einfach lösbar, indem man die<br />
Multiplikationspunkte · nicht weglässt.
i <br />
1 <br />
k<br />
<br />
<br />
k<br />
<br />
<br />
i <br />
<br />
<br />
<br />
2.23<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Abbildung 10.2: Beispiel-Abstände einer eindimensionalen SOM-Topologie (oben) und einer zweidimensionalen<br />
SOM-Topologie (unten) zwischen zwei Neuronen i und k. Im unteren Fall bilden wir<br />
den Euklidischen Abstand (im zweidimensionalen äquivalent zum Satz des Pythagoras). Im oberen<br />
Fall wird einfach die diskrete Weglänge zwischen i und k abgezählt. In beiden Fällen habe ich der<br />
Einfachheit halber eine feste Gitterkantenlänge von 1 gefordert.<br />
Um große Werte für Nachbarn von i und kleine Werte für Nicht-Nachbarn ausgeben zu<br />
können, braucht die Funktion h eine Art Abstandsbegriff auf dem Gitter, irgendwoher<br />
muss sie also wissen, wie weit i und k auf dem Gitter voneinander entfernt sind. Es<br />
gibt verschiedene Methoden zur Berechnung des Abstandes.<br />
Hierfür könnte bei einem zweidimensionalen Gitter z.B. der euklidische Abstand (unterer<br />
Teil der Abb. 10.2) verwendet werden oder bei einem eindimensionalen Gitter<br />
einfach die Anzahl der Verbindungen zwischen den Neuronen i und k (oberer Teil<br />
derselben Abbildung).<br />
Definition 10.5 (Topologiefunktion). Die Topologiefunkton h(i, k, t) beschreibt die<br />
Nachbarschaftsbeziehungen in der Topologie. Sie kann eine beliebige unimodale Funktion<br />
sein, die maximal wird, wenn i = k gilt. Eine Zeitabhängigkeit ist optional, wird<br />
aber oft verwendet.
10.3.1.1 Vorstellung gängiger Abstands- und Topologiefunktionen<br />
Eine gängige Abstandsfunktion wäre beispielsweise die uns schon bekannte Gaußglocke<br />
(siehe auch Abb. 10.3 auf der folgenden Seite). Sie ist unimodal mit einem Maximum<br />
bei 0, zusätzlich kann sie durch ihren Parameter σ in ihrer Breite verändert<br />
werden, was wir für die Realisierung der mit der Zeit schrumpfenden Nachbarschaft<br />
nutzen können: Wir beziehen die Zeitabhängigkeit einfach auf das σ, erhalten also ein<br />
monoton sinkendes σ(t). Unsere Topologiefunktion könnte dann wie folgt aussehen:<br />
h(i, k, t) = e<br />
<br />
− ||g i −g k ||2<br />
2·σ(t) 2<br />
<br />
, (10.3)<br />
wobei hier gi und gk die Positionen der Neurone auf dem Gitter sind, nicht im Eingaberaum,<br />
welche wir mit ci und ck bezeichnen würden.<br />
Weitere Funktionen, die anstatt der Gaußfunktion eingesetzt werden können, sind<br />
zum Beispiel die Kegelfunktion, die Zylinderfunktion oder die Mexican-Hat-<br />
Funktion (Abb. 10.3 auf der folgenden Seite). Die Mexican-Hat-Funktion bietet hierbei<br />
eine besondere biologische Motivation: Sie stößt durch ihre negativen Stellen manche<br />
Neurone in der Umgebung des Gewinnerneurons ab, was man auch in der Natur<br />
schon beobachtet hat. Dies kann für schärfere Abgrenzung der Kartenbereiche sorgen<br />
– genau aus diesem Grund wurde sie auch von Teuvo Kohonen selbst vorgeschlagen.<br />
Diese Regulierungseigenschaft ist aber für die Funktion der Karte an sich nicht notwendig,<br />
es kann sogar passieren, dass dadurch die Karte divergiert, also gewissermaßen<br />
explodiert.<br />
10.3.2 Lernraten und Nachbarschaften können über die Zeit monoton<br />
sinken<br />
Damit in den späteren Phasen des Trainings nicht mehr die ganze Karte sehr stark in<br />
Richtung eines neuen Musters gezogen wird, wird bei den SOMs oft mit zeitlich monoton<br />
sinkenden Lernraten und Nachbarschaftsgrößen gearbeitet. Sprechen wir zunächst<br />
über die Lernrate: Typische Größenordnungen für den Zielwert der Lernrate sind zwei<br />
Größenordnungen kleiner als der Startwert, beispielsweise könnte gelten<br />
0.01 < η < 0.6.<br />
Diese Größe ist aber auch wieder abhängig zu machen von der Netztopologie bzw. der<br />
Größe der Nachbarschaft.
h(r)<br />
f(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
Gauss−Glocke in 1D<br />
0<br />
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
r<br />
Zylinderfunktion<br />
−4 −2 0 2 4<br />
x<br />
f(x)<br />
f(x)<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
3.5<br />
3<br />
2.5<br />
2<br />
1.5<br />
1<br />
0.5<br />
0<br />
−0.5<br />
−1<br />
Kegelfunktion<br />
−4 −2 0 2 4<br />
−1.5<br />
−3 −2 −1 0 1 2 3<br />
x<br />
Mexican Hat Function<br />
Abbildung 10.3: Gaußglocke, Kegelfunktion, Zylinderfunktion und die von Kohonen vorgeschlagene<br />
Mexican-Hat-Funktion als Beispiele für Topologiefunktionen einer SOM.<br />
x
Eine sinkende Nachbarschaftsgröße kann, wie wir gesehen haben, beispielsweise mit<br />
einem zeitabhängig monoton sinkenden σ bei Benutzung der Gaußglocke in der Topologiefunktion<br />
realisiert werden.<br />
Der Vorteil bei einer sinkenden Nachbarschaftsgröße ist, dass ein sich bewegendes<br />
Neuron zu Anfang viele Neurone in seiner Umgebung „mitzieht“, sich das zufällig<br />
initialisierte Netz also am Anfang schnell und sauber entfalten kann. Zum Ende des<br />
Lernvorganges hin werden nur noch wenige Neurone auf einmal beeinflusst, was das<br />
Netz im Gesamten steifer macht, aber ein gutes „fine tuning“ der einzelnen Neurone<br />
ermöglicht.<br />
Zu beachten ist weiterhin, dass stets<br />
h · η ≤ 1<br />
gelten muss, sonst würden Neurone andauernd am aktuellen Trainingsbeispiel vorbeischießen.<br />
Doch nun genug der Theorie – betrachten wir eine SOM im Einsatz!<br />
10.4 Beispiele für die Funktionsweise von SOMs<br />
Beginnen wir mit einem einfachen, im Kopf nachvollziehbaren Beispiel.<br />
In diesem Beispiel verwenden wir einen zweidimensionalen Eingangsraum, es gilt also<br />
N = 2. Die Gitterstruktur sei eindimensional (G = 1). Weiterhin soll unsere Beispiel-<br />
SOM aus insgesamt 7 Neuronen bestehen und die Lernrate sei η = 0.5.<br />
Auch unsere Nachbarschaftsfunktion halten wir recht einfach, um das Netz im Kopf<br />
nachvollziehen zu können:<br />
⎧<br />
⎪⎨ 1 k direkter Nachbar von i,<br />
h(i, k, t) = 1<br />
⎪⎩<br />
0<br />
k = i,<br />
sonst.<br />
(10.4)<br />
Wir betrachten jetzt das soeben beschriebene Netz mit zufälliger Initialisierung der<br />
Zentren (Abb. 10.4 auf der folgenden Seite) und geben ein Trainingsmuster p ein.<br />
Offensichtlich liegt das Eingangsmuster in unserem Beispiel dem Neuron 3 am nächsten<br />
– dieses ist also der Gewinner.
1<br />
4 ❃❃❃<br />
❃❃❃<br />
❃❃<br />
<br />
3<br />
7<br />
☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞☞<br />
2<br />
6<br />
<br />
<br />
p 5<br />
Abbildung 10.4: Darstellung des zweidimensionalen Eingaberaumes (links) und des eindimensionalen<br />
Topologieraumes (rechts) einer Self Organizing Map. Neuron 3 ist das Gewinnerneuron, da es p<br />
am nächsten liegt. Die Nachbarn von 3 in der Topologie sind die Neurone 2 und 4. Die Pfeile markieren<br />
die Bewegung des Gewinnerneurons und seiner Nachbarn in Richtung des Trainingsbeispiels<br />
p.<br />
Die eindimensionale Topologie des <strong>Netze</strong>s ist hier zur Veranschaulichung durch die gepunkteten<br />
Linien in den Eingangsraum aufgetragen. Die Pfeile markieren die Bewegung des Gewinners und<br />
seiner Nachbarn auf das Muster zu.<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7
Wir erinnern uns an die Lernvorschrift für SOMs<br />
∆ck = η(t) · h(i, k, t) · (p − ck)<br />
und arbeiten die drei Faktoren von hinten nach vorne ab:<br />
Lernrichtung: Wir erinnern uns, dass die Neuronenzentren ck Vektoren im Eingangsraum<br />
sind, genau wie das Muster p. Der Faktor (p − ck) gibt uns also den Vektor<br />
vom Neuron k zum Muster p an. Dieser wird nun mit verschiedenen Skalaren<br />
multipliziert:<br />
Unsere Topologiefunktion h besagt, dass nur das Gewinnerneuron und seine beiden<br />
nächsten Nachbarn (hier: 2 und 4) lernen dürfen, indem sie bei allen anderen<br />
Neuronen 0 ausgibt. Eine Zeitabhängigkeit ist nicht gegeben. Unser Vektor (p −<br />
ck) wird also entweder mit 1 oder mit 0 multipliziert.<br />
Die Lernrate gibt, wie immer, die Stärke des Lernens an. Es gilt wie schon gesagt η =<br />
0.5 – wir kommen also insgesamt auf das Ergebnis, dass sich das Gewinnerneuron<br />
und seine Nachbarn (hier: Die Neurone 2, 3 und 4) dem Muster p um die Hälfte<br />
des Weges nähern (dies markieren die Pfeile in der Abbildung).<br />
Obwohl das Zentrum von Neuron 7 vom Eingangsraum aus gesehen wesentlich näher<br />
am Eingangsmuster p liegt als das Neuron 2, lernt das Neuron 2, und das Neuron 7 nicht.<br />
Ich möchte daran noch einmal deutlich machen, dass die Netztopologie bestimmt,<br />
welches Neuron mitlernen darf, und nicht die Lage im Eingangsraum. Dies ist genau der<br />
Mechanismus, durch den eine Topologie einen Eingangsraum aussagekräftig abdecken<br />
kann, ohne mit ihm auf irgendeine Weise verwandt sein zu müssen.<br />
Nach der Adaption der Neurone 2, 3 und 4 wird das nächste Muster angelegt, und so<br />
weiter, und so fort. Ein weiteres Beispiel, wie sich eine solche eindimensionale SOM<br />
im zweidimensionalen Inputraum bei gleichverteilten Inputmustern über die Zeit entwickeln<br />
kann, sehen wir an der Abbildung 10.5 auf Seite 193.<br />
Endzustände von ein- und zweidimensionalen SOMs bei verschieden geformten Inputräumen<br />
sehen wir in der Abbildung 10.6 auf Seite 194. Wie wir sehen, sind nicht alle<br />
Inputräume durch jede Netztopologie schön abdeckbar, es gibt sogenannte freiliegende<br />
Neurone – Neurone, welche in einem Bereich liegen, in dem kein Inputmuster je aufgetreten<br />
ist. Eine eindimensionale Topologie produziert in der Regel weniger freiliegende<br />
Neurone als eine zweidimensionale: Beispielsweise beim Training auf ringförmig angeordnete<br />
Eingabemuster ist es bei einer zweidimensionalen quadratischen Topologie so<br />
gut wie unmöglich, die freiliegenden Neurone in der Mitte des Rings zu verhindern – diese<br />
werden ja während des Trainings in jede Richtung gezogen, so dass sie schlussendlich<br />
einfach in der Mitte bleiben. Das macht die eindimensionale Topologie aber keineswegs
zur Optimaltopologie, da sie nur weniger komplexe Nachbarschaftsbeziehungen finden<br />
kann als eine mehrdimensionale.<br />
10.4.1 Topologische Defekte sind Fehlentfaltungen der SOM<br />
Es kann während des Entfaltens einer SOM vorkommen, dass diese einen Topologischen<br />
Defekt (Abb. 10.7 auf Seite 195) bildet, sich also nicht richtig entfaltet.<br />
Ein Topologischer Defekt kann am besten mit dem Wort „Verknotung“ beschrieben<br />
werden.<br />
Ein Mittel gegen Topologische Defekte kann sein, die Startwerte für die Nachbarschaftsgröße<br />
zu erhöhen, denn je komplexer die Topologie ist (bzw. je mehr Nachbarn jedes<br />
Neuron besitzt, man könnte ja auch dreidimensionale oder wabenförmige zweidimensionale<br />
Topologien erzeugen) desto schwerer ist es für eine zufällig initialisierte Karte,<br />
sich zu entfalten.<br />
10.5 Man kann die Auflösung einer SOM ortsabhängig<br />
dosieren<br />
Wir haben gesehen, dass eine SOM trainiert wird, indem hintereinander immer wieder<br />
Eingabemuster aus dem Eingangsraum R N eingegeben werden, so dass sich die SOM<br />
an diesen Mustern ausrichten und diese kartographieren wird. Es kann nun vorkommen,<br />
dass wir eine bestimmte Untermenge U des Eingaberaums genauer kartographiert haben<br />
möchten als den Rest.<br />
Die Lösung dieses Problems kann mit SOMs denkbar einfach realisiert werden: Wir präsentieren<br />
der SOM während des Trainings ganz einfach überproportional viele Eingabemuster<br />
aus diesem Bereich U. Werden der SOM mehr Trainingsmuster aus U ⊂ R N<br />
präsentiert als aus dem Rest R N \ U, so werden sich dort auch mehr Neurone zusammenfinden,<br />
während sich die restlichen Neurone auf R N \U dünner verteilen (Abb. 10.8<br />
auf Seite 196).<br />
Wie in der Abbildung ersichtlich, kann so der Rand der SOM etwas deformiert werden<br />
– dies ist ausgleichbar, indem man dem Rand des Inputraumes ebenfalls eine etwas<br />
höhere Wahrscheinlichkeit zuweist, von Trainingsmustern getroffen zu werden (eine<br />
Taktik, die man sowieso oft anwendet, um mit den SOMs besser „in die Ecken zu<br />
kommen“).
Abbildung 10.5: Verhalten einer SOM mit eindimensionaler Topologie (G = 1) nach Eingabe von<br />
0, 100, 300, 500, 5000, 50000, 70000 und 80000 zufällig verteilten Eingabemustern p ∈ R 2 . η fiel<br />
während des Trainings von 1.0 auf 0.1, der σ-Parameter der als Nachbarschaftsmaß eingesetzten<br />
Gauß-Funktion von 10.0 auf 0.2.
Abbildung 10.6: Endzustände von eindimensionalen (linke Spalte) und zweidimensionalen (rechte<br />
Spalte) SOMs auf verschieden abgedeckten Inputräumens. Genutzt wurden bei eindimensionaler<br />
Topologie 200 Neurone, bei zweidimensionaler 10 × 10 Neurone und bei allen Karten 80.000<br />
Eingabemuster.
Abbildung 10.7: Ein Topologischer Defekt in einer zweidimensionalen SOM.<br />
Auch wird oft bei den Rand- bzw. Eckneuronen eine höhere Lernrate angewandt, da sie<br />
durch die Topologie nur nach innen gezogen werden - auch dies sorgt für eine signifikant<br />
bessere Eckabdeckung.<br />
10.6 Anwendung von SOMs<br />
Self Organizing Maps und ihre Variationen haben eine Vielzahl von Anwendungsgebieten<br />
in Bezug auf die biologisch inspirierte assoziative Speicherung von Daten.<br />
Beispielsweise ist es gelungen, auf einer SOM mit einer zweidimensionalen diskreten<br />
Gittertopologie die verschiedenen Phoneme der Finnischen Sprache abzubilden und so<br />
Nachbarschaften zu finden (eine SOM macht ja nichts anderes, als Nachbarschaftsbeziehungen<br />
zu finden). Man versucht also wieder, einen hochdimensionalen Raum auf einen<br />
niederdimensionalen Raum (die Topologie) herabzubrechen, schaut, ob sich irgendwelche<br />
Strukturen herausbilden – und siehe da: Es bilden sich klar definierte Bereiche für<br />
die einzelnen Phoneme heraus.
Abbildung 10.8: Training einer SOM mit G = 2 auf einen zweidimensionalen Inputraum. Links<br />
war die Wahrscheinlichkeit für jede Koordinate des Inputraumes, zum Trainingsmuster zu werden,<br />
gleich. Rechts war sie für den zentralen Kreis im Inputraum mehr als zehnmal so groß wie für<br />
den Rest des Inputraumes (sichtbar an der größeren Musterdichte im Hintergrund). Offensichtlich<br />
drängen sich die Neurone in diesem Kreis viel stärker und der restliche Bereich ist etwas undichter<br />
abgedeckt, aber immer noch jeweils einigermaßen gleichmäßig. Beide SOMs wurden mit 80.000<br />
Trainingsbeispielen und abfallendem η (1 → 0.2) sowie abfallendem σ (5 → 0.5) trainiert.
Teuvo Kohonen selbst hat sich die Mühe gemacht, eine Vielzahl von Papern, welche<br />
seine SOMs erwähnen, nach Schlüsselwörtern zu durchsuchen. In diesem großen<br />
Eingangsraum besetzen jetzt die einzelnen Paper einzelne Positionen, je nach Schlüsselwortvorkommen.<br />
Kohonen hat dann eine SOM mit G = 2 kreiert und damit den von<br />
ihm erstellten hochdimensionalen „Paper-Raum“ durch sie kartographieren lassen.<br />
Man kann also ein Paper, an dem man Gefallen findet, in die fertig trainierte SOM<br />
eingeben und schauen, welches Neuron in der SOM davon aktiviert wird. Wahrscheinlich<br />
wird man feststellen, dass man an den in der Topologie benachbarten Papern auch<br />
Gefallen findet. Diese Art von Gehirn-ähnlicher kontextbasierter Suche funktioniert<br />
noch bei vielen anderen Inputräumen.<br />
Festzuhalten ist, dass das System selbst festlegt, was innerhalb der Topologie benachbart,<br />
also ähnlich ist – genau das macht es so interessant.<br />
An diesem Beispiel ist direkt ersichtlich, dass die Lage c der Neurone im Inputraum<br />
nicht aussagekräftig ist. Interessant ist es vielmehr, nun zu schauen, welches Neuron bei<br />
Eingabe eines bis jetzt unbekannten Inputmusters aktiv wird. Man kann als nächstes<br />
schauen, bei welchen bisherigen Eingaben genau dieses Neuron ebenfalls aktiv war –<br />
und hat sofort eine Gruppe von einander sehr ähnlichen Eingaben entdeckt. Je weiter<br />
nun Eingaben innerhalb der Topologie auseinander liegen, um so weniger Gemeinsamkeiten<br />
haben sie. Die Topologie bildet also quasi eine Karte der Merkmale der Eingaben<br />
– reduziert auf anschaulich wenige Dimensionen im Vergleich zur Inputdimension.<br />
Oftmals ist die Topologie einer SOM daher zweidimensional, da sie sich so sehr gut<br />
visualisieren lässt, während der Eingaberaum sehr hochdimensional sein kann.<br />
10.6.1 Mit SOMSs kann man Zentren für RBF-Neurone finden<br />
SOMs richten sich genau auf die Orte der ausgehenden Eingaben aus – demzufolge<br />
werden sie z.B. gerne genutzt, um die Zentren eines RBF-<strong>Netze</strong>s zu wählen. Das Paradigma<br />
der RBF-<strong>Netze</strong> haben wir bereits in Kapitel 6 kennengelernt.<br />
Wie wir bereits gesehen haben, kann man sogar steuern, welche Bereiche des Inputraums<br />
mit höherer Auflösung abgedeckt werden sollen – oder im Zusammenhang mit<br />
RBF-<strong>Netze</strong>n gesprochen, welche Bereiche unserer Funktion das RBF-Netz mit mehr<br />
Neuronen, also genauer bearbeiten soll. Als zusätzliches nützliches Merkmal der Kombination<br />
aus RBF-Netz und SOM kann man die durch die SOM erhaltene Topologie<br />
nutzen, um beim schlussendlichen Training eines Neurons des RBF-<strong>Netze</strong>s „benachbarte“<br />
RBF-Neurone auf verschiedene Weisen mit zu beeinflussen.
Abbildung 10.9: Eine Figur, die verschiedene Unterräume des eigentlichen Eingaberaums zu verschiedenen<br />
Orten ausfüllt und daher durch eine SOM nur schwer ausgefüllt werden kann.<br />
Viele Simulatoren <strong>Neuronale</strong>r <strong>Netze</strong> bieten hierfür eine zusätzliche sogenannte SOM-<br />
Schicht im Zusammenhang mit der Simulation von RBF-<strong>Netze</strong>n an.<br />
10.7 Variationen von SOMs<br />
Für verschiedene Variationen der Repräsentationsaufgaben gibt es auch verschiedene<br />
Variationen der SOMs:<br />
10.7.1 Ein <strong>Neuronale</strong>s Gas ist eine SOM ohne feste Topologie<br />
Das <strong>Neuronale</strong> Gas ist eine Variation der Self Organizing Maps von Thomas Martinetz<br />
[MBS93], die aus der Schwierigkeit heraus entstanden ist, komplizierte Inputformationen<br />
abzubilden, welche sich teilweise nur in Unterräumen des Inputraums<br />
abspielen oder die Unterräume sogar wechseln (Abb. 10.9).<br />
Die Idee von einem <strong>Neuronale</strong>n Gas besteht grob gesprochen darin, ein SOM ohne<br />
Gitterstruktur zu realisieren. Die Lernschritte sehen aufgrund der Abstammung von<br />
den SOMs den SOM-Lernschritten auch sehr ähnlich, haben aber einen zusätzlichen<br />
Zwischenschritt:
⊲ Wieder zufällige Initialisierung der ck ∈ R n<br />
⊲ Wahl und Präsentation eines Musters aus dem Eingangsraum p ∈ R n<br />
⊲ Neuronenabstandsmessung<br />
⊲ Ermittlung des Gewinnerneurons i<br />
⊲ Zwischenschritt: Bilden einer nach der Entfernung zum Gewinnerneuron aufsteigend<br />
sortierten Liste L von Neuronen. Erstes Neuron in der Liste L ist also das<br />
Neuron, was dem Gewinnerneuron am nächsten liegt.<br />
⊲ Ändern der Zentren durch die bekannte Vorschrift, aber der leicht modifizierten<br />
Topologiefunktion<br />
hL(i, k, t).<br />
Die gegenüber der ursprünglichen Funktion h(i, k, t) modifizierte Funktion hL(i, k, t)<br />
sieht nun jeweils die ersten Elemente der Liste als Nachbarschaft des Gewinnerneurons<br />
i an. Dies hat direkt zur Folge, dass sich – ähnlich der frei schwebenden Moleküle in<br />
einem Gas – die Nachbarschaftsbeziehungen zwischen den Neuronen jederzeit ändern<br />
können, auch die Anzahl der Nachbarn ist nahezu beliebig. Die Entfernung innerhalb<br />
der Nachbarschaft wird nun durch die Entfernung innerhalb des Eingaberaums repräsentiert.<br />
Die Masse der Neurone kann durch eine stetig sinkende Nachbarschaftsgröße genauso<br />
versteift werden, wie eine SOM – sie hat aber keine feste Dimension, sondern kann<br />
jeweils die Dimension annehmen, die lokal gerade gebraucht wird, was sehr vorteilhaft<br />
sein kann.<br />
Von Nachteil kann sein, dass nicht durch ein festes Gitter erzwungen wird, dass der<br />
Inputraum relativ gleichmäßig abgedeckt wird, und so Löcher in der Abdeckung entstehen<br />
oder Neurone vereinsamen können.<br />
Es bleibt wie immer in der Pflicht des Anwenders, diese Arbeit bei allen Praxistipps<br />
nicht als Katalog für Patentlösungen zu verstehen, sondern selbst die Vor- und Nachteile<br />
zu erforschen.<br />
Anders als bei einer SOM muss sich die Nachbarschaft in einem <strong>Neuronale</strong>n Gas anfangs<br />
auf die Gesamtheit aller Neurone beziehen, weil sonst einige Ausreißer der zufälligen<br />
Initialisierung vielleicht nie in die Nähe der restlichen Gruppe kommen. Dies<br />
zu vergessen, ist ein sehr beliebter Fehler bei der Implementierung eines <strong>Neuronale</strong>n<br />
Gases.<br />
Mit einem <strong>Neuronale</strong>n Gas kann man auch eine sehr komplexe Inputform lernen,<br />
da wir nicht an ein festdimensionales Gitter gebunden sind. Rechenaufwändig werden
kann aber das dauernde Sortieren der Liste (hier kann es viel bringen, die Liste gleich<br />
in einer von sich aus geordneten Datenstruktur abzulegen). Ein Beispiel für solche<br />
Inputformen findet sich in Abb. 10.9 auf Seite 198.<br />
Definition 10.6 (<strong>Neuronale</strong>s Gas). Ein <strong>Neuronale</strong>s Gas unterscheidet sich von einer<br />
SOM durch eine vollständig dynamische Nachbarschaftsfunktion. In jedem Lernzyklus<br />
wird neu entschieden, welche Neurone die Nachbarneurone des Gewinnerneurons sind.<br />
In der Regel ist das Kriterium für diese Entscheidung die Entfernung der Neurone zum<br />
Gewinnerneuron im Inputraum.<br />
10.7.2 Eine Multi-SOM besteht aus mehreren separaten SOMs<br />
Um eine weitere Variante der SOMs zu präsentieren, möchte ich eine erweiterte Problemstellung<br />
formulieren: Was machen wir bei Eingabemustern, von denen wir vorher<br />
wissen, dass sie sich in verschiedene (vielleicht disjunkte) Bereiche abgrenzen?<br />
Die Idee hierzu ist, nicht nur eine SOM zu nehmen, sondern gleich mehrere: Eine<br />
Multi Self Organizing Map, kurz M-SOM [GKE01b, GKE01a, GS06]. Die SOMs<br />
müssen nicht die gleiche Topologie oder Größe haben, eine M-SOM ist nur ein Zusammenschluss<br />
aus M vielen SOMs.<br />
Der Lernvorgang funktioniert analog zu den einfachen SOMs – allerdings werden nur<br />
die Neurone, die zum Gewinner-SOM eines jeden Trainingsschritts gehören, adaptiert.<br />
Mit zwei SOMs ist es also einfach, zwei disjunkte Cluster Daten zu repräsentieren,<br />
selbst wenn einer davon nicht in allen Dimensionen des Eingangsraumes R N vertreten<br />
ist. Die einzelnen SOMs spiegeln sogar genau die Cluster wieder.<br />
Definition 10.7 (Multi-SOM). Eine Multi-SOM ist nichts weiter als eine gleichzeitige<br />
Verwendung von M vielen SOMs.<br />
10.7.3 Ein Multi-<strong>Neuronale</strong>s Gas besteht aus mehreren separaten<br />
neuronalen Gasen<br />
Analog zum Multi-SOM haben wir hier wieder eine Menge von M vielen <strong>Neuronale</strong>n<br />
Gasen: ein Multi-<strong>Neuronale</strong>s Gas [GS06, SG06]. Dieses Konstrukt verhält sich<br />
analog zu <strong>Neuronale</strong>m Gas und M-SOM: Es werden wieder nur die Neurone adaptiert,<br />
die im Gewinner-Gas sind.<br />
Der Leser wird sich natürlich fragen, was denn ein Multi-<strong>Neuronale</strong>s Gas für Vorteile<br />
bringt, da bereits ein einzelnes <strong>Neuronale</strong>s Gas in der Lage ist, sich in Cluster zu
zerteilen und auch auf komplizierten Inputmustern mit wechselnder Dimension zu arbeiten.<br />
Das ist zwar grundsätzlich richtig, doch es gibt zwei gravierende Vorteile eines<br />
Multi-<strong>Neuronale</strong>n Gases gegenüber einem einfachen <strong>Neuronale</strong>n Gas.<br />
1. Bei mehreren Gasen kann man jedem Neuron direkt ansehen, zu welchem Gas<br />
es gehört. Das ist insbesondere bei Clustering-Aufgaben wichtig, für die Multi-<br />
<strong>Neuronale</strong> Gase in jüngster Zeit genutzt werden. Einfache <strong>Neuronale</strong> Gase können<br />
zwar auch Cluster finden und abdecken, man sieht aber nicht, welches Neuron<br />
jetzt zu welchem Cluster gehört.<br />
2. Es spart enorm Rechenzeit, große Ursprungs-Gase in mehrere kleinere aufzuteilen,<br />
da (wie schon angesprochen) das Sortieren der Liste L sehr viel Rechenzeit in Anspruch<br />
nehmen kann, das Sortieren von mehreren kleineren Listen L1, L2, . . . , LM<br />
aber weniger aufwändig ist – selbst dann, wenn diese Listen insgesamt genausoviele<br />
Neurone enthalten.<br />
Man erhält zwar nur lokale Sortierungen und keine globale, diese reichen aber in den<br />
meisten Fällen aus.<br />
Wir können nun zwischen zwei Extremfällen des Multi-<strong>Neuronale</strong>n Gases wählen: Der<br />
eine Extremfall ist das normale <strong>Neuronale</strong> Gas M = 1, wir verwenden also nur ein<br />
einziges <strong>Neuronale</strong>s Gas. Interessanterweise verhält sich der andere Extremfall (sehr<br />
großes M, wenige oder nur ein Neuron pro Gas) analog zum K-Means-Clustering (siehe<br />
zum Thema Clusteringverfahren auch den Exkurs A).<br />
Definition 10.8 (Multi-<strong>Neuronale</strong>s Gas). Ein Multi-<strong>Neuronale</strong>s Gas ist nichts weiter<br />
als eine gleichzeitige Verwendung von M vielen <strong>Neuronale</strong>n Gasen.<br />
10.7.4 Wachsende neuronale Gase können sich selbst Neurone hinzufügen<br />
Ein Wachsendes <strong>Neuronale</strong>s Gas ist eine Variation des beschriebenen <strong>Neuronale</strong>n<br />
Gases, dem nach bestimmten Regeln mehr und mehr Neurone hinzugefügt werden. Man<br />
versucht so, der Vereinsamung von Neuronen oder der Bildung großer Abdeckungslöcher<br />
entgegenzuwirken.<br />
Es sei hier nur benannt, aber nicht weiter erforscht.<br />
Eine wachsende SOM zu konstruieren ist insofern schwieriger, als dass neue Neurone<br />
in die Nachbarschaft eingegliedert werden müssen.
Übungsaufgaben<br />
Aufgabe 18. Mit einem regelmäßigen zweidimensionalen Gitter soll eine zweidimensionale<br />
Fläche möglichst „gut“ ausgelegt werden.<br />
1. Welche Gitterstruktur wäre hierfür am besten geeignet?<br />
2. Welche Kriterien für „gut“ bzw. „am besten“ haben Sie verwendet?<br />
Diese Aufgabe ist bewusst sehr schwammig formuliert.
Kapitel 11<br />
Adaptive Resonance Theory<br />
Ein ART-Netz in seiner ursprünglichen Form soll binäre Eingabevektoren<br />
klassifizieren, also einer 1-aus-n-Ausgabe zuordnen. Gleichzeitig sollen bis jetzt<br />
unklassifizierbare Muster erkannt und einer neuen Klasse zugeordnet werden.<br />
Wie in anderen kleinen Kapiteln wollen wir wieder versuchen, die grundlegende Idee<br />
der Adaptive Resonance Theory (Kurz: ART) zu ergründen, ohne ihre Theorie<br />
wirklich in der Tiefe zu betrachten.<br />
Wir haben bereits in verschiedenen Abschnitten angedeutet, dass es schwierig ist, mit<br />
<strong>Neuronale</strong>n <strong>Netze</strong>n neue Information zusätzlich zu bestehender „hinzuzulernen“, ohne<br />
jedoch die bestehende Information zu zerstören – diesen Umstand bezeichnen wir als<br />
Stabilitäts-Plastizitäts-Dilemma.<br />
1987 veröffentlichten Stephen Grossberg und Gail Carpenter mit dem Ziel der<br />
Entschärfung dieser Problematik die erste Version ihres ART-<strong>Netze</strong>s [Gro76], der ab<br />
da eine ganze Familie von ART-Verbesserungen folgte (die wir ebenfalls noch kurz<br />
ansprechen wollen).<br />
Es handelt sich um eine Idee des unüberwachten Lernens, die (zunächst binäre) Mustererkennung<br />
zum Ziel hatte, genauer gesagt, die Einteilung von Mustern in Klassen –<br />
wobei ein ART-Netz aber zusätzlich in der Lage sein soll, neue Klassen zu finden.<br />
11.1 Aufgabe und Struktur eines ART-<strong>Netze</strong>s<br />
Ein ART-Netz ist aufgebaut aus genau zwei Schichten: Der Eingabeschicht I und der<br />
Erkennungsschicht O, wobei die Eingabeschicht in Richtung der Erkennungsschicht<br />
vollverknüpft ist. Diese Vollverknüpfung gibt uns eine Top-Down-Gewichtsmatrix<br />
203
i1<br />
✡ ✡✡✡✡✡✡✡✡✡✡✡✡✡<br />
<br />
<br />
<br />
<br />
<br />
<br />
✹❋❖<br />
❙<br />
✹❋❖<br />
❙<br />
<br />
❋❖<br />
❙ i2<br />
✹ ❋❖<br />
❙<br />
✹ ❋<br />
❖❙<br />
❖❙<br />
✹<br />
❋ ❖❙<br />
❋ ❖<br />
❙<br />
✹ ❋<br />
❖<br />
❙❙<br />
❖ ❙<br />
✹ ❋ ❖<br />
❙<br />
✹<br />
❋ ❖<br />
❙<br />
❋<br />
❖<br />
❙❙<br />
✹ ❋<br />
❖ ❙<br />
❖<br />
❙<br />
✹<br />
❋ ❖<br />
❙❙<br />
❋<br />
❖ ❙<br />
✹ ❋<br />
❖ ❙<br />
❖<br />
❙<br />
✹ ❋ ❖<br />
❙❙<br />
✹<br />
❋ ❖ ❙<br />
❋<br />
❖ ❙<br />
❖<br />
❙<br />
✹ ❋ ❖<br />
❙❙<br />
❋ ❖ ❙<br />
❋<br />
❖<br />
❙<br />
❖<br />
❙❙<br />
❖ ❙<br />
❖ ❙<br />
①<br />
❙❙❙<br />
①①①①①①①①①①①①①①①①①①①① ✡<br />
✡✡✡✡✡✡✡✡✡✡✡✡✡ <br />
<br />
<br />
<br />
<br />
✹❋❖<br />
<br />
✹❋❖<br />
i3<br />
❋❖<br />
✹ ❋❖<br />
✹ ❋<br />
❖❖<br />
✹<br />
❋ ❖<br />
❋ ❖<br />
✹ ❋<br />
❖❖<br />
✹ ❋ ❖<br />
✹<br />
❋ ❖<br />
❋<br />
❖<br />
✹ ❋<br />
❖❖<br />
✹<br />
❋ ❖<br />
❋<br />
❖<br />
✹ ❋<br />
❖❖<br />
✹ ❋ ❖<br />
✹<br />
❋ ❖<br />
❋<br />
❖❖<br />
✹ ❋ ❖<br />
❋ ❖<br />
❋<br />
❖❖❖<br />
♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦<br />
① ❖<br />
①①①①①①①①①①①①①①①①①①①① ✡<br />
✡✡✡✡✡✡✡✡✡✡✡✡✡ <br />
<br />
<br />
<br />
<br />
✹❋<br />
i4<br />
✹❋❋<br />
✹ ❋<br />
✹ ❋<br />
✹<br />
❋❋<br />
✹ ❋<br />
✹ ❋<br />
✹<br />
❋❋<br />
✹ ❋<br />
✹<br />
❋❋<br />
✹ ❋<br />
✹ ❋<br />
✹<br />
❋❋<br />
✹ ❋❋❋<br />
❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦❦<br />
♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦<br />
①①①①①①①①①①①①①①①①①①①①① ✡<br />
✡✡✡✡✡✡✡✡✡✡✡✡✡<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
✡ ①①<br />
♦♦<br />
❦<br />
✹❋❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖ ❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙❙<br />
✹<br />
✡ ① ♦<br />
❦<br />
✹<br />
✡ ①<br />
✡ ♦♦<br />
①①<br />
❦❦❦♦♦<br />
✹✹✹✹✹✹✹✹✹✹✹✹✹ ❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋ ✹❋❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖ ✹<br />
✡ ①①<br />
♦♦<br />
❦❦<br />
✡<br />
✡<br />
✹<br />
✡ ① ♦♦<br />
①①<br />
✡<br />
❦<br />
♦♦<br />
①<br />
✹✹✹✹✹✹✹✹✹✹✹✹✹ ❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋ ✹❋ ❦❦<br />
✹<br />
✡ ①<br />
✡<br />
① ✡ ✹✹✹✹✹✹✹✹✹✹✹✹✹ ❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋❋<br />
♦ ①<br />
♦ ① ❦<br />
✹<br />
✡ ①①<br />
♦♦<br />
❦❦❦✡<br />
✡ ①<br />
♦♦♦<br />
①①<br />
✡ ✹<br />
✹<br />
✡ ① ♦♦<br />
❦❦<br />
✹<br />
✡ ①①<br />
♦♦✡<br />
✡ ①<br />
✡ ♦ ① ✡ ✹✹✹✹✹✹✹✹✹✹✹✹✹<br />
♦ ① ✡<br />
❦❦①<br />
❦ ✡<br />
✹<br />
✡ ① ♦♦<br />
✡ ❦❦①<br />
♦♦<br />
①<br />
✹<br />
✡ ① ♦ ❦❦<br />
① ♦♦<br />
✹<br />
✡ ①①<br />
♦♦♦<br />
❦✡<br />
❦❦<br />
①①<br />
♦♦✡<br />
✡ ①①<br />
✡<br />
✡<br />
✹<br />
✡ ① ♦ ❦❦<br />
✹<br />
✡ ①①<br />
♦♦♦<br />
❦❦❦<br />
✡<br />
✡ ①①<br />
♦♦♦<br />
✡ ①①<br />
❦<br />
✹<br />
①♦<br />
♦♦❦❦❦<br />
✡ ①①<br />
♦♦♦<br />
✡<br />
✡ ①①<br />
✡<br />
✡<br />
①<br />
❦❦❦<br />
✡<br />
✡ ①①<br />
♦♦<br />
✡ ①<br />
✡<br />
✡<br />
①①<br />
♦♦♦<br />
✡<br />
✡ ①①<br />
✡<br />
✡<br />
①<br />
♦♦<br />
✡ ①①<br />
✡<br />
✡<br />
① ✡<br />
Ω1<br />
Ω2<br />
Ω3<br />
Ω4<br />
Ω5<br />
Ω6<br />
<br />
<br />
<br />
Abbildung 11.1: Vereinfachte Darstellung des Aufbaus eines ART-<strong>Netze</strong>s. Oben die Eingabeschicht,<br />
unten die Erkennungsschicht. Für die Abbildung außer Acht gelassen worden sind die<br />
laterale Inhibition der Erkennungsschicht und die Steuerungsneurone.<br />
W an, die die Gewichtswerte von jedem Neuron der Eingabeschicht zu jedem Neuron<br />
der Erkennungsschicht enthält (Abb. 11.1).<br />
An der Eingabeschicht werden einfach binäre Muster eingegeben, welche an die Erkennungsschicht<br />
weitergegeben werden – während die Erkennungsschicht eine 1-aus-<br />
|O|-Kodierung ausgeben soll, also dem Winner-Takes-All-Schema folgen soll. Um diese<br />
1-aus-|O|-Kodierung zu realisieren, kann man beispielsweise das Prinzip der lateralen<br />
Inhibition nutzen – oder in der Implementierung pragmatischerweise per IF-Abfrage<br />
das am stärksten aktivierte Neuron suchen.<br />
11.1.1 Resonanz erfolgt, indem Aktivitäten hin- und hergeworfen werden<br />
Zusätzlich gibt es aber noch eine Bottom-Up-Gewichtsmatrix V , die die Aktivitäten<br />
in der Erkennungsschicht wieder in die Eingabeschicht propagiert. Es ist nun<br />
offensichtlich, dass diese Aktivitäten immer hin- und hergeworfen werden, was den Begriff<br />
der Resonanz ins Spiel bringt. Jede Aktivität der Eingabeschicht bewirkt eine<br />
Aktivität der Erkennungsschicht, während dort jede Aktivität wiederum eine Aktivität<br />
in der Eingabeschicht bewirkt.
Zusätzlich zu den zwei genannten Schichten existieren in einem ART-Netz noch einige<br />
wenige Neurone, welche Kontrollfunktionen ausüben wie z.B. eine Signalverstärkung.<br />
Deren Theorie soll hier nicht weiter betrachtet werden, da nur das grundlegende Prinzip<br />
der ART-<strong>Netze</strong> klar werden soll. Ich erwähne sie nur, um darzustellen, dass das Art-<br />
Netz nach einer Eingabe trotz der vorhandenen Rückkopplungen in einen stabilen<br />
Zustand gelangen wird.<br />
11.2 Der Lernvorgang eines Artnetzes ist geteilt in<br />
Top-Down- und Bottom-Up-Lernen<br />
Die Kunst der Adaptive Resonance Theory liegt nicht nur in der Gestaltung des ART-<br />
<strong>Netze</strong>s, sondern auch in ihrem Lernvorgang, der zweigeteilt ist: Wir trainieren zum<br />
einen die Top-Down-Matrix W und zum anderen die Bottom-Up-Matrix V (Abb. 11.2<br />
auf Seite 207).<br />
11.2.1 Mustereingabe und Top-Down-Lernen<br />
Wenn ein Muster in das Netz eingegeben wird, sorgt es wie schon gesagt für eine<br />
Aktivierung an den Ausgabeneuronen, wobei das stärkste Neuron gewinnt. Anschließend<br />
werden die zum Ausgabeneuron gehenden Gewichte der Matrix W dahingehend<br />
verändert, dass die Ausgabe des stärksten Neurons Ω noch verstärkt wird. Die Klassenzugehörigkeit<br />
des Eingabevektors zu der Klasse des Ausgabeneurons Ω wird also<br />
verstärkt.<br />
11.2.2 Resonanz und Bottom-Up-Lernen<br />
Etwas tricky ist nun das Trainieren der rückwärtsgerichteten Gewichte der Matrix V :<br />
Es werden nur die Gewichte vom jeweilige Gewinnerneuron zur Eingabeschicht trainiert<br />
und als Teaching Input unser aktuell angelegtes Eingabemuster verwendet. Das Netz<br />
wird also darauf trainiert, eingegebene Vektoren zu verstärken.<br />
11.2.3 Hinzufügen eines Ausgabeneurons<br />
Es kann natürlich vorkommen, dass die Neurone ungefähr gleich aktiviert sind oder<br />
mehrere Neurone aktiviert sind, das Netz also unentschlossen ist. In diesem Fall wird<br />
durch die Mechanismen der Steuerungsneurone ein Signal ausgelöst, das ein neues
Ausgabeneuron hinzufügt. Das aktuelle Muster wird dann diesem Ausgabeneuron zugeordnet<br />
und die Gewichtssätze des neuen Neurons wie gewohnt trainiert.<br />
Die Stärke des Systems liegt also nicht nur darin, Eingaben in Klassen zu unterteilen<br />
und neue Klassen zu finden – es kann uns bei Aktivierung eines Ausgabeneurons auch<br />
sagen, wie ein typischer Vertreter einer Klasse aussieht – ein bedeutendes Feature.<br />
Oft kann das System Muster aber nur mäßig gut unterscheiden. Die Frage ist, wann<br />
einem neuen Neuron erlaubt wird, aktiv zu werden und wann gelernt werden soll. Auch<br />
um diese Fragen zu beantworten, existieren in einem ART-Netz verschiedene zusätzliche<br />
Kontrollneurone, die diese Fragen nach verschiedenen mathematischen Regeln<br />
beantworten und dafür zuständig sind, Spezialfälle abzufangen.<br />
Hier benennen wir einen der größten Kritikpunkte an ART: Ein ART-Netz verwendet<br />
eine Spezialfallunterscheidung ähnlich einer IF-Abfrage, die man in den Mechanismus<br />
eines <strong>Neuronale</strong>n <strong>Netze</strong>s gepresst hat.<br />
11.3 Erweiterungen<br />
Wie schon eingangs erwähnt, wurden die ART-<strong>Netze</strong> vielfach erweitert.<br />
ART-2 [CG87] ist eine Erweiterung auf kontinuierliche Eingaben und bietet zusätzlich<br />
(in einer ART-2A genannten Erweiterung) Verbesserungen der Lerngeschwindigkeit,<br />
was zusätzliche Kontrollneurone und Schichten zur Folge hat.<br />
ART-3 [CG90] verbessert die Lernfähigkeit von ART-2, indem zusätzliche biologische<br />
Vorgänge wie z.B. die chemischen Vorgänge innerhalb der Synapsen adaptiert<br />
werden 1 .<br />
Zusätzlich zu den beschriebenen Erweiterungen existieren noch viele mehr.<br />
1 Durch die häufigen Erweiterungen der Adaptive Resonance Theory sprechen böse Zungen bereits von<br />
„ART-n-<strong>Netze</strong>n“.
Kapitel 11 Adaptive Resonance Theory dkriesel.com<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
i1<br />
i2<br />
i3<br />
i4<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ω1<br />
Ω2<br />
<br />
<br />
0 1<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
i1 <br />
i2<br />
i3<br />
i4<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ω1<br />
Ω2<br />
<br />
<br />
0 1<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
i1<br />
i2<br />
i3<br />
i4<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Ω1<br />
Ω2<br />
<br />
<br />
0 1<br />
einer IF-Abfrage, die man in den Mechanismus<br />
eines <strong>Neuronale</strong>n <strong>Netze</strong>s gepresst<br />
hat.<br />
11.3 Erweiterungen<br />
Wie schon eingangs erwähnt, wurden die<br />
ART-<strong>Netze</strong> vielfach erweitert.<br />
ART-2 [CG87] ist eine Erweiterung<br />
auf kontinuierliche Eingaben und bietet<br />
zusätzlich (in einer ART-2A genannten<br />
Erweiterung) Verbesserungen der Lerngeschwindigkeit,<br />
was zusätzliche Kontrollneurone<br />
und Schichten zur Folge hat.<br />
ART-3 [CG90] verbessert die Lernfähigkeit<br />
von ART-2, indem zusätzliche biologische<br />
Vorgänge wie z.B. die chemischen<br />
Vorgänge innerhalb der Synapsen adaptiert<br />
werden 1 .<br />
Zusätzlich zu den beschriebenen Erweiterungen<br />
existieren noch viele mehr.<br />
1 Durch die häufigen Erweiterungen der Adaptive<br />
Resonance Theory sprechen böse Zungen bereits<br />
von ” ART-n-<strong>Netze</strong>n“.<br />
Abbildung 11.2: VereinfachteAbbildung Darstellung 11.2: des Vereinfachte zweigeteilten Darstellung Trainings des eines ART-<strong>Netze</strong>s: Die jeweils<br />
trainierten Gewichte sindzweigeteilten durchgezogen Trainings dargestellt. eines ART-<strong>Netze</strong>s: NehmenDie wir an, ein Muster wurde in das<br />
jeweils 168 trainierten D. Gewichte <strong>Kriesel</strong> sind – Ein durchgezogen kleiner Überblick über <strong>Neuronale</strong> <strong>Netze</strong> (EPSILON-DE)<br />
Netz eingegeben und die Zahlen markieren Ausgaben. Oben: Wie wir sehen, ist Ω2 das Gewin-<br />
dargestellt. Nehmen wir an, ein Muster wurde in<br />
nerneuron. Mitte: Also werden dasdie NetzGewichte eingegebenzum und die Gewinnerneuron Zahlen markierenhin<br />
trainiert und (unten) die<br />
Gewichte vom Gewinnerneuron Ausgaben. zur Eingangsschicht Oben: Wir wir sehen, trainiert.<br />
ist Ω2 das Gewinnerneuron.<br />
Mitte: Also werden die Gewichte<br />
zum Gewinnerneuron hin trainiert und (unten)<br />
die Gewichte vom Gewinnerneuron zur Eingangsschicht<br />
trainiert.
Teil IV<br />
Exkurse, Anhänge und Register<br />
209
Anhang A<br />
Exkurs: Clusteranalyse und Regional and<br />
Online Learnable Fields<br />
Das Grimmsche Wörterbuch beschreibt das heute ausgestorbene deutsche<br />
Wort „Kluster“ mit „was dicht und dick zusammensitzet“. In der statistischen<br />
Clusteranalyse wird die Gruppenbildung innerhalb von Punktwolken<br />
untersucht. Vorstellung einiger Verfahren, Vergleich ihrer Vor- und Nachteile.<br />
Betrachtung eines lernenden Clusteringverfahrens auf Basis <strong>Neuronale</strong>r <strong>Netze</strong>.<br />
Ein Regional and Online Learnable Field modelliert aus einer Punktwolke mit<br />
womöglich sehr vielen Punkten eine vergleichsweise kleine Menge von für die<br />
Punktwolke repräsentativen Neuronen.<br />
Wie schon angedeutet, lassen sich viele Problemstellungen auf Probleme der Clusteranalyse<br />
zurückführen. Dies macht die Erforschung von Verfahren notwendig, die<br />
untersuchen, ob sich innerhalb von Punktwolken Gruppen (sog. Cluster) herausbilden.<br />
Da Verfahren zur Clusteranalyse für ihre Arbeit einen Abstandsbegriff zwischen zwei<br />
Punkten brauchen, muss auf dem Raum, in dem sich die Punkte finden, eine Metrik<br />
definiert sein. Wir wollen also kurz darauf eingehen, was eine Metrik ist.<br />
Definition A.1 (Metrik). Eine Relation dist(x1, x2), die für zwei Objekte x1, x2<br />
definiert ist, heißt Metrik, wenn jedes der folgenden Kriterien gilt:<br />
1. dist(x1, x2) = 0 genau dann, wenn x1 = x2,<br />
2. dist(x1, x2) = dist(x2, x1), also Symmetrie,<br />
3. dist(x1, x3) ≤ dist(x1, x2) + dist(x2, x3), d. h. die Dreiecksungleichung gilt.<br />
Umgangssprachlich ausgedrückt, ist eine Metrik ein Werkzeug, Abstände von Punkten<br />
in einem beliebig gearteten Raum festzustellen. Abstände müssen hierbei symmetrisch<br />
211
sein, und der Abstand zwischen zwei Punkten darf nur 0 sein, wenn beide Punkte<br />
gleich sind. Zudem muss die Dreiecksungleichung gelten.<br />
Metriken liefert uns beispielsweise der quadratische Abstand und der Euklidische<br />
Abstand, welche wir schon kennengelernt haben. Aufbauend auf eine solche Metrik<br />
kann man Clusteringverfahren definieren, die eine Metrik als Abstandsmaß verwenden.<br />
Wir wollen nun verschiedene Clusteringverfahren vorstellen und kurz diskutieren.<br />
A.1 k-Means Clustering teilt Daten in eine vordefinierte<br />
Anzahl Cluster ein<br />
k-Means Clustering nach J. MacQueen [Mac67] ist ein Algorithmus, der aufgrund<br />
seiner niedrigen Rechen- und Speicherkomplexität häufig verwendet wird und allgemein<br />
als „billig und gut“ angesehen wird. Der Algorithmus k-Means Clustering hat folgenden<br />
Arbeitsablauf:<br />
1. Daten bereitstellen, die untersucht werden sollen<br />
2. k, die Anzahl der Clusterzentren, definieren<br />
3. k viele zufällige Vektoren für die Clusterzentren wählen (auch Codebookvektoren<br />
genannt).<br />
4. Jeden Datenpunkt dem nächsten Codebookvektor 1 zuordnen<br />
5. Clusterschwerpunkte für alle Cluster berechnen<br />
6. Codebookvektoren auf neue Clusterschwerpunkte setzen.<br />
7. Bei 4 weitermachen, bis keine Zuordnungsänderungen mehr eintreten.<br />
Bei Punkt 2 sieht man schon eine der großen Fragen des k-Means-Algorithmus: Man<br />
muss im Vorhinein selbst die Anzahl k der Clusterzentren bestimmen, dies nimmt einem<br />
das Verfahren also nicht ab. Das Problem ist, dass man im Vorhinein nicht unbedingt<br />
weiß, wie k am besten bestimmt werden kann. Ein weiteres Problem ist, dass das<br />
Verfahren recht instabil werden kann, wenn die Codebookvektoren schlecht initialisiert<br />
werden. Da dies aber zufällig geschieht, hilft oft schon ein Neustart des Verfahrens, das<br />
zudem nicht sehr rechenaufwändig ist, was wiederum ein Vorteil ist. Verwenden Sie es<br />
im Bewusstsein dieser Schwächen, und Sie werden recht gute Ergebnisse erhalten.<br />
1 Der Name Codebookvektor entstand, weil die oft verwendete Bezeichnung Clustervektor zu missverständlich<br />
war.
Komplizierte Strukturen, wie „Cluster in Clustern“ können allerdings nicht erkannt<br />
werden. Bei einem hoch gewählten k würde der äußere Ring dieser Konstruktion in der<br />
Abbildung als viele einzelne Cluster erkannt, bei einer niedrigen Wahl von k würde der<br />
Ring mit dem kleinen innenliegenden Cluster als ein Cluster gesehen.<br />
Siehe für eine Veranschaulichung den oberen rechten Teil der Abb. A.1 auf Seite 215.<br />
A.2 k-Nearest Neighbouring sucht die k nächsten Nachbarn<br />
jeden Datenpunkts<br />
Das k-Nearest Neighbouring-Verfahren [CH67] verbindet jeden Datenpunkt mit<br />
den jeweils k vielen nächsten Nachbarn, was oft eine Unterteilung in Gruppen zur<br />
Folge hat. Eine solche Gruppe bildet dann einen Cluster. Der Vorteil ist hier, dass<br />
die Clusteranzahl von alleine entsteht – der Nachteil ein recht großer Speicher- und<br />
Rechenaufwand, um die nächten Nachbarn zu finden (es muss der Abstand von jedem<br />
zu jedem Datenpunkt ausgerechet und gespeichert werden).<br />
Es gibt außerdem Spezialfälle, in denen das Verfahren bei zu großer Wahl von k Datenpunkte<br />
zusammenschließt, die eigentlich in verschiedene Cluster gehören (siehe die<br />
beiden kleinen Cluster oben rechts in der Abbildung). Cluster, die nur aus einem<br />
einzigen Datenpunkt bestehen, werden grundsätzlich mit einem anderen Cluster zusammengeschlossen,<br />
auch das ist nicht immer gewollt.<br />
Weiterhin müssen die Bindungen unter den Punkten nicht symmetrisch sein.<br />
Das Verfahren ermöglicht es aber, Ringe und somit auch „Cluster in Clustern“ zu<br />
erkennen, ein eindeutiger Vorteil. Weiterer Vorteil ist, dass das Verfahren adaptiv auf<br />
die Entfernungen in und zwischen Clustern eingeht.<br />
Siehe für eine Veranschaulichung den unteren linken Teil der Abb. A.1.<br />
A.3 ε-Nearest Neighbouring sucht für jeden Datenpunkt<br />
Nachbarn im Radius ε<br />
Ein anderer Ansatz des Neighbourings: Hier geht die Nachbarschaftsfindung nicht über<br />
eine feste Anzahl k von Nachbarn, sondern über einen Radius ε – daher der Name<br />
Epsilon-Nearest Neighbouring. Punkte, die maximal ε weit voneinander entfernt<br />
sind, sind Nachbarn. Hier ist der Speicher- und Rechenaufwand augenscheinlich wieder<br />
sehr hoch, was ein Nachteil ist.
Achtung, auch hier gibt es Spezialfälle: Zwei an sich getrennte Cluster können hier<br />
durch die ungünstige Lage eines einzigen Datenpunkts einfach verbunden werden. Dies<br />
kann zwar auch beim k-Nearest Neighbouring passieren, jedoch schwerer, da die Anzahl<br />
der Nachbarn pro Punkt dort begrenzt ist.<br />
Vorteil ist die symmetrische Natur der Nachbarschaftsbeziehungen. Weiterer Vorteil ist,<br />
dass nicht aufgrund einer festen Nachbaranzahl Kleinstcluster zusammengeschlossen<br />
werden.<br />
Auf der anderen Seite muss aber ε geschickt initialisiert werden, um hier Erfolge zu<br />
erzielen, nämlich kleiner als die Hälfte des kleinsten Abstands zwischen zwei Clustern.<br />
Dies ist bei sehr variablen Clusterabständen und Punktabständen innerhalb von Clustern<br />
unter Umständen ein Problem.<br />
Siehe für eine Veranschaulichung den unteren rechten Teil der Abb. A.1.<br />
A.4 Der Silhouettenkoeffizient macht die Güte eines<br />
gegebenen Clusterings messbar<br />
Wie wir oben sehen, gibt es keine Patentlösung für Clusteringprobleme, denn jedes<br />
dargestellte Verfahren hat seine ganz spezifischen Nachteile. Insofern ist es wertvoll,<br />
ein Kriterium dafür zu haben, wie gut unsere Clustereinteilung ist. Genau diese Möglichkeit<br />
bietet uns der Silhouettenkoeffizient nach [Kau90]. Er misst, wie gut die<br />
Cluster voneinander abgegrenzt sind, und ist ein Indikator dafür, ob vielleicht Punkte<br />
in falsche Cluster einsortiert sind.<br />
Sei P eine Punktwolke und sei p ein Punkt ∈ P . Sei c ⊆ P ein Cluster in der Punktwolke<br />
und gehöre p in diesen Cluster, also p ∈ c. Die Menge der Cluster nennen wir C.<br />
Zusammengefasst gilt also<br />
p ∈ c ⊆ P.<br />
Um den Silhouettenkoeffizient zu errechnen, benötigen wir zunächst den durchschnittlichen<br />
Abstand des Punktes p zu allen seinen Clusternachbarn. Diese Größe nennen<br />
wir a(p) und definieren sie wie folgt:<br />
a(p) = 1<br />
|c| − 1<br />
<br />
q∈c,q=p<br />
dist(p, q) (A.1)
Abbildung A.1: Oben links: Unsere Punktmenge. An ihr werden wir die verschiedenen Clusteringverfahren<br />
erforschen. Oben rechts: k-Means Clustering. Bei der Anwendung dieses Verfahrens<br />
wurde k = 6 gewählt. Wie wir sehen, kann das Verfahren „Cluster in Clustern“ nicht erkennen<br />
(unten links im Bild). Auch lange „Linien“ von Punkten bereiten Schwierigkeiten: Sie würden als<br />
viele kleine Cluster erkannt werden (bei ausreichend großer Wahl von k). Unten links: k-Nearest<br />
Neighbouring. Bei zu großer Wahl von k (größer als die Punktanzahl des kleinsten Clusters)<br />
kommt es zu Clusterzusammenschlüssen, wie man oben rechts im Bild sehen kann. Unten rechts:<br />
ε-Nearest Neighbouring. Dieses Verfahren bereitet Schwierigkeiten, wenn ε größer gewählt ist als<br />
der minimale Abstand zwischen zwei Clustern (sichtbar oben links im Bild) – diese werden dann<br />
zusammengeschlossen.
Sei weiterhin b(p) der durchschnittliche Abstand unseres Punktes p zu allen Punkten<br />
des nächsten anderen Clusters (g läuft über alle Cluster außer c):<br />
1 <br />
b(p) = min dist(p, q) (A.2)<br />
g∈C,g=c |g| q∈g<br />
Der Punkt p ist gut klassifiziert, wenn der Abstand zum Schwerpunkt des eigenen<br />
Clusters minimal und der Abstand zu den Schwerpunkten der anderen Cluster maximal<br />
ist. Ist dies der Fall, so wird der folgende Term einen Wert nahe 1 ergeben:<br />
s(p) =<br />
b(p) − a(p)<br />
max{a(p), b(p)}<br />
Der ganze Term s(p) kann sich offensichtlich nur im Intervall [−1; 1] bewegen. Indikator<br />
für eine schlechte Klassifikation von p ist ein Wert nahe -1.<br />
Der Silhouettenkoeffizient S(P ) ergibt sich aus dem Durchschnitte aller s(p)-Werte: Es<br />
gilt<br />
(A.3)<br />
S(P ) = 1 <br />
s(p). (A.4)<br />
|P |<br />
p∈P<br />
Die Gesamtgüte der Clustereinteilung drückt sich wie oben durch das Intervall [−1; 1]<br />
aus.<br />
Nachdem wir nun die Charakteristiken verschiedener Clusteringmethoden sowie ein<br />
Maß zur Qualitätsbeurteilung einer bereits existierenden Unterteilung in Cluster kennengelernt<br />
haben (viel weiteres Material findet sich in [DHS01]), möchte ich ein 2005<br />
veröffentlichtes Clusteringverfahren auf Basis eines unüberwacht lernenden <strong>Neuronale</strong>n<br />
<strong>Netze</strong>s [SGE05] vorstellen, welches wie alle dieser Verfahren wahrscheinlich nicht perfekt<br />
ist, aber doch große Standard-Schwächen von den bekannten Clusteringverfahren<br />
ausmerzt – auch, um einmal eine vergleichsweise hochaktuelle Entwicklung im Bereich<br />
der <strong>Neuronale</strong>n <strong>Netze</strong> darzustellen.<br />
A.5 Regional and Online Learnable Fields sind ein neuronales<br />
Clusteringverfahren<br />
Das Paradigma <strong>Neuronale</strong>r <strong>Netze</strong>, welches ich nun vorstellen möchte, sind die Regional<br />
and Online Learnable Fields, kurz ROLFs genannt.
A.5.1 ROLFs versuchen, mit Neuronen Datenwolken abzudecken<br />
Grob gesagt sind die Regional and Online Learnable Fields eine Menge K von Neuronen,<br />
die versuchen, eine Menge von Punkten durch ihre Verteilung im Eingaberaum<br />
möglichst gut abzudecken. Hierfür werden während des Trainings bei Bedarf Neurone<br />
hinzugefügt, verschoben oder in ihrer Größe verändert. Die Parameter der einzelnen<br />
Neurone werden wir noch erforschen.<br />
Definition A.2 (Regional and Online Learnable Field). Ein Regional and Online<br />
Learnable Field (kurz: ROLF oder ROLF-Netz) ist eine Menge K von Neuronen, welche<br />
darauf trainiert werden, eine bestimmte Menge im Eingaberaum möglichst gut<br />
abzudecken.<br />
A.5.1.1 ROLF-Neurone besitzen Position und Radius im Eingaberaum<br />
Ein ROLF-Neuron k ∈ K hat hierbei zwei Parameter: Es besitzt ähnlich der RBF-<br />
<strong>Netze</strong> ein Zentrum ck, also einen Ort im Eingaberaum.<br />
Es besitzt aber noch einen weiteren Parameter: Den Radius σ, der den Radius der<br />
perzeptiven Fläche, welche das Neuron umgibt, erst definiert 2 . Ein Neuron deckt<br />
den Anteil des Eingaberaums ab, der innerhalb des Radius liegt.<br />
Sowohl ck als auch σk sind für jedes Neuron lokal definiert, das heißt insbesondere,<br />
dass die Neurone verschieden große Flächen abdecken können.<br />
Der Radius der perzeptiven Fläche ist durch r = ρ · σ gegeben (Abb. A.2 auf der<br />
folgenden Seite), wobei der Multiplikator ρ für alle Neurone global definiert ist und<br />
im Vorhinein festgelegt wird. Der Leser wird sich nun intuitiv fragen, wozu dieser<br />
Multiplikator gut ist. Wir werden seine Bedeutung später noch erforschen. Zu beachten<br />
ist weiterhin: Die perzeptive Fläche der verschiedenen Neurone muss nicht gleich groß<br />
sein.<br />
Definition A.3 (ROLF-Neuron). Ein ROLF-Neuron k besitzt als Parameter ein<br />
Zentrum ck sowie einen Radius σk.<br />
Definition A.4 (Perzeptive Fläche). Die perzeptive Fläche eines Rolf-Neurons k<br />
besteht aus allen Punkten, welche im Eingaberaum innerhalb des Radius ρ · σ liegen.<br />
2 Ich schreibe daher „definiert“ und nicht „ist“, weil der eigentliche Radius ja durch σ · ρ gegeben ist.
Abbildung A.2: Aufbau eines ROLF-Neurons.<br />
A.5.2 ROLFs lernen unüberwacht durch Online-Präsentation von<br />
Trainingsbeispielen<br />
Wie viele andere Paradigmen <strong>Neuronale</strong>r <strong>Netze</strong> lernt unser ROLF-Netz durch die Eingabe<br />
vieler Trainingsbeispiele p aus einer Trainingsmenge P . Das Lernen findet unüberwacht<br />
statt. Für jedes Trainingsbeispiel p, welches in das Netz eingegeben wird,<br />
können zwei Fälle eintreten:<br />
1. Es existiert ein akzeptierendes Neuron k für p oder<br />
2. es existiert kein akzeptierendes Neuron.<br />
Falls im ersteren Fall mehrere Neurone in Frage kommen, existiert insofern genau ein<br />
akzeptierendes Neuron, als dass das nächstgelegene akzeptierend ist. Beim akzeptierenden<br />
Neuron k werden ck und σk angepasst.<br />
Definition A.5 (Akzeptierendes Neuron). Damit ein ROLF-Neuron k ein akzeptierendes<br />
Neuron eines Punktes p ist, muss der Punkt p innerhalb der perzeptiven<br />
Fläche von k liegen. Liegt p in den perzeptiven Flächen mehrerer Neurone, so ist das<br />
nächstliegende akzeptierend. Gibt es mehrere nächste Neurone, kann willkürlich eines<br />
ausgewählt werden.
A.5.2.1 Sowohl Positionen als auch Radien werden beim Lernen adaptiert<br />
Angenommen, wir haben ein Trainingsbeispiel p in das Netz eingegeben und es existiert<br />
ein akzeptierendes Neuron k. Dann wandert der Radius in Richtung ||p − ck|| (also in<br />
Richtung des Abstandes zwischen p ud ck) und das Zentrum ck in Richtung von p.<br />
Zusätzlich seien zwei Lernraten ησ und ηc für Radien und Zentren definiert.<br />
ck(t + 1) = ck(t) + ηc(p − ck(t))<br />
σk(t + 1) = σk(t) + ησ(||p − ck(t)|| − σk(t))<br />
Hierbei ist zu beachten, dass σk ein Skalar ist, während ck ein Vektor im Eingaberaum<br />
ist.<br />
Definition A.6 (Adaption eines ROLF-Neurons). Ein zu einem Punkt p akzeptierendes<br />
Neuron k wird nach folgenden Regeln adaptiert:<br />
ck(t + 1) = ck(t) + ηc(p − ck(t)) (A.5)<br />
σk(t + 1) = σk(t) + ησ(||p − ck(t)|| − σk(t)) (A.6)<br />
A.5.2.2 Der Radiusmultiplikator sorgt dafür, dass Neurone nicht nur schrumpfen<br />
können<br />
Nun können wir auch verstehen, wozu der Multiplikator ρ da ist: Durch ihn umfasst die<br />
perzeptive Fläche eines Neurons mehr als nur alle Punkte um das Neuron im Radius σ.<br />
Das bedeutet, dass σ durch die obige Lernregel nicht nur schrumpfen, sondern auch<br />
wachsen kann.<br />
Definition A.7 (Radiusmultiplikator). Der Radiusmultiplikator ρ > 1 ist global<br />
definiert und vergrößert die perzeptive Fläche eines Neurons k auf ein Vielfaches von<br />
σk. So ist sichergestellt, dass der Radius σk auch wachsen und nicht nur schrumpfen<br />
kann.<br />
Der Radiusmultiplikator wird üblicherweise auf Werte im unteren einstelligen Bereich<br />
gesetzt, wie z.B. 2 oder 3.<br />
Wir haben bis jetzt nur den Fall im ROLF-Training betrachtet, dass für ein Trainingsbeispiel<br />
p ein akzeptierendes Neuron existiert.
A.5.2.3 Nach Bedarf werden neue Neurone erzeugt<br />
Dies legt nahe, die Vorgehensweise zu erforschen, falls kein akzeptierendes Neuron<br />
existiert.<br />
Wenn dies der Fall ist, so wird einfach ein akzeptierendes Neuron k für unser Trainingsbeispiel<br />
neu erzeugt. Dies hat zur Folge, dass natürlich ck und σk initialisiert werden<br />
müssen.<br />
Intuitiv verstehbar ist die Initialisierung von ck: Das Zentrum des neuen Neurons wird<br />
einfach auf das Trainingsbeispiel gesetzt, es gilt also<br />
ck = p.<br />
Wir erzeugen ein neues Neuron, weil keins in der Nähe von p ist – also setzen wir das<br />
Neuron sinnvollerweise genau auf p.<br />
Doch wie wird ein σ gesetzt, wenn ein neues Neuron gebildet wird? Hierfür gibt es<br />
verschiedene Taktiken:<br />
Init-σ: Es wird immer ein vorherbestimmtes, statisches σ gewählt.<br />
Minimum-σ: Wir schauen uns die σ aller Neurone an und wählen das Minimum.<br />
Maximum-σ: Wir schauen uns die σ aller Neurone an und wählen das Maximum.<br />
Mean-σ: Der Mittelwert der σ aller Neurone wird gewählt.<br />
Aktuell ist die Mean-σ-Variante die favorisierte, obwohl das Lernverfahren mit den anderen<br />
auch funktioniert. Die Minimum-σ-Variante lässt die Neurone hierbei tendenziell<br />
weniger Fläche einnehmen, die Maximum-σ-Variante tendenziell mehr.<br />
Definition A.8 (Erzeugen eines ROLF-Neurons). Wird ein neues ROLF-Neuron k<br />
durch Eingabe eines Trainingsbeispiels p erzeugt, so wird ck mit p initialisiert und σk<br />
nach einer der obigen Strategien (Init-σ, Minimum-σ, Maximum-σ, Mean-σ).<br />
Ein gutes Kriterium für ein Trainingsende ist, wenn nach immer wieder zufällig permutierter<br />
Präsentation der Muster bei einer Epoche kein neues Neuron mehr erzeugt<br />
wurde und die Neuronenpositionen sich kaum noch verändern.
A.5.3 Auswertung eines ROLFs<br />
Der Trainingsalgorithmus hat zur Folge, dass die ROLF-Neurone nach und nach die<br />
Trainingsmenge recht gut und genau abdecken, und dass eine hohe Konzentration von<br />
Punkten an einem Fleck des Eingaberaums nicht automatisch mehr Neurone erzeugen<br />
muss. Eine unter Umständen sehr große Punktwolke wird also auf (relativ zur<br />
Eingabemenge) sehr wenige Repräsentanten reduziert.<br />
Die Anzahl der Cluster lässt sich dann sehr einfach bestimmen: Zwei Neurone sind<br />
(nach Definition beim ROLF) verbunden, wenn deren perzeptive Flächen sich überlappen<br />
(es wird also eine Art Nearest Neighbouring mit den variablen perzeptiven<br />
Flächen ausgeführt). Ein Cluster ist eine Gruppe von verbundenen Neuronen bzw. von<br />
diesen Neuronen abgedeckten Punkten des Eingaberaums (Abb. A.3 auf der folgenden<br />
Seite).<br />
Selbstverständlich kann man das fertige ROLF-Netz auch mit anderen Clusteringverfahren<br />
auswerten, also Cluster in den Neuronen suchen. Insbesondere bei Clusteringverfahren,<br />
deren Speicheraufwand quadratisch zu |P | steigt, kann der Speicheraufwand<br />
so dramatisch reduziert werden, da es in aller Regel wesentlich weniger ROLF-Neurone<br />
als ursprüngliche Datenpunkte gibt, die Neurone die Datenpunkte aber recht gut repräsentieren.<br />
A.5.4 Vergleich mit populären Clusteringverfahren<br />
Es ist offensichtlich, dass der Löwenanteil des Speicheraufwands bei den ROLFs beim<br />
Speichern der Neurone liegt und nicht etwa beim Speichern von Eingabepunkten. Dies<br />
ist von großem Vorteil bei riesigen Punktwolken mit sehr vielen Punkten.<br />
Unser ROLF als neuronales Clusteringverfahren hat also, da die Datenpunkte nicht<br />
komplett gespeichert werden müssen, die Fähigkeit des Online-Lernens, was zweifellos<br />
einen großen Vorteil darstellt. Weiterhin kann es (ähnlich dem ε Nearest Neighbouring<br />
bzw. k Nearest Neighbouring) Cluster von eingeschlossenen Clustern unterscheiden –<br />
jedoch durch die Online-Präsentation der Daten ohne quadratischen Speicheraufwand,<br />
der mit Abstand der größte Nachteil der beiden Neighbouring-Verfahren ist.<br />
Es wird weiterhin durch die variablen perzeptiven Flächen auf die Größe der jeweiligen<br />
Cluster im Verhältnis zu ihrer Entfernung voneinander eingegangen – was ebenfalls bei<br />
den beiden genannten Verfahren nicht immer der Fall ist.
Abbildung A.3: Ablauf des Clusterings durch ein ROLF. Oben die Eingabemenge, in der Mitte die<br />
Abdeckung durch ROLF-Neurone, unten die reine Abdeckung durch die Neurone (Repräsentanten).
Im Vergleich mit dem k-Means-Clustering schneidet das ROLF auch gut ab: Erstens<br />
muss man nicht die Clusteranzahl im Vorhinein wissen, zum zweiten erkennt das k-<br />
Means-Clustering Cluster, die von anderen Clustern eingeschlossen sind, nicht als separate<br />
Cluster an.<br />
A.5.5 Die Initialisierung von Radien, Lernraten und Multiplikator ist nicht<br />
trivial<br />
Natürlich sollen auch die Nachteile des ROLFs nicht verschwiegen werden: Es ist nicht<br />
immer leicht, den Initialwert für die σ und das ρ gut zu wählen. In das ρ und den<br />
σ-Startwert kann man dem ROLF sozusagen das Vorwissen über die Datenmenge mitgeben:<br />
Feinkörnig geclusterte Daten sollten ein kleines ρ und einen kleinen σ-Startwert<br />
verwenden. Je kleiner aber das ρ, desto weniger Chance haben die Neuronen, größer<br />
zu werden, wenn nötig. Hier gibt es wieder keine Patentrezepte, genau wie für die<br />
Lernraten ηc und ησ.<br />
Beliebt für ρ sind Multiplikatoren im unteren einstelligen Bereich, wie 2 oder 3. Bei<br />
ηc und ησ wird mit Werten um 0.005 bis 0.1 erfolgreich gearbeitet, auch bei diesem<br />
Netztyp sind Variationen zur Laufzeit denkbar. Startwerte für σ hängen in der Regel<br />
sehr von der Cluster- und Datenstreuung ab (müssen also oft ausprobiert werden),<br />
wobei diese gegenüber falschen Initialisierungen zumindest bei der Mean-σ-Strategie<br />
nach einiger Trainingszeit relativ robust sind.<br />
Insgesamt muss sich das ROLF im Vergleich zu den anderen Clusteringverfahren durchaus<br />
nicht verstecken und wird insbesondere für speicherarme Systeme oder sehr große<br />
Datenmengen sehr interessant sein.<br />
A.5.6 Anwendungsbeispiele<br />
Ein erstes Anwendungsbeispiel könnte z.B. das Finden von Farbclustern in RGB-<br />
Bildern sein. Ein weiteres direkt in der ROLF-Veröffentlichung beschriebenes Einsatzgebiet<br />
ist das Erkennen von Worten, welche in einen 720dimensionalen Merkmalsraum<br />
überführt wurden – wir sehen also, dass die ROLFs auch gegenüber höheren Dimensionen<br />
relativ robust sind. Weitere mir bekannte Anwendungsgebiete liegen in der<br />
Entdeckung und Zuordnung von Angriffen auf Netzwerksysteme.
Übungsaufgaben<br />
Aufgabe 19. Bestimmen Sie mindestens vier Adaptionsschritte für ein einzelnes<br />
ROLF-Neuron k, wenn die vier untenstehenden Muster nacheinander in der angegebenen<br />
Reihenfolge präsentiert werden. Die Startwerte für das ROLF-Neuron seien<br />
ck = (0.1, 0.1) und σk = 1. Weiter gelte ηc = 0.5 sowie ησ = 0. Sei ρ = 3.<br />
P = {(0.1, 0.1);<br />
= (0.9, 0.1);<br />
= (0.1, 0.9);<br />
= (0.9, 0.9)}.
Anhang B<br />
Exkurs: <strong>Neuronale</strong> <strong>Netze</strong> zur Vorhersage<br />
Betrachtung einer Anwendung <strong>Neuronale</strong>r <strong>Netze</strong>: Ein Blick in die Zukunft von<br />
Zeitreihen.<br />
Nach Betrachtung verschiedenster Paradigmen <strong>Neuronale</strong>r <strong>Netze</strong> ist es sinnvoll, nun<br />
eine Anwendung <strong>Neuronale</strong>r <strong>Netze</strong> zu betrachten, die viel thematisiert und (wie wir<br />
noch sehen werden) auch für Betrug genutzt wird: Die Anwendung der Zeitreihenvorhersage.<br />
Dieses Exkurskapitel gliedert sich hierbei in die Beschreibung von Zeitreihen<br />
und Abschätzungen, unter welchen Voraussetzungen man überhaupt nur Werte einer<br />
Zeitreihe vorhersagen kann. Zum Schluß möchte ich noch etwas zu den häufigen Softwareangeboten<br />
sagen, die mit Hilfe <strong>Neuronale</strong>r <strong>Netze</strong> oder anderer Verfahren Aktienkurse<br />
oder andere wirtschaftliche Kenngrößen vorhersagen sollen.<br />
Das Kapitel soll weniger eine ausführliche Beschreibung sein, sondern vielmehr ein<br />
paar Denkansätze für die Zeitreihenvorhersage nennen, insofern werde ich mich mit<br />
formalen Definitionen wieder zurückhalten.<br />
B.1 Über Zeitreihen<br />
Eine Zeitreihe ist eine Reihe von Werten, welche in der Zeit diskretisiert ist. Beispielsweise<br />
könnten täglich gemessene Temperaturwerte oder andere Wetterdaten eines Ortes<br />
eine Zeitreihe darstellen – auch Aktienkurswerte stellen eine Zeitreihe dar. Zeitreihen<br />
sind häufig zeitlich äquidistant gemessen, und bei vielen Zeitreihen ist sehr von Interesse,<br />
wie denn die Zukunft ihrer Werte aussieht – nennen wir als Beispiel nur die tägliche<br />
Wettervorhersage.<br />
225
Abbildung B.1: Eine Funktion x der Zeit wird zu diskreten Zeitpunkten abgetastet (zeitdiskretisiert),<br />
wir erhalten also eine Zeitreihe. Die abgetasteten Werte werden in ein <strong>Neuronale</strong>s Netz<br />
eingegeben (hier im Beispiel ein SLP), welches lernen soll, Werte der Zeitreihe vorherzusagen, welche<br />
in der Zukunft liegen.<br />
Zeitreihen können auch in einem bestimmten zeitlichen Abstand ∆t abgetastete Werte<br />
einer eigentlich kontinuierlichen Funktion sein (Abb. B.1).<br />
Wenn wir eine Zeitreihe vorhersagen möchten, so suchen wir ein <strong>Neuronale</strong>s Netz, was<br />
vergangene Werte der Zeitreihe auf zukünftige abbildet – kennen wir eine Zeitreihe<br />
also auf längeren Abschnitten, so sind uns genug Trainingsbeispiele gegeben. Diese<br />
sind natürlich keine Beispiele der vorherzusagenden Zukunft, aber man versucht mit<br />
ihrer Hilfe, die Vergangenheit zu verallgemeinern und zu extrapolieren.<br />
Bevor wir uns allerdings an die Vorhersage einer Zeitreihe machen, müssen wir uns ein<br />
paar Gedanken zu Fragen über die betrachtete Zeitreihe machen – bzw. sicherstellen,<br />
dass unsere Zeitreihe einige Bedingungen erfüllt.
1. Haben wir überhaupt Anhaltspunkte dafür, dass die Zukunft der Zeitreihe auf<br />
irgendeine Weise von ihrer Vergangenheit abhängt? Steckt in der Vergangenheit<br />
der Zeitreihe also Information über ihre Zukunft?<br />
2. Haben wir genug vergangene Werte der Zeitreihe als Trainingsmuster?<br />
3. Im Falle einer Vorhersage einer kontinuierlichen Funktion: Wie müssen wir ∆t<br />
sinnvollerweise wählen?<br />
Wir wollen diese Fragen nun etwas näher beleuchten.<br />
Wieviel Information über die Zukuft ist in der Vergangenheit einer Zeitreihe vorhanden?<br />
Dies ist mit Abstand die wichtigste Frage, die wir für jede Zeitreihe, die wir in<br />
die Zukunft abbilden wollen, beantworten müssen. Sind die zukünftigen Werte einer<br />
Zeitreihe beispielsweise überhaupt nicht von den vergangenen abhängig, so ist überhaupt<br />
keine Zeitreihenvorhersage aus ihnen möglich.<br />
Wir gehen in diesem Kapitel von Systemen aus, deren Zustände auch auf ihre Zukunft<br />
schließen lassen – deterministische Systeme. Dies bringt uns erst einmal zu der Frage,<br />
was ein Systemzustand ist.<br />
Ein Systemzustand beschreibt ein System für einen bestimmten Zeitpunkt vollständig.<br />
Die Zukunft eines deterministischen Systems wäre durch die vollständige Beschreibung<br />
seines aktuellen Zustands also eindeutig bestimmt.<br />
Das Problem in der Realität ist, dass ein solcher Zustandsbegriff alle Dinge umfasst,<br />
die auf irgendeine Weise Einfluss auf unser System nehmen.<br />
Im Falle unserer Wettervorhersage für einen Ort könnten wir die Temperatur, den<br />
Luftdruck und die Wolkendichte als den Wetterzustand des Ortes zu einem Zeitpunkt<br />
t durchaus bestimmen – doch der gesamte Zustand würde wesentlich mehr umfassen.<br />
Hier wären weltweite wettersteuernde Phänomene von Interesse, genauso wie vielleicht<br />
kleine lokale Phänomene, z.B. die Kühlanlage des örtlichen Kraftwerks.<br />
Es ist also festzuhalten, dass der Systemzustand für die Vorhersage wünschenswert,<br />
aber nicht immer zu bekommen ist. Oft sind nur Teile des aktuellen Zustands erfassbar<br />
– wie beim Wetter die verschiedenen angesprochenen Wettergrößen.<br />
Wir können aber diese Schwäche teilweise ausgleichen, indem wir nicht nur die beobachtbaren<br />
Teile eines einzigen (des letzten) Zustandes in die Vorhersage mit einfließen<br />
lassen, sondern mehrere vergangene Zeitpunkte betrachten. Hieraus wollen wir nun<br />
unser erstes Vorhersagesystem formen:
xt−3<br />
xt−2<br />
xt−1<br />
xt<br />
<br />
Prediktor<br />
˜xt+1<br />
<br />
Abbildung B.2: Darstellung der One Step Ahead Prediction – aus einer Reihe vergangener Werte<br />
versucht man, den zukünftigen Wert zu errechnen. Das vorhersagende Element (in unserem Fall ein<br />
<strong>Neuronale</strong>s Netz) nennt man Prediktor.<br />
B.2 One Step Ahead Prediction<br />
Den Vorhersageversuch für den nächsten zukünftigen Wert einer Zeitreihe aus vergangenen<br />
Werten nennen wir One Step Ahead Prediction (Abb. B.2).<br />
Ein solches Prediktorsystem erhält also die letzten n observierten Zustandsteile des<br />
Systems als Eingabe und gibt die Vorhersage für den kommenden Zustand (oder Zustandsteil)<br />
aus. Die Idee, dass wir einen Zustandsraum mit Zuständen haben, die wir<br />
vorhersagen können, nennt man State Space Forecasting.<br />
Ziel des Prediktors ist es, eine Funktion<br />
f(xt−n+1, . . . , xt−1, xt) = ˜xt+1<br />
zu realisieren, welche exakt n vergangene Zeitwerte entgegennimmt, um daraus den<br />
zukünftigen Wert vorherzusagen. Vorhergesagte Werte wollen wir mit einer Tilde (z.B.<br />
˜x) überschreiben, um sie von den tatsächlichen zukünftigen Werten zu unterscheiden.<br />
Der intuitivste und einfachste Ansatz wäre, eine Linearkombination<br />
˜xi+1 = a0xi + a1xi−1 + . . . + ajxi−j<br />
zu suchen, welche unsere Bedingungen näherungsweise erfüllt.<br />
(B.1)<br />
(B.2)
Eine solche Konstruktion nennt man digitales Filter. Hier nutzt man aus, dass wir<br />
bei Zeitreihen in der Regel über sehr viele vergangene Werte verfügen, so dass wir eine<br />
Reihe von Gleichungen aufstellen können 1 :<br />
xt = a0xt−1 + . . . + ajx t−1−(n−1)<br />
xt−1 = a0xt−2 + . . . + ajx t−2−(n−1)<br />
. (B.3)<br />
xt−n = a0xt−n + . . . + ajx t−n−(n−1)<br />
Man könnte also n Gleichungen für n viele unbekannte Koeffizienten finden und so<br />
auflösen (soweit möglich). Oder noch ein besserer Ansatz: Wir könnten m > n Gleichungen<br />
für n Unbekannte so verwenden, dass die Summe der Fehlerquadrate der<br />
Vorhersagen, die uns ja bereits bekannt sind, minimiert wird – genannt Moving-<br />
Average-Verfahren.<br />
Diese lineare Struktur entspricht aber einfach einem Singlelayerperceptron mit linearer<br />
Aktivierungsfunktion, welches mit Daten aus der Vergangenheit trainiert wurde (Der<br />
Versuchsaufbau würde der Abb. B.1 auf Seite 226 entsprechen). In der Tat liefert ein<br />
Training mit der Deltaregel hier Ergebnisse, die der analytischen Lösung sehr nahe<br />
liegen.<br />
Auch wenn man damit oft schon sehr weit kommt, haben wir gesehen, dass man<br />
mit einem Singlelayerperceptron viele Problemstellungen nicht abdecken kann. Weitere<br />
Schichten mit linearer Aktivierungsfunktion bringen uns auch nicht weiter, da ein<br />
Multilayerperceptron mit ausschließlich linearen Aktivierungsfunktionen sich auf ein<br />
Singlelayerperceptron reduzieren lässt. Diese Überlegungen führen uns zum nichtlinearen<br />
Ansatz.<br />
Uns steht mit dem Multilayerperceptron und nichtlinearen Aktivierungsfunktionen ein<br />
universeller nichtlinearer Funktionsapproximator zur Verfügung, wir könnten also ein<br />
n-|H|-1-MLP für n viele Eingaben aus der Vergangenheit verwenden. Auch ein RBF-<br />
Netz wäre verwendbar, wir erinnern uns aber daran, dass die Zahl n hier im kleinen<br />
Rahmen bleiben muss, da hohe Eingabedimensionen in RBF-<strong>Netze</strong>n sehr aufwändig<br />
zu realisieren sind. Wenn man also viele Werte aus der Vergangenheit mit einbeziehen<br />
will, ist ein Multilayerperceptron deutlich weniger rechenaufwändig.<br />
1 Ohne diesen Umstand weiter zu betrachten möchte ich anmerken, dass die Vorhersage oft einfacher wird,<br />
je mehr vergangene Werte der Zeitreihe zur Verfügung stehen. Ich bitte den Leser, hierzu etwas zum<br />
Nyquist-Shannon-Abtasttheorem zu recherchieren.
xt−3<br />
xt−2<br />
xt−1<br />
xt<br />
<br />
Prediktor<br />
<br />
Prediktor<br />
<br />
˜xt+1<br />
<br />
Abbildung B.3: Darstellung der Two Step Ahead Prediction – aus einer Reihe vergangener Werte<br />
versucht man, durch einen zweiten Prediktor unter Einbeziehung eines bereits vorhergesagten<br />
Wertes den zweiten zukünftigen Wert vorherzusagen.<br />
B.3 Two Step Ahead Prediction<br />
Was für Lösungsansätze können wir denn finden, wenn wir weiter in die Zukunft sehen<br />
wollen?<br />
B.3.1 Rekursive Two Step Ahead Prediction<br />
Um beispielsweise zwei Zeitschritte in die Zukunft zu schauen, könnten wir einfach zwei<br />
One Step Ahead Predictions hintereinander ausführen (Abb. B.3), also eine rekursive<br />
Two Step Ahead Prediction ausführen. Leider ist aber der von einer One Step<br />
Ahead Prediction ermittelte Wert in aller Regel nicht exakt, so dass sich die Fehler<br />
schnell aufschaukeln können und, je öfter man die Predictions hintereinander ausführt,<br />
das Ergebnis immer ungenauer wird.<br />
B.3.2 Direkte Two Step Ahead Prediction<br />
Wir ahnen schon, dass es eine bessere Variante gibt: So wie wir das System auf die<br />
Vorhersage des nächsten Wertes trainieren können, können wir das natürlich auch<br />
mit dem übernächsten Wert – wir trainieren also z.B. ein <strong>Neuronale</strong>s Netz direkt<br />
darauf, zwei Zeitschritte in die Zukunft zu blicken, was wir Direct Two Step Ahead<br />
Prediction (Abb. B.4 auf der rechten Seite) nennen. Die Direct Two Step Ahead<br />
<br />
˜xt+2
xt−3<br />
xt−2<br />
xt−1<br />
xt<br />
<br />
Prediktor<br />
˜xt+1<br />
˜xt+2<br />
<br />
Abbildung B.4: Darstellung der Direct Two Step Ahead Prediction. Hier wird direkt der zweite<br />
Zeitschritt vorhergesagt, und der erste übersprungen. Sie unterscheidet sich technisch nicht von<br />
einer One Step Ahead Prediction.<br />
Prediction ist offensichtlich technisch identisch mit der One Step Ahead Prediction,<br />
der Unterschied liegt nur im Training.<br />
B.4 Weitere Optimierungsansätze für die Prediction<br />
Die Möglichkeit, in der Zukunft weiter entfernt liegende Werte vorherzusagen, ist nicht<br />
nur wichtig, weil wir die Zukunft weiter vorhersagen zu versuchen – es kann auch<br />
periodische Zeitreihen geben, wo es anders schwer möglich ist: Wenn eine Vorlesung<br />
jeden Dienstag um 09:00 Uhr stattfindet, nützt uns die Information, wieviele Personen<br />
Montags im Hörsaal saßen, für die Prädiktion der Vorlesungsteilnehmerzahl sehr wenig.<br />
Gleiches gilt z.B. für periodisch auftretende Pendlerstaus.<br />
B.4.1 Veränderung zeitlicher Parameter<br />
Es kann also sehr sinnvoll sein, in der Zeitreihe sowohl in Vergangenheit als auch in<br />
Zukunft bewusst Lücken zu lassen, also den Parameter ∆t einzuführen, der angibt,<br />
der wievielte zurückliegende Wert jeweils zur Prädiktion genutzt wird. Wir bleiben<br />
also technisch gesehen bei einer One Step Ahead Prediction, und strecken nur den<br />
Eingaberaum oder aber wir trainieren die Vorhersage weiter entfernt liegender Werte.<br />
Auch Kombinationen verschiedener ∆t sind möglich: Im Falle der Stauvorhersage für<br />
einen Montag könnten zusätzlich zu den letzten Montagen die letzten paar Tage als Dateninput<br />
genutzt werden. Wir nutzen so also die letzten Werte mehrerer Perioden, in
xt−3<br />
yt−3<br />
xt−2<br />
yt−2<br />
xt−1<br />
yt−1<br />
xt<br />
yt<br />
<br />
<br />
Prediktor<br />
˜xt+1<br />
<br />
Abbildung B.5: Darstellung der Heterogenen One Step Ahead Prediction. Vorhersage einer Zeitreihe<br />
unter Betrachtung einer weiteren.<br />
xt−3<br />
yt−3<br />
xt−2<br />
yt−2<br />
xt−1<br />
yt−1<br />
xt<br />
yt<br />
<br />
<br />
Prediktor<br />
˜xt+1<br />
<br />
Abbildung B.6: Heterogene One Step Ahead Prediction von zwei Zeitreihen gleichzeitig.<br />
diesem Fall einer wöchentlichen und einer täglichen. Wir könnten in Form der Ferienanfänge<br />
auch noch eine jährliche hinzunehmen (jeder von uns hat bestimmt schon einmal<br />
viel Zeit auf der Autobahn verbracht, weil er den Ferienanfang vergessen hatte).<br />
B.4.2 Heterogene Prediction<br />
Eine weitere Variante der Vorhersage wäre, aus mehreren Zeitreihen etwas über die<br />
Zukunft einer einzigen Zeitreihe vorherzusagen, falls man annimmt, dass die zusätzliche<br />
Zeitreihe etwas mit der Zukunft der ersten zu tun hat (heterogene One Step Ahead<br />
Prediction, Abb. B.5).<br />
Will man zwei Ausgaben zu zwei Zeitreihen, welche etwas miteinander zu tun haben,<br />
vorhersagen, kann man natürlich zwei parallele One Step Ahead Predictions ausführen<br />
(dies wird analytisch oft gemacht, weil die Gleichungen sonst irgendwann sehr<br />
<br />
˜yt+1
unübersichtlich werden) – oder man hängt im Falle der <strong>Neuronale</strong>n <strong>Netze</strong> einfach ein<br />
Outputneuron mehr an und nutzt Wissen von beiden Zeitreihen für beide Ausgaben<br />
(Abb. B.6 auf der linken Seite).<br />
Mehr und allgemeineres Material zum Thema „Zeitreihen“ findet sich unter [WG94].<br />
B.5 Bemerkungen zur Vorhersage von Aktienkursen<br />
Viele Personen schauen sich die Veränderung eines Aktienkurses in der Vergangenheit<br />
an und versuchen daraus auf die Zukunft zu schließen, um Profit daraus zu ziehen.<br />
Aktienkurse sind aus sich selbst heraus unstetig und daher prinzipiell schon einmal<br />
schwierige Funktionen. Weiterhin kann man die Funktionen nur zu diskreten Werten<br />
abrufen, oft beispielsweise im Tagesrhytmus (wenn man Glück hat, noch mit Maximalund<br />
Minimalwerten pro Tag), wo natürlich die Tagesschwankungen wieder wegfallen.<br />
Dies macht die Sache auch nicht einfacher.<br />
Es gibt nun Chartisten, also Personen, welche sich viele Diagramme anschauen und mit<br />
viel Hintergrundwissen und oft Jahrzehnten an Erfahrung entscheiden, ob Wertpapiere<br />
gekauft werden sollten oder nicht (und damit auch oft Erfolg haben).<br />
Neben den Wertpapierkursen sind auch Wechselkurse von Währungen sehr interessant<br />
vorherzusagen: Wenn man 100 Euro in Dollar umtauscht, diese in Pfund und diese wieder<br />
in Euro, kann passieren, dass man zum Schluss 110 Euro herausbekommt. Wenn<br />
man das allerdings herausgefunden hat, würde man das öfter machen und somit selbst<br />
die Wechselkurse in einen Zustand verändern, in dem ein solcher vermehrender Kreislauf<br />
nicht mehr möglich ist (wäre das nicht so, könnte man ja Geld herstellen, indem<br />
man sozusagen ein finanzielles Perpetuum Mobile erschafft).<br />
Gute Wertpapier- und Wechselkursbroker heben oder senken den Daumen an der Börse<br />
– und geben damit an, ob eine Aktie oder ein Wechselkurs ihrer Meinung nach<br />
steigen wird. Sie geben also mathematisch ausgedrückt das erste Bit (Vorzeichen) der<br />
ersten Ableitung des Wechselkurses an. Exzellente Weltklasse-Broker erreichen damit<br />
Erfolgsraten von etwas über 70%.<br />
In Großbritannien ist es mit einer heterogenen One-Step-Ahead-Prediction gelungen,<br />
diese Vorhersagerichtigkeit auf 76% zu steigern: Zusätzlich zu der Zeitreihe des Wertes<br />
wurden noch Indikatoren miteinbezogen, wie z.B. der Ölpreis in Rotterdam oder die<br />
US-Staatsverschuldung.<br />
Das einmal zur Größenordnung der Richtigkeit von Börsenschätzungen – wir reden ja<br />
immer noch über das Erste Bit der Ersten Ableitung! Damit ist uns auch noch keine
Information gegeben, wie stark der erwartete Anstieg oder Abfall ist, und so auch nicht,<br />
ob sich der ganze Aufwand lohnt: Vielleicht macht uns eine einzige falsche Vorhersage<br />
den ganzen Gewinn von hundert richtigen wieder zunichte.<br />
Wie verhalten sich also <strong>Neuronale</strong> <strong>Netze</strong> zur Aktienkursvorhersage? Wir nehmen ja<br />
ganz intuitiv an, dass die Aktienkurswerte der Zukunft eine Funktion der Aktienwerte<br />
von Zeitpunkten davor sind.<br />
Genau diese Annahme ist jedoch irrig: Aktienkurse sind keine Funktion ihrer Vergangenheit,<br />
sondern eine Funktion ihrer mutmaßlichen Zukunft. Wir kaufen keine Aktien,<br />
weil sie in den letzten Tagen sehr gestiegen sind – sondern weil wir denken, dass sie<br />
morgen höher steigen werden. Kaufen viele Personen aus diesem Einfall heraus eine<br />
Aktie, so treiben sie ihren Kurs in die Höhe, und haben also mit ihrer Mutmaßung recht<br />
– es entsteht eine Self Fulfilling Prophecy, ein in der Wirtschaft lange bekanntes<br />
Phänomen.<br />
Gleiches gilt für den umgekehrten Fall: Wir verkaufen Aktien, weil wir denken, dass<br />
sich morgen die Kurse nach unten bewegen werden – was den Kurs am nächten Tag<br />
nach unten drückt und am übernächsten in aller Regel noch viel mehr.<br />
Immer wieder taucht Software auf, die mit wissenschaftlichen Schlagworten wie z.B.<br />
<strong>Neuronale</strong>n <strong>Netze</strong>n behauptet, Aktienkurse vorhersagen zu können. Kaufen Sie diese<br />
nicht – zusätzlich zu den oben genannten wissenschaftlichen Ausschlusskriterien aus<br />
einem einfachen Grund: Wenn diese Tools so toll funktionieren – warum verkauft die<br />
Herstellerfirma sie dann? Nützliches Wirtschaftswissen wird in aller Regel geheimgehalten,<br />
und wenn wir einen Weg wüssten, garantiert mit Aktien reich zu werden, würden<br />
wir doch durch diesen Weg Millionen verdienen, und nicht in 30-Euro-Häppchen durch<br />
den Verkauf desselben, oder?
Anhang C<br />
Exkurs: Reinforcement Learning<br />
Was, wenn keine Trainingsbeispiele existieren, man aber trotzdem beurteilen<br />
kann, wie gut man gelernt hat, ein Problem zu lösen? Betrachten wir ein<br />
Lernparadigma, welches zwischen überwachtem und unüberwachtem Lernen<br />
anzusiedeln ist.<br />
Wir wollen nun einen eher exotischen Ansatz des Lernens kennenlernen – einfach, um<br />
einmal von den üblichen Verfahren wegzukommen. Wir kennen Lernverfahren, in denen<br />
wir einem Netz genau sagen, was es tun soll, also beispielhafte Ausgabewerte bereitstellen.<br />
Wir kennen ebenfalls Lernverfahren, wie bei den Self Organizing Maps, in denen<br />
ausschließlich Eingabewerte gegeben werden.<br />
Wir wollen nun eine Art Mittelding erforschen: Das Lernparadigma des bestärkenden<br />
Lernens – Reinforcement Learning nach Sutton und Barto [SB98].<br />
Reinforcement Learning an sich ist kein <strong>Neuronale</strong>s Netz, sondern nur eines der drei<br />
Lernparadigmen, die wir bereits in Kapitel 4 genannt haben. Manche Quellen zählen<br />
es zu den überwachten Lernverfahren, da man ein Feedback gibt – durch die sehr rudimentäre<br />
Art des Feedbacks ist es aber begründet von den überwachten Lernverfahren<br />
abzugrenzen, mal ganz abgesehen von der Tatsache, dass es keine Trainingsbeispiele<br />
gibt.<br />
Während allgemein bekannt ist, dass Verfahren wie Backpropagation im Gehirn selbst<br />
nicht funktionieren können, wird Reinforcement Learning allgemein als biologisch wesentlich<br />
motivierter angesehen.<br />
Der Ausdruck Reinforcement Learning (Bestärkendes Lernen) kommt aus den<br />
Kognitionswissenschaften und der Psychologie und beschreibt das in der Natur überall<br />
vorhandene Lernsystem durch Zuckerbrot und Peitsche, durch gute Erfahrungen und<br />
235
schlechte Erfahrungen, Belohnung und Bestrafung. Es fehlt aber eine Lernhilfe, die<br />
uns genau erklärt, was wir zu tun haben: Wir erhalten lediglich ein Gesamtergebnis<br />
für einen Vorgang (Haben wir das Schachspiel gewonnen oder nicht? Und wie sicher<br />
haben wir es gewonnen?), aber keine Ergebnisse für die Zwischenschritte.<br />
Fahren wir beispielsweise mit unserem Fahrrad mit abgewetzten Reifen und einer Geschwindigkeit<br />
von exakt 21, 5 km<br />
h in einer Kurve über Sand mit einer Korngröße von<br />
durchschnittlich 0.1mm, so wird uns niemand genau sagen können, auf welchen Winkel<br />
wir den Lenker einzustellen haben, oder noch schlimmer, wie stark die Muskelkontraktionen<br />
von unseren vielen Muskelteilen in Arm oder Bein dafür sein müssen. Je<br />
nachdem, ob wir das Ende der Kurve unbeschadet erreichen, sehen wir uns aber sehr<br />
schnell mit einer guten oder schlechten Lernerfahrung, einem Feedback bzw. Reward<br />
konfrontiert. Der Reward ist also sehr einfach gehalten – aber dafür auch wesentlich<br />
einfacher verfügbar. Wenn wir nun oft genug verschiedene Geschwindigkeiten und Kurvenwinkel<br />
ausgetestet haben und einige Rewards erhalten haben, werden wir in etwa<br />
ein Gefühl dafür bekommen, was funktioniert und was nicht: Genau dieses Gefühl zu<br />
erhalten, ist das Ziel des Reinforcement Learnings.<br />
Ein weiteres Beispiel für die Quasi-Unmöglichkeit, eine Art Kosten- oder Nutzenfunktion<br />
zu erhalten, ist ein Tennisspieler, der durch komplizierte Bewegungen und ballistische<br />
Bahnen im dreidimensionalen Raum unter Einberechnung von Windrichtung,<br />
Wichtigkeit des Turniers, privaten Faktoren und vielem anderen versucht, seinen sportlichen<br />
Ruhm auf lange Zeit zu maximieren.<br />
Um es gleich vorweg zu sagen: Da wir nur wenig Feedback erhalten, heißt Reinforcement<br />
Learning oft ausprobieren – und damit ist es recht langsam.<br />
C.1 Systemaufbau<br />
Wir wollen nun verschiedene Größen und Bestandteile des Systems kurz ansprechen,<br />
und sie in den nachfolgenden Abschnitten genauer definieren. Reinforcement Learning<br />
repräsentiert grob formuliert die gegenseitige Interaktion zwischen einem Agenten und<br />
einem Umweltsystem (Abb. C.2).<br />
Der Agent soll nun irgendeine Aufgabe lösen, er könnte z.B. ein autonomer Roboter<br />
sein, der Hindernisvermeidung betreiben soll. Der Agent führt in der Umwelt nun<br />
Aktionen aus und bekommt von der Umwelt dafür ein Feedback zurück, das wir im<br />
folgenden Reward nennen wollen. Dieser Kreis aus Aktion und Reward ist charakteristisch<br />
für Reinforcement Learning. Der Agent beeinflusst das System, das System gibt<br />
einen Reward und verändert sich.
Der Reward ist ein reeller oder diskreter Skalar, welcher uns wie oben beschrieben<br />
angibt, wie gut wir unser Ziel erreichen, jedoch keine Anleitung vermittelt, wie wir es<br />
erreichen können. Ziel ist immer, langfristig eine möglichst hohe Summe von Rewards<br />
zu erwirtschaften.<br />
C.1.1 Die Gridworld<br />
Als Lernbeispiel für Reinforcement Learning möchte ich gerne die sogenannte Gridworld<br />
verwenden. Wir werden sehen, dass sie sehr einfach aufgebaut und durchschaubar<br />
ist und daher eigentlich gar kein Reinforcement Learning notwendig ist – trotzdem<br />
eignet sie sich sehr gut, die Vorgehensweisen des Reinforcement Learning an ihr darzustellen.<br />
Definieren wir nun die einzelnen Bestandteile des Reinforcement Systems<br />
beispielhaft durch die Gridworld. Wir werden jedes dieser Bestandteile später noch<br />
genauer beleuchten.<br />
Umwelt: Die Gridworld (Abb. C.1 auf der folgenden Seite) ist eine einfache, diskrete<br />
Welt in zwei Dimensionen, die wir im Folgenden als Umweltsystem verwenden<br />
wollen.<br />
Agent: Als Agent nehmen wir einen einfachen Roboter, der sich in unserer Gridworld<br />
befindet.<br />
Zustandsraum: Wie wir sehen, hat unsere Gridworld 5 × 7 Felder, von denen 6 nicht<br />
begehbar sind. Unser Agent kann also 29 Positionen in der Gridworld besetzen.<br />
Diese Positionen nehmen wir für den Agenten als Zustände.<br />
Aktionsraum: Fehlen noch die Aktionen. Definieren wir einfach, der Roboter könnte<br />
jeweils ein Feld nach oben, unten, rechts oder links gehen (solange dort kein<br />
Hindernis oder der Rand unserer Gridworld ist).<br />
Aufgabe: Die Aufgabe unseres Agenten ist es, aus der Gridworld hinauszufinden. Der<br />
Ausgang befindet sich rechts von dem hell ausgefüllten Feld.<br />
Nichtdeterminismus: Die beiden Hindernisse können durch eine „Tür“ verbunden werden.<br />
Wenn die Tür geschlossen ist (unterer Teil der Abbildung), ist das entsprechende<br />
Feld nicht begehbar. Die Tür kann sich nicht während eines Durchlaufs<br />
verändern, sondern nur zwischen den Durchläufen.<br />
Wir haben nun eine kleine Welt geschaffen, die uns über die nachfolgenden Lernstrategien<br />
begleiten und sie uns anschaulich machen wird.
×<br />
×<br />
Abbildung C.1: Eine graphische Darstellung unserer Gridworld. Dunkel gefüllte Zellen sind Hindernisse<br />
und daher nicht begehbar. Rechts von dem hell gefüllten Feld ist der Ausgang. Das Symbol<br />
× markiert die Startposition unseres Agenten. Im oberen Teil der Abbildung ist die Tür offen, im<br />
unteren geschlossen.<br />
C.1.2 Agent und Umwelt<br />
Unser Ziel ist nun, dass der Agent lernt, was mit Hilfe des Rewards geschieht. Es wird<br />
also über, von und mit einem dynamischen System, der Umwelt, gelernt, um ein Ziel<br />
zu erreichen. Doch was genau heißt eigentlich Lernen in diesem Zusammenhang?<br />
Der Agent soll eine Abbildung von Situationen auf Aktionen (genannt Policy) lernen,<br />
also lernen, was er in welcher Situation tun soll, um ein ganz bestimmtes (gegebenes)<br />
Ziel zu erreichen. Das Ziel wird dem Agenten einfach aufgezeigt, indem er für das<br />
Erreichen eine Belohnung bekommt.<br />
Die Belohnung ist nicht zu verwechseln mit dem Reward – vielleicht ist es auf dem<br />
Weg des Agenten zur Problemlösung auch sinnvoll, zwischendurch hin und wieder etwas<br />
weniger Belohnung oder gar Strafe zu bekommen, wenn das langfristige Ergebnis dafür<br />
maximal ist (ähnlich, wie wenn ein Anleger ein Tief eines Aktienkurses einfach aussitzt<br />
oder ein Bauernopfer beim Schach). Ist der Agent also auf einem guten Weg zum Ziel,<br />
gibt es positiven Reward, wenn nicht, gibt es keinen oder sogar negativen Reward
Reward / neue Situation<br />
<br />
Agent<br />
<br />
Umwelt<br />
Aktion<br />
Abbildung C.2: Der Agent führt Aktionen in seiner Umwelt durch, welche ihm einen Reward gibt.<br />
(Strafe). Die Belohnung ist sozusagen die schlussendliche Summe aller Rewards – wir<br />
wollen sie auch Return nennen.<br />
Nachdem wir nun die Grundbestandteile umgangssprachlich benannt haben, wollen wir<br />
in den folgenden Abschnitten genauer betrachten, aus was wir unser Reinforcement-<br />
Learning-System abstrakt zusammensetzen können.<br />
In der Gridworld: Der Agent ist in der Gridworld ein einfacher Roboter, der aus der<br />
Gridworld herausfinden soll. Umwelt ist die Gridworld selbst, eine diskrete Gitterwelt.<br />
Definition C.1 (Agent). Der Agent bei Reinforcement Learning kann formal beschrieben<br />
werden als eine Abbildung vom Situationsraum S in den Aktionsraum A(st).<br />
Was Situationen st sind, wird später noch definiert und soll nur aussagen, dass der<br />
Aktionsraum von der aktuellen Situation abhängig ist.<br />
Agent: S → A(st) (C.1)<br />
Definition C.2 (Umwelt). Die Umwelt repräsentiert eine stochastische Abbildung<br />
von einer Aktion A unter der aktuellen Situation st auf einen Reward rt und eine neue<br />
Situation st+1.<br />
C.1.3 Zustände, Situationen und Aktionen<br />
Umwelt: S × A → P (S × rt) (C.2)<br />
Wie wir schon angesprochen haben, kann ein Agent sich innerhalb seiner Umwelt in<br />
verschiedenen Zuständen befinden: Im Falle der Gridworld zum Beispiel an verschiedenen<br />
Orten (wir erhalten hier einen zweidimensionalen Zustandsvektor).
Es ist für den Agenten aber nicht immer möglich, alle Informationen seines aktuellen<br />
Zustandes zu erfassen, weswegen wir den Begriff der Situation einführen müssen.<br />
Eine Situation ist ein Zustand aus Agentensicht, also nur eine mehr oder weniger gute<br />
Approximation eines Zustandes.<br />
Situationen lassen es daher nicht im Allgemeinen zu, Folgesituationen eindeutig „vorherzusagen“<br />
– selbst bei einem vollständig deterministischen System haben wir das<br />
vielleicht nicht gegeben. Wenn wir alle Zustände und die Übergänge dazwischen exakt<br />
kennen würden (also das gesamte System), wäre eine optimale Planung möglich<br />
und auch eine optimale Policy einfach findbar – (Methoden liefert z.B. die dynamische<br />
Programmierung).<br />
Wir wissen nun, dass das Reinforcement Learning eine Interaktion zwischen Agent<br />
und System mit Aktionen at und Situationen st ist. Der Agent kann nun nicht selbst<br />
feststellen, ob die aktuelle Situation gut oder schlecht ist: Genau dies ist der Grund,<br />
warum er wie eingangs bereits beschrieben von der Umwelt einen Reward erhält.<br />
In der Gridworld: Zustände sind die Orte, an denen der Agent sich befinden kann.<br />
Situationen kommen den Zuständen in der Gridworld vereinfachend gleich. Mögliche<br />
Aktionen sind nach Norden, Süden, Osten oder Westen zu gehen.<br />
Situation und Aktion können vektoriell sein, der Reward jedoch ist immer ein Skalar<br />
(im Extremfall sogar nur ein Binärwert), da das Ziel von Reinforcement Learning ist,<br />
mit sehr wenig Feedback auszukommen – ein komplizierter vektorieller Reward käme<br />
ja einem richtigen Teaching Input gleich.<br />
Im Übrigen soll ja eine Kostenfunktion minimiert werden, was aber mit einem vektoriellen<br />
Reward so nicht möglich wäre, da wir keine intuitiven Ordnungsrelationen im<br />
Mehrdimensionalen besitzen – also nicht direkt wissen, was jetzt besser oder schlechter<br />
ist.<br />
Definition C.3 (Zustand). In einem Zustand befindet sich der Agent innerhalb seiner<br />
Umwelt. Zustände enthalten jede Information über den Agent im Umweltsystem.<br />
Es ist also theoretisch möglich, aus diesem gottähnlichen Zustandswissen einen Folgezustand<br />
auf eine ausgeführte Aktion in einem deterministischen System eindeutig<br />
vorherzusagen.<br />
Definition C.4 (Situation). Situationen st (hier zum Zeitpunkt t) aus einem Situationsraum<br />
S sind das eingeschränkte, approximative Wissen des Agenten über seinen<br />
Zustand. Die Approximation (von der der Agent nicht einmal wissen kann, wie gut sie<br />
ist) macht eindeutige Vorhersagen unmöglich.
Definition C.5 (Aktion). Aktionen at können vom Agenten ausgeführt werden (wobei<br />
es sein kann, dass je nach Situation ein anderer Aktionsraum A(S) besteht) und<br />
bewirken Zustandsübergänge und damit eine neue Situation aus Sicht des Agenten.<br />
C.1.4 Reward und Return<br />
Wie im wirklichen Leben ist unser Ziel, eine möglichst hohe Belohnung zu erhalten, also<br />
die Summe der erwarteten Rewards r, genannt Return R, langfristig zu maximieren.<br />
Bei endlich vielen Zeitschritten 1 kann man die Rewards einfach aufsummieren:<br />
Rt = rt+1 + rt+2 + . . . (C.3)<br />
∞<br />
=<br />
(C.4)<br />
x=1<br />
rt+x<br />
Der Return wird hierbei natürlich nur abgeschätzt (Würden wir alle Rewards und<br />
damit den Return komplett kennen, bräuchten wir ja nicht mehr lernen).<br />
Definition C.6 (Reward). Ein Reward rt ist eine skalare, reelle oder diskrete (manchmal<br />
sogar nur binäre) Belohnungs- oder Bestrafungsgröße, welche dem Agenten vom<br />
Umweltsystem als Reaktion auf eine Aktion gegeben wird.<br />
Definition C.7 (Return). Der Return Rt ist die Aufkumulierung aller erhaltenen<br />
Rewards bis zum Zeitpunkt t.<br />
C.1.4.1 Umgang mit großen Zeiträumen<br />
Nicht alle Problemstellungen haben aber ein explizites Ziel und damit eine endliche<br />
Summe (unser Agent kann zum Beispiel ein Roboter sein, der die Aufgabe hat, einfach<br />
immer weiter herumzufahren und Hindernissen auszuweichen).<br />
Um im Falle einer unendlichen Reihe von Reward-Abschätzungen keine divergierende<br />
Summe zu erhalten, wird ein abschwächender Faktor 0 < γ < 1 verwendet, der den<br />
Einfluss ferner erwarteter Rewards abschwächt: Das ist nicht nur dann sinnvoll, wenn<br />
kein Ziel an sich existiert, sondern auch, wenn das Ziel sehr weit entfernt ist:<br />
Rt = rt+1 + γ 1 rt+2 + γ 2 rt+3 + . . . (C.5)<br />
∞<br />
= γ<br />
x=1<br />
x−1 rt+x<br />
(C.6)<br />
1 Soviel sind in der Praxis ja nur möglich, auch wenn die Formeln prinzipiell mit unendlichen Summen<br />
arbeiten
Je weiter die Belohnung weg ist, umso weniger Anteil hat sie also an den Entscheidungen<br />
des Agenten.<br />
Eine andere Möglichkeit, die Return-Summe zu handhaben, wäre ein begrenzter Zeithorizont<br />
τ, so dass nur τ viele folgende Rewards rt+1, . . . , rt+τ betrachtet werden:<br />
Rt = rt+1 + . . . + γ τ−1 rt+τ<br />
τ<br />
= γ<br />
x=1<br />
x−1 rt+x<br />
Wir unterteilen also den Zeitstrahl in Episoden. Üblicherweise wird eine der beiden Methoden<br />
zur Begrenzung der Summe verwendet, wenn nicht sogar beide gemeinsam.<br />
Wir versuchen also wie im täglichen Leben, unsere aktuelle Situation an einen gewünschten<br />
Zustand zu approximieren. Da nicht zwangsläufig nur der folgende erwartete Reward,<br />
sondern die erwartete Gesamtsumme bestimmt, was der Agent tut, können auch<br />
Aktionen durchgeführt werden, die kurzfristig erst einmal negativen Reward ergeben<br />
(z.B. das Bauernopfer beim Schach), sich jedoch später auszahlen.<br />
C.1.5 Die Policy<br />
Nachdem wir nun einige Systemelemente des Reinforcement Learnings genau betrachtet<br />
und formalisiert haben, bleibt noch das eigentliche Ziel zu betrachten:<br />
Der Agent lernt während des Reinforcement Learnings eine Policy<br />
Π : S → P (A),<br />
er justiert also fortlaufend eine Abbildung von den Situationen auf die Wahrscheinlichkeiten<br />
P (A), mit denen jede Aktion A in jeder Situation S ausgeführt wird. Eine<br />
Policy kann definiert werden als eine Strategie, Aktionen auszuwählen, die den Reward<br />
auf lange Zeit maximiert.<br />
In der Gridworld: Die Policy ist in der Gridworld die Strategie, nach der der Agent<br />
versucht, aus der Gridworld herauszufinden.<br />
Definition C.8 (Policy). Die Policy Π ist eine Abbildung von Situationen auf Wahrscheinlichkeiten,<br />
jede Aktion aus dem Aktionsraum A auszuführen. Sie ist also formalisierbar<br />
als<br />
(C.7)<br />
(C.8)<br />
Π : S → P (A). (C.9)
Wir unterscheiden hierbei grundsätzlich zwischen zwei Paradigmen von Policies: Eine<br />
Open Loop Policy stellt eine offene Steuerkette dar und bildet aus einer Startsituation<br />
s0 eine Sequenz von Aktionen a0, a1, . . . mit ai = ai(si); i > 0. Der Agent erstellt<br />
also zu Beginn einen Plan und führt ihn sukzessive bis zum Ende aus, ohne die zwischenzeitlichen<br />
Situationen zu berücksichtigen (daher ai = ai(si), Aktionen nach a0<br />
hängen nicht von den Situationen ab).<br />
In der Gridworld: Eine Open Loop Policy würde uns in der Gridworld für eine Startposition<br />
eine exakte Wegbeschreibung zum Ausgang liefern, z.B. von der angegebenen<br />
Startposition den Weg (in Himmelsrichtungsabkürzungen) OOOON.<br />
Eine Open Loop Policy ist also eine Sequenz von Aktionen ohne zwischenzeitliches<br />
Feedback. Aus einer Startsituation wird eine Sequenz von Aktionen generiert. Wenn<br />
man das System 100%ig kennt, kann man mit einer solchen Open Loop Policy erfolgreich<br />
arbeiten und zu sinnvollen Ergebnissen gelangen. Um aber z.B. das Schachspiel<br />
100% zu kennen, müssten wir alle Spielzüge durchprobieren, was sehr aufwändig ist.<br />
Wir müssen uns für derartige Problemstellungen also eine Alternative zur Open Loop<br />
Policy suchen, die aktuelle Situationen in die Handlungsplanung miteinbezieht:<br />
Eine Closed Loop Policy ist ein geschlossener Regelkreis, gewissermaßen eine Funktion<br />
Π : si → ai mit ai = ai(si).<br />
Hier übt die Umwelt Einfluss auf unsere Aktionen aus bzw. der Agent reagiert auf<br />
Input der Umwelt, wie schon in Abb. C.2 dargestellt. Die Closed Loop Policy ist<br />
gewissermaßen ein reaktiver Plan, der aktuelle Situationen auf auszuführende Aktionen<br />
abbildet.<br />
In der Gridworld: Eine Closed Loop Policy würde auf die Aktuelle Position eingehen<br />
und Richtungen nach der Aktion auswählen. Insbesondere wenn dynamisch ein Hindernis<br />
erscheint, ist eine solche Policy die bessere Wahl.<br />
Bei der Wahl der auszuführenden Aktionen können wieder zwei grundsätzliche Strategien<br />
betrachtet werden.<br />
C.1.5.1 Exploitation vs. Exploration<br />
Wie im wirklichen Leben stellt sich während des Reinforcement Learnings oft die Frage,<br />
ob vorhandenes Wissen stur ausgenutzt, oder aber auch neue Wege ausprobiert werden.<br />
Wir wollen zunächst die zwei Extrema betrachten:<br />
Eine Greedy Policy wählt immer den Weg des höchsten Rewards, den wir im voraus<br />
bestimmen können, also des höchsten bekannten Rewards. Diese Policy repräsentiert
den Exploitation-Ansatz und ist erfolgversprechend, wenn man das behandelte System<br />
bereits kennt.<br />
Im Gegensatz zum Exploitation-Ansatz steht der Exploration-Ansatz, der zum Ziel<br />
hat, ein System möglichst umfassend zu erforschen, so dass auch Wege zum Ziel gefunden<br />
werden können, welche auf den ersten Blick vielleicht nicht erfolgversprechend<br />
aussehen, es aber dennoch sind.<br />
Angenommen, wir suchen einen Weg zum Restaurant, so wäre eine auf Nummer sicher<br />
gehende Policy, von überall den Weg zu nehmen, den wir kennen, so unoptimal und<br />
lang er auch sein mag, und nicht zu versuchen, bessere Wege zu erforschen. Ein anderer<br />
Ansatz wäre, auch hin und wieder nach kürzeren Wegen zu forschen, selbst auf die<br />
Gefahr hin, dass die Forschung lange dauert, nichts bringt und wir daher zum Schluß<br />
doch den ursprünglichen Weg nehmen und zu spät ins Restaurant kommen.<br />
In der Realität wird oft eine Kombination beider Verfahren angewandt: Zum Anfang<br />
eines Lernvorgangs wird mit höherer Wahrscheinlichkeit geforscht, während zum Ende<br />
mehr vorhandenes Wissen ausgenutzt wird. Auch eine statische Wahrscheinlichkeitsverteilung<br />
ist hier möglich und wird oft angewandt.<br />
In der Gridworld: Für die Wegsuche in der Gridworld gilt das Restaurantbeispiel natürlich<br />
analog.<br />
C.2 Lernvorgang<br />
Betrachten wir wieder das tägliche Leben. Von einer Situation können wir durch Aktionen<br />
in verschiedene Untersituationen geraten, von jeder Untersituation wieder in Unteruntersituationen.<br />
Gewissermaßen erhalten wir einen Situationsbaum, wobei man<br />
Verknüpfungen unter den Knoten berücksichtigen muss (oft gibt es mehrere Wege, wie<br />
man zu einer Situation gelangen kann – der Baum könnte also treffender als Situationsgraph<br />
bezeichnet werden). Blätter des Baums sind Endsituationen des Systems. Der<br />
Exploration-Ansatz würde den Baum möglichst genau durchsuchen und alle Blätter<br />
kennenlernen, der Exploitation-Ansatz zielsicher zum besten bekannten Blatt gehen.<br />
Analog zum Situationsbaum können wir uns auch einen Aktionsbaum aufbauen – hier<br />
stehen dann in den Knoten die Rewards für die Aktionen. Wir müssen nun vom täglichen<br />
Leben adaptieren, wie genau wir lernen.
C.2.1 Strategien zur Rewardvergabe<br />
Interessant und von großer Wichtigkeit ist die Frage, wofür man einen Reward vergibt<br />
und was für einen Reward man vergibt, da das Design des Rewards das Systemverhalten<br />
maßgeblich steuert. Wie wir oben gesehen haben, gibt es (wieder analog zum<br />
täglichen Leben) in der Regel zu jeder Situation verschiedene Aktionen, welche man<br />
ausführen kann. Es existieren verschiedene Strategien, um die ausgewählten Situationen<br />
zu bewerten und so die zum Ziel führende Aktionsfolge zu lernen. Diese sollen im<br />
Folgenden erst einmal grundsätzlich erläutert werden.<br />
Wir wollen nun einige Extremfälle als Designbeispiele zum Reward anbringen:<br />
Als Pure Delayed Reward bezeichnen wir eine Rewardvergabe ähnlich wie beim<br />
Schachspiel: Wir erhalten unsere Belohnung zum Schluss, und während des Spiels keine.<br />
Diese Methode ist immer dann von Vorteil, wenn man am Ende genau sagen kann, ob<br />
man Erfolg gehabt hat, aber in den Zwischenschritten nicht genau einschätzen kann,<br />
wie gut die eigene Situation ist. Es gilt<br />
rt = 0 ∀t < τ (C.10)<br />
sowie rτ = 1 bei Gewinn und rτ = −1 bei Verlust. Bei dieser Rewardstrategie geben<br />
nur die Blätter des Situationsbaumes einen Reward zurück.<br />
Pure Negative Reward: Hier gilt<br />
rt = −1 ∀t < τ. (C.11)<br />
Dieses System findet den schnellsten Weg zum Ziel, weil dieser automatisch auch der<br />
günstigste in Bezug auf den Reward ist. Man wird bestraft für alles, was man tut –<br />
selbst wenn man nichts tut, wird man bestraft. Diese Strategie hat zur Folge, dass es<br />
die preiswerteste Methode für den Agenten ist, schnell fertig zu werden.<br />
Als weitere Strategie betrachten wir die Avoidance Strategy: Schädlichen Situationen<br />
wird aus dem Weg gegangen. Es gilt<br />
rt ∈ {0, −1}, (C.12)<br />
Fast alle Situationen erhalten hier gar keinen Reward, nur einige wenige erhalten einen<br />
negativen. Diese negativen Situationen wird der Agent weiträumig umgehen.<br />
Achtung: Rewardstrategien können leicht unerwartete Folgen haben. Ein Roboter, dem<br />
man sagt „mach was du willst, aber wenn du ein Hindernis berührst, kriegst du eine<br />
Strafe“, wird einfach stehenbleiben. Wird Stehenbleiben folglich auch bestraft, wird er<br />
kleine Kreise fahren. Bei näherem Überlegen kommt man auf den Gedanken, dass diese
Verhaltensweisen den Return des Roboters optimal erfüllen, aber leider nicht von uns<br />
intendiert waren.<br />
Man kann weiterhin zeigen, dass insbesondere kleine Aufgaben mit negativen Rewards<br />
besser gelöst werden können während man bei großen, komplizierten Aufgaben mit<br />
positiven, differenzierteren Rewards weiter kommt.<br />
In Bezug auf unsere Gridworld wollen wir den Pure Negative Reward als Strategie<br />
wählen: Der Roboter soll möglichst schnell zum Ausgang finden.<br />
C.2.2 Die State-Value-Funktion<br />
Im Gegensatz zu unserem Agenten haben wir eine gottgleiche Sicht auf unsere Gridworld,<br />
so dass wir schnell bestimmen können, welche Roboterstartposition welchen<br />
optimalen Return erreichen kann.<br />
In Abbildung C.3 auf der rechten Seite sind diese optimalen Returns pro Feld aufgetragen.<br />
In der Gridworld: Die State-Value-Funktion für unsere Gridworld stellt genau eine<br />
solche Funktion pro Situation (= Ort) dar, mit dem Unterschied, dass sie nicht bekannt<br />
ist, sondern gelernt werden muss.<br />
Wir sehen also, dass es für den Roboter praktisch wäre, die aktuellen wie zukünftigen<br />
Situationen einer Bewertung unterziehen zu können. Betrachten wir also ein weiteres<br />
Systemelement des Reinforcement Learning, die State-Value-Funktion V (s), welche<br />
mit Bezug auf eine Policy Π auch oft als VΠ(s) bezeichnet wird: Denn ob eine Situation<br />
schlecht ist, hängt ja auch davon ab, was der Agent für ein Allgemeinverhalten Π an<br />
den Tag legt.<br />
Eine Situation, die unter einer risikosuchenden, Grenzen austestenden Policy schlecht<br />
ist, wäre beispielsweise, wenn einem Agent auf einem Fahrrad das Vorderrad in der<br />
Kurve anfängt wegzurutschen und er in dieser Situation aufgrund seiner Draufgänger-<br />
Policy nicht bremst. Mit einer risikobewussten Policy sähe dieselbe Situation schon viel<br />
besser aus, würde also von einer guten State-Value-Funktion höher bewertet werden.<br />
VΠ(s) gibt einfach den Wert zurück, den die aktuelle Situation s unter der Policy Π für<br />
den Agenten gerade hat. Abstrakt nach den obigen Definitionen gesagt, entspricht der<br />
Wert der State-Value-Funktion dem Return Rt (dem erwarteten Wert) einer Situation<br />
st. EΠ bezeichnet hierbei die Menge der erwarteten Returns unter Π und der aktuellen<br />
Situation st.<br />
VΠ(s) = EΠ{Rt|s = st}
-6 -5 -4 -3 -2<br />
-7 -1<br />
-6 -5 -4 -3 -2<br />
-7 -6 -5 -3<br />
-8 -7 -6 -4<br />
-9 -8 -7 -5<br />
-10 -9 -8 -7 -6<br />
-6 -5 -4 -3 -2<br />
-7 -1<br />
-8 -9 -10 -2<br />
-9 -10 -11 -3<br />
-10 -11 -10 -4<br />
-11 -10 -9 -5<br />
-10 -9 -8 -7 -6<br />
Abbildung C.3: Darstellung des jeweils optimalen Returns pro Feld in unserer Gridworld unter der<br />
Pure Negative Reward-Vergabe, oben mit offener Tür und unten mit geschlossener.<br />
Definition C.9 (State-Value-Funktion). Die State-Value-Funktion VΠ(s) hat zur Aufgabe,<br />
den Wert von Situationen unter einer Policy zu ermitteln, also dem Agenten die<br />
Frage zu beantworten, ob eine Situation s gut oder schlecht ist oder wie gut bzw.<br />
schlecht sie ist. Hierfür gibt sie den Erwartungswert des Returns unter der Situation<br />
aus:<br />
Die optimale State-Value-Funktion nennen wir V ∗ Π (s).<br />
VΠ(s) = EΠ{Rt|s = st} (C.13)<br />
Nun hat unser Roboter im Gegensatz zu uns leider keine gottgleiche Sicht auf seine<br />
Umwelt. Er besitzt keine Tabelle mit optimalen Returns, wie wir sie eben aufgezeichnet<br />
haben, an der er sich orientieren könnte. Das Ziel von Reinforcement Learning ist<br />
es, dass der Roboter sich seine State-Value-Funktion anhand der Returns aus vielen<br />
Versuchen nach und nach selbst aufbaut und der optimalen State-Value-Funktion V ∗<br />
annähert (wenn es eine gibt).<br />
In diesem Zusammenhang seien noch zwei Begriffe eingeführt, welche eng mit dem<br />
Kreislauf zwischen State-Value-Funktion und Policy verbunden sind:
V<br />
<br />
<br />
Π<br />
<br />
<br />
V ∗ Π∗ Abbildung C.4: Der Kreislauf des Reinforcement-Learnings, welcher idealerweise zu optimalem Π ∗<br />
bzw. V ∗ führt.<br />
C.2.2.1 Policy evaluation<br />
Policy evaluation nennt man die Vorgehensweise, eine Policy einige Male durchzuprobieren,<br />
auf diese Weise viele Rewards zu erhalten und durch diese mit der Zeit eine<br />
State-Value-Funktion aufzukumulieren.<br />
C.2.2.2 Policy improvement<br />
Policy improvement bedeutet, eine Policy selbst zu verbessern, also aus ihr eine<br />
neue, bessere Policy zu erzeugen. Um die Policy zu verbessern, müssen wir das Ziel<br />
verfolgen, dass der Return zum Schluss einen größeren Wert hat als vorher – man also<br />
einen kürzeren Weg zum Restaurant gefunden hat und ihn auch erfolgreich gegangen<br />
ist.<br />
Das Prinzip des Reinforcement Learnings ist nun, ein Wechselspiel zu realisieren. Man<br />
versucht zu bewerten, wie gut eine Policy in den einzelnen Situationen ist. Wir probieren<br />
eine Policy und erhalten eine veränderte State-Value-Funktion. Aus der Veränderung<br />
der State-Value-Funktion gewinnen wir Informationen über das System, aus der<br />
wir wieder unsere Policy verbessern. Diese beiden Werte ziehen sich nun gegenseitig<br />
hoch, was sich auch mathematisch beweisen lässt – so dass man zum Schluß eine optimale<br />
Policy Π ∗ und eine optimale State-Value-Funktion V ∗ erhält (Abb. C.4). Dieser<br />
Kreislauf hört sich einfach an, ist aber sehr langwierig.<br />
Betrachten wir nun zuerst eine einfache, zufällige Policy, wie unser Roboter seine State-<br />
Value-Funktion ohne Vorwissen langsam ausfüllen und verbessern könnte.
C.2.3 Montecarlo-Methodik<br />
Die einfachste Taktik, eine State-Value-Funktion aufzukumulieren, ist das reine Ausprobieren.<br />
Wir wählen also eine sich rein zufällig verhaltende Policy, welche die aufkumulierte<br />
State-Value-Funktion für ihre Zufallsentscheidungen nicht berücksichtigt. Es<br />
lässt sich beweisen, dass wir in unserer Gridworld irgendwann einmal durch Zufall den<br />
Ausgang finden werden.<br />
Angelehnt an die auf Zufall basierenden Glücksspiele nennen wir diese Vorgehensweise<br />
Montecarlo-Methodik.<br />
Gehen wir weiterhin von einem Pure Negative Reward aus, so ist klar, dass wir für<br />
unser Startfeld in der State-Value-Funktion einen Bestwert von −6 erhalten können.<br />
Je nachdem, welchen zufälligen Weg die zufällige Policy aber einschlägt, können andere<br />
(kleinere) Werte als −6 für das Startfeld auftreten. Intuitiv möchten wir uns für einen<br />
Zustand (also ein Feld) jeweils nur den besseren Wert merken. Hier ist jedoch Vorsicht<br />
geboten: So würde das Lernverfahren nur bei deterministischen Systemen funktionieren.<br />
Unsere Tür, die pro Durchlauf entweder offen oder geschlossen sein kann, würde<br />
Oszillationen bei allen Feldern hervorrufen, deren kürzester Weg zum Ziel durch sie<br />
beeinflusst wird.<br />
Wir verwenden bei der Montecarlo-Methodik also lieber die Lernregel 2<br />
V (st) neu = V (st) alt + α(Rt − V (st) alt),<br />
in der offensichtlich sowohl der alte Zustandswert als auch der erhaltene Return Einfluss<br />
auf die Aktualisierung der State-Value-Funktion haben (α ist die Lernrate). Der Agent<br />
erhält also eine Art Erinnerungsvermögen, neue Erkenntnisse ändern immer nur ein<br />
wenig am Situationswert. Ein beispielhafter Lernschritt findet sich in Abb. C.5 auf der<br />
folgenden Seite.<br />
In dem Beispielbild wurde nur die Zustandswertberechnung für einen einzigen Zustand<br />
(unseren Startzustand) aufgetragen. Dass es möglich ist und auch oft gemacht wird,<br />
die Werte für die zwischendurch besuchten Zustände (im Fall der Gridworld unsere<br />
Wege zum Ziel) gleich mit zu trainieren, sollte offensichtlich sein. Das Ergebnis einer<br />
solchen Rechnung in Bezug auf unser Beispiel findet sich in Abb. C.6 auf Seite 251.<br />
Die Montecarlo-Methodik mag suboptimal erscheinen und ist auch im Regelfall wesentlich<br />
langsamer als die nachfolgend vorgestellten Methoden des Reinforcement Learnings<br />
- allerdings ist sie die einzige, bei der man mathematisch beweisen kann, dass sie funktioniert<br />
und eignet sich daher sehr für theoretische Betrachtungen.<br />
2 Sie wird u.a. unter Verwendung der Bellman-Gleichung hergeleitet, die Herleitung ist aber nicht Bestandteil<br />
des Kapitels.
-1<br />
-6 -5 -4 -3 -2<br />
-1<br />
-14 -13 -12 -2<br />
-11 -3<br />
-10 -4<br />
-9 -5<br />
-8 -7 -6<br />
-10<br />
Abbildung C.5: Anwendung der Montecarlo-Lernregel mit einer Lernrate von α = 0.5. Oben sind<br />
beispielhaft zwei Wege aufgetragen, die der Agent durch Zufall wählt (einer mit offener, einer mit<br />
geschlossener Tür). Unten das Ergebnis der Lernregel für den Wert des Startzustands unter Berücksichtigung<br />
beider Wege. Dadurch, dass unter zufälliger Policy mit der Zeit sehr viele verschiedene<br />
Wege gegangen werden, erhält man eine sehr aussagekräftige State-Value-Funktion.
-1<br />
-10 -9 -8 -3 -2<br />
-11 -3<br />
-10 -4<br />
-9 -5<br />
-8 -7 -6<br />
Abbildung C.6: Erweiterung des Lernbeispiels aus Abb. C.5, in dem auch die Returns für Zwischenzustände<br />
zur Aufkumulierung der State-Value-Funktion herangezogen werden. Sehr schön zu<br />
beobachten ist der niedrige Wert auf dem Türfeld: Wenn dieser Zustand eingenommen werden kann,<br />
ist er ja sehr positiv, wenn die Tür zu ist, kann er gar nicht eingenommen werden.<br />
Π <br />
Evaluation<br />
Policy verbessern<br />
Abbildung C.7: Wir probieren Aktionen in der Umwelt aus und lernen so und verbessern die Policy.<br />
Definition C.10 (Montecarlo-Lernen). Es werden zufällig Aktionen ohne Rücksicht<br />
auf die State-Value-Funktion ausgeführt und langfristig eine aussagekräftige State-<br />
Value-Funktion mit untenstehender Lernregel aufkumuliert.<br />
C.2.4 Temporal Difference Learning<br />
<br />
Q<br />
V (st) neu = V (st) alt + α(Rt − V (st) alt),<br />
Wir lernen im täglichen Leben weitestgehend durch Erfahrung und Ausprobieren. Das<br />
Allermeiste, was wir lernen, geschieht durch Erfahrung; blessurenfrei (oder eben auch<br />
nicht) gehen und Fahrrad fahren, auch geistige Fertigkeiten wie mathematisches Problemlösen<br />
profitieren sehr von Erfahrung und schlichtem Ausprobieren (Trial and Error).<br />
Wir initialisieren also unsere Policy mit irgendwelchen Werten - probieren aus,<br />
lernen und verbessern die Policy so aus Erfahrung (Abb. C.7). Im Unterschied zur<br />
Montecarlo-Methodik wollen wir dies nun auf eine gerichtetere Art und Weise tun.
Genau wie wir durch Erfahrung lernen, in verschiedenen Situationen auf bestimmte<br />
Weise zu reagieren, macht es die Temporal Difference Lernmethode (kurz: TD-<br />
Learning), indem VΠ(s) trainiert wird (der Agent lernt also einschätzen, welche Situationen<br />
viel wert sind und welche nicht). Wir bezeichnen wieder die aktuelle Situation<br />
mit st, die nachfolgende Situation mit st+1 und so weiter. Die Lernformel für die<br />
State-Value-Funktion VΠ(st) ergibt sich also zu<br />
V (st) neu =V (st)<br />
+ α(rt+1 + γV (st+1) − V (st))<br />
<br />
Veränderung des alten Wertes<br />
Wir sehen, dass die zur Lernrate α proportionale Veränderung des Wertes der aktuellen<br />
Situation st beeinflusst wird von<br />
⊲ dem empfangenen Reward rt+1,<br />
⊲ dem mit einem Faktor γ gewichteten bisherigen Return der Nachfolgesituation<br />
V (st+1),<br />
⊲ dem alten Wert der Situation V (st).<br />
Definition C.11 (Temporal Difference Learning). Im Unterschied zur Montecarlo-<br />
Methodik schaut TD-Learning etwas in die Zukunft, indem die Nachfolgesituation st+1<br />
betrachtet wird. Die Lernregel ist definiert zu<br />
C.2.5 Die Action-Value-Funktion<br />
V (st) neu =V (st) (C.14)<br />
+ α(rt+1 + γV (st+1) − V (st)) .<br />
<br />
Veränderung des alten Wertes<br />
Analog zur State-Value-Funktion VΠ(s) ist ein weiterer Systembestandteil des Reinforcement<br />
Learning die Action-Value-Funktion QΠ(s, a), welche eine bestimmte<br />
Aktion a unter einer bestimmten Situation s und der Policy Π bewertet.<br />
In der Gridworld: In der Gridworld sagt uns die Action-Value-Funktion, wie gut es ist,<br />
von einem bestimmten Feld in eine bestimmte Richtung zu gehen (Abb. C.8 auf der<br />
rechten Seite).<br />
Definition C.12 (Action-Value-Funktion). Analog zur State-Value-Funktion bewertet<br />
die Action-Value-Funktion QΠ(st, a) bestimmte Aktionen ausgehend von bestimmten<br />
Situationen unter einer Policy. Die optimale Action-Value-Funktion benennen wir<br />
mit Q ∗ Π (st, a).
0<br />
× +1<br />
-1<br />
Abbildung C.8: Beispielhafte Werte einer Action-Value-Funktion für die Position ×. Nach rechts<br />
gehend bleibt man auf dem schnellsten Weg zum Ziel, nach oben ist immer noch ein recht schneller<br />
Weg, nach unten zu gehen ist kein guter Weg (alles im Falle einer offenen Tür).<br />
s0 <br />
a0 <br />
r1<br />
s1 <br />
a1 <br />
r2<br />
Aktionsrichtung<br />
· · · <br />
aτ−2 <br />
<br />
sτ−1 aτ−1 <br />
<br />
<br />
sτ<br />
rτ−1<br />
Rewardrichtung<br />
Abbildung C.9: Aktionen werden durchgeführt, bis eine gewünschte Zielsituation erreicht ist. Zu<br />
beachten ist die Durchnummerierung: Rewards werden von 1 an nummeriert, Aktionen und Situationen<br />
von 0 an (Dies hat sich einfach eingebürgert).<br />
Wie in Abb. C.9 ersichtlich, führen wir Aktionen so lange durch, bis eine Zielsituation<br />
(hier sτ genannt) erreicht ist (wenn es eine gibt, ansonsten werden einfach immer weiter<br />
Aktionen durchgeführt).<br />
C.2.6 Q-Learning<br />
Recht analog ergibt sich als Lernformel für die Action-Value-Funktion QΠ(s, a), deren<br />
Benutzung wir analog zum TD-Learning als Q-Learning bezeichnen:<br />
Q(st, a)neu =Q(st, a)<br />
+ α(rt+1 + γ max Q(st+1, a) −Q(st, a)) .<br />
a<br />
<br />
<br />
Greedy-Strategie<br />
<br />
Veränderung des alten Wertes<br />
<br />
rτ
Wir schlüsseln wieder die (zur Lernrate α proportionale) Veränderung des aktuellen<br />
Aktionswertes unter der aktuellen Situation auf. Sie wird beeinflusst von<br />
⊲ dem empfangenen Reward rt+1,<br />
⊲ dem mit γ gewichteten maximalen Action Value über die Nachfolgeaktionen (hier<br />
wird eine Greedy-Strategie angewendet, da man ruhig davon ausgehen kann, dass<br />
man die beste bekannte Aktion wählt, beim TD-Learning achten wir hingegen<br />
nicht darauf, immer in die beste bekannte nächste Situation zu kommen),<br />
⊲ dem alten Wert der Aktion unter unserer als st bekannten Situation Q(st, a)<br />
(nicht vergessen, dass auch dieser durch α gewichtet ist).<br />
In aller Regel lernt die Action-Value-Funktion wesentlich schneller als die State-Value-<br />
Funktion, wobei aber nicht zu vernachlässigen ist, dass Reinforcement Learning allgemein<br />
recht langsam ist: Das System muss ja selbst herausfinden, was gut ist. Schön ist<br />
aber am Q-Learning: Π kann beliebig initialisiert werden, durch Q-Learning erhalten<br />
wir immer Q ∗ .<br />
Definition C.13 (Q-Learning). Q-Learning trainiert die Action-Value-Funktion mit<br />
der Lernregel<br />
und findet so auf jeden Fall Q ∗ .<br />
C.3 Beispielanwendungen<br />
C.3.1 TD-Gammon<br />
Q(st, a)neu =Q(st, a) (C.15)<br />
+ α(rt+1 + γ max Q(st+1, a) − Q(st, a)).<br />
a<br />
TD-Gammon ist ein sehr erfolgreiches, auf TD-Learning basierendes Backgammonspiel<br />
von Gerald Tesauro. Situation ist hier die aktuelle Konfiguration des Spielbrettes.<br />
Jedem, der schon einmal Backgammon gespielt hat, ist klar, dass der Situationsraum<br />
gigantisch groß ist (ca. 10 20 Situationen) – was zur Folge hat, dass man<br />
keine State-Value-Funktione explizit ausrechnen kann (insbesondere zur Zeit des TD-<br />
Gammons Ende der 80er Jahre). Die gewählte Rewardstrategie war Pure Delayed Reward,<br />
das System erhält den Reward also erst zum Schluss des Spiels, der dann gleichzeitig<br />
der Return ist. Man hat das System dann selbstständig üben lassen (zunächst
gegen ein Backgammonprogramm, danach gegen eine Instanz seiner selbst). Resultat<br />
war, das es in einer Computer-Backgammon-Liga das höchste Ranking erreicht hat und<br />
eindrucksvoll widerlegt war, dass ein Computerprogramm eine Tätigkeit nicht besser<br />
beherrschen kann als sein Programmierer.<br />
C.3.2 Das Auto in der Grube<br />
Betrachten wir ein Auto, das auf eindimensionaler Fahrbahn am Fuß einer tiefen Mulde<br />
steht, und die Steigung zu keiner der beiden Seiten auf Anhieb mit seiner Motorkraft<br />
überwinden kann, um aus der Mulde hinauszufahren. Ausführbare Aktionen sind hier<br />
trivialerweise die Möglichkeiten, vorwärts und rückwärts zu fahren. Die intuitive Lösung,<br />
an welche wir als Menschen sofort denken, ist zurückzusetzen, an der gegenüberliegenden<br />
Steigung Schwung zu holen und mehrmals auf diese Weise hin- und her zu<br />
oszillieren, um mit Schwung aus der Mulde herauszufahren.<br />
Aktionen eines Reinforcement Learning Systems wären „Vollgas nach vorn“, „Vollgas<br />
zurück“ und „nichts tun“.<br />
Hier wäre „Alles kostet“ eine gute Wahl für die Rewardvergabe, so dass das System<br />
schnell lernt, aus der Grube herauszukommen und merkt, dass unser Problem mit<br />
purer vorwärts gerichteter Motorkraft nicht zu lösen ist. Das System wird sich also<br />
langsam hochschaukeln.<br />
Hier können wir die Policy nicht mehr als Tabelle ablegen, da der Zustandsraum nicht<br />
gut diskretisierbar ist. Hier muss wirklich eine Funktion als Policy geschaffen werden.<br />
C.3.3 Der Pole Balancer<br />
Der Pole Balancer wurde entwickelt von Barto, Sutton und Anderson.<br />
Gegeben sei eine Situation, welche ein Fahrzeug beinhaltet, das sich entweder mit<br />
Vollgas nach rechts oder mit Vollgas nach links bewegen kann (Bang-Bang-Control).<br />
Es kann nur diese beiden Aktionen ausführen, Stehenbleiben ist nicht möglich. Auf<br />
diesem Fahrzeug steht senkrecht eine Stange, welche zu beiden Seiten umkippen kann.<br />
Die Stange ist so konstruiert, dass sie immer in Richtung einer Seite kippt, also niemals<br />
stillsteht (sagen wir einfach, sie sei am unteren Ende abgerundet).<br />
Den Winkel, in dem die Stange im Moment relativ zur Senkrechten steht, bezeichnen<br />
wir mit α. Das Fahrzeug besitzt weiterhin immer eine definierte Position x auf unserer<br />
eindimensionalen Welt und immer eine Geschwindigkeit ˙x. Unsere eindimensionale<br />
Welt ist begrenzt, es gibt also Maximal- und Minimalwerte, welche x annehmen kann.
Ziel unseres Systems ist zu lernen, den Wagen dahingehend zu steuern, dass er das<br />
Kippen der Stange ausgleicht, die Stange also nicht umfällt. Dies erreichen wir am<br />
besten mit einer Avoidance Strategy: Solange die Stange nicht umgefallen ist, gibt es<br />
einen Reward von 0, fällt sie um, gibt es einen Reward von -1.<br />
Interessanterweise ist das System schnell in der Lage, den Stab stehend zu halten,<br />
indem es schnell genug mit kleinen Bewegungen daran wackelt. Es hält sich hierbei<br />
zumeist in der Mitte des Raums auf, da es am weitesten weg von den Wänden ist, die<br />
es als negativ empfindet (stößt man gegen die Wand, fällt der Stab um).<br />
C.3.3.1 Swinging up an inverted Pendulum<br />
Schwieriger für das System ist die Startsituation, dass der Stab im Vorhinein herunterhängt,<br />
erst einmal durch Schwingungen über das Gefährt bewegt werden, und<br />
anschließend stabilisiert werden muss. Diese Aufgabe wird in der Literatur mit Swing<br />
up an inverted Pendulum bezeichnet.<br />
C.4 Reinforcement Learning im Zusammenhang mit<br />
<strong>Neuronale</strong>n <strong>Netze</strong>n<br />
Zu guter Letzt möchte der Leser vielleicht fragen, was das Kapitel über Reinforcement<br />
Learning in einem Skriptum zum Thema „<strong>Neuronale</strong> <strong>Netze</strong>“ zu suchen hat.<br />
Die Antwort ist einfach motiviert. Wir haben bereits überwachte und unüberwachte<br />
Lernverfahren kennengelernt. Wir haben zwar nicht überall einen allwissenden Teacher,<br />
der uns überwachtes Lernen ermöglicht. Es ist aber auch nicht unbedingt so, dass wir<br />
gar kein Feedback erhalten. Oft gibt es ein Mittelding, eine Art Kritik oder Schulnote,<br />
bei Problemen dieser Art kann Reinforcement Learning zum Einsatz kommen.<br />
Nicht alle Probleme sind hierbei so leicht handhabbar wie unsere Gridworld: Bei unserem<br />
Backgammon-Beispiel haben wir alleine ca. 10 20 Situationen und einen großen<br />
Verzweigungsgrad im Situationsbaum, von anderen Spielen ganz zu schweigen. Hier werden<br />
die in der Gridworld benutzten Tabellen als State- und Action-Value-Funktionen<br />
schlicht nicht mehr realisierbar, wir müssen also Approximatoren für diese Funktionen<br />
finden.<br />
Und welche lernfähigen Approximatoren für diese Bestandteile des Reinforcement Learnings<br />
fallen uns nun auf Anhieb ein? Richtig: <strong>Neuronale</strong> <strong>Netze</strong>.
Übungsaufgaben<br />
Aufgabe 20. Ein Kontrollsystem für einen Roboter soll mittels Reinforcement Learning<br />
dazu gebracht werden, eine Strategie zu finden um ein Labyrinth möglichst schnell<br />
zu verlassen.<br />
⊲ Wie könnte eine geeignete State-Value-Funktion aussehen?<br />
⊲ Wie würden Sie einen geeigneten Reward erzeugen?<br />
Gehen Sie davon aus, dass der Roboter Hindernisvermeidung beherrscht und zu jedem<br />
Zeitpunkt seine Position (x, y) und Orientierung φ kennt.<br />
Aufgabe 21. Beschreiben Sie die Funktion der beiden Elemente ASE und ACE<br />
so wie sie von Barto, Sutton und Anderson für die Kontrolle des Pole Balancer<br />
vorgeschlagen wurden.<br />
Literaturangabe: [BSA83].<br />
Aufgabe 22. Nennen Sie mehrere „klassische“ Informatik-Aufgaben, die mit Reinforcement<br />
Learning besonders gut bearbeitet werden könnten und begründen Sie ihre<br />
Meinung.
Literaturverzeichnis<br />
[And72] James A. Anderson. A simple neural network generating an interactive<br />
memory. Mathematical Biosciences, 14:197–220, 1972.<br />
[APZ93] D. Anguita, G. Parodi, and R. Zunino. Speed improvement of the backpropagation<br />
on current-generation workstations. In WCNN’93, Portland:<br />
World Congress on Neural Networks, July 11-15, 1993, Oregon Convention<br />
Center, Portland, Oregon, volume 1. Lawrence Erlbaum, 1993.<br />
[BSA83] A. Barto, R. Sutton, and C. Anderson. Neuron-like adaptive elements<br />
that can solve difficult learning control problems. IEEE Transactions on<br />
Systems, Man, and Cybernetics, 13(5):834–846, September 1983.<br />
[CG87] G. A. Carpenter and S. Grossberg. ART2: Self-organization of stable category<br />
recognition codes for analog input patterns. Applied Optics, 26:4919–<br />
4930, 1987.<br />
[CG88] M.A. Cohen and S. Grossberg. Absolute stability of global pattern formation<br />
and parallel memory storage by competitive neural networks. Computer<br />
Society Press Technology Series Neural Networks, pages 70–81, 1988.<br />
[CG90] G. A. Carpenter and S. Grossberg. ART 3: Hierarchical search using<br />
chemical transmitters in self-organising pattern recognition architectures.<br />
Neural Networks, 3(2):129–152, 1990.<br />
[CH67] T. Cover and P. Hart. Nearest neighbor pattern classification. IEEE<br />
Transactions on Information Theory, 13(1):21–27, 1967.<br />
[CR00] N.A. Campbell and JB Reece. Biologie. Spektrum. Akademischer Verlag,<br />
2000.<br />
[Cyb89] G. Cybenko. Approximation by superpositions of a sigmoidal function. Mathematics<br />
of Control, Signals, and Systems (MCSS), 2(4):303–314, 1989.<br />
[DHS01] R.O. Duda, P.E. Hart, and D.G. Stork. Pattern classification. Wiley New<br />
York, 2001.<br />
259
[Elm90] Jeffrey L. Elman. Finding structure in time. Cognitive Science, 14(2):179–<br />
211, April 1990.<br />
[Fah88] S. E. Fahlman. An empirical sudy of learning speed in back-propagation<br />
networks. Technical Report CMU-CS-88-162, CMU, 1988.<br />
[FMI83] K. Fukushima, S. Miyake, and T. Ito. Neocognitron: A neural network model<br />
for a mechanism of visual pattern recognition. IEEE Transactions on<br />
Systems, Man, and Cybernetics, 13(5):826–834, September/October 1983.<br />
[Fri94] B. Fritzke. Fast learning with incremental RBF networks. Neural Processing<br />
Letters, 1(1):2–5, 1994.<br />
[GKE01a] N. Goerke, F. Kintzler, and R. Eckmiller. Self organized classification of<br />
chaotic domains from a nonlinearattractor. In Neural Networks, 2001. Proceedings.<br />
IJCNN’01. International Joint Conference on, volume 3, 2001.<br />
[GKE01b] N. Goerke, F. Kintzler, and R. Eckmiller. Self organized partitioning of<br />
chaotic attractors for control. Lecture notes in computer science, pages<br />
851–856, 2001.<br />
[Gro76] S. Grossberg. Adaptive pattern classification and universal recoding, I:<br />
Parallel development and coding of neural feature detectors. Biological<br />
Cybernetics, 23:121–134, 1976.<br />
[GS06] Nils Goerke and Alexandra Scherbart. Classification using multi-soms and<br />
multi-neural gas. In IJCNN, pages 3895–3902, 2006.<br />
[Heb49] Donald O. Hebb. The Organization of Behavior: A Neuropsychological<br />
Theory. Wiley, New York, 1949.<br />
[Hop82] John J. Hopfield. Neural networks and physical systems with emergent collective<br />
computational abilities. Proc. of the National Academy of Science,<br />
USA, 79:2554–2558, 1982.<br />
[Hop84] JJ Hopfield. Neurons with graded response have collective computational<br />
properties like those of two-state neurons. Proceedings of the National<br />
Academy of Sciences, 81(10):3088–3092, 1984.<br />
[HT85] JJ Hopfield and DW Tank. Neural computation of decisions in optimization<br />
problems. Biological cybernetics, 52(3):141–152, 1985.<br />
[Jor86] M. I. Jordan. Attractor dynamics and parallelism in a connectionist sequential<br />
machine. In Proceedings of the Eighth Conference of the Cognitive<br />
Science Society, pages 531–546. Erlbaum, 1986.
[Kau90] L. Kaufman. Finding groups in data: an introduction to cluster analysis.<br />
In Finding Groups in Data: An Introduction to Cluster Analysis. Wiley,<br />
New York, 1990.<br />
[Koh72] T. Kohonen. Correlation matrix memories. IEEEtC, C-21:353–359, 1972.<br />
[Koh82] Teuvo Kohonen. Self-organized formation of topologically correct feature<br />
maps. Biological Cybernetics, 43:59–69, 1982.<br />
[Koh89] Teuvo Kohonen. Self-Organization and Associative Memory. Springer-<br />
Verlag, Berlin, third edition, 1989.<br />
[Koh98] T. Kohonen. The self-organizing map. Neurocomputing, 21(1-3):1–6, 1998.<br />
[KSJ00] E.R. Kandel, J.H. Schwartz, and T.M. Jessell. Principles of neural science.<br />
Appleton & Lange, 2000.<br />
[lCDS90] Y. le Cun, J. S. Denker, and S. A. Solla. Optimal brain damage. In<br />
D. Touretzky, editor, Advances in Neural Information Processing Systems<br />
2, pages 598–605. Morgan Kaufmann, 1990.<br />
[Mac67] J. MacQueen. Some methods for classification and analysis of multivariate<br />
observations. In Proceedings of the Fifth Berkeley Symposium on<br />
Mathematics, Statistics and Probability, Vol. 1, pages 281–296, 1967.<br />
[MBS93] Thomas M. Martinetz, Stanislav G. Berkovich, and Klaus J. Schulten.<br />
’Neural-gas’ network for vector quantization and its application to timeseries<br />
prediction. IEEE Trans. on Neural Networks, 4(4):558–569, 1993.<br />
[MBW + 10] K.D. Micheva, B. Busse, N.C. Weiler, N. O’Rourke, and S.J. Smith. Singlesynapse<br />
analysis of a diverse synapse population: proteomic imaging methods<br />
and markers. Neuron, 68(4):639–653, 2010.<br />
[MP43] W.S. McCulloch and W. Pitts. A logical calculus of the ideas immanent<br />
in nervous activity. Bulletin of Mathematical Biology, 5(4):115–133, 1943.<br />
[MP69] M. Minsky and S. Papert. Perceptrons. MIT Press, Cambridge, Mass,<br />
1969.<br />
[MR86] J. L. McClelland and D. E. Rumelhart. Parallel Distributed Processing:<br />
Explorations in the Microstructure of Cognition, volume 2. MIT Press,<br />
Cambridge, 1986.
[Par87] David R. Parker. Optimal algorithms for adaptive networks: Second order<br />
back propagation, second order direct propagation, and second order<br />
hebbian learning. In Maureen Caudill and Charles Butler, editors, IEEE<br />
First International Conference on Neural Networks (ICNN’87), volume II,<br />
pages II–593–II–600, San Diego, CA, June 1987. IEEE.<br />
[PG89] T. Poggio and F. Girosi. A theory of networks for approximation and<br />
learning. MIT Press, Cambridge Mass., 1989.<br />
[Pin87] F. J. Pineda. Generalization of back-propagation to recurrent neural networks.<br />
Physical Review Letters, 59:2229–2232, 1987.<br />
[PM47] W. Pitts and W.S. McCulloch. How we know universals the perception of<br />
auditory and visual forms. Bulletin of Mathematical Biology, 9(3):127–147,<br />
1947.<br />
[Pre94] L. Prechelt. Proben1: A set of neural network benchmark problems and<br />
benchmarking rules. Technical Report, 21:94, 1994.<br />
[RB93] M. Riedmiller and H. Braun. A direct adaptive method for faster backpropagation<br />
learning: The rprop algorithm. In Neural Networks, 1993., IEEE<br />
International Conference on, pages 586–591. IEEE, 1993.<br />
[RD05] G. Roth and U. Dicke. Evolution of the brain and intelligence. Trends in<br />
Cognitive Sciences, 9(5):250–257, 2005.<br />
[RHW86a] D. Rumelhart, G. Hinton, and R. Williams. Learning representations by<br />
back-propagating errors. Nature, 323:533–536, October 1986.<br />
[RHW86b] David E. Rumelhart, Geoffrey E. Hinton, and R. J. Williams. Learning<br />
internal representations by error propagation. In D. E. Rumelhart, J. L.<br />
McClelland, and the PDP research group., editors, Parallel distributed processing:<br />
Explorations in the microstructure of cognition, Volume 1: Foundations.<br />
MIT Press, 1986.<br />
[Rie94] M. Riedmiller. Rprop - description and implementation details. Technical<br />
report, University of Karlsruhe, 1994.<br />
[Ros58] F. Rosenblatt. The perceptron: a probabilistic model for information storage<br />
and organization in the brain. Psychological Review, 65:386–408, 1958.<br />
[Ros62] F. Rosenblatt. Principles of Neurodynamics. Spartan, New York, 1962.<br />
[SB98] R. S. Sutton and A. G. Barto. Reinforcement Learning: An Introduction.<br />
MIT Press, Cambridge, MA, 1998.
[SG06] A. Scherbart and N. Goerke. Unsupervised system for discovering patterns<br />
in time-series, 2006.<br />
[SGE05] Rolf Schatten, Nils Goerke, and Rolf Eckmiller. Regional and online learnable<br />
fields. In Sameer Singh, Maneesha Singh, Chidanand Apté, and Petra<br />
Perner, editors, ICAPR (2), volume 3687 of Lecture Notes in Computer<br />
Science, pages 74–83. Springer, 2005.<br />
[Ste61] K. Steinbuch. Die lernmatrix. Kybernetik (Biological Cybernetics), 1:36–45,<br />
1961.<br />
[vdM73] C. von der Malsburg. Self-organizing of orientation sensitive cells in striate<br />
cortex. Kybernetik, 14:85–100, 1973.<br />
[Was89] P. D. Wasserman. Neural Computing Theory and Practice. New York :<br />
Van Nostrand Reinhold, 1989.<br />
[Wer74] P. J. Werbos. Beyond Regression: New Tools for Prediction and Analysis<br />
in the Behavioral Sciences. PhD thesis, Harvard University, 1974.<br />
[Wer88] P. J. Werbos. Backpropagation: Past and future. In Proceedings ICNN-88,<br />
San Diego, pages 343–353, 1988.<br />
[WG94] A.S. Weigend and N.A. Gershenfeld. Time series prediction. Addison-<br />
Wesley, 1994.<br />
[WH60] B. Widrow and M. E. Hoff. Adaptive switching circuits. In Proceedings<br />
WESCON, pages 96–104, 1960.<br />
[Wid89] R. Widner. Single-stage logic. AIEE Fall General Meeting, 1960. Wasserman,<br />
P. Neural Computing, Theory and Practice, Van Nostrand Reinhold,<br />
1989.<br />
[Zel94] Andreas Zell. Simulation <strong>Neuronale</strong>r <strong>Netze</strong>. Addison-Wesley, 1994. German.
Abbildungsverzeichnis<br />
1.1 Roboter mit 8 Sensoren und 2 Motoren . . . . . . . . . . . . . . . . . . 7<br />
1.2 Lernbeispiele für Beispielroboter . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.3 Blackbox mit acht Eingängen und zwei Ausgängen . . . . . . . . . . . . 9<br />
1.4 Urgesteine des Fachbereichs . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.1 Zentrales Nervensystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
2.2 Gehirn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.3 Biologisches Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.4 Aktionspotential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
2.5 Facettenaugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
3.1 Datenverarbeitung eines Neurons . . . . . . . . . . . . . . . . . . . . . . 43<br />
3.2 Verschiedene gängige Aktivierungsfunktionen . . . . . . . . . . . . . . . 48<br />
3.3 FeedForwardnetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
3.4 FeedForwardnetz mit Shortcuts . . . . . . . . . . . . . . . . . . . . . . . 52<br />
3.5 Direkt rückgekoppeltes Netz . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
3.6 Indirekt rückgekoppeltes Netz . . . . . . . . . . . . . . . . . . . . . . . . 54<br />
3.7 Lateral rückgekoppeltes Netz . . . . . . . . . . . . . . . . . . . . . . . . 55<br />
3.8 Vollständig verbundenes Netz . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
3.9 Beispielnetz mit und ohne Biasneuron . . . . . . . . . . . . . . . . . . . 58<br />
3.10 Beispiele für Neuronenarten . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
4.1 Trainingsbeispiele und Netzkapazitäten . . . . . . . . . . . . . . . . . . 72<br />
4.2 Lernkurve mit verschiedenen Skalierungen . . . . . . . . . . . . . . . . . 76<br />
4.3 Gradientenabstieg, Veranschaulichung in 2D . . . . . . . . . . . . . . . . 78<br />
4.4 Mögliche Fehler während eines Gradientenabstiegs . . . . . . . . . . . . 80<br />
4.5 2-Spiralen-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />
4.6 Schachbrettproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />
5.1 Das Perceptron in drei Ansichten . . . . . . . . . . . . . . . . . . . . . . 91<br />
5.2 Singlelayerperceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />
5.3 Singlelayerperceptron mit mehreren Ausgabeneuronen . . . . . . . . . . 93<br />
5.4 AND und OR Singlelayerperceptron . . . . . . . . . . . . . . . . . . . . 94<br />
265
5.5 Fehlerfläche eines <strong>Netze</strong>s mit 2 Verbindungen . . . . . . . . . . . . . . . 98<br />
5.6 Skizze für ein XOR-SLP . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />
5.7 Lineare Separierung im zweidimensionalen . . . . . . . . . . . . . . . . . 104<br />
5.8 Lineare Separierung im dreidimensionalen . . . . . . . . . . . . . . . . . 105<br />
5.9 Das XOR-Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />
5.10 Multilayerperceptrons und Ausgabemengen . . . . . . . . . . . . . . . . 108<br />
5.11 Lage eines inneren Neurons für Backpropagation-Herleitung . . . . . . . 111<br />
5.12 Skizze der Backpropagation-Herleitung . . . . . . . . . . . . . . . . . . . 113<br />
5.13 Momentum-Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />
5.14 Fermifunktion und Tangens Hyperbolicus . . . . . . . . . . . . . . . . . 127<br />
5.15 Funktionsweise 8-2-8-Kodierung . . . . . . . . . . . . . . . . . . . . . . . 129<br />
6.1 RBF-Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />
6.2 Abstandsfunktion im RBF-Netz . . . . . . . . . . . . . . . . . . . . . . . 136<br />
6.3 Einzelne Gaußglocken im Ein- und Zweidimensionalen . . . . . . . . . . 137<br />
6.4 Aufkumulieren von Gaußglocken im Eindimensionalen . . . . . . . . . . 138<br />
6.5 Aufkumulieren von Gaußglocken im Zweidimensionalen . . . . . . . . . . 139<br />
6.6 Gleichmäßige Abdeckung eines Inputraums mit Radialbasisfunktionen . 146<br />
6.7 Ungleichmäßige Abdeckung eines Inputraums mit Radialbasisfunktionen 147<br />
6.8 Zufällige, ungleichmäßige Abdeckung eines Inputraums mit Radialbasisfunktionen<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />
7.1 Rössler-Attraktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />
7.2 Jordannetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />
7.3 Elmannetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />
7.4 Unfolding in Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159<br />
8.1 Hopfieldnetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />
8.2 Binäre Schwellenwertfunktion . . . . . . . . . . . . . . . . . . . . . . . . 165<br />
8.3 Konvergenz eines Hopfieldnetzes . . . . . . . . . . . . . . . . . . . . . . 168<br />
8.4 Fermifunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
9.1 Quantisierungsbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />
10.1 Beispieltopologien einer SOM . . . . . . . . . . . . . . . . . . . . . . . . 183<br />
10.2 Beispielabstände von SOM-Topologien . . . . . . . . . . . . . . . . . . . 186<br />
10.3 SOM-Topologiefunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 188<br />
10.4 Erstes Beispiel einer SOM . . . . . . . . . . . . . . . . . . . . . . . . . . 190<br />
10.5 Training einer SOM mit eindimensionaler Topologie . . . . . . . . . . . 193<br />
10.6 SOMs mit ein- und zweidimensionalen Topologien und verschiedenen<br />
Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
10.7 Topologischer Defekt einer SOM . . . . . . . . . . . . . . . . . . . . . . 195<br />
10.8 Auflösungsoptimierung einer SOM auf bestimmte Gebiete . . . . . . . . 196<br />
10.9 Durch <strong>Neuronale</strong>s Gas zu klassifizierende Figur . . . . . . . . . . . . . . 198<br />
11.1 Aufbau eines ART-<strong>Netze</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
11.2 Lernvorgang eines ART-<strong>Netze</strong>s . . . . . . . . . . . . . . . . . . . . . . . 207<br />
A.1 Vergleich von Clusteranalyseverfahren . . . . . . . . . . . . . . . . . . . 215<br />
A.2 ROLF-Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218<br />
A.3 Clustering durch ein ROLF . . . . . . . . . . . . . . . . . . . . . . . . . 222<br />
B.1 Zeitreihe abtastendes <strong>Neuronale</strong>s Netz . . . . . . . . . . . . . . . . . . . 226<br />
B.2 One Step Ahead Prediction . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />
B.3 Two Step Ahead Prediction . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />
B.4 Direct Two Step Ahead Prediction . . . . . . . . . . . . . . . . . . . . . 231<br />
B.5 Heterogene One Step Ahead Prediction . . . . . . . . . . . . . . . . . . 232<br />
B.6 Heterogene One Step Ahead Prediction mit zwei Ausgaben . . . . . . . 232<br />
C.1 Gridworld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
C.2 Reinforcement Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />
C.3 Gridworld mit optimalen Returns . . . . . . . . . . . . . . . . . . . . . . 247<br />
C.4 Reinforcement-Learning-Kreislauf . . . . . . . . . . . . . . . . . . . . . . 248<br />
C.5 Montecarlo-Methodik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250<br />
C.6 Erweiterte Montecarlo-Methodik . . . . . . . . . . . . . . . . . . . . . . 251<br />
C.7 Verbesserung der Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />
C.8 Action-Value-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253<br />
C.9 Reinforcement Learning Zeitstrahl . . . . . . . . . . . . . . . . . . . . . 253
Index<br />
*<br />
100-Schritt-Regel . . . . . . . . . . . . . . . . . . . . 6<br />
A<br />
Abstand<br />
euklidischer. . . . . . . . . . . . . . . .74, 210<br />
quadratischer . . . . . . . . . . . . . . 98, 210<br />
Action-Value-Funktion . . . . . . . . . . . . 251<br />
ADALINE . . . . . . siehe Adaptive Linear<br />
Neuron<br />
Adaptive Linear Element. . . . . . . . .siehe<br />
Adaptive Linear Neuron<br />
Adaptive Linear Neuron . . . . . . . . . . . . 12<br />
Adaptive Resonance Theory . . . 13, 201<br />
Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />
Aktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
Aktionspotential. . . . . . . . . . . . . . . . . . . .27<br />
Aktionsraum . . . . . . . . . . . . . . . . . . . . . . 239<br />
Aktivierung . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
Aktivierungsfunktion . . . . . . . . . . . . . . . 46<br />
Wahl der . . . . . . . . . . . . . . . . . . . . . . 126<br />
Aktivierungsreihenfolge . . . . . . . . . . . . . 59<br />
asynchron<br />
feste Ordnung . . . . . . . . . . . . . . . . 61<br />
permutiert zufällige Ordnung . 60<br />
topologische Ordnung . . . . . . . . 61<br />
zufällige Ordnung . . . . . . . . . . . . 60<br />
synchron . . . . . . . . . . . . . . . . . . . . . . . 59<br />
Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . 66<br />
Amakrinzelle . . . . . . . . . . . . . . . . . . . . . . . 35<br />
Approximation . . . . . . . . . . . . . . . . . . . . 140<br />
ART siehe Adaptive Resonance Theory<br />
ART-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
ART-2A. . . . . . . . . . . . . . . . . . . . . . . . . . .204<br />
ART-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
Artificial Intelligence . . . . . . . . . . . . . . . 11<br />
assoziative Speicherung . . . . . . . . . . . . 193<br />
ATP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
Attraktor. . . . . . . . . . . . . . . . . . . . . . . . . .151<br />
Ausgabedimension . . . . . . . . . . . . . . . . . . 62<br />
Ausgabefunktion . . . . . . . . . . . . . . . . . . . 47<br />
Ausgabevektor. . . . . . . . . . . . . . . . . . . . . .62<br />
Auswendig lernen. . . . . . . . . . . . . . . . . . .71<br />
Autoassoziator . . . . . . . . . . . . . . . . . . . . 165<br />
Axon . . . . . . . . . . . . . . . . . . . . . . . . . . . 24, 29<br />
B<br />
Backpropagation . . . . . . . . . . . . . . . . . . 114<br />
Second Order . . . . . . . . . . . . . . . . . 122<br />
Backpropagation of Error. . . . . . . . . .108<br />
rekurrentes. . . . . . . . . . . . . . . . . . . .158<br />
Balken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
Basis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
269
Bestärkendes Lernen . . . . . . . . . . . . . . 233<br />
Biasneuron . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
Binäre Schwellenwertfunktion. . . . . . .46<br />
Bipolarzelle . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
Black Box . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
C<br />
Cerebellum . . . . . . . . . . . . siehe Kleinhirn<br />
Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />
Clusteranalyse . . . . . . . . . . . . . . . . . . . . 209<br />
Codebookvektor . . . . . . . . . . . . . . 172, 210<br />
Cortex . . . . . . . . . . . . siehe Großhirnrinde<br />
visueller . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
D<br />
Dartmouth Summer Research Project<br />
11<br />
Deep networks. . . . . . . . . . . . . . . .120, 125<br />
Delta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102<br />
Delta-Regel . . . . . . . . . . . . . . . . . . . . . . . 101<br />
Dendrit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
-enbaum . . . . . . . . . . . . . . . . . . . . . . . 24<br />
Depolarisation. . . . . . . . . . . . . . . . . . . . . .27<br />
Diencephalon . . . . . . siehe Zwischenhirn<br />
Differenzvektor . . . . . siehe Fehlervektor<br />
digitales Filter . . . . . . . . . . . . . . . . . . . . 227<br />
Digitalisierung . . . . . . . . . . . . . . . . . . . . 172<br />
diskret . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
Diskretisierung . . . . siehe Quantisierung<br />
Dynamisches System . . . . . . . . . . . . . . 152<br />
E<br />
Early Stopping . . . . . . . . . . . . . . . . . . . . . 77<br />
Eingabedimension . . . . . . . . . . . . . . . . . . 62<br />
Eingabemuster . . . . . . . . . . . . . . . . . . . . . 67<br />
Eingabevektor . . . . . . . . . . . . . . . . . . . . . . 62<br />
Einzelauge . . . . . . . . . siehe Ommatidium<br />
Einzellinsenauge . . . . . . . . . . . . . . . . . . . . 34<br />
Elektronengehirn . . . . . . . . . . . . . . . . . . . 10<br />
Elmannetz . . . . . . . . . . . . . . . . . . . . . . . . 154<br />
Entwicklungsgeschichte . . . . . . . . . . . . . 10<br />
Episode . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />
Epoche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
Epsilon-Nearest Neighbouring . . . . . 211<br />
Evolutionäre Algorithmen . . . . . . . . . 158<br />
Exploitation-Ansatz . . . . . . . . . . . . . . . 242<br />
Exploration-Ansatz. . . . . . . . . . . . . . . .242<br />
F<br />
Facettenauge . . . . . . siehe Komplexauge<br />
Fastprop . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
FeedForward . . . . . . . . . . . . . . . . . . . . . . . 50<br />
Fehler<br />
Gesamt-. . . . . . . . . . . . . . . . . . . . . . . .75<br />
spezifischer . . . . . . . . . . . . . . . . . . . . . 74<br />
Fehlerfunktion. . . . . . . . . . . . . . . . . . . . . .97<br />
spezifische . . . . . . . . . . . . . . . . . . . . . . 97<br />
Fehlertoleranz . . . . . . . . . . . . . . . . . . . . . . . 5<br />
Fehlervektor . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
Fermifunktion . . . . . . . . . . . . . . . . . . . . . . 46<br />
Fläche, perzeptive . . . . . . . . . . . . . . . . . 215<br />
Flat spot elimination . . . . . . . . . . . . . . 121<br />
Funktionsapproximation . . . . . . . . . . . 126<br />
Funktionsapproximator<br />
universeller. . . . . . . . . . . . . . . . . . . .105
G<br />
Ganglienzelle . . . . . . . . . . . . . . . . . . . . . . . 34<br />
Gauß-Markov-Modell . . . . . . . . . . . . . . 141<br />
Gaußglocke. . . . . . . . . . . . . . . . . . . . . . . .185<br />
Gehirn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
Generalisierung . . . . . . . . . . . . . . . . . . 4, 65<br />
Gewicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
Gewichtete Summe . . . . . . . . . . . . . . . . . 44<br />
Gewichtsänderung . . . . . . . . . . . . . . . . . . 85<br />
Gewichtsmatrix . . . . . . . . . . . . . . . . . . . . 42<br />
Bottom-Up- . . . . . . . . . . . . . . . . . . . 202<br />
Top-Down- . . . . . . . . . . . . . . . . . . . . 201<br />
Gewichtsvektor . . . . . . . . . . . . . . . . . . . . . 42<br />
Gitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180<br />
Gliazelle. . . . . . . . . . . . . . . . . . . . . . . . . . . .29<br />
Gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
Gradientenabstieg . . . . . . . . . . . . . . . . . . 79<br />
Probleme. . . . . . . . . . . . . . . . . . . . . . .80<br />
Gridworld . . . . . . . . . . . . . . . . . . . . . . . . . 235<br />
Großhirn . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
Großhirnrinde . . . . . . . . . . . . . . . . . . . . . . 18<br />
H<br />
Heaviside-Funktion . . . . . . . siehe Binäre<br />
Schwellenwertfunktion<br />
Hebbsche Lernregel . . . . . . . . . . . . . . . . . 85<br />
Verallgemeinerte Form . . . . . . . . . 86<br />
Heteroassoziator. . . . . . . . . . . . . . . . . . .167<br />
Hinton-Darstellung . . . . . . . . . . . . . . . . . 42<br />
Hirnstamm . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
Hopfieldnetz. . . . . . . . . . . . . . . . . . . . . . .159<br />
kontinuierliches . . . . . . . . . . . . . . . 169<br />
Horizontalzelle . . . . . . . . . . . . . . . . . . . . . 35<br />
Hyperpolarisation . . . . . . . . . . . . . . . . . . 29<br />
Hypothalamus . . . . . . . . . . . . . . . . . . . . . . 21<br />
I<br />
Internodien. . . . . . . . . . . . . . . . . . . . . . . . .29<br />
Interpolation<br />
exakte . . . . . . . . . . . . . . . . . . . . . . . . 139<br />
Ion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
Iris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
J<br />
Jordannetz . . . . . . . . . . . . . . . . . . . . . . . . 152<br />
K<br />
k-Means Clustering. . . . . . . . . . . . . . . .210<br />
k-Nearest Neighbouring . . . . . . . . . . . 211<br />
Kegelfunktion . . . . . . . . . . . . . . . . . . . . . 185<br />
Kleinhirn . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
Komplexauge . . . . . . . . . . . . . . . . . . . . . . . 33<br />
Kontextbasierte Suche . . . . . . . . . . . . . 195<br />
kontinuierlich. . . . . . . . . . . . . . . . . . . . . .172<br />
Konzentrationsgradient . . . . . . . . . . . . . 25<br />
L<br />
Learning<br />
reinforcement . . . . . . . . siehe Lernen,<br />
bestärkendes
supervised . . . . . . . . . . . siehe Lernen,<br />
überwachtes<br />
unsupervised. . . . . . . . .siehe Lernen,<br />
unüberwachtes<br />
Learning Vector Quantization . . . . . 171<br />
Lernbarkeit. . . . . . . . . . . . . . . . . . . . . . . .125<br />
Lernen<br />
überwachtes . . . . . . . . . . . . . . . . . . . . 68<br />
Batch- . . . . . . . . siehe Lernen, offline<br />
bestärkendes . . . . . . . . . . . . . . . . . . . 67<br />
offline . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
online . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
unüberwachtes . . . . . . . . . . . . . . . . . 67<br />
Lernfähigkeit . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
Lernrate . . . . . . . . . . . . . . . . . . . . . . . . . . 115<br />
variable . . . . . . . . . . . . . . . . . . . . . . . 116<br />
Lernverfahren . . . . . . . . . . . . . . . . . . . . . . 49<br />
Lineare Separierbarkeit . . . . . . . . . . . . 103<br />
Linearer Assoziator . . . . . . . . . . . . . . . . . 13<br />
Linse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
Lochkameraauge . . . . . . . . . . . . . . . . . . . 33<br />
Locked-In-Syndrom. . . . . . . . . . . . . . . . .21<br />
Logistische Funktion . . . . . . . . . . . . . siehe<br />
Fermifunktion<br />
Temperaturparameter . . . . . . . . . . 47<br />
LVQ . . . . . . . . . . . . siehe Learning Vector<br />
Quantization<br />
LVQ1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />
LVQ2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />
LVQ3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />
M<br />
M-SOM . . . . siehe Self Organizing Map,<br />
Multi<br />
Mark I Perceptron. . . . . . . . . . . . . . . . . .11<br />
Mathematische Symbole<br />
(t). . . . . . . . . . . . . . . .siehe Zeitbegriff<br />
A(S). . . . . . . . . . .siehe Aktionsraum<br />
Ep . . . . . . . . . . . . . .siehe Fehlervektor<br />
G . . . . . . . . . . . . . . . . . siehe Topologie<br />
N . . . . . . siehe Self Organizing Map,<br />
Eingabedimension<br />
P . . . . . . . . . . . siehe Trainingsmenge<br />
Q∗ Π (s, a) . . . . . . . siehe Action-Value-<br />
Funktion, optimale<br />
QΠ(s, a) . . . . . . . . . . . . . . . . . . . . . siehe<br />
Action-Value-Funktion<br />
Rt . . . . . . . . . . . . . . . . . . . siehe Return<br />
S . . . . . . . . . . . . siehe Situationsraum<br />
T . . . . . siehe Temperaturparameter<br />
V ∗ Π (s) . siehe State-Value-Funktion,<br />
optimale<br />
VΠ(s) . . siehe State-Value-Funktion<br />
W . . . . . . . . . . siehe Gewichtsmatrix<br />
∆wi,j . . . . . siehe Gewichtsänderung<br />
Π . . . . . . . . . . . . . . . . . . . . . siehe Policy<br />
Θ . . . . . . . . . . . . . siehe Schwellenwert<br />
α . . . . . . . . . . . . . . . .siehe Momentum<br />
β . . . . . . . . . . . . . siehe Weight Decay<br />
δ . . . . . . . . . . . . . . . . . . . . . . siehe Delta<br />
η . . . . . . . . . . . . . . . . . . . siehe Lernrate<br />
η ↑ . . . . . . . . . . . . . . . . . . . . siehe Rprop<br />
η ↓ . . . . . . . . . . . . . . . . . . . . siehe Rprop<br />
ηmax . . . . . . . . . . . . . . . . . . siehe Rprop<br />
ηmin . . . . . . . . . . . . . . . . . . siehe Rprop<br />
ηi,j . . . . . . . . . . . . . . . . . . . siehe Rprop<br />
∇ . . . . . . . . . . . siehe Nabla-Operator<br />
ρ. . . . . . . .siehe Radiusmultiplikator<br />
Err . . . . . . . . . . siehe Fehler, Gesamt-<br />
Err(W ). . . . . . .siehe Fehlerfunktion<br />
Errp . . . . . .siehe Fehler, spezifischer<br />
Errp(W ) . . . . . siehe Fehlerfunktion,<br />
spezifische<br />
ErrWD . . . . . . . . siehe Weight Decay<br />
at . . . . . . . . . . . . . . . . . . . . siehe Aktion
csiehe Zentrum eines RBF-Neurons,<br />
siehe Neuron, Self Organizing<br />
Map-, Zentrum<br />
m . . . . . . . . siehe Ausgabedimension<br />
n . . . . . . . . . siehe Eingabedimension<br />
p . . . . . . . . . . . siehe Trainingsmuster<br />
rh . . . . . . . . . . . . siehe Zentrum eines<br />
RBF-Neurons, Abstand zu<br />
rt . . . . . . . . . . . . . . . . . . . siehe Reward<br />
st . . . . . . . . . . . . . . . . . .siehe Situation<br />
t. . . . . . . . . . . . .siehe Teaching Input<br />
wi,j . . . . . . . . . . . . . . . . . siehe Gewicht<br />
x . . . . . . . . . . . . . siehe Eingabevektor<br />
y . . . . . . . . . . . . .siehe Ausgabevektor<br />
fact . . . . siehe Aktivierungsfunktion<br />
fout . . . . . . . . siehe Ausgabefunktion<br />
Membran. . . . . . . . . . . . . . . . . . . . . . . . . . .25<br />
-potential . . . . . . . . . . . . . . . . . . . . . . 25<br />
Metrik . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />
Mexican-Hat-Funktion . . . . . . . . . . . . 185<br />
MLP . . . . . siehe Perceptron, Multilayer-<br />
Momentum. . . . . . . . . . . . . . . . . . . . . . . .121<br />
Momentum-Term. . . . . . . . . . . . . . . . . .121<br />
Montecarlo-Methodik. . . . . . . . . . . . . .247<br />
Moore-Penrose-Pseudoinverse. . . . . .140<br />
Moving-Average-Verfahren. . . . . . . . .227<br />
Mustererkennung . . . . . . . . . . . . . 127, 165<br />
Myelinscheide . . . . . . . . . . . . . . . . . . . . . . 29<br />
N<br />
Nabla-Operator . . . . . . . . . . . . . . . . . . . . 79<br />
Natrium-Kalium-Pumpe . . . . . . . . . . . . 26<br />
Neocognitron . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Nervensystem . . . . . . . . . . . . . . . . . . . . . . 17<br />
<strong>Netze</strong>ingabe . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
Netzhaut . . . . . . . . . . . . . . . . . siehe Retina<br />
Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
akzeptierendes . . . . . . . . . . . . . . . . 216<br />
Binäres. . . . . . . . . . . . . . . . . . . . . . . . .91<br />
Eingabe- . . . . . . . . . . . . . . . . . . . . . . . 91<br />
Fermi- . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
Gewinner-. . . . . . . . . . . . . . . . . . . . .182<br />
Identitäts-. . . . . . . . . . . . . . . . . . . . . .91<br />
Informationsverarbeitendes . . . . . 91<br />
Input- . . . . . siehe Neuron, Eingabe-<br />
Kontext- . . . . . . . . . . . . . . . . . . . . . . 152<br />
RBF- . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />
RBF-Ausgabe- . . . . . . . . . . . . . . . . 132<br />
ROLF- . . . . . . . . . . . . . . . . . . . . . . . . 215<br />
Self Organizing Map-. . . . . . . . . .180<br />
Zentrum . . . . . . . . . . . . . . . . . . . . 180<br />
Tanh- . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
<strong>Neuronale</strong>s Gas . . . . . . . . . . . . . . . . . . . 196<br />
Multi-. . . . . . . . . . . . . . . . . . . . . . . . .198<br />
wachsendes. . . . . . . . . . . . . . . . . . . .199<br />
<strong>Neuronale</strong>s Netz . . . . . . . . . . . . . . . . . . . . 42<br />
rückgekoppeltes . . . . . . . . . . . . . . . 151<br />
Neurotransmitter . . . . . . . . . . . . . . . . . . . 23<br />
O<br />
Oligodendrozyten. . . . . . . . . . . . . . . . . . .29<br />
OLVQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . .175<br />
On-Neuron. . . . . . . . . . .siehe Biasneuron<br />
One Step Ahead Prediction. . . . . . . .226<br />
heterogene . . . . . . . . . . . . . . . . . . . . 230<br />
Open Loop Learning . . . . . . . . . . . . . . 156<br />
Optimal Brain Damage. . . . . . . . . . . .123
P<br />
Parallelität . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
Pattern . . . . . . . . . siehe Trainingsmuster<br />
Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
Multilayer- . . . . . . . . . . . . . . . . . . . . 106<br />
rückgekoppeltes . . . . . . . . . . . . . 151<br />
Singlelayer-. . . . . . . . . . . . . . . . . . . . .92<br />
Perceptron-Konvergenz-Theorem . . . 95<br />
Perceptron-Lernalgorithmus . . . . . . . . 92<br />
Periode . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />
Peripheres Nervensystem . . . . . . . . . . . 18<br />
Personen<br />
Anderson. . . . . . . . . . . . . . . . .254, 256<br />
Anderson, James A. . . . . . . . . . . . . 13<br />
Anguita . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
Barto. . . . . . . . . . . . . . . .233, 254, 256<br />
Carpenter, Gail. . . . . . . . . . . .13, 201<br />
Elman . . . . . . . . . . . . . . . . . . . . . . . . 152<br />
Fukushima . . . . . . . . . . . . . . . . . . . . . 14<br />
Girosi . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />
Grossberg, Stephen . . . . . . . . 13, 201<br />
Hebb, Donald O. . . . . . . . . . . . 11, 85<br />
Hinton . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Hoff, Marcian E. . . . . . . . . . . . . . . . 12<br />
Hopfield, John . . . . . . . . . . . 13 f., 159<br />
Ito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Jordan . . . . . . . . . . . . . . . . . . . . . . . . 152<br />
Kohonen, Teuvo . 13, 171, 179, 193<br />
Lashley, Karl . . . . . . . . . . . . . . . . . . . 11<br />
MacQueen, J. . . . . . . . . . . . . . . . . . 210<br />
Martinetz, Thomas. . . . . . . . . . . .196<br />
McCulloch, Warren . . . . . . . . . . . 10 f.<br />
Minsky, Marvin . . . . . . . . . . . . . . . 11 f.<br />
Miyake . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Nilsson, Nils. . . . . . . . . . . . . . . . . . . .12<br />
Papert, Seymour . . . . . . . . . . . . . . . 12<br />
Parker, David . . . . . . . . . . . . . . . . . 122<br />
Pitts, Walter . . . . . . . . . . . . . . . . . . 10 f.<br />
Poggio . . . . . . . . . . . . . . . . . . . . . . . . 131<br />
Pythagoras . . . . . . . . . . . . . . . . . . . . . 74<br />
Riedmiller, Martin . . . . . . . . . . . . 116<br />
Rosenblatt, Frank . . . . . . . . . . 11, 89<br />
Rumelhart . . . . . . . . . . . . . . . . . . . . . 14<br />
Steinbuch, Karl . . . . . . . . . . . . . . . . 12<br />
Sutton. . . . . . . . . . . . . . .233, 254, 256<br />
Tesauro, Gerald . . . . . . . . . . . . . . . 253<br />
von der Malsburg, Christoph . . . 13<br />
Werbos, Paul . . . . . . . . . 13, 108, 123<br />
Widrow, Bernard. . . . . . . . . . . . . . .12<br />
Wightman, Charles. . . . . . . . . . . . .11<br />
Williams . . . . . . . . . . . . . . . . . . . . . . . 14<br />
Zuse, Konrad. . . . . . . . . . . . . . . . . . .10<br />
PNS . . . siehe Peripheres Nervensystem<br />
Pole Balancer . . . . . . . . . . . . . . . . . . . . . 254<br />
Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />
closed loop . . . . . . . . . . . . . . . . . . . . 241<br />
evaluation. . . . . . . . . . . . . . . . . . . . .246<br />
greedy . . . . . . . . . . . . . . . . . . . . . . . . 242<br />
improvement . . . . . . . . . . . . . . . . . . 246<br />
open loop . . . . . . . . . . . . . . . . . . . . . 241<br />
Pons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
Propagierungsfunktion. . . . . . . . . . . . . .44<br />
Pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />
Pupille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
Q<br />
Q-Learning . . . . . . . . . . . . . . . . . . . . . . . .252<br />
Quantisierung . . . . . . . . . . . . . . . . . . . . . 171<br />
Quickpropagation . . . . . . . . . . . . . . . . . 122
R<br />
Rückenmark . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
Rückkopplung . . . . . . . . . . . . . . . . . 50, 151<br />
direkte . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
indirekte . . . . . . . . . . . . . . . . . . . . . . . 54<br />
laterale. . . . . . . . . . . . . . . . . . . . . . . . .55<br />
Ranvierscher Schnürring . . . . . . . . . . . . 29<br />
RBF-Netz . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />
wachsendes. . . . . . . . . . . . . . . . . . . .147<br />
Refraktärzeit . . . . . . . . . . . . . . . . . . . . . . . 29<br />
Regional and Online Learnable Fields<br />
214<br />
Reinforcement Learning . . . . . . . . . . . 233<br />
Reizleitender Apparat . . . . . . . . . . . . . . 30<br />
Rekurrenz . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
Repolarisation . . . . . . . . . . . . . . . . . . . . . . 27<br />
Repräsentierbarkeit. . . . . . . . . . . . . . . .125<br />
Resilient Backpropagation . . . . . . . . . 116<br />
Resonanz. . . . . . . . . . . . . . . . . . . . . . . . . .202<br />
Retina . . . . . . . . . . . . . . . . . . . . . . . . . . 34, 91<br />
Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />
Reward . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />
Avoidance Strategy. . . . . . . . . . . .243<br />
pure delayed . . . . . . . . . . . . . . . . . . 243<br />
pure negative . . . . . . . . . . . . . . . . . 243<br />
Rezeptives Feld. . . . . . . . . . . . . . . . . . . . .34<br />
Rezeptorzelle . . . . . . . . . . . . . . . . . . . . . . . 30<br />
Entero-. . . . . . . . . . . . . . . . . . . . . . . . .31<br />
Extero-. . . . . . . . . . . . . . . . . . . . . . . . .31<br />
Photo- . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
Primär- . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
Sekundär- . . . . . . . . . . . . . . . . . . . . . . 31<br />
Rindenfeld . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
Assoziations- . . . . . . . . . . . . . . . . . . . 18<br />
primäres . . . . . . . . . . . . . . . . . . . . . . . 18<br />
RMS . . . . . . . . . siehe Root-Mean-Square<br />
ROLFs . . . . . siehe Regional and Online<br />
Learnable Fields<br />
Root-Mean-Square . . . . . . . . . . . . . . . . . 74<br />
Rprop siehe Resilient Backpropagation<br />
S<br />
Saltatorische Impulsleitung . . . . . . . . . 30<br />
Schicht<br />
Ausgabe- . . . . . . . . . . . . . . . . . . . . . . . 50<br />
Eingabe- . . . . . . . . . . . . . . . . . . . . . . . 50<br />
versteckte . . . . . . . . . . . . . . . . . . . . . . 50<br />
Schichten von Neuronen . . . . . . . . . . . . 50<br />
Schwannsche Zelle . . . . . . . . . . . . . . . . . . 29<br />
Schwellenwert . . . . . . . . . . . . . . . . . . . . . . 45<br />
Schwellenwertpotential . . . . . . . . . . . . . 27<br />
Selbstorganisierende Karten . . . . . . . . 13<br />
Self Fulfilling Prophecy . . . . . . . . . . . . 232<br />
Self Organizing Map. . . . . . . . . . . . . . .179<br />
Multi-. . . . . . . . . . . . . . . . . . . . . . . . .198<br />
Sensorische Adaption . . . . . . . . . . . . . . . 32<br />
Sensorische Transduktion . . . . . . . . . . . 30<br />
ShortCut-Connections . . . . . . . . . . . . . . 50<br />
Silhouettenkoeffizient . . . . . . . . . . . . . . 212<br />
Single Shot Learning . . . . . . . . . . . . . . 164<br />
Situation . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
Situationsbaum . . . . . . . . . . . . . . . . . . . 242<br />
Situationsraum . . . . . . . . . . . . . . . . . . . . 239<br />
SLP . . . . . siehe Perceptron, Singlelayer-<br />
Snark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
SNIPE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .vi<br />
SOM . . . . . . . siehe Self Organizing Map<br />
Soma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24<br />
Spin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160<br />
Stabilitäts-Plastizitäts-Dilemma69, 201<br />
State Space Forecasting . . . . . . . . . . . 226<br />
State-Value-Funktion . . . . . . . . . . . . . . 244<br />
Stimulus. . . . . . . . . . . . . . . . . . . . . . .27, 182<br />
Swing up an inverted Pendulum . . . 255
Symmetry Breaking . . . . . . . . . . . . . . . 127<br />
Synapse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
chemische . . . . . . . . . . . . . . . . . . . . . . 23<br />
elektrische. . . . . . . . . . . . . . . . . . . . . .23<br />
synaptischer Spalt . . . . . . . . . . . . . . . . . . 23<br />
T<br />
Tangens Hyperbolicus . . . . . . . . . . . . . . 47<br />
TD-Gammon . . . . . . . . . . . . . . . . . . . . . . 253<br />
TD-Learningsiehe Temporal Difference<br />
Learning<br />
Teacher Forcing . . . . . . . . . . . . . . . . . . . 156<br />
Teaching Input . . . . . . . . . . . . . . . . . . . . . 70<br />
Telencephalon. . . . . . . . . .siehe Großhirn<br />
Temporal Difference Learning . . . . . 248<br />
Thalamus . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
Topologie . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />
Topologiefunktion . . . . . . . . . . . . . . . . . 183<br />
Topologischer Defekt . . . . . . . . . . . . . . 192<br />
Trainingsmenge. . . . . . . . . . . . . . . . . . . . .67<br />
Trainingsmuster . . . . . . . . . . . . . . . . . . . . 70<br />
Menge der. . . . . . . . . . . . . . . . . . . . . .70<br />
Transferfunktion . . . . . . . . . . . . . . . . . siehe<br />
Aktivierungsfunktion<br />
Truncus cerebri . . . . . . siehe Hirnstamm<br />
Two Step Ahead Prediction. . . . . . . .228<br />
direct . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />
U<br />
Umwelt . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />
Unfolding in Time. . . . . . . . . . . . . . . . .156<br />
V<br />
Verbindung. . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
Vollverknüpfung . . . . . . . . . . . . . . . . . . . . 50<br />
Voronoidiagramm . . . . . . . . . . . . . . . . . 173<br />
W<br />
Weight Decay . . . . . . . . . . . . . . . . . . . . . 123<br />
Widrow-Hoff-Regel . . siehe Delta-Regel<br />
Winner-Takes-All-Schema . . . . . . . . . . 55<br />
Z<br />
Zeitbegriff . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
Zeithorizont . . . . . . . . . . . . . . . . . . . . . . . 240<br />
Zeitreihe . . . . . . . . . . . . . . . . . . . . . . . . . . 223<br />
Zeitreihenvorhersage. . . . . . . . . . . . . . .223<br />
Zentrales Nervensystem. . . . . . . . . . . . .18<br />
Zentrum<br />
eines RBF-Neurons. . . . . . . . . . . .132<br />
Abstand zu . . . . . . . . . . . . . . . . . 138<br />
eines ROLF-Neurons . . . . . . . . . . 215<br />
ZNS . . . . . siehe Zentrales Nervensystem<br />
Zuckern . . . . siehe Flat spot elimination<br />
Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
Zwischenhirn . . . . . . . . . . . . . . . . . . . . . . . 20<br />
Zylinderfunktion . . . . . . . . . . . . . . . . . . 185