Comment dois-je coder la structure d'un réseau neuronal en un génome?

14

Pour un espace de problème déterministe, j'ai besoin de trouver un réseau neuronal avec la structure optimale de nœud et de lien. Je veux utiliser un algorithme génétique pour simuler de nombreux réseaux de neurones pour trouver la meilleure structure de réseau pour le domaine problématique.

Je n'ai jamais utilisé d'algorithmes génétiques pour une tâche comme celle-ci auparavant. Quelles sont les considérations pratiques? Plus précisément, comment coder la structure d'un réseau neuronal en un génome?

Mithical
la source

Réponses:

12

La section 4.2 de «L'essentiel de la métaheuristique» contient une mine d'informations sur les méthodes alternatives de codage des structures de graphe via les algorithmes génétiques.

En ce qui concerne particulièrement les RNA en évolution, je ne serais personnellement pas enclin à mettre en œuvre ce genre de chose «à partir de zéro»:

Le domaine de la neuroévolution existe depuis un certain temps et la mise en œuvre de certaines méthodes, telles que la neuroévolution des topologies augmentantes ( NEAT ), intègre désormais les résultats de nombreuses expériences pratiques.

Selon le lien ci-dessus:

Nous avons également développé une extension de NEAT appelée HyperNEAT qui peut faire évoluer des réseaux de neurones avec des millions de connexions et exploiter des régularités géométriques dans le domaine des tâches. La page HyperNEAT comprend des liens vers des publications et une explication générale de l'approche.

NietzscheanAI
la source
Que "Essentials of Metaheuristics" semble très intéressant! C'est quelque chose qui est en fait sur la feuille de route pour les M-automates, car le pur MCTS n'est jamais optimal dans les jeux M. Extrait du wiki métaheuristique : "En informatique et optimisation mathématique, une métaheuristique est une procédure ou une heuristique de niveau supérieur conçue pour trouver, générer ou sélectionner une heuristique (algorithme de recherche partielle) qui peut fournir une solution suffisamment bonne à un problème d'optimisation, en particulier avec des informations incomplètes ou imparfaites ou une capacité de calcul limitée. "
DukeZhou
4

L'utilisation d'algorithmes évolutifs pour faire évoluer les réseaux de neurones est appelée neuroévolution .

Certains algorithmes de neuroévolution optimisent uniquement les poids d'un réseau neuronal à topologie fixe. Cela ne ressemble pas à ce que vous voulez. D'autres algorithmes de neuroévolution optimisent à la fois les poids et la topologie d'un réseau neuronal. Ces types d'algorithmes semblent plus adaptés à vos objectifs et sont parfois appelés TWEANN (Topology and Weight Evolving Neural Networks).

Un algorithme populaire est appelé NEAT et est probablement un bon point de départ, ne serait-ce que parce qu'il existe une multitude d'implémentations, dont l'une, espérons-le, est écrite dans votre langue préférée. Cela vous donnerait au moins une base de référence avec laquelle travailler.

NEAT code un génome de réseau neuronal directement sous forme de structure graphique. Les mutations peuvent opérer sur la structure du réseau en ajoutant de nouveaux liens (en connectant deux nœuds non connectés précédemment) ou de nouveaux nœuds (en fractionnant une connexion existante), ou ne peuvent fonctionner que sur la modification des poids associés aux arêtes dans les graphiques (appelé mutation les poids). Pour vous donner une idée de l'ordre de grandeur des tailles d'ANN avec lesquelles cet algorithme fonctionne, il aurait probablement du mal avec plus de 100 ou 200 nœuds.

Il existe des TWEANN plus évolutives, mais elles sont plus complexes et émettent des hypothèses sur les types de structures qu'elles génèrent qui ne sont pas toujours productives dans la pratique. Par exemple, une autre façon de coder la structure d'un réseau de neurones, est comme le produit d'un motif de départ qui est développé à plusieurs reprises par une grammaire (par exemple un système L). Vous pouvez explorer beaucoup plus facilement des structures plus grandes, mais parce qu'elles sont générées par une grammaire, elles auront une sorte de sensation auto-répétitive caractéristique. HyperNEAT est une extension populaire de NEAT qui fait une sorte d'hypothèse différente (que les modèles de poids peuvent être facilement exprimés en fonction de la géométrie), et peut évoluer en ANN avec des millions de connexions lorsque cette hypothèse correspond bien à un domaine particulier.

Il y a quelques articles d'enquête liés dans le lien supérieur si vous voulez observer une plus grande variété de techniques.

Joel Lehman
la source