Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Neuronale Netze ??? (https://www.delphipraxis.net/8425-neuronale-netze.html)

Stanlay Hanks 3. Jan 2004 14:12

Re: Neuronale Netze ???
 
Zitat:

Zitat von negaH
Es tut mir ehrlich sehr Leid aber ich werde keine Tutorials schreiben.

Hi. Is auch nicht so schlimm! :) Ich kann natürlich verstehen, dass das sehr viel Arbeit is und auch sehr viel Zeit benötigen würde. Dann werd ich eben auch mal etwas googeln.

Man liest sich, Stanlay :hi:

stoxx 3. Jan 2004 15:26

Re: Neuronale Netze ???
 
Hallo Hagen,

kennst Du Dich mit Wavelets zum Zweck der Mustererkennung genauso gut aus, wie mit Neuronalen Netzen ?

negaH 13. Jan 2004 00:07

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

Hackbart 14. Jan 2004 14:13

Re: Neuronale Netze ???
 
Ich hab ein kleines, Erklärendes Tutorial zu diesem Themagefunden: Strucktur Neuronaler Netze

Vielleicht hilfts ja weiter. unter www.planet-source-code.com findet man zu diesem Thema ein paar Quellcode- Beispiele.
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 www.cobaltai.com -> Code Builder

Leider nur für sehr viel Geld...

Minz 14. Jan 2004 14:42

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:
Var
AP_D: real;        //eintreffendes Aktionspotenzial Dendriten
Schwellwert: real;
AP_A: real;        //Aktionspotenzial Axon beim Feuern
Dies stellt ein einzelnes neuronales Element eines Netes dar. (Vereinfacht)

Vielleicht später mal mehr

Hackbart 14. Jan 2004 16:43

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?

negaH 15. Jan 2004 11:44

Re: Neuronale Netze ???
 
Zitat:

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?
IDE\Menu\Komponente installieren...

Zitat:

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?
Das Netz lernt nach jedem Tipp alle vorherigen Tipps neu, eg. es wird immer mit allen getätigten Tipps trainiert. Dadurch steigt die Komplexität des Netzes exponentiell, was wiederum die Trainingsphase erheblich zeitlich verlängert. Da mein RCC Netz aber ganz spezielle Trainings-Algorithmen enthält ist die Adaptionsgeschwindigkeit des Netzes NICHT vorhersehbar. Ein Schubweises lernen von Neuronalen Netzen, genetischen Algorithmen und Evolutions Strategien ist durchaus bekannt und logisch. Wie in der Evolution selber gibt es Trainings/Lernphasen die einen Quantitatives Wachstum und ein Qualitatives Wachstum beschreiben. Quantitive Verlaufe sind stetig linear und Qualitative Verläufe sind immer sprunghafte Anstiege.

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

negaH 15. Jan 2004 12:02

Re: Neuronale Netze ???
 
Zitat:

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.
Das ist die ursprüngliche Idee Neuronaler Netzwerke der Computertechnik. Würde man aber die heutigen NN-Techniken und mathematischen Grundlagen auf die biologischen Netze, wie auf unser Hirn anwenden, so würde man kläglich scheitern. D.h. die heutigen Neuronalen Netze kann man in keinster Weise mit der Arbeitsweise von Neuronen vergleichen, sie sind im Grunde was komplett anderes. Nun, um als Einsteiger ein Gefühl für NN's zu bekommen hat es sich eingebürgert eben NN's mit unseren Hirnen zu vergleichen. Allerdings ist dies eben auch falsch. Das hat mehrere Gründe. Computer NN's sind nur stark abstrahierte "Verwandte" unserer Hirne, und kommen in ihrer Auflösung, Komplexität und Fähigkeiten nicht im entferntesten an die Fähigkeiten ihrer biologischen Verwandten heran. Ein vergleichsweises Herangehen von Computer NN's zu Gehirnen würde bedeuten das ein Computer NN die gleichen Resultate wie ein Gehirn liefern müsste. Dies tut es aber nicht (noch nicht :) ).

Gruß Hagen

Minz 15. Jan 2004 12:39

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.

negaH 15. Jan 2004 13:03

Re: Neuronale Netze ???
 
Zitat:

Ich hatte mir ja bishier erst ein Tutorial durchgelesen (über Perzeptronennetze) und da stand, dass der (das?) Bias konstant bleibt und in der Ausgabefunktion wird dann mit Hilfe des Ergebnisses der Aktivitätsfunktion berechnet ob der (das?) Bias erreicht wurde. Hier setzt auch der Lernprozess an, jedoch werden nur die Gewichte der Unit-Inputs verändert.
Ein Neuron hatte dort auch keinen extra Output, sondern nur ein Datum (nicht zu verwechseln mit Datum ), 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?

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 02:59 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

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 by Thomas Breitkreuz