0

Ich wurde angewiesen, ein neuronales Netzwerk zu implementieren, um Vorhersagen zu machen. Also habe ich einen Feed Forward MultiLayer Perceptron mit einem Backpropagation Algorithmus erstellt und es funktioniert gut. Aber ich muss schneller und schneller Ergebnisse erzielen. Also habe ich über genetischen Algorithmus gedacht, um die Gewichte in der Trainingseinheit zu optimieren.Gewichtsoptimierung eines neuronalen Netzwerks mit Hilfe eines genetischen Algorithmus

Wie schlagen Sie vor, das Chromosom zu kodieren?

Ich habe es bereits als eine Tabelle von Gewichten erstellt zufällig (-100, 100) gemacht, aber es gibt keine außergewöhnlichen Ergebnisse. Ich vermute, dass das Problem darin besteht, dass das Generieren einer zufälligen Tabelle von Gewichtungen den Lösungsraum begrenzt, selbst wenn die Mutationswahrscheinlichkeit hoch ist.

Irgendeine Idee, wie man die Gewichte im Chromosom kodiert, um den genetischen Algorithmus großartig arbeiten zu lassen?

Vielen Dank im Voraus.

+0

Schneller als bei schneller Konvergenz? Verwenden Sie dann die Stapelnormalisierung. –

+2

Die Verwendung eines genetischen Algorithmus erfordert wahrscheinlich mehr Ressourcen (z. B. Zeit und CPU) als nur die Verwendung von Gradientenabstieg oder einen anderen analytischen Lernansatz. Haben Sie versucht, RMSprop oder adagrad zu verwenden? – jorgenkg

+0

Ich habe schon vorher mit sich entwickelnden neuronalen Netzwerken gearbeitet, und ich denke, dass die Darstellung der Netzwerkgewichte als Bitvektor und die anschließende Transformation zwischen den beiden Darstellungen (Bitvektor/Gewichtung) sich als die effizienteste Suchstrategie erwiesen hat. – jorgenkg

Antwort

1

Kurz gesagt (was bereits in den Kommentaren vorgeschlagen wurde): tun Sie dies nicht. Genetische Algorithmen sind ein einfacher Metaoptimierer für Probleme, die können nicht effizient optimiert werden, wie sie sind langsam, heuristisch und erfordern viele Ressourcen. Insbesondere sollten sie nie verklagt werden, um ein neurales Netzwerk zu trainieren, für das wir Dozesns von sehr effizienten Trainingsmethoden haben (SGD, Rmsprop, Adam). Sie können verwendet werden, um einige abstraktere Teile zu optimieren, wie Netzwerkarchitektur usw., wo man keine gültigen Gradienten berechnen oder sogar andere wohldefinierte mathematische Prozeduren verwenden kann.

0

Wenn Sie einen evolutionären Algorithmus verwenden möchten, um die Gewichtung neuronaler Netze zu optimieren, ist der Ansatz besser, wenn Sie das Netzwerk einmal mit Backpropagation lernen und dann die maximalen und minimalen Gewichte für die Codierungsgrenzen verwenden. Nehmen wir an, die Gewichte sind zwischen -1.0988333,1.2982293 verteilt, ich würde [-2,2]/(- 2,2) nehmen, so dass ein Chromosom erzeugt werden könnte, das in diesem Intervall eher zu einer besseren Lösung neigt und weiter optimiert werden kann durch Algorithmus. Das Intervall von [-100,100] würde beim Erzeugen der optimalen Lösung langsam sein. Wie würden Sie Ihre Fitness-Funktion definieren, um eine optimale Lösung zu finden? Ein Ansatz wäre ein minimaler Effektivwert für gegebene Gewichte.