![]() |
Neuronale Netze ???
Ergänzend zu der Frage über KI, die eben schon gestellt worden ist,
würde ich auch gern mal sämtliche Informationen zum Thema "Neuronale Netze" haben. Mich interessiert natürlich der theoretische Background bis hin zur Praxis. Auch den Quelltext eines solchen Netzes würde ich gern mal zu Gesicht bekommen. Falls ihr was dazu habt, immer her damit. |
Re: Neuronale Netze ???
ich bin mir nicht sicher, aber mir scheint, dass es SEHR schwierig ist, so ein nuronales netz zu schreiben!
|
Re: Neuronale Netze ???
Zitat:
Ich dachte immer, solche Netzwerke würden aus mehr, als nur software bestehen...Also auch andere Geräte, die irgendwelche Eindrücke aufnehmen, also zum Beispiel Geräusche und so...oder verwechsele ich da was? Ich persönlich würde mich auch über weitere Infos zu diesem Thema freuen...(<schmeißt gleich mal google an...>) Man liest sich, Stanlay :hi: |
Re: Neuronale Netze ???
Joa, ein wenig Source zu sowas würde ich auch gerne mal sehen ... aber ganz ehrlich: wozu braucht man es? Für Kleinigkeiten mögen kleine Netze ja noch brqauchbar sein, abe sobald das ganze größer wird, wird es auch ein Mega Aufwand, das ding zu trainieren ... Bin ganz ehrlich nicht gerade Scharf druf, 10 Tage und Nächte den Rechner laufen zu lassen, nur weil dieser mir gerade Mein etwas groß geratenes Netz trainiert *g*
Naja: einen kleinen Link habe ich auch noch: ![]() Dort hatten die vor kurzem nen kleinen Artikel drüber (Fahrzeugsteuereung mit einem neuralen Netz) ... leider wie gewohnt auf englich und leider kein Code-Beispiel, wenn ich mich net irre... [Edit] Habe noch zwei nette Sachen gefunden: ![]() ![]() |
Re: Neuronale Netze ???
ähm, ja, ich geb dann mal einen google link (Stuttgarter Neuronales Netzwerk Simulator) vieleicht findet sich darunter ja einbisschen theorie , weiss nicht ob er jemandem hilft, aber in dem buch, das ich (noch nicht fertig) gelesen habe ("Künstliche Intelligenz" von "Lämmel/Cleve") wird dieses ding verwendet ... (wie gesagt bin ich noch nicht durch)
![]() aloa re mirilin |
Re: Neuronale Netze ???
ich versuch grad eins zu proggen , aber bis jetzt klappts noch nicht wegen der sch... threads (aber ist auch ein spesielles nn) !
Frag mal negaH , der hat schon welche selber programmiert ! Aber an sich ist es nicht sooo schwer ein netz zu proggen , vorausgesetzt man weiß wie's aufgebaut ist und wie's funktioniert. |
Re: Neuronale Netze ???
Das größte Problem mit Neuronalen Netzen, Genetischen Algorithmen und Evolutions Strategien ist es die passend formulierte Aufgabe für den Algorithmus zu finden. Alle dieses Techniken höhren sich schön an, aber sie in praktische und nutzbare Software zu verwandeln ist nicht einfach.
D.h. die Problemanalyse als erster Schritt ist der absolut wichtigste Schritt. Wird dieser falsch gemacht oder werden kleine logische Fehler übersehen so wird das Ganze nicht funktionieren. NN's sind keine sogenannte "Breitband"-Geschosse, d.h. Softwarealgorithmen die für JEDES Problem mit leichten Änderungen funktionieren. Eher das Gegenteil ist der Fall, für jedes Problem eine eigene NN Implementierung. Ok, da die Frage nach NN's immer wieder hier auftaucht, habe ich mich heute morgen entschlossen hier ein kleines Demo-Projekt zu posten. Noch bin ich am arbeiten, denn zur Demonstration das ein NN wirklich "intelligent" ist muß man auch das passende zu lösende Problem finden. Gruß Hagen |
hmm,
aber Fuzzy Logic basiert doch auf Neuronalen Netzen oder vertue ich mich da gerade ?
Klar ist es eine Frage der Einganglogik zum Problem selbst hin. Aber die Ungenauigkeiten werden doch durch das neuronale Netz selbst geglättet. Nehen wir einen Geräuschdetektor. Dieser ist am anfang 'DUMM', es braucht einen Lehrer der ihm sagt das ein Ton gut war oder eben schlecht , aber das Netz lernt daraus, es wird immer weniger Fehler machen , je mehr Daten es bekommt und irgendwann wird es den LEherer selbst überflügeln. Das ist ja ansich as schwierige an einem Neuronalen Netz. Hier steht nicht der Algorythmus im Vordergrund sondern die Gewichtung der Vergleiche ansich. Das Leben ist nicht schwarz oder Weiss, es ist Bunt. |
Re: Neuronale Netze ???
Is ziemlich ähnlich aber doch nicht das gleiche , denn ein fuzzylogic-system kann selbst ja nicht lernen , es ist nur so intelligent wie die Regeln die es befolgt, aber mit neuronalen netzten lassen sich die regeln für ein FuzzyLogic-system 'erlernen'.
|
Re: Neuronale Netze ???
Zitat:
Zitat:
Zitat:
Neuronale Netze mit unserem Hirn zu vergleichen ist ebenfalls weit hergeholt. Auf Grund dessen das unser Hirn ein elektrisch-biochemisch und vorverdrahtetes Netzwerk ist, ist dessen Komplexität und Wirkungsweise gerademal als annäherend zu Computer NN's zu bezeichnen. Eigentlich ist es eine Beleidigung der Natur :) :) Trotzdem, und das meine ich ernst, wird es in 200-500 Jahren diese Technik sein die echte künstliche Intelligenz ermöglicht. Gruß Hagen |
Re: Neuronale Netze ???
Zitat:
aber wenn die Neurologen erst mal rausgefunden haben wieso,wann und wo sich neue synapsen im hirn bilden und genügend resourcen vorhanden sind ließe sich ein intelligentes netz verwirklichen. |
Re: Neuronale Netze ???
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Aber gerade hier steckt, IMHO, eben das Knowhow dahinter. Ich kann 1000 mal töbne abhören und verstehe nichts. Diese Programme sehen darin aber 100 verschiedene Kennungen. Natürlich haben sie diese auch nur gelernt aber sie sind arin sicher und dies ist für mich schon mehr als es eine Stupide 10101 Maschine ist. Sie hat einfach 3 eingänge und 1 Ausgang der Bitrechner hat nur 2 Eingänge und torztdem auch nur einen Ausgang. |
Re: Neuronale Netze ???
Zitat:
Du vergleichst Äpfel mir Birnen. Fuzzy Logic bezeichnet Schwellenwert basierende Technologien und haben erstmal nichts mit neuronalen Netzen zu tun. Natürlich gibt es Fuzzy Computer die auch Neuronale Netzwerke implementieren, aber math. und technisch gesehen sind es zwei verschiedene Paar Schuhe. Auch wenn in Neuronalen netzen ebenfalls eine Schwellenwert Funktion als Neuronen-Aktivierungs-Funktion eingesetzt wird. Allerdings auch das wäre viel zu verallgemeinert da es durchaus NN's gibt die ohne solche Schwellenwertfunktionen auskommen. Bei der Fuzzy Logic geht es hauptsächlich darum WIE die internen Zustände der einzelnen "Bits" dargestellt werden. Die Aussage das ein Netzwerk-Knoten drei Inputs hat ist ebenfalls nicht richtig. ZB. in einem voll-verknüpften recurrenten Netzwerk hat ein Knoten zu jedem Knoten der vorherigen Schichten eine Verbindung + 1 Bias + x Recurrente Verbindungen. In einem normalen BP Netzwerk entfallen die Recurrenten Links. Die Anzahl der Verknüpfungen kann für jeden Konten sehr individuell sein, in fact man könnte sie sogar manuell verknüpfen. Somit besteht keinerlei Zusammenhang der Theorien zwischen trinärer, bzw. analoger Fuzzy Logic zu NN's. Gruß Hagen |
Re: Neuronale Netze ???
Liste der Anhänge anzeigen (Anzahl: 1)
So, nun für die es interessiert eine klitze kleine NN Demo. Enthalten ist meine Neuronale Netz Komponente.
In Unit1.pas findet ihr Erklärungen zum Program. Gruß Hagen |
Re: Neuronale Netze ???
Wie funktioniert das Programm? Also wie kan ich dem NN was bei bringen?
|
Re: Neuronale Netze ???
Indem du abwechselnd auf die JA/NEIN Schalter drückst, ca. 100-200 mal. Das Netz erlernt deine psychologische Affinität zu bestimmten Musterreihenfolgen und sollte mit deutlich mehr als 50% aller Spiele gewinnen. D.h. es versucht zu erlernen in welcher Reihenfolge du die JA/NEIN Schlater drückst und gibt einen Tip ab. Sollte dieser Tipp richtig gewesen sein so hat es ein Punkt gewonnen, sollte der Tip falsch sein so hast DU einen Punkt gewonnen. Aufgabe ist es für dich deine Punktzahl deutlich höher als die des Netzes zu bekommen.
Es gibt natürlich Tricks das Netz fertig zu machen, das liegt aber nicht am Netz sondern an der Art und Weise wie das Netz gefüttert wird. Damit wir live während des Spieles das Netz trainieren können muß es mit ziemlich wenig Information auskommen. Je länger trainiert wird je höher wird die Wahrscheinlichkeit das das Netz gewinnt. Ansonsten stehen in Unit1.pas einiges an Erklärungen. Die Nachfrage nach Neuronalen Netzen scheint nun doch nicht so hoch zu sein wie ich dachte, leider :( Wenn irgendwer eine bessere Idee für eine KI-Simulation hat, die natürlich im zeitlichen Rahmen bleibt, dann her damit. Gruß Hagen |
Re: Neuronale Netze ???
Moin!
Zitat:
Auf jeden Fall interessiert mich das Thema und ich hab vor kurzem angefangen mich damit zu beschäftigen. Im Internet bin ich aber bis jetzt nur auf ein brauchbares Tutorial gestoßen: ![]() Kennst du Tutorials (am besten deutsch), die das Thema tiefgründig erklären? Ich würde auch ein Buch kaufen. Wobei mir auch hier deutsch lieber wäre (in deiner Unit standen nur 2 englische). Wobei ich nicht grundsätzlich gegen ein englisches Buch bin. Ich suche aber eins, welches die Grundlagen über Aufbau von neuronalen Netzen und tiefgründigere Kenntnisse des Lernenes selbiger vermittelt. MfG Niels |
Re: Neuronale Netze ???
Hi Niels,
solche Fragen sind immer recht schwierig zu beantworten. Ich selber habe ausschließlich englische Literatur, hauptsächlich die originalen Forschungsarbeiten über die entsprechenden Netzwerke. Mein Grundwissen stammt aus grauer Vorzeit, denn auch schon vor 10-15 Jahren kannte man neuronale Netzwerke. Du hast aber recht mit der Aussage das man nur noch sehr wenig gute und vollständige Informationen im WEB findet. Das liegt wohl am derzeitgen Trend alles durch Patente schützen zu wollen. Trotzdem mal zwei Links: ![]() ![]() Um englisch wirst du nicht herumkommen, da selbst die Deutschen Forscher alles in englisch veröffentlichen, obwohl die Deutschen auf dem Gebiet neuronaler Netzwerke lange Zeit führend waren. Meine Unit basiert auf einem relativ neuem und daher noch wenig bekanntem Netzwerk. Leider ist es bei der Umsetzung von NN's in Software immer so das aus Effizienzgründen die Arbeitsweisen der NN's ver-kompliziert dargstellt werden. D.h. der Source sieht immer viel schwieriger aus als er vom Modell her gesehen eigentlich tatsächlich ist. Wenn das Auffinden von Informationen über NN's im WEB schon schwierig ist so wird es nochmals viel schwieriger an Informationen heranzukommen die echte praktische Beispiele von AI aufzeigen. D.h. man findet immer wieder Informationen das mit Hilfe von NN's zB. "intelligente" Spiele oder Roboter gebaut wurden. Aber wie und mit welchen Netzwerktypen dies erfolgte findet man nicht. Es ist also ein großer Unterschied zwischen dem Wissen wie NN's funktionieren und wie sie nun auf einfachste "Demo" probleme angewendete wurden, zu dem praktischen Wissen wie man NN's nun tatsächlich anwendet. Zb. wollen wir eine AI für ein Game einsetzen. Dazu soll ein NN als Entscheidungskern dienen. Selbst wenn man weiß wie NN's funktionieren so benötigen wir noch das entscheidende Wissen wie wir das NN richtig in die AI einbauen müssen. Das sind solche Fragen wie, "woher kommt der Input des NN's ?", "wie bereiten wir den AI Input auf so daß das NN sauber arbeiten kann?", "wie interpretieren wir den Output des NN's, und verknüpfen diesen mit sinnvollen Aktionen der AI ?", "wie trainieren wir das Netzwerk ?" Mit meiner Unit habe ich versucht die Detailfragen der korrekten Einstellung eines NN's zu automatisieren. Normalerweise muß ein NN-Anwender bei den meisten NN's sehr viele und wichtige Parameter einstellen, damit das NN überhaupt korrekt arbeitet. Zb. Layer Anzahl, Aktivierungsfunktionen, Anzahl der Neuronen (ich bervorzuge den Namen "Units") pro Layer, deren Verküpfungen usw. usw. Ich persönlich habe mich bisher mit Schrifterkennungen, Spracherkennungen, Mustererkennungungen in Dateidaten Klassifizierungen und kleineren Game KI's wie zB. für 4Gewinnt herumgeschlagen. Bei der Schrifterkennung drehte es sich hauptsächlich um sogenannte "Stroke-basierte" Systeme, also exakt sowas wie die Schrifterkennung auf Palm Handhelds oder Pentop PC. Das heist also keine OCR-Zeichenerkennung. Das Spracherkennungsprojekt ist eher als "Sound-Filterungs" projekt zu verstehen. Das NN sollte aus einem Stereo-Signal die 3D Räumlichkeiten der Aufnahme filtern. Also im Grunde ein System das so ähnlich wie ein Dolby Sourround Chip aus einem Stereosignal ein 3D Signal Filter implementiert. Die rießige Schwierigkeit für mich war dabei der Fakt wie man korrekte Daten erzeugt die zum Training des Netzwerkes notwenig sind. Die Mustererkennung basierte auf der Idee x'beliebige Dateien anhand ihres Inhaltes zu klassifizieren. Das System sollte erkennen ob eine beliebige Datei aus Text,HTML,Pascal oder komprimierten Daten usw. besteht. Das hat auch ziemlich sauber funktioniert. Die Game KI's war da eigentlich schon viel schwieriger, da man dort die Regeln und deren Software Umsetzung und Algorithmen erstmal exakt beherrschen muß. Erst wenn alle konventionellen Methoden keine Verbesserungen mehr bringen fängt man an Neuronale Netzwerke oder Genetische Algos. zu verwenden. Eine spezielle Form einer Game-AI war zB. mein Projekt zur automatischen Erzeugung beliebiger Kreuzwort Rätsel. Dabei ging es darum ein beliebiges Gitter mit sinnvollen Wörtern zu füllen. Es stellte sich heraus das hier Genetische Algorithmen viel effizienter sind. Ein besonderes Spezialprojekt war die Benutzung der NN's zur Klassifizierung verschlüsselter Informationen bzw. zum Brechen einfacher Czäsar Verschlüsselungen. Alle Projekte haben zwei gemeinsamme Merkmale 1.) die möglichen Datenmengen und deren Kombinationsvielfalt ist schier unendlich groß, das NN sollte also die generischen Hauptmuster/Unterscheidungsmerkmale finden. 2.) es gibt keine einfachen mathematischen Formeln die den optimalen Weg finden können, das NN eg. genetischer Algo. sollte also solche "Formeln" finden. Gruß Hagen |
Re: Neuronale Netze ???
Auf jeden Fall eine sehr interessante Sache, auch wenn das Anwendungsgebiet für einen sinnvollen Einsatz noch nicht so groß ist bzw meist zu aufwendig. Aber ein Terminplaner mit eigener KI wäre auch mal eine ganz interessante Sache ... :D.
Wenn ich mir das so überlege ist das im Prinzip ja gar nicht so blöd ... ein Programm welches ein zeitlang den User beobachtet und dann anfängt bestimmte Arbeitsvorgänge zu optimieren (also bei größeren Anwendungen , Programmteile vorzeitig schon mal in den Speicher laden etc.) ... muss ja auch gar nicht so komplex werden. |
Re: Neuronale Netze ???
Sowas ähnliches wird es auch in Zukunft geben, den Wizard-Sekretär.
Bei den Terminen zB. kann man sehr gut erkennen WO das eigentliche Problem entsteht. Das NN zu füttern bzw. das NN zu konstruieren ist kein Problem. Viel schwieriger wird es die Eigenschaften der Termine wie Uhrzeit/Kunde/Ort/Projekt so zu klassifizieren das neue unbekannte Termine an neuen Orten und mit neuen Projekten dennoch eine gemeinsamme Entsprechnung zu schon geplanten Terminen erhalten. Denn nur so entstehen sinnvolle Eingaben für das Netzwerk. Das Netzwerk entwickelt dann die Fähigkeit die Muster des Menschen bei der Terminierung zu entdecken, und demzufolge so zu planen wie es der Mensch getan hätte. Will man aber aus einem Berg von Terminen einen Plan erzeugen der möglichst effizient die Termine legt, sprich Fahrzeiten, Uhrzeiten und Prioritäten berücksichtig, dann wären Genetische Algorithmen besser geeignet. Ein interessantes Projekt wäre für mich eine eigene Suchmaschine. Im Laufe der letzten 2 Jahre musste ich leider feststellen das die heutigen Internet-Suchmaschinen immer weniger für mich relevante Resultate bringen. Es werden immer häufiger irgendwelche virtuell-kommerzielle Links gefunden die auf eBay oder andere Suchmaschinen verweisen. Immer seltener findet man die echt guten privaten Homepages von wirklich interessierten Menschen. Das kann NICHT daran liegen das das Verhältniss von guten privaten Homepages zu kommerziellen Homepages verschoben wurde. Es liegt eher am pushen kommerzieller Pages. Öfters lege ich KEINEN Wert darauf sehr schnell Resultate zu bekommen. D.h. ein Such-Robot der über 1-2 Tage hinweg eine einzigste Suche ausführt, aber dabei WIRKLICH relevante Pages findet ist mir lieber, als Google mit seinen 10.000 Links auf eBay o.ä. Alleine schon der Fakt das man heute die echten kommerziellen Seiten der Hersteller nicht mehr so einfach findet ist schmerzhaft. Nun die Aufgabe des NN's wäre es die schnelle Entscheidung zu treffen ob eine anvisierte Hompage kommerzieller oder informeller Natur ist. Am besten sollte das NN nur auf Grund des Index-HTML's erkennen ob sich eine Suche auf der Hompage überhaupt lohnt. Das NN klassifiziert also den Internet-Spam-Müll ! Praktisch gesehen könnte das so funktionieren: Eine Software stellt Anfragen an Google oder MetaGear. Deren HTML's werden zerlegt und jede Seite per NN analysiert. Die Aufgabe der Software besteht also darin den Intenet-Spam-Müll raus zu filtern. Aus einem Resultat von zB. 10.000 Links bleiben dann 2-3 Kategorien übrig, wie Private Hompages, echte kommerzielle Firmen und Spam-Müll. Gruß Hagen |
Re: Neuronale Netze ???
Eine "intelligente" Suchmaschine wäre auf jeden Fall eine sehr brauchbare Sache (wobei ich meistens einen schnellen Zugriff auf die Informationen brauche). Ich nutze sehr häufig Google und hab inzwischen schon so einige Begriffe die ich fast standardmäßig ausschliesse um überhaupt brauchbare Ergebnisse zu erhalten.
|
Re: Neuronale Netze ???
Zitat:
|
Re: Neuronale Netze ???
Hi,
dein Programm ist wirklich sehr anschaulich. Leider habe ich das Problem dass nach ca. 1000 Klicks die Anzahl der hidden Units drastisch ansteigt. So auch eine enorme Rechenkraft für jeden neue Entscheidung, wobei diese unregelmäßig ist (also die benötigte Rechenkraft). Sind die Datenmenge da schon zu groß oder an was könnte das liegen? |
Re: Neuronale Netze ???
Das nennt man "Lernkurve". Am Anfang wird das Netz ziemlich rasch sehr schnell "lernen", sich also auf die Aufgabe anpassen. In späteren Zyklen wird aber die Lernkurve drastisch abfallen, bis hin zur Stagnation. Da das Netz inkrementell lernen muß, d.h. immer ein neues Inputset nach den anderen kann es sich neuen Gegebenheiten nur anpassen indem es ständig neue Neuronen in's Netz einfügt, es wird also live trainiert mit noch unbekannten Eingaben. Generell kann man sagen das ein einmal trainiertes Netz sehr sehr schlecht auf neue Bedinungen umzutrainieren ist. Dies ist vergleichbar mit uns Menschen, haben wir einmal Fahrrad fahren gelernt so verlernen wir es nur sehr sehr schlecht. Würde nun das Fahrrad absolut anders funktionieren so fällt es unserm Hirn enorm schwer sich sehr schnell diesen neuen Bedingungen anzupassen. Um so älter ein Mensch und sein Hirn wird um so mehr wird es fixiert und wird sich immer schlechter anpassen.
Exakt mit diesem "Trick" kann man das Netz auch austricksen. Man füttert es lange Zeit mit ähnlichen Eingaben. Im späteren Verlauf ändert man die grunsätzliche Taktik beim Tippen. Das Netz wird sich dann viel schwerer der neuen Taktik anpassen können als wenn es ein ganz frisches Netz wäre. Im Falle der Software sollte diese so abgeändert werden das das Netz bei einer bestimmten Größe nicht weiter trainiert wird. Es wird sowieso nicht besser reagieren können. Dies zeigts sich auch wenn man das Netz per Zufallsgenerator trainieren will. Das Netz wird sich NIE an den Zufallsgenerator anpassen können, was gleichbedeutend ist mit dem Fakt das es einfach NICHT lernen kann, wo es KEIN Muster gibt. Deshalb wir beim Spiel mit Zufallsgenerator das Netz sehr schnell enorm groß und dementsprechend langsam. Allerdings, das von mir benutzte Recurrente Cascade Correlation Netzwerk ist eines der am schnellsten lernenden Netzwerke. Es ist erheblich effizienter als zB. normale Feedforward Backpropagation Netzwerke. Im allgemeinen erkennt man an Hand einer schlechten Lernkurve das irgend etwas nicht vom Design her passt. Entweder existieren in den Trainingsdaten zwischen den Inputdaten und Outputdaten keinerlei Zusammenhänge, eben zufällig, oder man hat das Netz falsch parametrisiert, oder aber es existiert ein logischer Fehler im der Anwendung des Netzwerkes auf das zu lösende Problem. D.h. ein Deutscher versteht nur chinesisch wenn er ohne Sprachkenntnisse einer russischen Fachdiskussion zuhört. Exakt das gleiche passiert sehr oft mit schlecht angepassten NNs, sie verstehen einfach nicht die Inputdaten, d.h. die Inputdaten sind NICHT für das Netz erlernbar übersetzt worden. Diese "Übersetzung" der Inputs ist aber der entscheidende Knackpunkt der die effiziente Anwendung der NN's so schwierig macht. Gruß Hagen |
Re: Neuronale Netze ???
Das klingt schon sehr interessant und wird wahrscheinlich auch stimmen - mich hat nur verwundert das dies nicht in einer art Parabelkurve ansteigt, sonder extrem Sprunghaft, ich musste zum Beispiel bei einem Einzigen Entscheidungspunkt ca. 10 min warten bei einem 500 Mhz Prozessor bis er das ergebnis berechnet hatte, danach gings wieder ca. 100 Entscheidungen ohne Probleme in ca. 1 bis 2 Sekunden.
|
Re: Neuronale Netze ???
Um abschätzen zu können wie hoch die Komplexität des Netzes ist benötigt man die Anzahl der Hidden Units = Neuronen. Nun angenommen es existieren 5 Neuronen in einem RCC Netzwerk, mit 2 Inputs und 2 Outputs. Die 2 Outputs sind verküpft mit den 2 Inputs, d.h. es existieren 4 Nervenstränge. Nun wird das 1. Neuron eingefügt. Dieses hat 2 Nervenstränge zu den 2 Inputs. Die Outputs verlinken wiederum zu diesem Neuron. D.h. unser Netzwerk hat nun 4+2+2 = 8 Nervenstränge. Nun fügen wir das 2. Neuron ein. Da es ein Cascade Netzwerk ist wird dieses 2. Neuron zusätzlich noch mit dem 1. Neuron verknüpft. Das Netz hat nun 13 Nervenstränge, beim 3. Neuron sind es 19, beim 4. Neuron schon 26 beim 5. dann 34 Nervenstränge, usw. usw. Bei diesen Berechnungen fehlen aber noch die Bias Inputs, jeweils ein Biasinput pro Neuron und Output und es fehlen die Recurrenten Nervenstränge. Dies sind Nervenstränge an jedem Neuron von dessen Output als seperater Input. D.h. jedes Neuron hat als zusätzlichen Input einen Nervenstrang zu seinem eigenen Output. Dadurch entsteht ein Gedächtnis, d.h. das Netz kann sequentielle Eingaben an den Inputs erlernen. JEDER dieser Nervenstränge IST eine Zahl=Double, das Gewicht bzw. die Dämpfung, und simuliert die "Leitfähigkeit" bzw. die "Verstärkung" der "elekrischen Impulse" zwischen den "Nervenzellen" unseres Hirnes. Natürlich muß beim Training eines NN's der angelegte Impuls an den Inputs ALLE diese Zahlen berechnen und berücksichtigen. Somit wird bei jedem neuen Neuron/Unit im NN dessen Komplexität immer größer. Nun wird auch ersichtlich warum die Wahl der richtigen Datenstrukturen so wichtig ist bei der Programmierung. Je effizienter diese Strukturen sind um so schneller wird das Netz, aber auch um so unübersichtlicher. Nach meinen Erfahrungen ist es fast aussichtslos die Funktionsweise einen Netzwerkes an Hand der Sourcen begreifen zu wollen.
Gruß hagen |
Re: Neuronale Netze ???
Zitat:
Ein RCC Netzwerk erzeugt während der Lenrphase x neue Neuronen. Es fügt diese Neuronen aber nur virtuell in's Netzwerk ein. D.h. diese Kandidaten werden durch Zufall initialisiert, zB. 10 Kandidaten. Nun wird jeder Kandidate virtuell ins Netzwerk eingefügt und trainiert. Nach einer kurzen Zeitspanne des Trainings sterben schlechte Kandidaten aus, und gute Kandiaten kreuzen sich mit weniger guten Kandidaten, man sagt dazu auch Evolution. Solange beim Training das gesammte Netzwerk immer wieder bessere Resultate erzielt wird weitertrainiert. Also solange bis das Training stagniert. Nun wird das beste Kandidaten-Neuron ausgewählt und tatsächlich als neues Neuron in das bestehende Netzwerk eingefügt, fertig. Es beginnt nunalles von vorne. Dieses ständige hinzufügen und trainieren virtueller Neuronen wird so lange durchgeführt bis das Gesammtnetzwerk ebenfalls anfängt zu stagnieren. Nun, der Trainings-Algorithmus hat aber den vorhig besten Zwischenstand des Netzwerkes gespeichert. Sollte das derzeitige Resultat des Netzwerkes unzureichend sein so beginnt das Backtracking zu wirken. D.h. der Trainingsalgo. verwirft das bestehende Netzwerk und springt zurück zum gespeicherten und besseren Netzwerk. Nun beginnt alles von neuem. Diesem Backtraking wird maximal 3 mal durchgeführt. So, es kann nun vorkommen das ein dezeitiges Netz ein Problem nicht erlernen kann. Dies führt dann dazu das es sehr häufig das backtracking durchführt und demzufolge viel länger an Zeit benötigt. Oder aber das Netz kann sehr schnell adaptieren und erreicht in sehr kurzer Zeit die eingestellte Fehlertoleranzen. Der Effekt der eintritt ist eben die Sprunghafte Lernkurve. Solche Sprünge sind ein gutes Zeichen da sie auf eine "Reorganisation" des Netzes hindeuten, allerdings sind sie wenig erwünscht. Gruß Hagen |
Re: Neuronale Netze ???
Also ich muss sagen, du bist offensichtlich ein echter Profi! :thumb:
Diesbezüglich hätte ich einen Vorschlag: Da du offensichtlich sehr viele Informationen zu dem Thema hast, und es auch verstehst, diese zu erläutern, könntest du vielleicht so eine Art "Einsteiger Tutorial" für uns Unwissende machen? Das wäre echt toll! Man liest sich, Stanlay :hi: |
Re: Neuronale Netze ???
Uff, ich hatte gehofft das keiner von Euch auf diese Idee kommt :)
Ein gutes Tutorial zu schreiben ist leider nicht so einfach wie es sich anhört. Dies trifft besonders auf mich zu, da ich eben ein sehr schlechter "Erklärer" bin, der zudem noch gerne rießige Gedankensprünge macht und öfters eben auch Detailverliebt ist. Kurz gesagt, ich glaube kaum das ich die Zeit finde und das Können besitze um gute Tutorials zu schreiben. Dann ist es doch viel besser meine Sourcen zu analysieren und auf diese aufzusetzen. Die nötigen Informationen kann man aus Büchern oder aus dem WEB bekommen. Grundsätzlich bin ich eher der Typ der in einem Bruchteil der Zeit, die man benötigt um ein Tutorial zu schreiben, die kompletten Sourcen fertigstellt :) Es tut mir ehrlich sehr Leid aber ich werde keine Tutorials schreiben. Gruß Hagen |
Re: Neuronale Netze ???
Moin!
Da ich gestern nicht da war konnte ich heut erst deine Posts lesen. Dass ich warscheinlich nur gute englische Infos finden werde war mir fast klar. Naja ich denk das wird kein größeres Problem. Hättest du da ein paar Vorschläge an guten Büchern? Zitat:
Ein Neuron hatte dort auch keinen extra Output, sondern nur ein Datum (nicht zu verwechseln mit Datum :wink: ), das einen Wert enthielt, welcher vom Dentrid (Input) anderer Neuronen ausgelesen wird. Wo liegen die Unterschiede zwischen diesen beiden Lernweisen und was ist in welcher Hinsicht vorteilhafter? MfG Niels |
Re: Neuronale Netze ???
Zitat:
Man liest sich, Stanlay :hi: |
Re: Neuronale Netze ???
Hallo Hagen,
kennst Du Dich mit Wavelets zum Zweck der Mustererkennung genauso gut aus, wie mit Neuronalen Netzen ? |
Re: Neuronale Netze ???
Wavelets habe ich nur sehr sehr oberflächlich angeschaut, man kann ja nicht alles ausprobieren :)
Bisher empfand ich die beschriebenen Techniken immer als sehr kompliziert und für mich unverständlich erklärt. Sie sind eben die Weiterentwicklung der Fourier Transformation. Mit der FFT habe ich allerdings schon einiges gemacht. Desöfteren fand ich WEB Sites die sich mit Wavelets befassten aber kein einzigstes Wort über FFT usw. verlieren. Viel Sprachschöpfungen machen es auch schwierig die Wavelets zu begreifen. Mit einfacher Fourier Transformation hat das meiner Ansicht nichts mehr zu tun. Hier im Forum sollte man von mir eine Software für die FFT finden. Für einige der obigen NN Projekte benötigt man auch eine FFT. Zb. das Datei-Erkennungs-Projekt muß ja den binären Inhalt beliebig großer Dateien auf einen annehmbaren Wertebereich für das NN downscalen, dies geht nur mit FFT's. Dh. die binäre Datei wurde per FFT einer "Frequenzspektrum-Analyse" unterzogen mit insgesammt 256 Punkten. Deren Amplitude wurde als Input für ein NN mit 256 Inputneuronen benutzt. Dieses Netz war aber nur ein "Vorschalt-Netzwerk" das aus den FFT Daten ermitteln sollte ob die Datei Textbasiert, Binär, Gepackt, Bild, Sound, Verschlüsselt oder Formatiert ist. Erst daran anschließend wurden einzelnen Netze mit diesen Ausgaben trainiert die den Dateityp filtern sollten, sprich Ausführbare Datei, BMP,JPG,PCX,WAV usw. Gruß Hagen |
Re: Neuronale Netze ???
Ich hab ein kleines, Erklärendes Tutorial zu diesem Themagefunden:
![]() Vielleicht hilfts ja weiter. unter ![]() Es gibt sogar einen Code- Builder, welcher anhand eurer Imputs Code in C/Javafür ein Neuronales Netzwerk erstrellt. Wir wir ja wissen, ist die Formulierung passender Inputs, passender Themen, an welchem das NN arbeiten soll, aber grad das schwierigste... Aber mit diesem Code- Builder kann man schon einiges erreichen! Den gibt unter ![]() Leider nur für sehr viel Geld... |
Re: Neuronale Netze ???
Kleine Einführung zum Background Neuronaler Netze:
1. Als Grundlage dient die Arbeitsweise des Gehirns. 2. Besonders wird ein Element des Gehirns betrachtet, Neuron genannt 3. Ein Neuron ist eine Nervenzelle, die viele Eingänge hat, sogenannte Dendriten und einen Ausgang (Axon) 4. Über die Dendriten kommen sogenannte Aktionspotenziale, die sich im Zellkörper aufsummieren. 5. Ist eine gewisse Summe erreicht (man spricht von Schwellwert) "feuert" das Neuron seinerseits über das Axon. Also ein auf den Computer bezogen:
Delphi-Quellcode:
Dies stellt ein einzelnes neuronales Element eines Netes dar. (Vereinfacht)
Var
AP_D: real; //eintreffendes Aktionspotenzial Dendriten Schwellwert: real; AP_A: real; //Aktionspotenzial Axon beim Feuern Vielleicht später mal mehr |
Re: Neuronale Netze ???
Es ist mir zwar mega- peinlich, das zu sagen, aber ich habe echt vergessen, wie man units als Komponenten registriert. Könnte mir das vielleicht noch einmal auffrischen?
Hagen: Dein NN- Test Programm zeigt irgedwie... intervalle. Ich weiss nich genau, wie ich das nennen soll, aber die Zeiten, in dem Programm meine Eingaben zu mehr als 50% vorhersagt und die, bei denen es nur "rät" wechseln sich, in zwar ungleichmäßigen, aber doch Intervallen ab. Woran kann das liegen? Habe ich da vielleicht nur meine Click- Strategie unterbewusst geändert, so dass das Netz eine neue Erlernen mussste, welche ich dann wiederum ändere, oder liegt das an etwas anderem? |
Re: Neuronale Netze ???
Zitat:
Zitat:
Gute Netze/Gen. Algo. setzen sich immer aus solchen abwechselnden quantitativen und qualitativen lernphasen zusammen. Normalerweise sind diese sich abwechelenden Phasen eher zufällig, zB. bei genetischen Algortihmen. Neuronale Netze tendieren aber dazu diese abwechselnden Phasen sehr ausgeglichen durchzuführen. Als Resultat erleben wir eine Intervallhafte Lernkurve. Diese Lernkurve bestimmt ist die Geschwindigkeit der Lernfähigkeit des Netzes sowie demzufolge auch ein Maß für die antrainierte "Intelligenz" des Netzes. Es besteht also zwischen der Lernkurve des Netze ein indirekter Zusammehang zur Qualität des erzeugten Netzes. Um so mehr es trainiert wird um so spezialisierter wird das Netz sich ausbilden, man übertrainiert es also. Dadurch sinkt aber die Adaptionsfähigkeit des Netzes für neue Probleme. In diesem Moment muß sich das Netzwerk umorganisieren. Da aber in meiner Demo jeder neue Tipp + alle vorherigen Tipps in inkrementeller Weise trainiert werden wird das Netz bei sehr langen Spielen eben ineffizient. Normalerweise müsste man ein "Vergessen" der ältesten Tipps einbauen und das Netz herunter-stuzen. Das ist aber einfacher gesagt als getan :) Mein Demo-Beispiel ist eben NUR eine Demonstration der unwahrscheinlichen Fähigkeiten Neuronaler Netze. Es ist schwierig solche Beispiele exakt zu konstruieren so daß sie auch noch in beweisbarer Form die Wirksamkeit der NN's aufzeigen. Normalerweise kann man sagen das der Programmtechnische Aufwand um die Netze herum größer sein muß als der eigentliche Netzwerkcode. D.h. der Code des NN's ist nur 50% der gesammten Arbeit. Wenn du dir aber mein Beispiel anschaust so sieht man das ich diesen Aufand so gering wie nur möglich gehalten habe, d.h. mein Demo-Beispiel kann nicht optimal an das Netzwerk angepasst sein. Nur in einigen Ausnahmen, wie reine Mustererkennungen, ist dieser zusätzliche Aufwand geringer. Allerings demonstrieren solche Aufgaben nicht die "Intelligenz" der Netzwerke, und waren somit keine Alternative für meine Demo. Gruß Hagen |
Re: Neuronale Netze ???
Zitat:
Gruß Hagen |
Re: Neuronale Netze ???
Um die Arbeitsweise von z.B. Perzeptronen-Netzen zu verstehen, die für die Erkennung von Schrift eingesetzt werden können, ist die obige Herangehensweise durchaus praktikabel.
Das Feld Neuronaler Netze ist sicherlich groß und es kommen verschiedene Ansätze für unterschiedliche Aufgaben zum Tragen. |
Re: Neuronale Netze ???
Zitat:
Der BIAS ist ein "Störsignal" das zusätzlich zu den Nutzsignalen am Neuron anliegt. Dadurch wird verhindert das das Netzwerk anfängt sinnlos zu schwingen bzw. sich selbst zu blockieren. D.h. durch den BIAS wird sichergestellt das das Netz einen definierten Input erhält der als Referenzsignal zu den Nutzsignalen dient. Ein BIAS muß nicht auf fester Größe stehen, normalerweise wird er aber auf 1 gesetzt und beliebt fixiert. In meinem RCC Netzwerk ist der BIAS ebenfalls fixiert nach dem Training des Neurons. Allerdings wird der BIAS eben auch wie die anderen Gewichte mittrainiert. D.h. jedes Neuron hat einen individuellen BIAS-Wert. Man kann sich dieses BIAS wie den Helligkeitsregler am Fernseher vorstellen. Er reguliert/dämoft/verstärkt die "Spannungen" der anderen Input-Gewiche so daß das Neuron auch reagieren kann. Ein positiver Bias von +10 Volt würde demnach bedeuten das die Gesammtspannungen aller Inputgewichte um 10V gedämpft werden. (dies ist aber nur eine bildliche Erklärung der Vorgänge im Netz). Als Anfänger hat man immer wieder das Problem die Bestandteile einen Netzwerkes räumlich voneinander zu erklären. Man fragt sich also was denn nun ein Neuron und was eine Nervenbahn ist, in einem NN !? Betrachtet auf ein Computer-Netzerek sieht's so aus: Das Neuron als solches existiert als solches NICHT in einem Netzwerk. Das aktive Element das das Neuron beschreibt ist die Aktivierungsfunktion, eg. die Schwellenwert-Funktion. Sollten externe Parameter zu dieser Aktivierungsfunktion existieren, z.B. die Mathematische Formel oder Parameter, so werden diese als Neuron an sich gespeichert. D.h. ein Neuron ist ein Speicherbereich in dem die verwendete Aktivierungsfunktion, dessen Position im Netzwerk und die Verbindungen zu den Input-Neuronen gespeichert sind. Jetzt kommen wir auch schon zu den "Dentriten", eg. Nervenbahnen des Neurons. Eine Nervenbahn ist nur ein Zahlenwert. Dieser Zahlenwert bestimmt wie stark das Aktivierungspotential des Ausgangssignal des Eingangsneurons in die Aktivierungsfunktion des aktuellen Neurons ist. Sinnvollerweise sollte man also alle diese Zahlenwerte=Nervenbahnen zum Neuron selber speichern. So, nun zu dem was die meisten Anfänger in einem Neuron als "Zahlenwert" mißverstehen. Wir wissen das ein Neuron nur eine Aktivierungsfuntion = mathematische Formal ist, und nur die Nervenbahnen zu seinen Inputneuronen speichert. Denoch wird auf Grund softwaretechnischer Gegebenheiten im Neuron noch das Aktivierungspotential gespeichert. Dies ist eine Zahl die durch die Aktivierungsfunktion beerechnet wird. D.h. die Aktivierungsfunktion berechnet aus allen Aktivierungspotentialen der Inputneuronen + den Gewichten der Nerevenbahnen das Aktivierungspotential des aktuellen Neurons = Resultat der Aktivierungsfunktion. Man macht dies aber NUR weil es Softwaretechnisch vom Berechnungsalgortihmus besser zu codieren ist. D.h. dieser Zahlenwert des Neurons ist nicht das Neuron selber sondern nur eine Hilfsvariable. Somit besteht ein Neuron nur "virtuell" als mathematische Formel und deren Inputvariablen = Nervenbahnen. In vielen NN's wird noch gespeichert zu welchen Inpuitneuronen auch tatsächlich eine Nervenbahn besteht. Solche Netze besitzen also die Möglichkeit das ein Neuron sehr individuell mit anderen Neuronen verknüpft wird. Die Anzahl der Nervenbahnen=Verknüpfungen bestimmen die Berechnungskomplexität des Netzwerkes, eg. Laufzeitverhalten. Theoretisch kann jedes Neuron mit jedem anderen Neuron und sogar mit sich selber verküpft sein. Allerdings erhöht sich der Berechnungs-/Speicheraufwand damit sehr drastisch. In meinem RCC Netzwerk sind solche individuellen Verküpfungen enthalten. D.h. eine Nervenbahn besteht aus einem Integer der das Input-Neuron der Nervenbahn als Index beschreibt plus dem Gewicht dieser Nervenbahn als Doublezahl. Diese individuelle Verknüpfungen kommen unserem realen Hirn schon sehr nahe. Sie verkomplizieren aber die Berechnungen innerhalb des Netzwerkes. Als programmtechnische Optimierung und Vereinfachung der Netzwerkberechnugen wird deshalb das Aktivierungspotential des Neurons=Aktivierungsfunktion im Neuron zwischengespeichert. Dies verhindert Rekursive-Endlosberechnungen, denn normalerweise könnte man ausgehend vom aktuellen Neuron diese ohne solche Zwischenspeicherungen berechnen. Man berechnet dazu rekursiv die Potentiale aller Inputneuronen usw. usw. bis man zur Input-Schicht des Netzwerkes gelangt. Dies ist aber vom Berechnungsaufwand her eine invers-exponentielle aufwendige Funktion !! Deshalb besitzt ein Neuron eben auch eine Variable die das Resultat seiner Schwellenwertfunktion=Aktivierungsfunktion zwischenspeichert. Diese Variable ist aber NICHT das Neuron an sich. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz