original in de Ralf Wieland
Ich besch�ftige mich mit Umweltsimulation, neuronalen Netzen und Fuzzy-Systemen, indem ich sie programmiere. Letzteres vollzieht sich immer unter Linux (seit 0.99pl12). Weiterhin bin ich an Elektronik und Hardware interessiert und versuche, das mit Linux zu verbinden.
Ich arbeite in einem Forschungsinstitut , das sich mit
Landschaftsforschung besch�ftigt. Es geht dabei um Fragen
wie:
Die t�gliche Kleinarbeit, die aus Analyse von Datenreihen, dem Schimpfen �ber fehlerhafte Messwerte, dem Umformatieren unterschiedlicher Datenformate, dem Schreiben von Berichten etc. besteht, profitiert ganz stark von Linux. Auch wenn einige glauben, man k�nne mit Excel und Co alles machen, so erweist sich doch die Kombination von Perl, Emacs, octave [www.octave.org], R [www.r-project.org] etc. als starke Waffe im Kampf mit den Daten. Was kann man alles mit PERL anstellen. Nicht nur Datenkonvertierung, auch Datenbankabfrage (MySQL) , Kalkulationen etc. lassen sich damit schnell und reproduzierbar erledigen. Gerade letzteres ist wichtig, da Handarbeit h�ufig Fehler in die Daten einbringt, was mit ausgetesteten Skripten wesentlich seltener der Fall ist. Auch das Schreiben von Artikeln mit LaTeX �berzeugt durch Qualit�t. Linux liefert Tools, die es als wissenschaftliches Arbeitsmittel empfehlenswert machen. Ein Nachteil soll aber nicht verschwiegen werden: man muss sich mit den Tools intensiv besch�ftigen. Nicht alles ist intuitiv und nicht jeder ist ein Programmierfreak.
Warum muss man �berhaupt selbst entwickeln, es gibt
doch alles? In der Simulation gibt es leistungsstarke Tools wie
Matlab [www.mathworks.com] . F�r die
Behandlung geographischer Daten gibt es Geographische
Informationssystem (GIS) wie ARCGIS [www.esri.com/software/arcgis] oder als
freie Software Grass [grass.itc.it] .
F�r die Statistik sieht es nicht anders aus. Also warum
noch entwickeln?
Hier liegt das Problem nicht in der Leistungsf�higkeit der
Einzelkomponenten, sondern im System des Zusammenwirkens.
F�r eine Simulation m�ssen Teilaufgaben in
unterschiedlichen Programmen abgearbeitet werden, die aber nur
umst�ndlich, d.h. �ber selbstzuschreibende Interfaces
miteinander kommunizieren k�nnen. Weiterhin kommt
erschwerend hinzu, dass die Daten immer als Massendaten
(r�umliche Daten) mit hoher Fehlerrate vorliegen. Die
erforderlichen Simulationen m�ssen diesem Charakter
Rechnung tragen. Ein Algorithmus muss auch dann noch sinnvolle
Werte liefern, wenn die Eingangsdaten nicht stimmig sind, bzw.
er muss hier warnen. Die Verarbeitung von Massendaten (Matrizen
mit mehr als einer Million Elemente sind eher die Regel)
erfordern schnelle Algorithmen. Robuste und schnelle
Algorithmen lassen sich oft nur in Eigenentwicklung
implementieren.
Die wesentlichste Schw�che kommerzieller Systeme ist aber
die Geheimhaltung des Quellcodes. Wie sollen Wissenschaftler
denn Modelle entwickeln und austauschen, wenn die Quellen nicht
offen liegen? Aus dieser Analyse wurde beschlossen, ein eigenes
"Spatial Analysis and Modeling Tool" (SAMT) als Open Source
Software zu entwickeln.
Es ist ein Simulationstool, das eine eigene Datenhaltung
f�r r�umliche Daten, Schnittstellen zur Datenbank
MySQL und zum GIS besitzt. Es enth�lt grundlegende
Funktionen zur Verwaltung rasterbasierter Daten, es kann Raster
manipulieren (Verschneiden, Distanzen, Interpolation etc.) und
es kann diese Daten sowohl zweidimensional als auch dreidimensional
pr�sentieren.
Bemerkung: Rasterdaten basieren auf der Einteilung einer Karte
in kleine Planquadrate. Die Informationen sind in mehreren
Ebenen solcher Rasterdaten gespeichert. Ein Modell greift auf
die Informationen der Ebenen zu. Neben diesen in die Tiefe
gehenden Informationen sind aber auch die Umgebung eines Rasters
in der gleichen Ebene wichtig. Letzteres bildet die Grundlage
f�r die Modellierung von lateralen Stofffl�ssen, wie
sie z.B. bei der Bodenerosion durch Wind und Wasser
auftreten.
SAMT bildet den Rahmen, in den sich Tools wie ein (sehr
schneller) Fuzzyinterpreter und das neuronale Netztool (nnqt)
einpassen lassen. Fuzzymodelle dienen der Einbeziehung von
Expertenwissen in die Simulation. H�ufig kann ein Experte
einen Prozess beschreiben oder auch steuern, auch wenn kein
mathematisches Modell vorliegt. Mit neuronalen Netzen sind
Verfahren gemeint, die es erlauben, aus Messdaten funktionale
Zusammenh�nge abzuleiten. Im weiteren soll die Entwicklung
des neuronalen Netztools vorgestellt werden.
Ein (k�nstliches) neuronales Netz besteht aus mehreren Ebenen. Die erste Ebene wird mit den zu trainierenden Eingangsdaten in Form von Gleitkommazahlen beschickt. Die Ebene zwischen Input und Output ist nach aussen nicht direkt sichtbar und wird hidden layer genannt. Manchmal gibt es auch mehrere hidden layer. Die abschlie�ende Ebene besteht im Beispiel nur aus einem Element. Eine solche Architektur wird genutzt, um eine Funktion aus mehreren Inputs und einem Output nachzubilden. Die hidden layer sind notwendig, um nichtlineares Verhalten abbilden zu k�nnen, beispielsweise die Funktion x^2-y^2. Wie kann aber ein Netz die gew�nschte Funktion kennen? Am Anfang kennt das Netz die Funktion nat�rlich nicht. Die Verbindungen (Wichtungen) zwischen den Elementen (Knoten) werden mit zuf�lligen Werten belegt. Im Verlauf des Trainigsprozesse versucht der Lernalgorithmus die Gewichte so zu ver�ndern, dass der mittlere quadratische Fehler zwischen dem berechneten und dem vorgegebenen Output minimal wird. Dazu gibt es eine Vielzahl von Algorithmen, auf die hier aber nicht eingegangen werden soll. In nnqt wurden drei Algorithmen implementiert. Bedingt durch die Vorgabe des gew�nschten Outputs spricht man bei diesem Trainingsprozess auch vom �berwachten Lernen (supervised learning).
Das Netz ist trainiert, wenn es einen gen�gend
kleinen Fehler sowohl bei den Trainingsdaten als auch bei den
Kontrolldaten (Man trennt zweckm��igerweise einen
Teil der Daten vor dem Training ab und nutzt diesen Teil als
Kontrolldaten f�r die �berpr�fung des
Lernverhaltens.) erreicht hat. Die Wichtungen bestimmen das
Verhalten des Netzes und werden f�r die Verwendung
gespeichert. Was kann man alles mit so einem Netz anstellen?
Neben dem Einsatz in der Wissenschaft als Modelltool, gibt es
auch eine Reihe von Einsatzgebieten, die mehr oder weniger
ernst zu nehmen sind. So gibt es Versuche, mit solchen Netzen
Kursverl�ufe an der B�rse vorherzusagen. Mir ist so
etwas bisher noch nicht gelungen, aber vielleicht gelingt es
jemandem.
Eine f�r mich interessante M�glichkeit ergibt sich,
wenn man ein neuronales Netz zur kurzfristigen Wettervorhersage
nutzt. So k�nnen beispielsweise die Daten elektronischer
Wetterstationen genutzt werden, um damit ein neuronales Netz zu
trainieren. Interessant sind dabei vor allem der Luftdruck und
die Ver�nderung des Luftdrucks bzgl. der Regenereignisse.
Die Symbole auf den Wetterstationen werden nach solchen Mustern
angezeigt. Vielleicht kann es ein neuronales Netz besser? Um
eigene Experimente zu unterst�tzen, steht nnqt als
gpl-Software zur Verf�gung.
Den Ansto� zur Entwicklung des neuronalen Netztools gaben Wissenschaftler, die mit dem Wunsch an mich herantraten, ihre erhobenen Daten zu untersuchen. Sie wollten ein m�glichst einfaches Tool, das sie aber auch im r�umlichen Kontext nutzen k�nnen. D.h. sie wollten sehen, wie die Ergebnisse im Raum liegen. Nat�rlich gibt es sehr gute neuronale Netztools auf dem Markt. Auch freie Tools, wie SNNS [www-ra.informatik.uni-tuebingen.de/SNNS/] , oder auch Softwarebibliotheken wie, fann [fann.sourceforge.net] liegen vor. SNNS ist phantastisch, aber es kann eben nicht so einfach von jemanden genutzt werden, der nicht programmiert, da es C-Quelltext als output liefert. Auch ist es in seinem Umfang f�r einen Gelegenheitsnutzer wohl zu �berw�ltigend. F�r nnqt gab es eine Reihe von Forderungen, die erf�llt werden sollten:
Die Entwicklung vollzog sich dabei in folgenden Schritten:
Nun gibt es eine �berw�ltigende Zahl guter
Literatur �ber neuronale Netze. Hier sei stellvertretend
nur mal ein Buch genannt. Trotzdem
bleibt da manchmal eine L�cke, die man durch eigene
Experimente und dem Erfahrungsaustausch mit anderen
schlie�en kann. Mir gefiel die schnelle Arbeit mit Matlab
unter Verwendung des Levenberg-Marquardt-Algorithmus. Erst
durch intensive Suche im Internet entdeckte ich einen
Artikel [www.eng.auburn.edu/~wilambm/pap/2001/FastConv_IJCNN01.PDF][local copy, 105533 bytes] der diesen Algorithmus auf neuronale Netze
angewandt hat. Das war die Basis. Ich hatte "nur" noch die
Aufgaben die von mir favorisierte tanh (Tangens Hyperbolicus)
Funktion in den Algorithmus einzupassen. Auch hier nutzte ich
wieder Software unter Linux, n�mlich das Computeralgebra
System Maxima [maxima.sourceforge.net] .
Mit einem solchem System kann man komplizierte Gleichungen
umformen, kann differenzieren und solche Dinge, die nicht so
einfach mit Bleistift und Papier durchzuf�hren sind.
Maxima erlaubte es mir, in einer Wochenendschicht die
notwendigen Umformungen durchzuf�hren und eine erste
Version des Algorithmus in C zu implementieren. Diese
C-Implementierung diente zum Test und der Parameteroptimierung.
Unter Nutzung des Open-Source Simulationssystems desire [members.aol.com/gatmkorn] , vielen
herzlichen Dank an den Entwickler Prof. Korn, als
Vergleichswerkzeug, konnten erste Modellrechnungen
durchgef�hrt werden. Dabei schlug sich der neu
implementierte Algorithmus nicht schlecht. Die Trainingszeiten
f�r das xor-Problem, ein beliebtes Testbeispiel f�r
neuronale Netze, lagen bei durchschnittlich 70ms auf einem
Pentium 3GHz Rechner. (Die Zeit wird im wesentlichen durch die
Leseoperation von der Festplatte ben�tigt, so dass auch
auf einem �lteren Athlon 750 MHz Rechner die Rechenzeit
nur knapp dar�ber lag.)
Alternativ wurde auch der bekannte Backpropagation Algorithmus
implementiert und untersucht. Nach diesen Vorarbeiten, die eine
Basis f�r die weitere Verbesserung der Algorithmen bilden
(Adaption der Lernparamter als Beispiel) ging es an die
Implementierung der Toolbox.
Ich bevorzuge qt als Entwicklungsumgebung. QT ist sehr gut dokumentiert, objektorientiert und ich kann emacs als Editor verwenden. Der Designer von qt hilft beim Entwurf der Oberfl�che. Trotzdem reichen die M�glichkeiten nicht f�r die Entwicklung des nnqt. Ich ben�tige so etwas wie Diagramme, Skalen etc. Auch hier half mir die Entwicklergemeinschaft. So konnten die Bibliotheken qwt [qwt.sourceforge.net] und qwt3d [qwtplot3d.sourceforge.net] genutzt werden, die die Entwicklungszeit drastisch verk�rzten. Gewappnet mit diesen Mitteln wurde nnqt in ca. 2 Wochen zusammengebaut. Als ich schon recht zufrieden war, ging ich auf die Anwender zu. Die hatten vielleicht W�nsche! Man wollte die Datenmenge in eine Trainingsmenge und eine Testmenge automatisch splitten, man m�chte zur besseren �bersichtlichkeit Namen vergeben k�nnen, man m�chte weitere Untersuchungen wie Diagramme mit Parameterkurven usw. Na gut, einiges konnte ich sofort integrieren, anderes wird wohl noch etwas dauern. Hier mal ein paar Screenshots:
Hier kann der Reader auf das Inputformat der Daten angepasst werden. Es k�nnen unterschiedliche Trennzeichen verwendet werden, ein paar Headerzeilen ausgeblendet oder auch die Stelle des Target im Datensatz frei gew�hlt werden. Bemerkung: man sollte sein Datenformat schon kennen, da nnqt sich hier auf die Nutzerangaben verl�sst.
Verlief der Dateninput erfoglreich, so erfolgt sofort der Sprung auf die Datenanalyseseite. Hier gibt es ein paar Informationen zu den Daten und hier werden aus allen Spalten, die f�r das Training zu verwendenden ausgew�hlt. Eine 1 in der letzten Spalte markiert den Input als Trainingsgr��e. (Es sind bis zu 29 Trainingsgr��en nutzbar.)
Die wichtigste Seite bildet die Control-Seite. Hier werden die Anzahl der Hiddenelemente bestimmt, die Zahl der Lernschritte festgelegt und der Trainingsalgorithmus ausgew�hlt. Das Training kann an der Thermometerskala oder alternativ als Zahl beobachtet werden. Es ist mehrmals zu trainieren, da die Startparamter zuf�llig gew�hlt werden und das Ergebnis sensitiv von diesen abh�ngt. Der Auswahlknopf "shuffle" bewirkt eine zuf�llige Auswahl der Trainingsdaten, anstatt einer sequentiellen. Das ist manchmal g�nstiger. Ist es gelungen, den mittleren quadratischen Fehler gen�gend zu dr�cken, kann mittels des "view_trained" Buttons auf die erste graphische Darstellung gesprungen werden:
Hier werden die Trainingsdaten mit dem durch das neuronale Netz berechneten Daten verglichen. Idealerweise liegen die Daten auf der Diagonalen. Aber das Ideal ist nicht erreichbar! Trotzdem sehen die Ergebnisse recht ordentlich aus. (Es werden in roter Darstellung �brigens die Kontrolldaten, also die Daten, die nicht trainiert wurden, angezeigt.) Im n�chsten Schritt k�nnen Funktionsverl�ufe analysiert werden. Dazu sind die Defaultwerte so einzustellen, dass sie sinnvoll sind. Hier ist entsprechende Sorgfalt walten zu lassen, da die Netze nur in der N�he ihrer Trainingsdaten zuverl�ssig arbeiten.
Es k�nnen sowohl zweidimensionale Darstellungen als auch dreidimensionale gew�hlt werden.
nnqt ist Open Source Software und wurde unter der GPL
ver�ffentlicht. Jeder kann es frei nutzen und verbessern.
Letzteres w�re besonders sch�n. Die Installation ist
recht einfach. Es m�ssen nur die qwt-Libraries installiert
werden und nat�rlich qt muss vorhanden sein bzw.
installiert werden. Das nnqt.tgz ist einfach auszupacken (tar
-zxvf nnqt.tgz). Dabei entsteht ein neues Verzeichnis nnqt. Mit
einem cd nnqt kann im Verzeichnis nnqt ein qmake und ein
anschlie�endes make gestartet werden. Wurde alles
fehlerfrei �bersetzt,so ist nur noch eine shell-Variable
mit:
export NN_HOME=/pfad_zu_nnqt
zu setzen. Wenn jetzt in einem neuen Terminal nnqt gestartet
wird, sollten die Daten und Modelle durch nnqt gefunden werden.
Damit w�nsche ich viel Spa�. Zum Testen gibt es eine
Datenreihe mit zwei Inputs mit. Erkennt jemand die Funktion,
die gelernt wurde? (Es ist x^2-y^2 im Bereich von [-2..2])
Was kann man nun alles damit machen - ich bin gespannt auf Eure Ideen.
Es hat sich gezeigt, dass Linux eine ausgezeichnete Entwicklungsumgebung f�r die Behandlung wissenschaftlicher Probleme ist. Ich konnte auf hervorragender Software aufbauen, ohne die man nie in so kurzer Zeit von ca. 6 Wochen ein brauchbares Tool entwicklen k�nnte. Es macht auch immer wieder Spa�, wenn man solche Software frei nutzen kann. Deshalb an dieser Stelle ein herzliches Dankesch�n an die vielen Entwickler, die mit ihrer Arbeit all die sch�nen Dinge erm�glichten, die wir unter Linux nutzen k�nnen.
James A. Freeman:
"Simulating Neural Networks with Mathematica", Addison-Wesley
1994