Verwendung genetischer Algorithmen für neuronale Netze

8

Gegenwärtig arbeite ich an einem Projekt, das genetische Algorithmen zur Optimierung von neuronalen Netzen verwenden würde. Ich weiß, dass dies wahrscheinlich nicht der beste Weg ist, sie zu optimieren, aber ich bin neu für beide, also wollte ich nur versuchen, sie zu benutzen.

Meine Pläne sind wie folgt (Änderungen vorbehalten, viel). Meine Eingangsneuronen würden eine Datenmenge verwenden, die fast jede positive Zahl haben könnte (einschließlich Dezimalen bis zu zwei Stellen, also wären sie eigentlich Gleitkommazahlen), aber höchstwahrscheinlich zwischen 0 und 20000. Weil die Bedeutung darin liegt, wie Zahlen vergleichen sich im Wert und nicht so groß wie sie sind, würden sie zuerst durch die höchste Anzahl aller Werte geteilt werden, die eingegeben werden würden. Sie würden sie mit Gewichten multiplizieren (jeder positive oder negative Float), bevor sie zu ihrer versteckten Ebene gehen. Jedes Neuron in der versteckten Schicht würde alle Eingaben addieren, bis sie fertig berechnet sind. Sie würden dann durch eine Logistikfunktion geführt und ausgegeben werden.

Meine Umgebung ist Visual Studio C ++ 2010 Express und ich verwende die clr.

Mein Problem liegt im genetischen Algorithmus und wie es funktionieren würde. Es würde die Gewichte anpassen. Mein Problem ist, dass wenn es zufällig ein Bit in einem der Gewichte (Mutationsrate) ändert, es die Gewichte außerordentlich hoch oder niedrig machen könnte, was einen Überlauf oder einen anderen Fehler verursachen würde, wenn es mit der Eingabe multipliziert und mit den anderen addiert wird. Ich habe keine Ahnung, wie ich meine Chromosomen organisieren würde. Also, wäre es einfach besser, die Randomisierung durch Auswahlgewichte anstelle von Bits nach dem Zufallsprinzip durchzuführen und sie zu einer Zufallszahl innerhalb eines definierten Bereichs zu ändern? Im Grunde bin ich auf der Suche nach Vorschlägen, wie dies organisiert werden kann, ohne Fehler zu verursachen, die dazu führen, dass Werte zu groß oder zu klein werden, während die Leistung beibehalten wird.

Danke (und tut mir leid, wenn das in der theoretischen Informatik sein sollte, aber ich dachte, es würde dort nicht passen)

    
contrapsych 19.02.2011, 02:07
quelle

2 Antworten

6

(Künstliche) Neuronale Netze (ANNs) sind notorisch schwierig zu optimieren, und genetische Algorithmen (GAs) sind ein ziemlich guter Ansatz dafür (hauptsächlich, weil alles andere sehr eingeschränkt ist, wie gut es funktionieren kann). Natürlich gibt es auch Alternativen, die gut funktionieren, aber sie sind komplizierter und subtiler, um sie richtig zu programmieren und zu tunen (Backpropagation mit Simulated Annealing und Lernmomentum). Und ich verstehe, dass Sie dieses Projekt hauptsächlich machen, um mit diesen Dingen herumzuspielen.

Vielleicht möchten Sie Evolutionary Neuro-Controller (ENC) betrachten, ein Bereich, in dem genetische (oder evolutionäre) Algorithmen verwendet werden, um KNN für komplexe Navigationsaufgaben zu trainieren (zB interplanetare Weltraummissionen sind eine der Anwendungen von über die ich selbst recherchiert habe).

Für den ANN-Teil würde ich vorschlagen, dass Sie sich nicht auf logistische Funktionen beschränken (ich weiß, dass das Sigmoid von biologischen Neuronen inspiriert ist, aber das bedeutet nicht, dass sie die ganze Zeit die beste sind). Viele andere Funktionen existieren ebenfalls, Logistikfunktionen werden teilweise verwendet, weil sie die Rückausbreitung viel schneller und einfacher machen. Aber, Radial-Basis-Funktionen wirken auch Wunder (IMO und von dem, was ich gesehen habe, verwendet die meisten erfolgreichen Anwendungen von KNN Radial-Basis-Funktionen, d.h. RBF-NN). Typischerweise verwenden Menschen entweder Gaußsche Funktionen, hypersphärische Funktionen und sehr oft dreieckige Funktionen (sogenannte Fuzzy-Netzwerke, eine weitere große Klasse von KNNs).

Was die GA anbelangt, würde ich aus den von Ihnen erwähnten Gründen diese Mutationsart, die Sie beschreiben, nicht empfehlen (d. h. Bits umdrehen). Menschen verwenden diese Art von Mutation nicht, wenn sie mit real bewerteten Genen umgehen. Eine sehr einfache Mutationsmethode ist es, mit einer gewissen Wahrscheinlichkeit zu entscheiden, ein Individuum zu mutieren, dann ein Element seines Gens auszuwählen, das mutiert werden soll, und dann einfach ein neues Genelement zu erzeugen, um es durch einen Zufallsgenerator zu ersetzen (rand ()) . Damit können Sie die Größe der generierten Genelemente begrenzen, um Probleme zu vermeiden, die Ihre eigenen degenerierten Elemente verändern (d. H. Ein völlig falsches Genelement kann das gesamte Individuum nutzlos machen). Was sind die Gene? Nun, für einen ANN, typischerweise ein großer Vektor, der alle Gewichte aller Neuronen in Ihrem Netz enthält. Sie können raten, dass Menschen selten GA anwenden, wenn die Anzahl der Neuronen zu groß ist. Ich würde auch empfehlen, dass Sie die Turnierauswahl für die Auswahl von Personen für die Reproduktion verwenden. Was Crossover betrifft (d. H. Mischen von zwei Eltern, um ein Kind zu bilden), behalte einfach die Reihenfolge der Gewichte und wähle für jedes Element des Kindes ein Gewicht von jedem Elternteil mit zufälliger Wahrscheinlichkeit.

Ich habe persönlich getan, was ich oben beschrieben habe, und es funktioniert sehr gut für bestimmte Probleme (reduzierte Größe und hohe Komplexität, d. h. keine offensichtliche optimale Lösung).

Schließlich, erwarte nicht, dass es so einfach funktioniert. Normalerweise wird eine Populationsgröße und eine Generation benötigt, die viel höher ist als das, was Sie erwarten würden (schließlich ist die Evolution ein sehr langsamer Prozess!). Also, versuchen Sie nicht eine Population von 10 Individuen und laufen Sie seit 50 Generationen und sagen Sie leider "OH ich denke, es funktioniert nicht ...". Versuchen Sie mehr in der Größenordnung von Tausenden von Individuen in der Bevölkerung und mehreren tausend bis hunderttausend Generationen, abhängig von der Größe des Problems, auf das Sie es anwenden, natürlich.

    
Mikael Persson 19.02.2011, 03:03
quelle
3

Ihr Problem liegt in der Chromosomendarstellung. Es ist bekannt als Hamming Cliff Problem . Sie können Gray Code für die Chromosomen-Darstellung verwenden, die kein Hamming Cliff Problem hat

    
user 06.01.2012 16:03
quelle