Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D (https://www.delphipraxis.net/99854-neuronale-netze-erklaerung-fuer-nen-13-jaehrigen-gesucht-d.html)

HERMES 19. Sep 2007 15:17

Re: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht
 
Als Ausgabeneuronen werden eigentlich nur die "letzten" bezeichnet, also die die ihre erregung nicht mehr an ein anderes Neuron weitergeben.

Das mit dem lernen ist leider nicht so einfach. Schon für ein einfaches Perzeptron benötigt man nicht ganz triviale Mathematik. Um die Gewichtungen zu optimieren wird idr. das Gradienten(abstiegs)verfahren iterativ eingesetzt, bis das Ergebnis gut genug ist. Allerdings klappt das bei einem einfachen Perzetron wiederum nur wenn der Lösungsraum linear separierbar ist (für binäre Neuronen).

Lösungsraum linear separierbar bedeutet in etwa, dass man eine Grenze ziehen kann, und alles was links davon ist eine Ausgabe und alles rechts davon die andere Ausgabe.

menschjens 20. Sep 2007 20:20

Re: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht
 
@ NamenLozer und Torpedo
Habe leider erst heute mal wieder Zeit gefunden, hier vorbei zu surfen. Sind ja schon etliche Antworten gekommen. Gibt also kaum noch was zu ergänzen, oder?

Vielleicht noch, dass man in die Neuronen gern die Sigmoidfunktion reinpackt. Sie lautet:

Delphi-Quellcode:
   Result := 1 / (1 + exp(-x/t))
wobei x die Summe aller gewichteten Eingangssignale eines Neurons ist.

Man nimmt sie deshalb so gerne, weil sie im ganzen Definitionsbereich monoton wachsend und stetig und differenzierbar ist.
Dadurch lässt sich bei der Rückwärtsrechnung mathematisch recht einfach berechnen, wie die Synapsengewichte verändert werden müssen, damit das Ergebnis besser wird. Außerdem hat sie als Ergebnis immer einen Wert zwischen 0 und 1

Vernetzt man nun viele dieser Neuronen z.B. in 3 Schichten (E, V und A), dann sieht die Vorwärts-Reizleitung in einem solchen Netz also für die Strecke von den Eingabeneuronen zu den verdeckten Neuronen so aus:

Delphi-Quellcode:
  for V := 1 to MaxV do
  begin
    SummeV[V] := 0;
  end;
  for V := 1 to MaxV do
  begin
    for E := 0 to MaxE do // hinter dem Index E=0 verbirgt sich RE[0]=-1 und GEV[0,V]=Biaswert des Neurons Nr.V
    begin
      SummeV[V] := SummeV[V] + GEV[E,V] * RE[E];
    end;
  end;

  for V := 1 to MaxV do
  begin
    RV[V] := sig(SummeV[V]);
  end;
GEV sind die Synapsengewichte (und Biaswerte), RE die Reizwerte der Eingabeneuronen, RV die Reizwerte der verdeckten Neuronen.
In der nächsten Schicht (zu den Ausgabeneuronen) dann analog.

Bei der Rückwärtsrechnung werden dann die Synapsengewichte GEV bzw GVA entsprechend der aufgetretenen Abweichung zum Sollergebnis angepasst. Hier multipliziert man aber noch einen Lernfaktor 0 < LF < 1 mit rein. Schließlich bringt dich dein Lehrer ja auch nicht gleich bei jedem Fehler um, sondern geht sie Sache etwas geduldiger an. ;o)
Die Formeln hierfür führen aber wohl hier zu weit...

negaH 20. Sep 2007 21:50

Re: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht
 
Hi, lese dir das mal durch http://www.delphipraxis.net/internal...ect.php?t=9450

Dort findest du auch eine fetige NN Komponente von mir mit Sourcen und Beispiel.

Diese demonstriert auch das die Sigmoid Funktion eben nich die einzigste Aktivierungsfunktion ist. Diese wird sehr oft nur für die Input&Output Schicht benutzt. Für die Hidden Units haben sich andere Aktivierungsfuntionen bewährt. Besonderts wenn man Bipolare Unit benutzt sind die Sigmoid Funktionen nicht die beste Wahl.

Um es dem Designer solcher Netze einfacher zu machen, sprich die Wahl der Aktivierungsfunktionen, die Wahl ob Unipolar oder Bipolar, die Wahl der Anzahl der Hidden Units und Layer, die Verküpfungen dieser Units untereinander usw. usw. habe ich ein Cascade Correlation Network implementiert. Das hat den Vorteil das der Designer nur die Input&Output definieren muß und der Rest baut sich das Netzwerk quasi beim Training selber auf. Es wächst quasi von selbst so lange bis es das Trainingsziel erreicht hat. Es entscheidet auch selbstständig welche Aktivierungsfunktionen für die Units am besten geeignet sind, und es versucht selbsständig die Verknüpungen der Unit zu optimieren. Dabei wird das QuickProp Verfahren für die Backpropagation benutzt und der gesamte Trainingsprocesss läuft per Backtracking ab.

Gut, der einzigste Hacken dabei ist das man schon ein bischen Fachwissen benötigt um diese Komponente mit all ihren Einstellungsmöglichkeiten zu verstehen und benutzen zu können. Ist leider immer so bei solchen Dingen.

Gruß Hagen

Namenloser 23. Sep 2007 18:28

Re: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht
 
Wow, wirklich faszinierend, was das Programm leistet (großes Dankeschön an Hagen!) :thumb:

Auf jeden Fall habe ich jetzt eins verstanden: das Prinzip ist simpel, aber die Umsetzung ist kompliziert :/. Momentan fehlt mir wohl für vieles einfach noch das mathematische Verständnis, oder mein geist ist einfach zu beschränkt dafür :mrgreen:.

Ich werde mir aber Hagens Komponente wohl noch einmal genauer anschauen und (wenn möglich) einige in dem Programm nicht genutzte Funktionen rauskürzen, um mehr Übersicht zu bekommen. Die Informationen auf neuronalesnetz.de werde ich mir sicher auch noch einmal anschauen, und versuchen sie zu verstehen. Außerdem könnnte ich auch noch meine Mathelehrerin ein paar sachen fragen, die hat imo sogar eine Diplomarbeit über neuronale Netze geschrieben.

Also, wenn ich weiter bin bzw. eine Frage habe, werde ich mich sicher nochmal hier melden!

Btw: Wie viel Liter Kaffee hast du für die Unit eigentlich gebraucht? :freak:

everdream 14. Nov 2007 20:15

Re: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht
 
Auch auf die Gefahr hin, dass ich jetzt gehauen werde, aber kann man ein neuronales netz für ein sehr einfaches Projekt nicht auch durch wenige arrays simulieren? das wäre meiner meinung nach ein sehr einfacher weg...

Schorschi5566 14. Jul 2015 21:46

AW: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D
 
Servus DP,

ist schon acht Jahre her, dass hier was zum Thema gepostet wurde, aber ich mach's mal trotzdem. :)

Ich suche nach einer Art Mustererkennung in Bildern. Beispielsweise Farben oder Formen.

Wäre sowas mit neuronalen Netzen denkbar?

Beispiel: Es gibt Bilder, die immer einen roten Kreis ähnlicher Größe haben, aber an unterschiedlichen Positionen.

Könnte ein neuronales Netz diese Ähnlichkeiten erkennen und von Bildern unterscheiden, die keinen roten Kreis haben?

Kann man sowas mit Hagens Komponente realisieren?

Mein Ansatz wäre die Bilder zu vereinfachen, was die Pixelanzahl angeht (Skalieren auf eine bestimmte Größe) und dann für jedes Pixel ein "Neuron" zu erzeugen. Dann würde ich das Netz mit bekannten Bildern trainieren (falschen und richtigen).
Ist das zu naiv gedacht oder könnte das gehen?

Bin dankbar für alle Hinweise. ;)


Viele Grüße,
Uwe

frankyboy1974 15. Jul 2015 08:53

AW: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D
 
Hallo,

grundsätzlich kann man neuronale Netze sicherlich zur Mustererkennung benutzen. Ob man das Tool von Hagen, dafür verwenden könnte, kann ich nicht sagen. War mir etwas zu Umfangreich, um dies zu beurteilen.
Wenn man mir die Aufgabe stellen würde, zu überprüfen ob ein Kreis bestimmter Farbe sich innerhalb einer Grafik befindet, würde ich dies einfach brutal durchprobieren. Oder anders formuliert, ich suche innerhalb meines Array aus Pixel den gewünschten Farbwert. Das ist mein Ausgangspunkt. Jetzt probiere ich jeden beliebigen (bis zu einen Maxaimalwert) Radius aus, berechne daraus die anderen Pixelkoordinaten meines gedachten Kreises und überprüfe diese auf den Ursprungsfarbwert. Wäre relativ einfach zu programmieren und müsste wahrscheinlich auch ausreichend schnell durchlaufen.

mfg

frank

Caps 15. Jul 2015 11:13

AW: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D
 
Wenn es um bekannte geometrische Figuren geht, bietet sich die Hough-Transformation an.

lg Caps

hanvas 15. Jul 2015 11:45

AW: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D
 
Zitat:

Zitat von Schorschi5566 (Beitrag 1308684)

Ich suche nach einer Art Mustererkennung in Bildern. Beispielsweise Farben oder Formen.

Wäre sowas mit neuronalen Netzen denkbar?

Natürlich kann man so etwas mit neuronalen Netzen machen.

Aber bei speziellen Problemen gibt es bessere und oft auch einfachere (im Sinne von einfacher zu Verstehen, nicht im Sinne von einfacher zu implementieren) Lösungen

Zitat:

Zitat von Schorschi5566 (Beitrag 1308684)

Beispiel: Es gibt Bilder, die immer einen roten Kreis ähnlicher Größe haben, aber an unterschiedlichen Positionen.

Könnte ein neuronales Netz diese Ähnlichkeiten erkennen und von Bildern unterscheiden, die keinen roten Kreis haben?

Die Stärken von neuralen Netzwerken liegen darin das diese eine gewisse Abstraktionsfähigkeit haben. Mit anderen Worten, wenn Dein Ausgangsmaterial verrauscht ist und viele Bildstörungen hat die mit "normalen" Methoden der Bildbearbeitung nicht in den Griff zu bekommen sind (man kann sehr viel Bildstörungen in den Griff bekommen) dann wären neuronale Netzwerke tatsächlich eine gute Wahl, auch dann wenn es mal rote Kreise, mal orange Ellipsen und ab und zu Rechtecke mit abgerundeten Ecken sind könnte ein neuronales Netz durchaus erkennen.

Wenn Du hingegen saubere unverrauschte Bilder hast dann ist deine Frage tatsächlich nur die ist "hat roten Kreis", dann hast Du ein gutes Beispiel dafür das andere Lösungen unter Umständen besser geeignet sind.

Am zuverlässigsten wäre dann dein Problem gelöst wenn Du deine Bilder mit Hilfe der Hough-Transformation analysierst. (https://de.wikipedia.org/wiki/Hough-Transformation). Die (generalisierte) Hough - Transformation wäre auch in der Lage beliebige Formen zu finden so lange diese mathematisch beschreibbar sind.

Du bekämst als Ergebnis eine Liste mit Kreisen bei denen Du dann nur noch testen müsstest ob diese tatsächlich rot sind. Eine fast fertige Implementierung findest Du in den Beispielen zu https://github.com/Laex/Delphi-OpenCV.

Zitat:

Zitat von Schorschi5566 (Beitrag 1308684)
Kann man sowas mit Hagens Komponente realisieren?

Mein Ansatz wäre die Bilder zu vereinfachen, was die Pixelanzahl angeht (Skalieren auf eine bestimmte Größe) und dann für jedes Pixel ein "Neuron" zu erzeugen. Dann würde ich das Netz mit bekannten Bildern trainieren (falschen und richtigen).
Ist das zu naiv gedacht oder könnte das gehen?

Prinzipell wäre das schon möglich. Aber es kommt wirklich auf die ganz konkrete Frage an um sagen zu können welche Architektur die geeignetste wäre.

cu Ha-Jö

Schorschi5566 15. Jul 2015 15:22

AW: Neuronale Netze - Erklärung für 'nen 13-Jährigen gesucht :D
 
Hallo DP,

vielen Dank für Eure Antworten. Das bringt mich schonmal weiter. Ich werde mir die Links mal ansehen.

Es können unterschiedlichste Formen und Farben sein, der rote Kreis war nur als Beispiel gewählt.



Viele Grüße,
Uwe


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz