NeuroEvolution of Augmenting Topologies ( NEAT ) es un algoritmo genético (AG) para generar redes neuronales artificiales evolutivas (una técnica de neuroevolución ) desarrollado por Kenneth Stanley y Risto Miikkulainen en 2002 en la Universidad de Texas en Austin . Altera tanto los parámetros de ponderación como las estructuras de las redes, buscando un equilibrio entre la aptitud de las soluciones evolucionadas y su diversidad. Se basa en la aplicación de tres técnicas clave: el seguimiento de genes con marcadores históricos para permitir el cruce entre topologías, la aplicación de la especiación (la evolución de las especies) para preservar las innovaciones y el desarrollo incremental de topologías a partir de estructuras iniciales simples ("complejización").
Actuació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 por refuerzo , a partir de 2006. [ 1 ] [ 2 ]
Algoritmo
Tradicionalmente, la topología de una red neuronal la elige un experimentador humano, y los valores de los pesos de conexión efectivos se aprenden mediante un proceso de entrenamiento. Esto puede dar lugar a un proceso de ensayo y error para determinar una topología adecuada. NEAT es un ejemplo de red neuronal artificial con topología y pesos evolutivos (TWEANN), que intenta aprender simultáneamente los valores de los pesos y una topología apropiada para una red neuronal.
Para codificar la red en un fenotipo para el algoritmo genético (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 resulta en una representación más compacta.
El enfoque NEAT comienza con una red neuronal de alimentación directa, similar a un perceptrón , compuesta únicamente por neuronas de entrada y de salida. A medida que la evolución avanza mediante 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 (anteriormente desconectadas).
Convenciones en competencia
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 se representa como [ABC], si este genoma se cruza con un genoma idéntico (en términos de funcionalidad) pero ordenado [CBA], el cruce producirá descendientes con información faltante ([ABA] o [CBC]); de hecho, en este ejemplo se ha perdido 1/3 de la información. NEAT resuelve este problema rastreando el historial de genes mediante el uso de un número de innovación global que aumenta a medida que se agregan nuevos genes. Al agregar 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 emparejar genes que pueden cruzarse entre sí. [ 1 ]
Implementación
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.
Extensiones
rtNEAT
En 2003, Stanley ideó una extensión de NEAT que permite que la evolución ocurra en tiempo real, en lugar de mediante la iteración de generaciones, como hacen la mayoría de los algoritmos genéticos. La idea básica consiste en someter a la población a una evaluación constante con un temporizador de "vida útil" para cada individuo. Cuando expira el temporizador de una red, se examina su medida de aptitud actual para determinar si se encuentra entre las más bajas de la población; de ser así, se descarta y se reemplaza por una nueva red creada a partir de dos progenitores con alta aptitud. Se establece un temporizador para la nueva red y se la incorpora a la población para que participe en las evaluaciones continuas.
La primera aplicación de rtNEAT es un videojuego llamado Neuro-Evolving Robotic Operatives, o NERO. En la primera fase del juego, los jugadores despliegan robots en un entorno controlado y los entrenan según una doctrina táctica específica. Una vez entrenados varios robots, una segunda fase permite a los jugadores enfrentarlos en una batalla contra robots entrenados por otros jugadores, para comprobar la eficacia de su entrenamiento.
Poda por fases
Una extensión del algoritmo NEAT de Ken Stanley, desarrollada por Colin Green, añade la poda periódica de las topologías de red de las soluciones candidatas durante el proceso de evolución. Esta adición respondió a la preocupación de que el crecimiento automatizado ilimitado generaría una estructura innecesaria.
HiperNEAT
HyperNEAT está especializado en el desarrollo de estructuras a gran escala. Se basa originalmente en la teoría CPPN y es un campo de investigación activo.
cgNEAT
El NEAT de generación de contenido (cgNEAT) desarrolla contenido personalizado para videojuegos basado en las preferencias del usuario. El primer videojuego en implementar cgNEAT es Galactic Arms Race , un juego de disparos espaciales en el que las armas únicas del sistema de partículas evolucionan según las estadísticas de uso del jugador. [ 3 ] Cada arma del sistema de partículas del juego está controlada por un CPPN evolucionado , de forma similar a la técnica de evolución del programa de arte interactivo NEAT Particles .
odNEAT
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 propios 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 forma, 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 según un modelo de islas distribuidas 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 inter-isla). De esta forma, 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.
Véase también
Referencias
- 1 2 Kenneth O. Stanley y Risto Miikkulainen (2002). "Evolución de redes neuronales mediante topologías aumentadas". Evolutionary Computation 10 (2): 99-127
- ↑ Matthew E. Taylor, Shimon Whiteson y Peter Stone (2006). "Comparación de métodos evolutivos y de diferencia temporal en un dominio de aprendizaje por refuerzo". GECCO 2006: Actas de la Conferencia de Computación Genética y Evolutiva.
- ↑ Erin J. Hastings, Ratan K. Guha y Kenneth O. Stanley (2009). "Generación automática de contenido en el videojuego Galactic Arms Race". IEEE Transactions on Computational Intelligence and AI in Games, volumen 4, número 1, páginas 245-263, Nueva York: IEEE Press, 2009.
- ↑ Silva, Fernando; Urbano, Paulo; Correia, Luís; Christensen, Anders Lyhne (2015-09-15). "odNEAT: Un algoritmo para la evolución en línea descentralizada de controladores robóticos". Evolutionary Computation . 23 (3): 421– 449. doi : 10.1162/evco_a_00141 . hdl : 10071/10504 . PMID 25478664 . S2CID 20815070 .
Bibliografía
- Kenneth O. Stanley y Risto Miikkulainen (2002). "Evolución de redes neuronales mediante topologías de aumento" ( PDF) . Computación evolutiva . 10 (2): 99– 127. CiteSeerX 10.1.1.638.3910 . doi : 10.1162/106365602320169811 . PMID 12180173. S2CID 498161 .
- Kenneth O. Stanley y Risto Miikkulainen (2002). "Aprendizaje por refuerzo eficiente mediante topologías de redes neuronales evolutivas" (PDF) . Actas de la Conferencia de Computación Genética y Evolutiva (GECCO-2002) .
- Kenneth O. Stanley; Bobby D. Bryant y Risto Miikkulainen (2003). "Redes neuronales adaptativas evolutivas con y sin sinapsis adaptativas" (PDF) . Actas del Congreso IEEE de Computación Evolutiva de 2003 (CEC-2003) .
- Colin Green (2004). Búsqueda por fases con NEAT: alternancia entre complejización y simplificación (Informe).
- Kenneth O. Stanley; Ryan Cornelius; Risto Miikkulainen; Thomas D'Silva y Aliza Gold (2005). "Aprendizaje en tiempo real en el videojuego NERO" (PDF) . Actas de la Conferencia sobre Inteligencia Artificial y Entretenimiento Digital Interactivo (AIIDE 2005) Documentos de demostración .
- Matthew E. Taylor; Shimon Whiteson y Peter Stone (2006). "Comparación de métodos evolutivos y de diferencia temporal en un dominio de aprendizaje por refuerzo" (PDF) . GECCO 2006: Actas de la Conferencia de Computación Genética y Evolutiva .
- Shimon Whiteson & Daniel Whiteson (2007). "Stochastic Optimization for Collision Selection in High Energy Physics"(PDF). IAAI 2007: Proceedings of the Nineteenth Annual Innovative Applications of Artificial Intelligence Conference. arXiv:hep-ex/0607012. Bibcode:2006hep.ex....7012W. Archived from the original(PDF) on 2015-10-28.
Implementations
- Stanley's original, mtNEAT on GitHub, and rtNEAT, for C++
- ECJ, JNEAT, NEAT 4J, ANJI, for Java
- SharpNEAT, for C#
- MultiNEAT (MultiNEAT at the Wayback Machine(archived 2021-05-15)) and mtNEAT on GitHub, for C++ and Python
- neat-python neat-python neat-python on GitHub, for Python
- NeuralFit (inexact implementation) and neat-python, for Python
- Encog, for Java and C#
- peas on GitHub, for Python
- RubyNEAT, for Ruby
- NEAT-JavaScript on GitHub, neatjs on GitHub, Neataptic on GitHub (inexact implementation), for JavaScript
- , for Elixir
- EvolutionNet on GitHub, for C++
- goNEAT on GitHub, for Go
External links
- The NEAT Users Page at the Wayback Machine(archived 2023-12-05)
- Evolutionary Complexity Research Group at UCF at the Wayback Machine(archived 2024-06-18) – Ken Stanley's former research group
- NERO: Neuro-Evolving Robotic Operatives – an example application of rtNEAT
- GAR: Galactic Arms Race – an example application of cgNEAT
- Picbreeder at the Wayback Machine(archived 2011-07-25) – Online, collaborative art generated by CPPNs evolved with NEAT
- EndlessForms at the Wayback Machine(archived 2018-11-14) – A 3D version of Picbreeder, where you interactively evolve 3D objects that are encoded with CPPNs and evolved with NEAT
- Blog de BEACON: Introducción a la evolución: Neuroevolución en la Wayback Machine (archivado el 24/12/2024)
- MarI/O - Aprendizaje automático para videojuegos , un vídeo de YouTube que muestra una implementación del aprendizaje NEAT para jugar a Super Mario World.
- Gekko Quant: Evolución de redes neuronales mediante topologías de aumento en Wayback Machine (archivado el 10/02/2022) – Una serie de tutoriales visuales sobre NEAT, que incluye la resolución del problema clásico de equilibrio de postes utilizando NEAT en R.
- La inteligencia artificial aprende el nivel de Mario en solo 34 intentos. NEAT explicado a través del programa MarI/O.
- Algoritmos evolutivos y redes neuronales artificiales
- Computación evolutiva
- Algoritmos genéticos