NeuroEvolution of Augmenting Topologies ( NEAT ) es un algoritmo genético (AG) para la generación de redes neuronales artificiales evolutivas (una técnica de neuroevolución ) desarrollado por Kenneth Stanley y Risto Miikkulainen en 2002 mientras estaban en la Universidad de Texas en Austin . Altera tanto los parámetros de ponderación como las estructuras de las redes, intentando encontrar un equilibrio entre la aptitud de las soluciones evolucionadas y su diversidad. Se basa en la aplicación de tres técnicas clave: rastrear genes con marcadores históricos para permitir el cruce entre topologías, aplicar la especiación (la evolución de las especies) para preservar las innovaciones y desarrollar topologías de forma incremental a partir de estructuras iniciales simples ("complejización").
En tareas de control simples, el algoritmo NEAT a menudo llega a redes efectivas más rápidamente que otras técnicas neuroevolutivas contemporáneas y métodos de aprendizaje de refuerzo . [1] [2]
Tradicionalmente, un experimentador humano elige una topología de red neuronal y aprende valores de peso de conexión efectivos mediante un procedimiento de entrenamiento. Esto genera una situación en la que puede ser necesario un proceso de prueba y error para determinar una topología adecuada. NEAT es un ejemplo de una red neuronal artificial que evoluciona la topología y el peso (TWEANN) que intenta aprender simultáneamente valores de peso y una topología adecuada para una red neuronal.
Para codificar la red en un fenotipo para el AG, NEAT utiliza un esquema de codificación directa, lo que significa que cada conexión y neurona se representa explícitamente. Esto contrasta con los esquemas de codificación indirecta que definen reglas que permiten construir la red sin representar explícitamente cada conexión y neurona, lo que permite una representación más compacta.
El enfoque NEAT comienza con una red de retroalimentación similar a un perceptrón , compuesta únicamente por neuronas de entrada y neuronas de salida. A medida que la evolución avanza a través de pasos discretos, la complejidad de la topología de la red puede aumentar, ya sea insertando una nueva neurona en una ruta de conexión o creando una nueva conexión entre neuronas (que antes no estaban conectadas).
El problema de las convenciones en competencia surge cuando hay más de una forma de representar la información en un fenotipo. Por ejemplo, si un genoma contiene neuronas A , B y C y está representado por [ABC], si este genoma se cruza con un genoma idéntico (en términos de funcionalidad) pero el cruce ordenado [CBA] producirá hijos a los que les falta información ([ABA] o [CBC]), de hecho se ha perdido 1/3 de la información en este ejemplo. NEAT resuelve este problema rastreando la historia de los genes mediante el uso de un número de innovación global que aumenta a medida que se agregan nuevos genes. Cuando se agrega un nuevo gen, el número de innovación global se incrementa y se asigna a ese gen. Por lo tanto, cuanto mayor sea el número, más recientemente se agregó el gen. Para una generación particular, si ocurre una mutación idéntica en más de un genoma, a ambos se les asigna el mismo número; sin embargo, más allá de eso, el número de mutación permanecerá sin cambios indefinidamente.
Estos números de innovación permiten a NEAT unir genes que pueden cruzarse entre sí. [1]
La implementación original de Ken Stanley se publica bajo la licencia GPL . Se integra con Guile , un intérprete de esquemas de GNU . Esta implementación de NEAT se considera el punto de partida básico convencional para las implementaciones del algoritmo NEAT.
En 2003, Stanley ideó una extensión de NEAT que permite que la evolución se produzca en tiempo real en lugar de a través de la iteración de generaciones, como se utiliza en la mayoría de los algoritmos genéticos. La idea básica es poner a la población bajo evaluación constante con un temporizador de "vida útil" en cada individuo de la población. Cuando el temporizador de una red expira, se examina su medida de aptitud actual para ver si se encuentra cerca del final de la población y, de ser así, se descarta y se reemplaza por una nueva red generada a partir de dos progenitores de alta aptitud. Se establece un temporizador para la nueva red y se la coloca en la población para que participe en las evaluaciones en curso.
La primera aplicación de rtNEAT es un videojuego llamado Neuro-Evolving Robotic Operatives (NERO). En la primera fase del juego, los jugadores individuales despliegan robots en un "sandbox" y los entrenan para que cumplan con una determinada doctrina táctica. Una vez que se ha entrenado a un grupo de robots, una segunda fase del juego permite a los jugadores enfrentar a sus robots en una batalla contra robots entrenados por otro jugador, para ver qué tan bien sus regímenes de entrenamiento prepararon a sus robots para la batalla.
Una extensión de NEAT de Ken Stanley, desarrollada por Colin Green, agrega una poda periódica de las topologías de red de las soluciones candidatas durante el proceso de evolución. Esta adición abordó la preocupación de que el crecimiento automatizado sin límites generaría una estructura innecesaria.
HyperNEAT está especializado en el desarrollo de estructuras a gran escala. Originalmente se basaba en la teoría CPPN y es un campo de investigación activo.
El sistema de generación de contenido NEAT (cgNEAT) desarrolla contenido de videojuegos personalizado en función de las preferencias del usuario. El primer videojuego en implementar cgNEAT es Galactic Arms Race , un juego de disparos espaciales en el que se desarrollan armas de sistemas de partículas únicos en función de las estadísticas de uso del jugador. [3] Cada arma de sistemas de partículas del juego está controlada por un CPPN evolucionado , de manera similar a la técnica de evolución en el programa de arte interactivo NEAT Particles .
odNEAT es una versión en línea y descentralizada de NEAT diseñada para sistemas multi-robot. [4] odNEAT se ejecuta a bordo de los mismos robots durante la ejecución de tareas para optimizar continuamente los parámetros y la topología de los controladores basados en redes neuronales artificiales. De esta manera, los robots que ejecutan odNEAT tienen el potencial de adaptarse a condiciones cambiantes y aprender nuevos comportamientos a medida que realizan sus tareas. El proceso evolutivo en línea se implementa de acuerdo con un modelo de isla distribuida físicamente. Cada robot optimiza una población interna de soluciones candidatas (variación intra-isla), y dos o más robots intercambian soluciones candidatas cuando se encuentran (migración entre islas). De esta manera, cada robot es potencialmente autosuficiente y el proceso evolutivo capitaliza el intercambio de controladores entre múltiples robots para una síntesis más rápida de controladores efectivos.
{{cite journal}}
: Requiere citar revista |journal=
( ayuda )