neuronales Netz



  • Vielleicht übersiehst du auch nur die Möglichkeiten die man hat, man muss sich nicht auf Feed-Forward-Netze beschrenken. Wenn man im ganzen Netz jeden Eingang und Ausgang eindeutig identifizieren kann, dann werden die Vektoren recht gross die man als Gewichtung benutzen muss, aber damit kann man jeden Eingang mit jedem Ausgang verknüpfen, wenn wir (Menschen) einen Lernalgorithmuss kennen würden, dann wäre es sogar relativ leicht zu realisieren, dass das Netz neue "Verknüpfungen" erstellt, wäre ja nur ein Eintrag im Vector.

    Man muss natürlich immer in einen Temp-Vektor die Ergebnisse schreiben und dann zurückkopieren, aber mit diesem System ist jede Verkettung möglich.

    Was die Gewichtung anbetrifft spricht eigentlich nichts dagegen diese als Operanten für eine Gewichtungsfunktion zu missbrauchen 😉

    Was für mich Neuronale-Netze ausmacht ist, dass man dafür wenig programmieren muss, weil sie aus "primitiv"-Bauteilen bestehen und durch ihre Organisation die "Genialität" entwickeln, deswegen sollte man, meiner kleinen Meinung nach, ein Programm haben, dass man mittels "Config" zu jeder verknüpfung bringen kann. Schlussendlich ist das ganze "Ding" nur Mathematik und kein Algorithmus den man _jedesmal_ neu zu implementieren braucht.

    Das verbinden von Klassen und sontigem (mittels Code) ist nicht das, was ein Neuronales-Netz ausmacht, es ist nur die Mathematik... wenn man sich ein _gutes_ Buch darüber besorgt, dann sieht man kaum eine grafische Darstellung von Netzen, sondern nur Formel-Modelle.

    bsp.: http://documents.wolfram.com/applications/neuralnetworks/NeuralNetworkTheory/2.7.0.html

    rapso->greets();

    ps. ich wünschte ich wüste wie man neue Verknüpfungen "lehren" könnte *seufz*



  • hmm ... hab ich mir schon fast gedacht, das mein Code Müll ist, naja ich hab ja keine Erfahrung im Programmieren neuronaler Netze, der Code da oben ist mein erstes. raspo, könntest du hier mal'n Beispielcode von einem deiner Netze posten? (inklusive der dazugehörigen Funktionen)
    Noch eine Frage zur Begriffsklärung: Was meint ihr mit 'Gewichtung' ?



  • rapso schrieb:

    Vielleicht übersiehst du auch nur die Möglichkeiten die man hat, man muss sich nicht auf Feed-Forward-Netze beschrenken. Wenn man im ganzen Netz jeden Eingang und Ausgang eindeutig identifizieren kann, dann werden die Vektoren recht gross die man als Gewichtung benutzen muss, aber damit kann man jeden Eingang mit jedem Ausgang verknüpfen, wenn wir (Menschen) einen Lernalgorithmuss kennen würden, dann wäre es sogar relativ leicht zu realisieren, dass das Netz neue "Verknüpfungen" erstellt, wäre ja nur ein Eintrag im Vector.

    Ich sehe nicht den Vorteil einer riesigen Matrix - es gibt da zwei Varianten:

    a) ich nehme ein normales 3-schichtiges Netz, aber verbinde alle Neuronen miteinander und setze gewisse Gewichte auf 0, um die Verbindungen zu trennen und die Schichten zu behalten. Dann erhalte ich eine schwach besetzte Matrix, deren Operationen alle nicht effizient ausgeführt werden.

    b) ich verbinde alle Neuronen aller Schichten miteinander und lasse beliebige Verknüpfungen zu - das ist nicht unbedingt hilfreich, da es die Zerlegungssätze für die Interpolation mit Hilfe von NN gibt, die mir aussagen wie komplex ein 3-schichtiges Netz für eine gewisse Interpolationsgenauigkeit sein muß. Wenn ich das Netz nun aber dichter Webe als notwendig ist um zu interpolieren, besitzt mein Netz unnötige redundante Verknüpfungen, die keine neuen Informationen hinzu nehmen.

    Und wie gesagt, es ist nicht mehr jeder Neuronentyp verwendbar, mein Netz ist dann eben "nur" noch ein lineares Gleichungssystem.

    rapso schrieb:

    ps. ich wünschte ich wüste wie man neue Verknüpfungen "lehren" könnte *seufz*

    Kannst Du doch - Du verbindest alle Neuronen miteinander und trainierst das NN mit einem Algorithmus, der die Gewichte ändert. Ein Gewicht = 0 bedeutet keine Verbindung - und != 0 bedeutet eine Verbindung. Oder hast Du die Hinzunahme neuer Neuronen damit gemeint?

    @cortext85: Begriff "Gewichtung" siehe http://www.fbe.hs-bremen.de/user/risse1/RST/SS98/Neural_N/neuronet.htm#_Toc422573785



  • der vorteil ist, dass du für jedes netz das du haben möchtest nur eine configdatei erstellen mußt, inder du die verbindungen als matrix angibst. es gibt viele leute die die nötige mathematik kennen aber nichtmal prolog können um sich ihre ideen einzucoden, deswegen sind programme, die mathematische eingaben zum konfigurieren brauchen wohl beliebt 🙂
    das wäre ein vorteil, ein andere wäre, dass man klar darstellt dass es sich bei dem ganzen um mathematik handelt und keine pointer-arithmetik und algorithmen-wirrwarr.

    wie gesagt, man kann verschiedene aktivierungsfunktionen nutzen wenn man nicht einfach nur ein DotProduct rechnet, sondern vorher die funktion auf den wert anwendet. dann wäre es nicht mehr linear.

    "Kannst Du doch - Du verbindest alle Neuronen miteinander und trainierst das NN mit einem Algorithmus, der die Gewichte ändert. Ein Gewicht = 0 bedeutet keine Verbindung - und != 0 bedeutet eine Verbindung. Oder hast Du die Hinzunahme neuer Neuronen damit gemeint? ", Marc++us.

    ich meinte keine neuronenzunahme, sondern der aufbau von verbindungen bzw deren kappung. alle mir bekannten trainingsmethoden bauen auf einer vorgegebenen struktur auf, die durch training verbindungen verstärkt oder abdämpft. wenn ich einfach alles mit allem verbinden würde, würde das trotzdem nicht wirklich was schlaues sein müssen.... das ergebnis wäre meiner ansicht nacht sogar total "match", nicht zu gebrauchen.

    In einem gehirn bauen sich ja neue verbindungen auf, dabei scheint es auch nicht wirklich ebenen zu geben, die neuronen stellen verbindungen zu anderen her wenn sie lernen.... ich wüste wirklich nicht wie ich überhaupt mathematisch entscheiden sollte welche verdindung aufgebaut wird.
    solange es eine oder zwei ebenen sind, ist das ja kein problem, bei 3 ebenen wird es aufwendiger, da man aber die struktur kennt, kann man die bewertungen noch errechnen. aber bei belibigen verknüpfungen?

    und Cortex85, du hast nicht müll produziert, aber neuronale netze baut man nicht einfach so, eigentlich hat man eine problemstellung und versucht dafür dann das passende netz zu bauen. du hast erstmal die lösung gemacht und möchtest nun ein problem das du damit angehen möchtest und auch noch den weg dazu (die trainingsmethode).

    such dir im netz sachen zum z.B. sinusberechnen,wurzelberechnung oder xor mittels neuronaler netze oder so und code dafür dann dein netz das die aufgaben lernt 😉

    rapso->greets()



  • kann mir jemand n gutes buch dazu empfehln? (sowas wie "neuronale netze für dummies" ;))
    bin bald 2 wochen in italien und hab noch keine lektüre...



  • @raspo: Stimmt, so ungefähr kam es mir auch vor. ich hatte vor, mein Netz auf das Erkennen bestimmter Zahlenmuster in Matrizen zu trainieren, mir fehlte nur die Trainingsfunktion. Das war bloß 'n Lückenfüller-Problem, das stimmt. ich denke, ich werde irgendwann (vielleicht in den nächsten Tagen) mal danach googlen, was du mir gesagt hattest



  • meian schrieb:

    kann mir jemand n gutes buch dazu empfehln? (sowas wie "neuronale netze für dummies" ;))
    bin bald 2 wochen in italien und hab noch keine lektüre...

    http://www.amazon.de/exec/obidos/ASIN/3897220210



  • http://www.gamedev.net/reference/programming/features/vehiclenn/

    die haben heute wohl einen article uber das thema diese threads veröffntlich und am ende referenzbuecher angefuert.

    rapso->greets();



  • Als Buch kann ich nur http://www.amazon.de/exec/obidos/ASIN/3486243500/jone-21 empfehlen. Es ist sehr gut zu lesen, vermittelt aber auch den entsprechenden mathematischen hintergrund. ich hatte mir das buch damals in der 10. klasse zugelegt, damals konnte ich zwar mit partiellen differentialgleichungen noch wenig anfangen, aber es war einem trotzdem möglich alles prinzipiell zu verstehen, selbst ohne große mathekenntnisse. aber wenn die natuerlich vorhanden sind ... umso besser

    ich hab ne dokumentation von einem meiner projekte mit ins abi einbringen koennen : http://johannes.lampel.net/bll137.html
    da findet man auch nochmal ne kurze herleitung von dem lernverfahren backpropagation.



  • guck doch sonst auch einfach mal in einer uni bibliothek in deiner nähe vorbei 😃


Anmelden zum Antworten