Para un espacio de problema determinista, necesito encontrar una red neuronal con el nodo óptimo y la estructura de enlace. Quiero usar un algoritmo genético para simular muchas redes neuronales para encontrar la mejor estructura de red para el dominio del problema.
Nunca he usado algoritmos genéticos para una tarea como esta antes. ¿Cuáles son las consideraciones prácticas? Específicamente, ¿cómo debo codificar la estructura de una red neuronal en un genoma?
El uso de algoritmos evolutivos para desarrollar redes neuronales se llama neuroevolución .
Algunos algoritmos de neuroevolución optimizan solo los pesos de una red neuronal con topología fija. Eso no suena como lo que quieres. Otros algoritmos de neuroevolución optimizan tanto los pesos como la topología de una red neuronal. Este tipo de algoritmos parecen más apropiados para sus objetivos, y a veces se denominan TWEANN (redes neuronales de evolución de peso y topología).
Un algoritmo popular se llama NEAT , y es probablemente un buen lugar para comenzar, aunque solo sea porque hay una multitud de implementaciones, una de las cuales con suerte está escrita en su idioma favorito. Eso al menos te daría una línea de base para trabajar.
NEAT codifica un genoma de red neuronal directamente como una estructura gráfica. Las mutaciones pueden operar en la estructura de la red agregando nuevos enlaces (conectando dos nodos no conectados previamente) o nuevos nodos (dividiendo una conexión existente), o pueden operar solo al cambiar los pesos asociados con los bordes en los gráficos (llamados mutantes los pesos). Para darle una idea del orden de magnitud de los tamaños de los ANN con los que trabaja este algoritmo en particular, es probable que tenga dificultades con más de 100 o 200 nodos.
Hay TWEANN más escalables, pero son más complejos y hacen suposiciones sobre los tipos de estructuras que generan que no siempre son productivos en la práctica. Por ejemplo, otra forma de codificar la estructura de una red neuronal es como el producto de un patrón de semillas que se expande repetidamente por una gramática (por ejemplo, un sistema L). Puede explorar mucho más fácilmente estructuras más grandes, pero debido a que son generadas por una gramática, tendrán una sensación característica de repetición automática. HyperNEAT es una extensión popular de NEAT que hace un tipo diferente de suposición (que los patrones de pesos se pueden expresar fácilmente en función de la geometría) y puede escalar a ANN con millones de conexiones cuando esa suposición se ajusta bien a un dominio particular.
Hay algunos documentos de encuesta vinculados en el enlace superior si desea observar una mayor variedad de técnicas.
fuente