PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuronales Netz



matren
30.05.2004, 00:20
Hat hier vielleicht schon mal jemand ein Neuronales Netz programmiert ?

Die Neuronen zu programmieren kriege ich ja noch hin, aber das mit dem Training da sehe ich noch ein kleines Problem.

Hat das vielleicht schonmal jemand gemacht und kann seinen Sourcecode zur Verfügung stellen und sagen für was es gedacht ist?

Vielleicht kennt ja auch jemand ein paar interessante Links wo eine praktische Einführung zu finden ist ?

Welches Netz wäre mir erstmal egal, nur um mal überhaupt einen Einstieg in das Thema zu finden. Das meiste was ich bisher so gefunden habe habe war eher theoretischer Natur.

Javik
30.05.2004, 11:23
Tja ich weis nicht ob du das selbe wie ich unter nem Neuronalem Netzwerk verstehst, aber ich hab schon mal eins gemacht und es hat prima funktioniert :) Du kannst mal auf meiner Hp schauen hab da was dazu geschrieben: www.Javik-Robotik.de.vu
Da ist es unter Roboter/Plexa
Is zwar ein einfaches Neuronales Netzwerk, aber ich habe damit meinen Roboter erfolgreich durch die Wohnung fahren lassen ohne das er an Hindernisse geriet ;)

matren
30.05.2004, 11:33
Ist ja schonmal nicht schlecht, ich möchte aber eines mit Gewichtung programmierung welches ich dann später trainieren möchte (sollte also mit Backpropagation oder einer anderen Methode möglich sein)

Dein Netzwerk ist wirklich sehr einfach aufgebaut, da es ja eigentlich kein Neuronales Netz im klassischen Sinne ist, da die Ergebnisse ja schon im vornerein bekannt sind. Für den Einstieg finde ich es aber garnicht schlecht.

Wie bist Du auf die Idee gekommen ?
Hast Du da noch irgendwelche Dokumente die dich darauf gebracht haben.
(Links im Internet) ?

Javik
30.05.2004, 12:03
Ich hab mir gleich am Anfang als ich beschlossen habe einen Roboter zu bauen ein Buch, des generell über Roboter und deren Programmierung ist, gekauft. In dem stand nur wenig über neuronale Netze drin. Aber mir hat des gefallen und dann hab ich mir des so ausgedacht...

Was du da machen willst ist wohl wirklich um einiges schwerer.

Ich hab mal ein bischen gegoogelt und diese Seite gefunden, ich glaube die ist nicht schlecht als Einführung : www.sund.de/STUDIUM/DIPLOM/Einleitu.htm
da wäre nochmal was:
http://www.sbg.ac.at/geo/idrisi/idrgis96/fuchs/kap-c1.htm

Aber du kannst ja auch einfach mal in Googel suchen... Ich habe nach Neuronales Netzwerk programmieren gesucht.

matren
30.05.2004, 15:32
Bei Google habe ich auch schon gesucht, doch nichts gefunden mit dem ich praktisch was anfangen konnte.

Der zweite Link scheint ganz interessant zu sein. Ich habe mir gleich mal ein Bookmark gesetzt. Aber auch da verwenden sie keine klassische Programmiersprache sondern wieder eine selbstentwickelte Spezial-Sprache (oft wird auch Prolog verwendet) mit der ich praktisch nichts anfangen kann. Zumal alles was ich bisher gefunden habe auf höherer mathematischer Ebene erklärt wird und ich da nicht so fit bin.
Sicherlich fehlt mir auch die nötige Motiviation mich mit der Mathematik auseinanderzusetzen (wirkt halt etwas abschreckend für mich).
Aber genau deshalb suche ich was wo anhand eines Sourcecodes (einer klassischen Programmiersprache (C, C++, Java, Basic...) erklärt wird wie man so ein Netz aufbauen kann und wie das mit dem Trainign funktioniert.

Nichtsdestotrotz, Danke für die Links.

djdune
30.05.2004, 19:38
Es gab mal eine Firma, die hat ein Tool zur Verfügung gestellt, das ein NN simpuliert und lehrt. Dannach konnte man es als Source oder DLL exportieren. Aber solche NNs sind ein bissl wenig erforscht, da man ja net weiss, wie das NN jetzt die Daten verarbeitet hat.

matren
30.05.2004, 21:49
Ja, Tools dürften da eine Menge verfügbar sein.
Ich suche halt nach einer einfachen erklärung wie ich das am geschicktesten anstellen kann um es selber zu programmieren.

Ich schau mich einfach mal um was sich da so finden läßt.
Vielleicht probier ich doch erstmal so n Tool aus und sehe dann weiter.

Dank und Gruß

NumberFive
31.05.2004, 19:21
Hallo matren,

hier im forum gibt es ein link auf ein vb programm was ein mini neuronals netz simuliert. das habe ich mir mal runter geladen und nach c++ um gesezt
will es so erweiter das es mit mysql und mehr als zwei neuronen tut den nur dann nützt das was im bot nach meiner meingung.

Gutes Buch zum Thema:

Mobile Robotik - Eine praktische Einführung

der rest gibt es unter büchern hier im forum

Gruß

matren
31.05.2004, 19:36
Ok, danke. Ich schau es mir mal an.

Hast Du da auch schon was programmiert ?
Die Neuronen selber und das speichern der Gewichtungen dürfte kein Problem sein, wie verändert man aber systematisch die Gewichtungen um anhand der Eingangssignale ein angenähertes Ausgangssignal zu bekommen ?
Vielleicht hilft mir ja das VB Beispiel dabei dem auf die Spur zu kommen.
-----
Gestern habe ich auch noch was interessantes über die Implementation eines neuronalen Netzes auf hardwarebasis gelesen. Sowas sollte sich eigentlich mit einigen Controllerchips auch machen lassen.
Bloß allein der Gedanke wie dann das Board aufgebaut sein müsste (so die ganzen ISP Anschlüsse) und man da dann jeden Controller programmieren muss. puh. Ist ja dann die reine Fließbandarbeit.
Und dann war ich mir auch nicht ganz sicher wie man die Gewichtungen am geschicktesten speichert .

Weis jemand was dazu ? Geht das mit dem eingebauten EEPROM ?
Hab mich noch nicht so richtig damit beschäftigt.
Mal sehen.
----
Übrigens fällt mir da gerade ein, daß ja inzwischen die ersten "Neurochips" auf dem Weg sind, bei denen das Neuronale Netz mit versteckten Layern Hardwaretechnisch implementiert ist.
Also der Name "Neurochip" hört sich ja schon mal gut an:
"Also die Objekterkennung läuft über Kamera und einigen Neurochips!" :)

NumberFive
31.05.2004, 19:59
Hallo matren,

mein Neuronales netzt hat ein lernen funktion damit klapp das gut wenn
sie oft genung auf ruft mein problem ist eher wie rufe ich die lernen procedure im robi auf damit er ständig weiter lernt dann kommt aber das problem der des Überlernens das heist das neuronen netz wir überldaden wen das so sagen kann.

Ich muß dir ganz ehrlich sagen es schön was so alles in den verschieden laboren so gibt aber entweder ist es sau teur oder es funktioniert nicht den sonst wäre es ich der tages presse zu lesen.

Ich denke die kochen alle mit wasser deshalb selbst bauen mach klug und vielleicht sind wir ein bisschen schneller wie die anderen. Ach könnte ich doch 24 Stunden am tag programmieren dann währe ich weiter und wahrscheinlich verhungert leider habe ich noch niemanden gefunden der mich für mein ideen bezahlt.

Sorry aber das mußte mal raus

Gruß

NumberFive
31.05.2004, 20:03
Nachtrag:

ich denke nicht das hardware die lösung ist software ist schneller den heute gibt es schon chips deren funktion per Software bestimmt wird. das was diese neuron chips angeht wird auch nix anderes sein. Will sagen ram und platte kosten nicht viel spezial hard ist immer teuer.

Gruß

Javik
31.05.2004, 20:24
Hört sich alles interessant an, könntet ihr mir vlt mal die Links geben, wo ihr des jeweilige Zeugs gefunden habt ?

zefram
31.05.2004, 20:24
Die Neuronen selber und das speichern der Gewichtungen dürfte kein Problem sein, wie verändert man aber systematisch die Gewichtungen um anhand der Eingangssignale ein angenähertes Ausgangssignal zu bekommen ?

Ich zitiere mich mal selbst, aus einem Beitrag in elektronik-projekt. Da ging es darum, dass jemand eine Mustererkennung mittels NN machen wollte und verschiedene Kurvenformen unterscheiden wollte. Die Kurven wurden an 10 Stellen abgetastet, es lagen also 10 Werte vor.


Hmm, also ... ich nehme mal an, du willst in der Lernphase dem Netz verschiedene Trainingsmuster (Sinus, Rechteck, Dreieck) zeigen. Nach der Lernphase soll das Netz dann in der Lage sein, neue Muster, die auch etwas verrauscht sein können, einer der drei Klassen Sinus, Rechteck, Dreieck zuzuordnen.
Du brauchst also 3 Neuronen (Perzeptronen) mit jeweils 10 gewichteten Eingängen und je einem Ausgang.
Nachfolgend bezeichne ich mal deine 10 Byte große Liste als "Vektor". (nur aus Gewohnheit)


0.1 Erstelle eine Menge an Trainingsvektoren (Trainingsbeispiele) und normiere sie. (siehe Normalisierung von Vektoren)

0.2 Wähle die Gewichte an den Eingängen der 3 Neuronen zufällig

Trainingsphase:
1. wähle zufällig einen der normalisierten Trainingsvektoren
2. berechne für jedes der 3 Neuronen die Erregung (Gewichtsvektor mal Eingabevektor)
3. wähle das Neuron mit der größten Erregung
4. ersetze den Gewichtsvektor des gewählten Neurons durch (alter Gewichtsvektor + Eingabevektor)
5. normiere den neuen Gewichtsvektor
6. springe zu 1. (Abbruch nach einer bel. Anzahl von Trainingsschritten)


Was is jetzt passiert? Jedes der 3 Neuronen repräsentiert jetzt eine der 3 Musterklassen. Gibt man nun ein neues Muster ein, wird das jenige Neuron die größte Erregung zeigen, dessen Klasse dem Eingabemuster am ählichsten ist.

Problem: Das Netz kann keine verschobenen Formen erkennen. Eine Sinuskurve, die während der ersten Bytes ansteigt ist also etwas anderes, als eine Kurve, die am Anfang fällt. Um solche Sachen zu Erkennen muß man irgendeine Verschiebungs-invariante Darstellung finden (Fouriertransformation oder sowas), aber das is dann eine andere Geschichte.


Vielleicht hilft das erstmal bissel weiter. Ansonsten sind wie immer diverse Skripte von Uni-Vorlesungen zu empfehlen. Zum Beispiel hier:
http://www.tu-chemnitz.de/informatik/HomePages/KI/skripte.php unter "Konnektionistische Wissensverarbeitung" ... das Skript kommt ohne Mathematik aus.

PS: NumberFive ... für dich wäre ein Neuronales Netz, welches die korrekte Verwendung von Satzzeichen aus den Beiträgen anderer Nutzer lernt, ein echter Fortschritt, oder?

matren
31.05.2004, 21:00
Danke. Das ist doch schonmal was.

Das mit den Uni-Sachen ist immer so ne Sache.
Meistens kriegt man eine Liste mit Publikationen oder einfach nur ein Inhaltsverzeichnis des Stoffes in den Lesungen.
Aber das da gefällt mir schonmal.
-----
Software ist schneller ?
Ich denke das eine native Implementation des Netztes direkt in die Hardware um einiges schneller sein dürfte als jede Softwarelösung.
Aber darauf kommt es bei Neuronalen Netzten ja eigentlich garnicht an.
Die brauchen ja garnicht schnell sein, höchstens fürs Training, weil man da so arg probieren muss bis der richtige Wert rauskommt.

Aber für ein trainiertes Netz ist dach nicht weiter relevant.
vgl. das menschliche Gehirn. Die schlimmste Kröte von allen. Sowas in der Geschwindigkeitsklasse gibts in der Elektronik garnicht mehr.

Funktioniert doch aber trotzdem einigermaßen. :)

NumberFive
31.05.2004, 21:09
das währe sicherheit so
aber ich bin echt am überlegen ob ich nicht das posten langsam lasse.
Ich weiß es nicht ob ihr das nicht begreifen wollt oder könnt.

Ich kann nicht schreiben und werde es auch nicht mehr lernen. Natürlich kommt an der ein oder anderen stelle hinzu das ich schneller denke als tippe aber im grundsatz es gibt eine Krankheit die nennt sich legastini (ist 100% falsche geschrieben ein fach so sprechen wie es da steht)
Ich kann mir wörter nur anhand des aussehens merken und bin so in der lange zu schreiben. Also es hat nix mit meiner nichst lust zu tun sonder ich kann es nicht vom Arzt bestätigt. Also bitte ich kann nicht mehr.
Das auch für mich nicht einfach was mein ihr wie schwer das im berufsleben ist.

zefram
31.05.2004, 21:36
Ich kann nicht schreiben und werde es auch nicht mehr lernen. Natürlich kommt an der ein oder anderen stelle hinzu das ich schneller denke als tippe aber im grundsatz es gibt eine Krankheit die nennt sich legastini

Ok, entschuldigung. Ich wusste nicht so recht, wie ich deine Schreibweise einordnen soll ... die Rechtschreibung is ja total in Ordnung, nur ohne jeden Punkt oder Komma sind die Beiträge echt schwer zu erfassen.

Also nichts für ungut.

Noch ein Gedanke zum Neuronalen Netz ... das angesprochene Problem des "Überlernen" oder Overfittings, äußert sich darin, dass das Netz "auswendig lernt". Es verliert seine Generalisierungsfähigkeit und degeneriert quasi zu einer reinen Lookup-Table. Man muß also den Aufbau des Netzes vorsichtig wählen und gegebenenfalls die Anzahl der Neuronen bzw. der Parameter reduzieren.

NumberFive
31.05.2004, 22:08
Hallo zefram

sorry aber mußte mal raus mach jetzt einfach ein paar absätze dann solte man es besser lesen können.

Ich lese zu diesem Thema zur zeit ein buch ist zwar hart aber ich denke komme dadurch. Zur zeit bin ich genau an der stellen wo es darum geht.

Aber er macht das anders er schaltet ein filter davor nur wie genau das geht habe ich noch nicht begriffen. Da ich zur zeit auch etwas programmieren muß was geld bringt komme ich nicht so viel zum lesen und testen leider also werde vorschritte bei mir etwas dauern.

Gruß

matren
31.05.2004, 23:42
@NumberFive:
Aber NumberFive, ... da würde hier doch was fehlen wenn Du hier nichts mehr postest. (Ist übrigens mein absoluter Ernst)

Legasthenie hin oder her, ich verstehen Dich trotzdem (meistens).
Und zweitens kann ich eh schneller lesen als Du schreiben. :)

Also alles nicht weiter ernst nehmen !!!
----

@zefram:
Das mit dem "überlernen" ist ein guter Punkt. Hatte ich völlig aus den Augen verloren. Gut das Du das erwähnst.

Passiert bei Menschen aber auch. Ich glaube da heißt es dann "Borniertheit". :)

NumberFive
31.05.2004, 23:53
Danke für die aufmuterung

oder man sieht den walt vor lauter bäumen nicht. Mann bin gerade fast verzeifelt habe kein Funktion zu aus lesen des timestamp in mysql gefunden.
ich glaube das nennt man dann betriebs blind oder so *g*

matren
01.06.2004, 00:02
Hast es jetzt aber gefunden oder ?
----
Übrigens hab ich da was gefunden über Bildverarbeitung.
Könnte vielleicht für Dich ganz interessant sein:
http://www-user.tu-chemnitz.de/~stj/lehre/bild.pdf
(danke an zefram für den Link)

NumberFive
01.06.2004, 00:06
Hallo

der link sieht gut aus mal in ruhe durch arbeiten

danke ja hab es gefunden

gruß

matren
01.06.2004, 00:16
Sag mal :
das einfache VB Programm mit den zwei Neuronen.
Wo ist das ? Ich kannst nicht finden.

NumberFive
01.06.2004, 00:32
https://www.roboternetz.de/phpBB2/viewtopic.php?t=467

und dann den beitrag von Frank suchen

matren
01.06.2004, 00:45
Super, danke!!!

Manf
01.06.2004, 10:49
Ich finde die Diskussion sehr interessant. Ich habe auch schon einmal ein paar einfache Experimente mit neuronalen Netzen gemacht und mir dabei die Frage gestellt, welche Ziele man damit verfolgen kann. Es sind nur ein paar Überlegungen die keinen Anspruch auf Vollständigkeit haben.

Mögliche Ziele für den Einsatz neuronaler Netze
Ziel 1) Selbstorganisation in der Rechner-Archtiektur. Leistungssteigerung, Realisierungstechnik für Höchstleistung an Verarbeitung, Nutzung paraller Strukturen zur quasi unendlichen Erweiterbarket ohne spezielle Engpässe

Ziel 2) Selbstorganisation in der Algorithmenerstellung. Neue Wege zur Formulierung der Lösung von determinierten Problemen, die klassisch schwer zu formuliern sind. Beispiel: Erkenung der Zeichen eines Zeichensatzes an maximalen Merkmalsunterschieden mit immer neuen aber beliebigen festgelegten Zeichsätzen (oder Bildern)

Ziel 3) Extrapolation von Lösungen. Lösung von unbekannten Problemen aus der Ähnlichkeit zu bekannten Problemen und deren Lösungen

Die Testbarkeit wird, wie schon in der Dikussion schon gesagt wurde, entscheidend durch die Zielvostellung beeinflußt, denn die Lösung unbekannter Probleme ist beisielsweise schwierig zu testen.
Ich erwähne es weil ich die wichtigen Aussagen zu den Kriterien in der Diskusion gefunden habe und nur noch einmal in einer Gegenüberstellung deutlich machen möchte, denn auch der Zielkonflikt des Überlernens wurde ja hier schon angesprochen.

Die Beschäftigung mit neuronalen Netzen ist in jedem Fall interessant, aber mit der Beschreibung möglicher Zielvorstellungen kann man sich auch klar machen welche Kiterien für einen selbst wichtig sind, oder welche Kriterien man aktuell betrachtet und welche gerade zurücktreten.


Für mich wichtige Bemerkungen aus der bisherigen Diskussion:
wie verändert man aber systematisch die Gewichtungen (Ziel 2: es kommt darauf an in welchem Sinn systematisch, Freiraum für Selbstorganisation)

mein Neuronales netzt hat ein lernen ... rufe ich die lernen procedure im robi auf damit er ständig weiter lernt ... dann kommt aber das problem der des Überlernens (Ziel 2 vs. 3)

ich denke nicht das hardware die lösung ist, software ist schneller (Ziel 1 läßt auch Lösungsvielfalt offen für viele schnelle Multi-Neuronenemulationen oder ganz viele Neuronen)

Aber darauf kommt es bei Neuronalen Netzten ja eigentlich garnicht an. Die brauchen ja garnicht schnell sein, höchstens fürs Training, weil man da so arg probieren muss bis der richtige Wert rauskommt. Aber für ein trainiertes Netz ist dach nicht weiter relevant. (Ziel 1 , 2, nicht 3)

"Überlernen" oder Overfittings, äußert sich darin, dass das Netz "auswendig lernt". Es verliert seine Generalisierungsfähigkeit und
degeneriert quasi zu einer reinen Lookup-Table. (Ziel 2 vs. 3)

Manfred

matren
01.06.2004, 11:50
Tja Manfred, damit hast Du uns Fliegen alle Erschlagen !!!

Bin ich ein Kleingeist ? Wieso hab ich das jetzt nicht auf anhieb kapiert ?
Ich muss das wohl nochmals im Detail durchgehen.
(Da schreibt jemand was in Hochdeutsch und ich verstehe kein Wort !)

Das Thema Neuronales Netz ist eigentlich dadurch so schwierig das es ja versucht ein biologisches Netzt (Gehirn) zu reproduzieren. Was natürlich sehr wichtige Fragen aufwirft:

Wie sieht denn ein Standard Gehirn aus ?
Warum lässt sich das alles nicht mit nur einem Modell abdecken und wieso gibt es soviele unterschiedliche Arten? (Ich habe doch auch nur eins).

Und am wichtigsten:

Wieso wird nicht zwischen weiblichen und männlichen NNs unterschieden ?
Ist das alles eine reine Männerdomäne ?
Und wie schaffe ich es als man ein weibliches NN zu kreieren, wenn ich nicht mal meine Frau verstehe ?
-----
Aber Scherz beiseite. Ich interessiere mich schon lange dafür, komme jetzt erst aber langsam dazu mich da einzuarbeiten. Mir ist schon bewusst, das NNs keine Allroundlösung sind.
-----
Und noch zum Abschluß eine kleine Zukunftsprognose:

Sobald wir es geschaft haben daß menschliche Gehirn komplett nachzubilden, stehen wir vor dem Problem, daß es genauso "Fehleranfällig" ist, wie das menschliche Gehirn. Womit die These "Computer machen keine Fehler" hiermit ausdrücklich wiederlegt sei:

"Computer sind auch nur Menschen".
----
Also lese ich mir deinen Beitrag nochmal genau durch um die stark komrimierte Essenz rauszusaugen. Hoffentlich tötet es mich nicht !!!
(Wieso bin ich nicht als normaler Affe auf die Welt gekommen ? damit ich mich mit den wichtigen Themen des Lebens beschäftigen kann: Essen und Schlafen)
-----
Meine erste Interpretation:

Ziel 1) Unendliche Erweiterbarkeit und Selbstorganisation:
Wenn ich dich richtig verstehe steht da das Ziel das sich das Netz von alleine, je nach Bedarf, erweitert.
Aus OOP - Sicht: Unendliche Instanzen einer Neuronen-Klasse , bzw. Neuronen erzeugen weitere Neuronen.
Was so viel heisst das sich das Netz seine Struktur selber bildet, bzw. sich seine Struktur Problembezogen verändert und ausbaut.
(Dabei muss man Unterscheiden zwischen dem Wachstum des Netzes bezogen auf die Anzahl der neuronen oder bezogen auf die Anzahl der Verbindungen zwischen den Neuronen. Bei menschlichen gehirn ist die Anzahl der Neuronen ja auch eher vorgegeben und nur die Anzahl der verknüpfungen nimmt zu.)

Ziel 2) Selbstorganisation in der Algorithmenerstellung:
Im Prinzip steckt ja in einem trainierten Netz ein Algorithmus, den wir aber leider nicht nachvollziehen können, bzw. momentan keine Möglichkeit haben das "Wie" daraus zu extrahieren. D.h. der Algorithmus bildet sich (für uns nicht nachvollziehbar) von alleine heraus.

Ziel 3) Extrapolation von Lösungen anhand bestehender Lösungen:
Darunter kann ich wohl die sogenannte Mustererkennung verstehen.
Darunter fällt wohl auch die "Ungenauigkeit" eines NN, was ihm die Fähigkeit verleiht unbekannte Muster anhand gelernter Muster zu identifizieren.
-------
Mir reicht es für den Anfang ein fest definiertes NN aufzubauen (Also festgelegte Anzahl Layer und Neurornen), daß ich dann trainieren kann und nacher auch unbekannte Muster klassifizieren kann.

Dabei habe ich erstmal keine hochgesteckten Ziele, sondern möchte einfach nur mal einen Einstieg finden. Dazu werde ich versuchen eine Neuronen-Klasse und eine Netzklasse (die die verbindungen definiert) zu programmieren (in PHP) und diese zu trainieren. Mal sehen wie weit ich komme.

Manf
01.06.2004, 12:09
Ich fasse den Kommentar als positiv auf, wobei einige Freiräume gegeben sind, die ich hiermit nutze.
Eine Bemerkung noch zum Schlußsatz: Ich meine, die wichtigsten Themen des Lebens sind die Nahrungsaufnahme und die Arterhaltung, wobei ohne Schlaf sicher auch nichts zu machen ist. Es heißt sicher nicht ohne Grund der wichtigste vierbeinige Freund des Menschen sei das Bett.
Manfred

matren
01.06.2004, 12:45
(Das Thema Sex wollte ich hier ausklammern !!!)

Wo soll das hinführen. Überall koppulierende Computer !!! :)
----
Übrigens habe ich noch mein letztes Posting ergänzt.

matren
01.06.2004, 13:08
Ich versuche gerade das VB Beispiel eines NN (daß, das Frank gepostet hat) etwas zu durchleuchten.

Ein Punkt ist mir irgendwie aber sehr suspekt:
(Das ist an der Stelle an der die Gewichtung und der BIAS der einzelnen Neuronen geändert werden)


For k = 1 To 2

HiddenNeuron(k).Bias = HiddenNeuron(k).Bias + LEARNING_RATE * 1 * HiddenNeuron(k).Delta
HiddenNeuron(k).Weights(1) = HiddenNeuron(k).Weights(1) + LEARNING_RATE * Input1 * HiddenNeuron(k).Delta
HiddenNeuron(k).Weights(2) = HiddenNeuron(k).Weights(2) + LEARNING_RATE * Input2 * HiddenNeuron(k).Delta

Next k

' See above how the Weight is altered by the Delta multiplied by the
' Learning rate - the larger the delta, and the larger the learning
' rate (which is a constant) - the more we're going to change each
' weight. But - the important part here is that we alter the weight
' of the Neuron also in terms of the INPUT. The larger the input was
' the more important this weight is to alter and so the more we're
' going to alter it by. - Bear this in mind when you look at how
' the weights for two neurons can start moving in the same direction
' initially and then change to moving in opposite directions - this
' is because of the Delta mainly being applied to a weight when
' there is a high input on that weight.


Die LEARNING_RATE ist eine Konstante.

Was mich irgendwie daran stört ist, daß die Gewichtung und der Bias ja immer größer wird:

Bias = Bias + (LearningRate * 1 * Delta)

oder besser :

Bias = Bias + (LearningRate * Delta)

Das würde ja bedeuten, daß der Wert immer größer wird. (Da das Delta ja wohl immer zwischen 0 und 1 liegt.)
(Im Prinzip ja egal, da es ja auf die Gewichtungen in Bezug zueinander wichtig sind).

Ist das wirklich so gewollt ?

Manf
01.06.2004, 14:03
Nur noch die Antwort zu 11:50
Die definierten Ziele sind recht einfach gemeint.
Ich will sie nur kurz anhand der Interprätation erläutern.

Ziel 1) Es ist ein Netz fester Größe gemeint. Es gbit nur kaum eine Architektur für Computer die beliebig skalierbar ist. Insofern kann man sich auch vorstellen nach der Architektur neuronaler Netze Systeme höherer Komplexität realisieren zu können. Wie die strukturiert sind und wie gerade sie so gut zusammenarbeiten können, ist ja noch unklar.
Eine Erweiterung der Struktur um einen gewissen Umfang wird zu einer entsprechenden Änderung des bestehenden Inhaltes führen und ist ab einem gewissen Umfang vielleicht eher als Recycling von Hirnmaterial zu verstehen.

Ziel 2) Ja, das sehe ich auch so. Speziell aber wollte ich den Gegensatz zu Ziel 3 ansprechen. Wenn beliebig lange trainiert wurde und jede Reaktion des ganzen auf alle Inputmuster feststeht, dann ist es ein schlichtes Verknüfpungsnetz. Künstliche Intelligenz steckt in der Sache in sofern, als der Algorithmus selbstorganisierend erstellt wurde.
Das Netz macht dann in der Ausführung nichts intelligentes, aber es ist beipielsweise in der Lage, wenn es wie ein Kartenspiel gemischt wird, und neue Ziele Vorgegeben bekommt, ohne explizite Programmierung wieder durch eigenständiges Lernen einen optimalen Zustand zu ereichen.
(Abschaltbares Lernen?)

Ziel 3) Die Mustererkennung ist auch eine Anwendung von Ziel 2. Dort ist ein fester Zeichensatz sogar besser aufgehoben.
Wenn es um Zeichensätze mit Variation geht, dann sollte das Netz nicht ausgelernt haben. Wenn es speziell um eine gleitende Änderung geht, dann sollte das Netz sogar langsam vergessen können und sich an den charakteristischen Unterschieden der aktuellen Muster stärker orientieren.
Wichig ist dabei, wie die Parameter zu wählen sind, mit denen die Geschwindigkeit des Vergessens und de Neuaufnahme gesteuert werden.
Wenn man schon die Wirkungsweise des Netzes nicht verstanden hat, wie soll man beurteilen, ob sich das Netz zu langsam oder zu schnell an Ändernugen von außen anpasst? Man wird wohl unter anderem das Netz im Betrieb immer wieder testen müssen, ob die Antworten gut sind, gleichzeitig soll es ja arbeiten und Entscheidungen treffen deren Ergebnisse nicht auf anderem Wege bekannt sind.
Eine Funktion als Suchmaschine könnte man sich vorstellen oder als Wettervorhersage wo man voher eher zu viele Indikationen hat, aber ab einem bestimmten Zeitpunkt ein konkretes Ergebis vorliegt.

Experimente sind das beste, um sich mit der Wirkungsweise vertraut zu machen und gerade geringe Komplexität wird es ermöglichen die Funktion auch nachzuvollziehen.
Manfred

matren
01.06.2004, 14:51
Hey, das hab ich auf anhieb verstanden !!!

Das mit einem Netzwerk, das ständig weiterlernt ist ja so ne Sache.
Bei mir gehe ich erstmal von einem Netzwerk, das nur einmalig trainiert wird aus,um die Sache zu vereinfachen.

Wenn das Netzwerk jedoch ständig weiterlernt, muss ja irgendwoher der Feedback kommen ob der Output richtig oder falsch ist. Das funktioniert beim Menschen ja auch nicht anders. Ohne Feedback kein Lernen.

Um das Netzwerk selbstlernend zu machen muss ich ihm die nötige Sensorik geben, anhand derer er seine Ergebnisse überprüfen kann.
Dazu bedarf es einer Art Wissensbasis die im vermittelt welche Sensorischen Informationen gut oder schlecht sind. Diese Sensorischen Richtwerte sind eher statischer Natur (damit beziehe ich mich auch so etwas wie einen Schmerz-Sinn).
Desweiteren benötigt so ein Netz natürlich auch gewisse Zielsetzungen die es erfüllen muss (vgl. menschliche Triebe und Bedürftnisse).

Wenn man da weiter ausschweift würde ich den Begriff der Diversifikation einwerfen. Ein einzelnes ist zwar schön und gut, mehrere Netze können jedoch bessere Ergebnisse erzielen. Und da beziehe ich mich auf eine Art natürliche Auslese. Ein Netz muss nicht nur lernen können, es muss auch sterben können. Das ist so wie wenn man mehrere Netze testet (mit Verschiedenen Einstellungen) und am Ende die behält, die die besten Ergebnisse gebracht haben.
Dieses ist natürlich streng Zielorientiert. Unser Ziel ist (lowlevel) überleben.
----
Sich selber fortpflanzende Netze (Reproduktion) die aussterben wenn Ihre Anpassungsfähigkeit umgebungsbedingt nicht ausreichend sind.

Umgebungsbedingt in dem Sinne, das verschiedene Netzmodelle für verschiedene Aufgaben besser geeignet sind und für andere wiederum nicht.
----
So das reicht fürs erste. Das Thema läßt sich ja ewig fortführen.
(degeneriert dieses Forum zu einem Techno-Philosophischem Forum ???)

Manf
01.06.2004, 15:47
Ja, es ist schwer eine Grenze zu finden wenn man ins Philosophieren kommt.
Eine Grenze gibt es, den Unterschied zwischen dem einmal lernen, das bei technischen Systemen auf die man sich verlassen können muß sicher sinnvoll ist und den ewigen lernen mit fließenden Grenzen und offenen Bewertungen ohne die eine sich entwicklende Welt nicht möglich wäre.

Das wäre auch die Grenze zwischen dem Ziel 2 und 3. Bis dahin ist einiges noch technisch sicher noch fassbar und eine Frage der Effizienz. Dahinter verwischen die Grenzen. Das Feld ist sehr viel offener aber anhand von Beispielen wie dem Wetterbericht lassen sich irgendwie auch dort noch technische Anwendungen finden.
Manfred

Eben sehe ich es noch mal, das ist ja gerade auch die Einleitung Deines Postings.

matren
01.06.2004, 16:03
Tja, ich beschäftige mich hier mit Neuronalen Netzen und habe hier aber ganz andere existenzielle Probleme zu lösen:
"Wie zum Teufel kriege ich die Räder auf meine Schrittmotoren. Welle und Loch im Rad haben unterschiedliche Größen."
-----
Ich denke da wird noch einiges auf uns Zukommen.
nicht nur im Bereich NN, sondern ganz allgemein im Computer und KI Bereich. Lassen wir uns mal überraschen.

zefram
02.06.2004, 18:54
Ein Punkt ist mir irgendwie aber sehr suspekt:
(Das ist an der Stelle an der die Gewichtung und der BIAS der einzelnen Neuronen geändert werden)


For k = 1 To 2

HiddenNeuron(k).Bias = HiddenNeuron(k).Bias + LEARNING_RATE * 1 * HiddenNeuron(k).Delta

Was mich irgendwie daran stört ist, daß die Gewichtung und der Bias ja immer größer wird:
(Da das Delta ja wohl immer zwischen 0 und 1 liegt.)


Ich hab mir das Programm nicht angeschaut, aber das Delta wird nicht nur zwischen 0 und 1 liegen, sondern kann durchaus auch negativ sein. Das Delta bezeichnet hier sicher die Differenz zwischen gewünschter Ausgabe des Neurons und der tatsächlichen Ausgabe.
Da im Code von "hidden Neuron" die Rede ist, handelt es sich wohl um ein Netz mit mehreren (also "versteckten" Schichten). Der Lernalgorithmus, der hier angewendet werden muß, nennt sich Backpropagation-Algorithmus (steht auch in dem Skript). Das, was ich oben gepostet hatte, lässt sich nur in Netzen mit einer Schicht von Neuronen anwenden. Der Backpropagation-Alg. funktioniert grob gesagt so, dass zunächst am letzen Neuron (Ausgabeneuron) der Fehler (Delta) bestimmt wird, und dann durch das Netz hindurch zurück zum Anfang (Eingangsneuron) "propagiert" wird. D.h. die Netzkanten werden jetzt rückwärts durchlaufen und die Gewichte dabei je nach zurückpropagiertem Fehler und vorhergehenden Kantengewicht geändert. Genauere und verständlichere Erklärung steht im Skript. :)

Übrigens kann ich noch von Rojas das Buch "Theorie der neuronalen Netze" empfehlen. Ist gar nicht so theoretisch, wie der Name vermuten lässt, ist aber leider vergriffen, soweit ich weiß. Mit etwas Glück wird man (so wie ich) noch bei Ebay fündig.

matren
02.06.2004, 20:37
Hast recht, mein Fehler.

Hab ja heute auch schon festgestellt, daß die verwendete Aktivierungsfunktion:


function Activate($value)
{
return (1 / (1 + Exp($value * -1)));
}

immer Werte zwischen >-1 und <1 liefert.

Hab irgendwie angenommen das sich alles zwischen 0 und 1 bewegt.
Gut, dann werde ich da demnächst mal weitermachen.

14.07.2004, 23:45
Hi.

Habt ihr schonmal daran gedacht genetische algorithmen für die erzeugung von NN's zu verwenden? Diese könnten auch das überlernen abschaffen, indem dies in ihrem Ziel als unerwünschter Zustand programmiert wird. Ausserdem vergesst ihr, dass natürliche NN's ihre Lernfähigkeit mit dem Alter einbüßen.

MfG,

Do.Pe.

desert-at-fol.dyndns.org

zefram
15.07.2004, 22:53
Hmm, kannst du bitte etwas konkreter werden? Wie "erzeugt" ein genetischer Algorithmus ein neuronales Netz? Wie formulierst du den Zustand des Überlernens mathematisch und für den genetischen Algorithmus verarbeitbar? Was hat die nachlassende Lernfähigkeit im Alter mit all dem zu tun?

Fragen über Fragen ...

24.07.2004, 01:01
Ein genetischer Algorithmus ist eine sich selbst anpassende Programmsequenz. Man setzt ein Ergebnis fest und lässt diesen Algorithmus wiederum dafür sorgen, dass er "lernt" das Egebnis mit den gegebenen Umständen zu erreichen. Gen. algorithmen werden in nicht linearen Bereichen verwendet.
So verwenden z.B. Programme, die Pflanzenwachstum simulieren gen. Algorithmen, um deren Wachstum realistisch zu machen(reaktion der Zellen auf Grund der Umweltbedingungen unter der Berücksichtigung des Ergebnisses, was eine ideale Ausleuchtung der Pflanzen sein mag), auch das Grafikprogramm GIMP nutzt genetische Algorithmen, um ein Muster zu erzeugen, das vom Anwender angepasst werden kann. Dabei erzeugen genetische Algorithmen ein Flammenmuster, jeder algorithmus etwas anders. Der Benutzer wählt die Form aus, die ihm am besten gefällt. Danach werden die algorithmen neu gemischt, wobei die Vererbung für jenen algorithmus am besten verläuft, die die schönste Form hervorgebracht hat.
Auf diese Weise sind gen. Algorithmen dazu in der Lage so ziemlich alles zu machen.

Der Zustand des Überlebens ist auch für uns Menschen nur an wenigen Variblen fest gebunden... z.B. Ernährung, Flüssigkeitszufuhr, etc.
Die Menschliche Umgebung ist komplex, daher gibts auch noch mehr Bedingungen für eine gutes Menschliches Überleben, wie z.B. Gesellschaft, etc.
Dem Roboter kann man aber einige einfachere Grundlagen geben, wie Batteriestatus, Vorsicht vor Hindernissen...

Ein Neuronales Netz kann sich auch überlernen, wenn die Lernfähigleit zu hoch justiert wird. Wenn diese Fähigkeit wie bei uns beim Altern aber kontinuierlich nachlassen würde, könnte man dadurch auch das Überlernen verhindern.

zefram
24.07.2004, 10:12
Ein genetischer Algorithmus ist eine sich selbst anpassende Programmsequenz. Man setzt ein Ergebnis fest und lässt diesen Algorithmus wiederum dafür sorgen, dass er "lernt" das Egebnis mit den gegebenen Umständen zu erreichen. Gen. algorithmen werden in nicht linearen Bereichen verwendet.

Also wo wir schon dabei sind, können wir auch etwas exakter definieren: Genetische Algorithmen sind stochastische Optimierungs- bzw. Suchmethoden. Zum gen. Alg. gehören a) eine geeignete Codierung des Optimierungsproblems b) ein Mutationsoperator c) Informationsaustauschoperator (Crossover) d) eine Fitnessfunktion

Beispiel:
Wir betrachten 4-stellige Binärzahlen. Optimierungsproblem: Erzeuge die größte 4-Stellige Zahl. Fitnessfunktion: fehler(x)=15-x (offensichtlich ist 15 die größte 4-stellige Binärzahl und damit unser Ziel).
Wir starten mit einer Menge von, sagen wir, 3 zufällig gewählten Zahlen, 0000, 0010, 1001.
Jede Zahl darf sich jetzt vermehren. Bei der Vermehrung treten, wie bei der Zellteilung, durch Mutation Fehler auf. So können einzelne Bits umkippen (aus 0 wird 1). Ob ein Bit mutiert oder nicht, wird zufällig ausgewählt. Für die Mutation wird vorher eine bestimmte Wahrscheinlichkeit festgelegt, zum Beispiel 20%. Wenn wir die erste unserer drei Zahlen, die 0000, vermehren, wird also jedes Bit mit einer Wahrsceinlichkeit von 20% umkippen. Wir erhalten also als "Kopie" von 0000 zum Beispiel 0010.
Jetzt noch zum Crossover: Wie bei der Zellteilung können Teile der Bitketten zwischen zwei Zahlen ausgetauscht werden. Zum Beispiel nehmen wir die ersten beiden Bits der Zahl 1001 und die letzten beiden Bits von 0010 und fügen sie zusammen. Wir erhalten also als neues Element die Zahl 1010.

Haben wir jetzt alle Zahlen vermehrt, berechnen wir für jede die Fitnessfunktion (fehler(x)). Nur die drei Zahlen mit dem kleinsten Fehler (also der geringsten Abweichung von 15) bleiben am Leben und dürfen sich weiter vermehren, die anderen "sterben", werden also gelöscht. Auf diese Weise findet man nach endlicher Schrittzahl also auf die gesuchte Bitkette von 1111.

Ok, das Beispiel war vielleicht etwas trivial, verdeutlicht aber in etwa die Arbeitsweise von genetischen Algorithmen. Vielleicht kommt die Diskussion wieder etwas in Gange ...




Ein Neuronales Netz kann sich auch überlernen, wenn die Lernfähigleit zu hoch justiert wird. Wenn diese Fähigkeit wie bei uns beim Altern aber kontinuierlich nachlassen würde, könnte man dadurch auch das Überlernen verhindern.

Richtig, deshalb verringert man ja oftmals nach jedem Lernschritt auch die Lernkonstante immer weiter, bis auf einen kleinen Wert nahe Null.

lattemb
26.07.2004, 01:52
Hallo,

ich hab jetzt nicht alle Artikel durchgelesen zu deinem Problem durchgelesen allerdings hab ich da en Buch (ja offline ;-) ) für dich falls du dich näher mit dem Thema auseinandersetzen willst:

Von: Robert Callan
Titel: Neuronale Netze im Klartext
Verlag: Pearson Studium
Erscheinungstermin: 2003
ISBN: 3-8273-7071-x
Preis: 17,95 Eus

also einfach mal bestellen und Nase reinstecken nicht zu technisch nicht zu kompliziert und Sprachenunabhängig.

Viel Spass
Mathias