Linux in der Wissenschaft - oder wie ein n�tzliches Neuronales Netzwerk Tool entstand

ArticleCategory:

Applications

AuthorImage:

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in de Ralf Wieland 

AboutTheAuthor:

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.

Abstract:

Der Artikel zeigt die Eignung linux basierter Software in der Wissenschaft. Besonders Bezug genommen wird dabei auf die Entwicklung wissenschaftlicher Tools zur Umweltsimulation. Als Beispiel wird der unter die GPL gestellte neuronale Netzwerksimulator vorgestellt.

ArticleIllustration:

[Illustration]

ArticleBody:

Worum geht es?

Ich arbeite in einem Forschungsinstitut , das sich mit Landschaftsforschung besch�ftigt. Es geht dabei um Fragen wie:


Jede dieser Fragen ist mit einer Menge Forschungsarbeit verbunden und eine Reihe Wissenschaftler besch�ftigen sich damit. Mir geht es darum, wie Linux bei der Beantwortung solcher Fragestellungen eingesetzt werden kann. Um das n�her zu beleuchten, muss man etwas genauer schauen, wie die Untersuchungen und Auswertungen laufen. Solch gewaltige Probleme, wie die genannten, bestehen in der Regel aus einer Menge von Teilproblemen. M�chte man beispielsweise kl�ren, ob das Wasser trinkbar bleibt, so hat man die Eintr�ge in das Wasser zu untersuchen. Eintr�ge kommen aus unterschiedlichen Quellen, wobei die Landwirtschaft durch ihre D�ngung und Pflanzenschutzmittel nicht unbetr�chtlich zu Verunreinigungen beitr�gt. Aber wieviel ist es wirklich, was gelangt in welchen Zeitr�umen ins Wasser?
Um diese Frage zu beantworten, muss jeder Eintrag erfasst werden. Das ist aufwendig und mit gro�en Fehlern behaftet. Wer kann schon genau sagen, wieviel �ber die Luft, Einleitungen der Industrie, der Landwirtschaft etc. kommt? Au�erdem h�ngen die Eintr�ge auch mit dem Niederschlag, dem Abflussverhalten des Regenwassers und der Verdunstung zusammen. Diese Einflussfaktoren �ndern sich bei einer m�glichen Klima�nderung. Um diese Prozesse �berhaupt untersuchen zu k�nnen, sind Computersimulationen unabdingbare Voraussetzung. Bevor eine Simulation durchgef�hrt werden kann, m�ssen eine Reihe von Randbedingungen, Parametern und Funktionen bestimmt werden. Diese Funktionen und Parameter werden aus Laborversuchen, Feldversuchen und Beobachtungen der realen Nutzung gewonnen. Sie beschreiben die Aufnahme von D�ngern durch die Pflanzen, Abbauprozesse im Boden etc.
Die Simulation selbst basiert auf der Annahme von Szenariendaten und wird h�ufig als sogenannte Monte Carlo Simulation durchgef�hrt. Dabei werden die Daten stochastisch variiert und die Simulation immer wieder mit den ge�nderten Anfangsbedingungen durchgef�hrt. Als Ergebnis entsteht eine Vielzahl m�glicher, aber unterschiedlich wahrscheinlicher Datenreihen. Diese Reihen m�ssen ausgewertet und so aufbereitet werden, dass sie als Grundlage von Entscheidungen dienen k�nnen. Ziel der regionalen Modellierung ist es, sich auf bestimmte m�gliche �nderungen vorzubereiten und heute schon Strategien zu einer nachhaltigen Landnutzung zu entwickeln.
Das Motto ist, wir k�nnen die Zukunft nicht vorhersagen, aber wir k�nnen uns auf die Zukunft vorbereiten.
Taucht man weiter ins Detail, so erkennt man, dass die Arbeit des Informatikers in der Modellierung in zwei wichtige Teilaufgaben zerf�llt. Zum einen m�ssen die Modelle angepasst, Datenreihen ausgewertet und Berichte geschrieben werden. Zum anderen geht es um die Entwicklung speziell angepasster Software f�r die Forschung.

Die t�gliche Kleinarbeit mit Linux

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.

Die andere Seite - Toolentwicklung

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.

Was ist ein neuronales Netz?

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

Daten Input Illustration

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.

Das neuronale Netztool nnqt

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:

Entwicklung von nnqt

Die Entwicklung vollzog sich dabei in folgenden Schritten:

  1. Entwicklung und Test der Algorithmen
  2. Implementation als qt-Applikation
  3. Integration in SAMT

Entwicklung und Test der Algorithmen

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.

Implementierung und Ergebnisse

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:

Daten Input Illustration

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.

Daten Analyse Illustration

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

Control Panel

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:

Modell versus Daten Plot

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.

Analyse Teil zum Funktionsplot

Es k�nnen sowohl zweidimensionale Darstellungen als auch dreidimensionale gew�hlt werden.

2D-View

3D-View

Nachnutzung von nnqt

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.

Dank an die Comunity

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.

Literatur

James A. Freeman:
"Simulating Neural Networks with Mathematica", Addison-Wesley 1994

Download

Die nnqt Software und Updates finden sich hier: nnqt Download