PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neurales Netzwerk



einballimwas
07.05.2007, 15:13
Hallo, ich bin neu hier in dem Forum, habe aber schon etliche robos gebaut, die mir nun, zb meine cola bringen, usw, usw... bla bla bla... (Einfache sachen halt).
Nun will ich aber mein erstes großes Projekt anfangen. Mein Entwurf steht zur Hälfte schon, aber eben noch ncith fertig. Das Projekt wird ein Geländeroboter, der (erstmal) nur von einem Punkt zum anderen fährt. Dabei wird das Ding dann GPS gesteuert. Dabei muss der Robo Hindernisse umgehen können. Vorher hatte ich keine Ahnung, wie ich das bewerkstelligen konnte. Doch ich habe gestern etwas von einem neuronalen Netzwerk gehört, das hindernisse umgehen kann.
Nun habe ich einige Fragen:

-Wie funktioniert ein neuronales Netzwerk?
.Kann ich das selbst programmieren?
-Wie sehen die Datensätze aus, die ein GPS gerät ausgibt?
.Wie kann ich sie interpretieren?
-kann ein PC ein GPS Gerät simulieren?
.Wenn ja, wie?

So, das wars für den Anfang ;)
E:ICh bin heut wohl etwas verplant! Sorry fr die Schreibfehler und so ;)

Gruß einbalimwas(ser)

Felix G
07.05.2007, 16:15
Ein Neuronales Netz ist im Prinzip ein lernfähiges System das aus künstlichen Neuronen besteht die miteinander verbunden, also vernetzt sind.

Eine genauere Beschreibung findet sich wie so oft auf Wikipedia: Künstliches Neuronales Netz (http://de.wikipedia.org/wiki/K%C3%BCnstliches_neuronales_Netz)
dort ist auch dargestellt wie ein einfaches NN prinzipiell aufgebaut ist:

http://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Neural_network.svg/200px-Neural_network.svg.png

Die Kreise stellen dabei die Neuronen dar, und zwar 3 verschiedene "Sorten",
die sich durch ihre Position im Netz unterscheiden (Eingang, Ausgang und "hidden", also alles was zwischen Eingang und Ausgang liegt)

Ein Netz kann prinzipiell beliebig viele Ein- und Ausgänge haben, und auch die Anzahl und Größe der dazwischen liegenden Schichten ist frei wählbar. (in den meisten Fällen reicht eine versteckte Schicht aber schon)

So, da gibt es also auf der linken Seite einige Eingangsneuronen, da werden die auszuwertenden Daten an das Netz übergeben. Dann kommen einige Verbindungen zu den Neuronen der zweiten Schicht, und diese Verbindungen sind gewichtet. Konkret bedeutet das, daß diese Verbindungen nicht einfach nur den Ausgangswert eines Neurons an ein anderes Neuron weitergeben, sondern daß sie diesen Wert auch um einen bestimmten Faktor verringern können. Das ist das eigentliche Geheimnis an der Sache, das Netz lernt indem die Verbindungen zwischen den Neuronen in ihrer "Stärke" angepasst werden.

Und die Neuronen selbst müssen natürlich auch irgendwas tun...
die gehen her und bilden einfach die Summe der Werte aller ihrer Eingänge, jagen diese Summe durch irgendeine mathematische Funktion (da gibt es viele verschiedene Möglichkeiten), und stellen deren Ergebnis an ihrem Ausgang für die nächste Schicht zur Verfügung.

soviel mal zur prinzipiellen Funktionsweise eines NN...


aber wie verwendet man das dann?
Zunächst mal erstellt man sich ein "dummes" Neuronales Netz. Man legt also die Struktur fest und die Übertragungsfunktion die die Neuronen verwenden sollen (das kann durchaus auch von Schicht zu Schicht unterschiedlich sein). Außerdem muss man natürlich festlegen wie die Verbindungen am Anfang gewichtet sein sollen, also initialisiert man sie mit irgendwelchen Werten (meist setzt man sie einfach auf '1', oder man verwendet Zufallszahlen).

Dann muss man das Netz trainieren, indem man es z.B. mit Daten füttert zu denen man das gewünschte Ergebnis kennt, und dann die Ausgabe des Netzes mit diesem Ergebnis vergleicht. Der Unterschied zwischen dem gewünschten und dem tatsächlichen Ergebnis, also der Fehler, kann dann dazu verwendet werden die Verbindungen zwischen den Neuronen anzupassen.(man braucht also irgendeine Funktion die das halbwegs sinnvoll tun kann)

Wenn das Netz gut genug geworden ist, der Fehler also einen bestimmten Wert unterschritten hat, kann man das Training beenden.

Falls die Testdaten gut gewählt waren, sollte das Netz dann auch zuverlässig arbeiten.


Ich hoffe mal daß die Erklärung halbwegs verständlich ist, ansonsten gibts ja noch Wikipedia. Wenn man erstmal verstanden hat wie und warum so ein Netz funktioniert, ist es auch kein Problem mehr sowas zu programmieren.

einballimwas
07.05.2007, 17:25
Also, je mehr ich lese, desto weniger versteh ich :)
Zusammensetzung ist mir klar, aber die Umsetzung.
So wie ich das verstanden habe, muss jedes Versteckte Neuron ein Programm sein, das die. ihm zugeführten Werte irgendwie umsetzt/Daraus irgendwas berechnet, und dann wieder an den Ausgang zurückgibt.
Doch wie lernt das System dann?
Und wie sieht das Programm dann letztendlich aus (ich meine muss man das in Funktionen packen, oder wie kann mans anders regeln)? Kann man das mit basic realisieren?

Gruß einballimwas(ser)

Xtreme
07.05.2007, 17:58
Lass mich raten, du hast gestern StarWars- ein Blick in die Zukunft gesehen....
Es gibt sehr viele Wege der Umsetzung, wie du es letztendlich machst bleibt dir selbst überlassen. Man kann keine konkreten Anweisungen machen... das ist im Prinzip ja der Job eines Informatikers. (Fast) jedes Problem gab es irgendwann schonmal. Aber jede Lösung ist anders. Basic ist eine gute Grundlage, es nimmt einem anfangs viel Arbeit ab. Doch um das NN dann später zu optimieren würde ich auf ASM zurückgreifen.
Das NN besteht wie gesagt aus vielen kleinen Elementen die zusammen ein Problem lösen. Wie die Elemante aussehen ist dir überlassen und hängt sehr von der Aufgabenstellung ab.

einballimwas
07.05.2007, 18:16
Lass mich raten, du hast gestern StarWars- ein Blick in die Zukunft gesehen....

Nicht ganz ^^
Ich hab Star Wars gesehn, und dann hab ich gedacht: Mann, son dummen Robo kann ich doch auch bauen. Videokassette rein. hingesetzt, ein Konzept entworfen und dann am morgen mit Kopfweh eingepennt :)
und dann irgendwann geschaut, wie so en lernfähiges System aussieht. Dann hab ich irgendwann Die kassette angeguckt, und dann hab ich letztendlich hier gepostet!

Ich hab keine Ahnung wie ich das Realisieren könnte. Mit funktionen, schleifen, oder mit ganzen Programmen? Der Roboter sollte dann auch durchs Gelände fahren können (nicht so wichtig, eher nebensache), und dann noch greifarme selbstständig bewegen sollen(Das wird schwer :D) !
Mein Problem ist, dass ihc keine Ahnun hab, was die Umsetzung in BASIC anbelangt. Ob ihc jetzt ganze Programme entwickle, oder nur eines, und das Netzwerk in funktionen aufbaue, und wie ich dann die Verbindungsmultiplikatoren bastle, und das System einlerne, und, und, und...

Gruß einballimwas(ser)

Felix G
07.05.2007, 20:10
Das ist halt nicht ganz einfach zu erklären...

also mal der Reihe nach:

1. die Neuronen
ein Neuron ist ein "Ding" mit beliebig vielen Eingängen und einem Ausgang. Die Werte die an den Eingängen anliegen werden zunächst mal alle aufsummiert (das ist immer so), dann wird aus dieser Summe (mit einer bestimmten mathematischen Funktion) der Ausgangswert des Neurons berechnet.

Die verwendete mathematische Funktion (auch Übertragungsfunktion genannt) kann im einfachsten Fall z.B. eine "Schwelle" sein. Also wenn die Summe der Eingangswerte größer ist als ein bestimmter Wert, gibt das Neuron 1 aus, ansonsten 0. Eine andere Variante ist eine lineare Funktion, also eine Gerade. Und dann gibt es noch diverse nichtlineare Übertragungsfunktionen.


2. die Verbindungen zwischen den Neuronen
hier ist das "Wissen" des Netzes gespeichert, und zwar in Form der Gewichte der einzelnen Verbindungen. Die Verbindungen zwischen den Neuronen können also unterschiedlich "stark" sein, so daß eine starke Verbindung den Ausgangswert eines Neurons z.B. mit dem Faktor 0.99 multipliziert an einen Eingang des nächsten weitergibt. Es kann aber auch Verbindungen geben die den Wert erstmal mit 0.4 multiplizieren, also das Signal quasi abschwächen. Das kann im Extremfall natürlich auch so aussehen, daß einzelne Verbindungen quasi völlig blockieren (z.B. Multiplikation des Signals mit 0.001 oder so)


Das Ergebnis das das Netz liefert ist daher fast nur davon abhängig wie stark die verschiedenen Verbindungen sind. (die Übertragungsfunktion der Neuronen spielt aber natürlich auch eine Rolle)


Damit dein Netz also das tut was du willst, musst du die Verbindungen "richtig" einstellen, was aber von Hand kaum machbar ist. Du kannst deinem Netz also kein Wissen "einprogrammieren", sondern musst es irgendwie trainieren z.B. mit Beispieldaten zu denen die gewünschten Ergebnisse schon bekannt sind. Es gibt viele verschiedene Algorithmen die man zum Training verwenden kann, z.B. das sehr verbreitete Backpropagation-Verfahren (siehe Wiki).

einballimwas
07.05.2007, 20:33
Liefert ein NEtzwerk immer nur ein ergebniß oder kann Das NEtzwerk auch mehrere Ergebnisse liefern, also zb für drehzahlsteller des motors, und lenkung, und so?

Felix G
07.05.2007, 23:14
Ein Netz kann mehrere Ausgänge haben, also prinzipiell auch mehrere unterschiedliche Ergebnisse liefern...

Allerdings sollte man, wenn mehrere verschiedene Aufgaben ausgeführt werden sollen die wenig miteinander zu tun haben, lieber mehrere kleine Netze nehmen statt einem großen. Es ist also z.B. nicht sinnvoll ein riesiges NN zu erstellen, das an den Eingängen alle Sensorwerte erhält und dann mit den Ausgängen direkt sämtliche vorhandenen Aktoren steuern soll. (es dürfte auch kaum möglich sein für so ein Netz sinnvolle Trainingsdaten zu erzeugen)


Meist wird ein Neuronales Netz verwendet um irgendein Teilproblem zu lösen, das mit "normalen" Mitteln nicht oder nur schlecht lösbar ist.


Ich denke wenn man bei einem Neuronalen Netz eine gute Vorstellung davon hat wie (also mit welchen Daten) es trainiert werden kann, dann stehen die Chancen nicht schlecht daß es später auch das tut was es soll.

mal ein Beispiel...
angenommen man möchte ein NN programmieren das Buchstaben erkennen kann. Das Netz würde dann z.B. an den Eingängen eben das Bild eines Buchstaben erhalten (es bräuchte also so viele Eingänge wie das Bild Pixel hat), und hätte für jeden der 26 Buchstaben einen eigenen Ausgang, der auf 1 gesetzt wird falls das Netz der Meinung ist diesen Buchstaben erkannt zu haben.

In diesem Fall ist es eigentlich klar wie das Netz trainiert werden kann. Man muss ihm nur Bilder von Buchstaben zeigen, und jeweils dazu angeben welcher Buchstabe jeweils zu sehen ist, also welcher der Ausgänge auf 1 gesetzt werden soll. Wenn das Netz lang genug trainiert wurde, wird es (hoffentlich) in der Lage sein die Buchstaben auch dann noch zu erkennen, wenn sie nicht exakt so aussehen wie auf den Testbildern. (ein Problem bei zu großen Netzen ist, daß sie dazu neigen die Testdaten "auswendig" zu lernen, also zwar bei den Testdaten korrekte Ergebnisse liefern, aber bei echten Daten dann nurnoch Müll)


Hier lässt sich also recht leicht beschreiben wie das Netz trainiert werden kann. Deshalb muss jetzt auch mal ein Gegenbeispiel her, also eine Aufgabe bei der man nichtmal eine grobe Vorstellung davon hat, wie das Training aussehen muss:


Es ist ein Roboter vorhanden, also ein Mikrocontroller der mit diversen Sensoren und Aktoren verbunden ist. Dieser soll folgende Aufgaben ausführen:

- Hindernissen ausweichen
- auf Lichtquellen zufahren

Diese Funktionalität lässt sich völlig problemlos direkt in jeder beliebigen Programmiersprache realisieren, also kann es ja so kompliziert nicht sein.

Aber wenn ein Neuronales Netz dafür verwendet werden soll...
also ich zumindest hätte da überhaupt keine Ahnung, wie man dem Netz erklären könnte was es eigentlich tun muss.

hl_angel
08.05.2007, 13:47
Bedenke auch, dass es je nach Einsatz verschiedene Typen von neuronalen Netzen gibt: da oben illustrierte Feed-Forward Netz ist sehr gut zur Mustererkennung geignet, z.B. zum Klassifizieren von unbekannten Objekten würd ich Dir ein selbstorganisierendes Netz empfehlen, dass z.B ein unbekanntes Objekt in eine Relation (geometrische Anordnung der aktive Neuronen) zu bekannten Objekten setzt. Hier mal ein Überblick:
http://fbim.fh-regensburg.de/~saj39122/NN/skript/NN-Skript05.pdf

Gruss Harald

Spannend ist auch die Kombination verschiedener Netztypen

kalletronic
08.05.2007, 14:12
Hi, kennt jemand von euch ne seite mit Tutorials zu Neuronalen netzten in Visual Basic??

hl_angel
08.05.2007, 14:19
da guck mal da :-)

http://www.paraschopra.com/tutorials/nn/index.php

kalletronic
08.05.2007, 14:31
cool, danke! Auf deutsch giebts sowas nich order???

plusminus
08.05.2007, 17:12
hm, die englische Fachliteratur ist in den meisten Fällen die bessere Wahl, auch wenn man ein wenig länger zum lesen braucht...

Meist sind einige (abstrakt gehaltene) Beispiele dabei, wie z.B. ein Roboter lernt um kurven mit beliebigem Radius zu fahren, oder einer Wand zu folgen, etc...

Habe eine Sammlung von einigen guten Artikeln und Beispielen, sowie ein NN in VB.NET auf meienr HP...

Siehe dazugehöriger Thread: https://www.roboternetz.de/phpBB2/viewtopic.php?t=28580

Praktisch gelernt hab ichs auch am VB-Code von Paras Chopra.


Zu den Posts vorher:

Ein Neuron hat beliebig viele Ausgänge :!: (Es hat vielleicht nur einen Ausgangs-Wert, aber die Anzahl der ausgehenden Dendriten ist beliebig!)

Die Anwendungsgebiete sind sehr vielfältig. Auf meiner Homepage bzw auf PlanetSourceCode hab ich ein kleines Texterkennungsprogramm außerdem noch ein NN, das die Sinus/Cosinus-Funktion erlernt...

http://www.alekto-programming.com/modules.php?name=News&file=article&sid=17
http://www.alekto-programming.com/images/myocr/myocr_prev3.gif

Würd mich sehr freuen, wenn sich mehr Leute für das Thema KI interessieren würden =)

/mfg plusminus

Felix G
08.05.2007, 18:48
Ein Neuron hat beliebig viele Ausgänge :!: (Es hat vielleicht nur einen Ausgangs-Wert, aber die Anzahl der ausgehenden Dendriten ist beliebig!)Ok, da habe ich mich etwas unklar ausgedrückt. Daß ein Neuron beliebig viele Ausgänge haben kann wird ja schon an dem Beispielbild deutlich.


Den Screenshot finde ich übrigens sehr interessant...
allerdings ist es nicht die Fähigkeit deiner Software Texte zu erkennen die mich interessiert, sondern die dargestellten Testdaten an sich.

du studierst nicht zufällig an der HS Mannheim? :wink:

plusminus
08.05.2007, 18:57
...Den Screenshot finde ich übrigens sehr interessant...
allerdings ist es nicht die Fähigkeit deiner Software Texte zu erkennen die mich interessiert, sondern die dargestellten Testdaten an sich...

was meinst du genau ?
Das finden der Buchstaben aus dem Bild, oder das Rastern ?

ja ganz rein zufällig studiere ich in Mannheim ;) (2.Semester)

du etwa auch :?:

[EDIT]
Laut GPS-Daten wohnst du in der Nähe, also studierst du wohl auch da ^^

Felix G
08.05.2007, 23:22
was meinst du genau ?
Das finden der Buchstaben aus dem Bild, oder das Rastern ?Naja...
ich meinte das "HSMANNHEIM" in der 3. Zeile der Testdaten, was mir eben genau deshalb aufgefallen ist da ich selbst dort studiere :wink:

... allerdings nicht mehr lange, denn ich bin schon im 8. Semester
(nächstes Semester schreibe ich meine Diplomarbeit, und das wars dann)


Ich studiere übrigens TI (Technische Informatik), und du?

Sternthaler
09.05.2007, 01:43
cool, danke! Auf deutsch giebts sowas nich order???
"Neuro-Fuzzy-Systeme " von Christian Borgelt, Frank Klawonn, Rudolf Kruse und Detlef Nauck fand ich in dieser Richtung ganz lesenswert.
Gute Darstellung sowohl von NN's als auch Fuzzy-Logik. (Kombination natürlich besonders)
Die Mathematik war für mich allerdings 'schwere Kost'. Die Pseudo-Code's zum programmieren fand ich da schon 'leichter' umzusetzen. (Im Kopf, nix am PC bei mir.)


Würd mich sehr freuen, wenn sich mehr Leute für das Thema KI interessieren würden =)
Da gibt es den folgenden Thread: Glaubt ihr, dass einmal eine KI von uns erschaffen wird? (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=274447#274447)
Hast du bestimmt schon gefunden und dich zurückgehalten?

plusminus
09.05.2007, 09:44
@Felix G

Ich studiere 'reine' Informatik.
Wie du vielleicht mitbekommen hast sind wir dabei ein Robocup-Team für einen Zweibeiner(Kid-Size) aufzubauen. Bzw warten wir bereits, darauf, dass nun die Verbindungs-Teile gefertigt werden...(da ist atm in Maschienenbauer mit seiner Diplomarbeit dran) Außerdem werden grade die Kameras bestellt (Lifeview Flycam...)
Des weiteren sind noch ein paar andere Diplomarbeiten bezüglich Lauf-Algorithmus und co am Laufen bzw am Ende...

Hm, wenn du interesse hast lass es mich wissen =)

@Sternthaler

jo, schonmal gesehen. Ist aber eher theoretisch/philosophisch was da diskutiert wird...

ikarus_177
05.03.2008, 17:38
hallo,

bin erst vor kurzem auf diesen thread gestoßen. jetzt hat sich mir die frage aufgedrängt, wie man so ein neurales netz in einer programmiersprache (zb: c++) erstellt und damit arbeiten kann.

könnte es gehen, dass man für jedes neuron im netz eine variable definiert, die dann den jeweiligen wert des neurons annimmt. dann würde es weitere variablen geben, die die werte aus den "einlese-variablen" übernehmen, und diesen in einer funktion bearbeiten, und schließlich an die "ausgabe-variablen" weitergeben.

aber wie würde dann die lernfähigkeit des netzes implementiert?
oder erstellt man zuerst das netz in einem editor (memBrain) und trainiert es solange, bis es wie gewünscht reagiert, und schreibt erst dann ein programm, das das netz simuliert?


lg ikarus_177

plusminus
05.03.2008, 18:17
Tach :)

Schau doch mal hier vorbei: http://alekto-programming.com/modules.php?name=Content&pa=list_pages_categories&cid=10