-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Neurales Netzwerk

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170

    Neurales Netzwerk

    Anzeige

    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)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    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
    dort ist auch dargestellt wie ein einfaches NN prinzipiell aufgebaut ist:



    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.
    So viele Treppen und so wenig Zeit!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    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)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.01.2004
    Alter
    28
    Beiträge
    645
    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.
    MfG Xtreme
    RP6 Test - alles zum Nachfolger des bekannten RP5 im neuen RP6 Forum!

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    Zitat Zitat von Xtreme
    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 ) !
    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)

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    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).
    So viele Treppen und so wenig Zeit!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    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?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    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.
    So viele Treppen und so wenig Zeit!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.05.2005
    Ort
    Wien
    Alter
    44
    Beiträge
    137
    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/~saj391...N-Skript05.pdf

    Gruss Harald

    Spannend ist auch die Kombination verschiedener Netztypen

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, kennt jemand von euch ne seite mit Tutorials zu Neuronalen netzten in Visual Basic??

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •