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?
la source
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.
la source