Wie soll ich die Struktur eines neuronalen Netzwerks in ein Genom kodieren?

14

Für einen deterministischen Problemraum muss ich ein neuronales Netzwerk mit der optimalen Knoten- und Verbindungsstruktur finden. Ich möchte einen genetischen Algorithmus verwenden, um viele neuronale Netzwerke zu simulieren und die beste Netzwerkstruktur für die Problemdomäne zu finden.

Ich habe noch nie zuvor genetische Algorithmen für eine solche Aufgabe verwendet. Was sind die praktischen Überlegungen? Wie soll ich die Struktur eines neuronalen Netzwerks in ein Genom kodieren?

Mithical
quelle

Antworten:

12

Abschnitt 4.2 von "Grundlagen der Metaheuristik" enthält eine Fülle von Informationen zu alternativen Methoden zur Codierung von Graphstrukturen über genetische Algorithmen.

In Bezug auf die Weiterentwicklung von ANNs wäre ich persönlich nicht geneigt, solche Dinge "von Grund auf neu" zu implementieren:

Das Gebiet der Neuroevolution gibt es schon seit einiger Zeit, und bei der Implementierung einiger Methoden, wie der Neuroevolution von Augmentationstopologien ( NEAT ), fließen die Ergebnisse vieler praktischer Erfahrungen ein.

Laut dem obigen Link:

Wir haben auch eine Erweiterung für NEAT namens HyperNEAT entwickelt, mit der neuronale Netze mit Millionen von Verbindungen entwickelt und geometrische Regelmäßigkeiten im Aufgabenbereich ausgenutzt werden können. Die HyperNEAT-Seite enthält Links zu Veröffentlichungen und eine allgemeine Erläuterung des Ansatzes.

NietzscheanAI
quelle
Das "Essentials of Metaheuristics" sieht sehr interessant aus! Dies ist etwas, was eigentlich auf der Roadmap für die M-Automaten steht, da reines MCTS in M-Spielen niemals optimal ist. Aus dem metaheuristischen Wiki : "In der Informatik und der mathematischen Optimierung ist eine Metaheuristik ein übergeordnetes Verfahren oder eine Heuristik, mit der eine Heuristik (Teil-Suchalgorithmus) gefunden, generiert oder ausgewählt werden kann, die eine ausreichend gute Lösung für ein Optimierungsproblem bietet. insbesondere mit unvollständigen oder unvollständigen Informationen oder begrenzter Rechenkapazität. "
DukeZhou
4

Die Verwendung evolutionärer Algorithmen zur Entwicklung neuronaler Netze wird als Neuroevolution bezeichnet .

Einige Neuroevolution-Algorithmen optimieren nur die Gewichte eines neuronalen Netzwerks mit fester Topologie. Das hört sich nicht so an, wie Sie es wollen. Andere Neuroevolution-Algorithmen optimieren sowohl die Gewichte als auch die Topologie eines neuronalen Netzes. Diese Art von Algorithmen scheint besser für Ihre Ziele geeignet zu sein und wird manchmal als TWEANNs (Topology and Weight Evolving Neural Networks) bezeichnet.

Ein beliebter Algorithmus heißt NEAT und ist wahrscheinlich ein guter Anfang, schon allein deshalb, weil es eine Vielzahl von Implementierungen gibt, von denen hoffentlich eine in Ihrer Lieblingssprache geschrieben ist. Das würde Ihnen zumindest eine Basis geben, mit der Sie arbeiten können.

NEAT kodiert ein neuronales Netzwerkgenom direkt als Graphstruktur. Mutationen können auf die Struktur des Netzwerks angewendet werden, indem neue Verknüpfungen (durch Verbinden von zwei zuvor nicht verbundenen Knoten) oder neue Knoten (durch Aufteilen einer vorhandenen Verbindung) hinzugefügt werden, oder sie können nur auf das Ändern der mit Kanten in den Diagrammen verbundenen Gewichte angewendet werden (als Mutieren bezeichnet) die Gewichte). Um Ihnen eine Vorstellung von der Größenordnung der Größen von ANNs zu geben, mit denen dieser spezielle Algorithmus arbeitet, würde es wahrscheinlich mit mehr als 100 oder 200 Knoten zu kämpfen haben.

Es gibt skalierbarere TWEANNs, die jedoch komplexer sind und Annahmen über die Art der von ihnen erzeugten Strukturen treffen, die in der Praxis möglicherweise nicht immer produktiv sind. Eine andere Möglichkeit, die Struktur eines neuronalen Netzwerks zu codieren, ist beispielsweise das Produkt eines Keimmusters, das wiederholt um eine Grammatik erweitert wird (z. B. ein L-System). Sie können größere Strukturen viel einfacher erkunden, aber da sie durch eine Grammatik generiert werden, haben sie eine charakteristische, sich selbst wiederholende Art von Gefühl. HyperNEAT ist eine beliebte Erweiterung von NEAT, die eine andere Annahme macht (dass Gewichtungsmuster leicht als Funktion der Geometrie ausgedrückt werden können) und auf ANNs mit Millionen von Verbindungen skaliert werden kann, wenn diese Annahme gut zu einer bestimmten Domäne passt.

Im oberen Link sind einige Umfragepapiere verlinkt, wenn Sie eine größere Vielfalt von Techniken beobachten möchten.

Joel Lehman
quelle