Neuroevolution av förstärkande topologier
NeuroEvolution of Augmenting Topologies ( NEAT ) är en genetisk algoritm (GA) för generering av utvecklande artificiella neurala nätverk (en neuroevolutionsteknik ) utvecklad av Kenneth Stanley och Risto Miikkulainen 2002 vid University of Texas i Austin . Det förändrar både viktningsparametrarna och strukturerna för nätverk, och försöker hitta en balans mellan lämpligheten hos utvecklade lösningar och deras mångfald. Det bygger på att tillämpa tre nyckeltekniker: spåra gener med historiemarkörer för att tillåta korsning mellan topologier, tillämpa artbildning (arternas utveckling) för att bevara innovationer och utveckla topologier stegvis från enkla initiala strukturer ("komplexifierande").
Prestanda
På enkla kontrolluppgifter kommer NEAT-algoritmen ofta fram till effektiva nätverk snabbare än andra samtida neuro-evolutionära tekniker och förstärkningsinlärningsmetoder .
Algoritm
Traditionellt väljs en neural nätverkstopologi av en mänsklig experimenter, och effektiva anslutningsviktsvärden lärs in genom en träningsprocedur. Detta ger en situation där en trial and error process kan vara nödvändig för att bestämma en lämplig topologi. NEAT är ett exempel på ett topologi- och viktutvecklande artificiellt neuralt nätverk (TWEANN) som försöker lära sig samtidigt viktvärden och en lämplig topologi för ett neuralt nätverk.
För att koda nätverket till en fenotyp för GA använder NEAT ett direktkodningsschema vilket innebär att varje anslutning och neuron är explicit representerad. Detta i motsats till indirekta kodningsscheman som definierar regler som gör att nätverket kan konstrueras utan att explicit representera varje anslutning och neuron vilket möjliggör en mer kompakt representation.
NEAT-metoden börjar med ett perceptronliknande feed-forward-nätverk av endast ingångsneuroner och utgångsneuroner. När evolutionen fortskrider genom diskreta steg, kan komplexiteten i nätverkets topologi växa, antingen genom att infoga en ny neuron i en anslutningsväg eller genom att skapa en ny koppling mellan (tidigare oanslutna) neuroner.
Tävlande konventioner
Problemet med konkurrerande konventioner uppstår när det finns mer än ett sätt att representera information i en fenotyp. Till exempel, om ett genom innehåller neuronerna A , B och C och representeras av [ABC], om detta genom korsas med ett identiskt genom (när det gäller funktionalitet) men ordnad [CBA] korsning kommer att ge barn som saknar information ( [ABA] eller [CBC]), i själva verket har 1/3 av informationen gått förlorad i detta exempel. NEAT löser detta problem genom att spåra geners historia genom att använda ett globalt innovationsnummer som ökar när nya gener läggs till. När en ny gen läggs till ökas det globala innovationsnumret och tilldelas den genen. Ju högre siffra, desto mer nyligen lades genen till. För en viss generation om en identisk mutation förekommer i mer än ett genom får de båda samma nummer, utöver det kommer mutationsnumret dock att förbli oförändrat på obestämd tid.
Dessa innovationssiffror tillåter NEAT att matcha gener som kan korsas med varandra.
Genomförande
Den ursprungliga implementeringen av Ken Stanley publiceras under GPL . Den integreras med Guile , en GNU- schematolkare . Denna implementering av NEAT anses vara den konventionella grundläggande utgångspunkten för implementeringar av NEAT-algoritmen.
Tillägg
rtNEAT
2003 utarbetade Stanley en förlängning av NEAT som gör att evolution kan ske i realtid snarare än genom iterationen av generationer som används av de flesta genetiska algoritmer. Grundtanken är att sätta befolkningen under ständig utvärdering med en "livstids" timer på varje individ i befolkningen. När ett nätverks timer löper ut undersöks dess nuvarande konditionsmått för att se om det hamnar nära botten av populationen, och i så fall kasseras det och ersätts av ett nytt nätverk som fötts upp från två vältränade föräldrar. En timer ställs in för det nya nätverket och den placeras i befolkningen för att delta i de pågående utvärderingarna.
Den första tillämpningen av rtNEAT är ett videospel som heter Neuro-Evolving Robotic Operatives, eller NERO. I den första fasen av spelet distribuerar enskilda spelare robotar i en "sandlåda" och tränar dem till någon önskad taktisk doktrin. När en samling robotar har tränats, tillåter en andra spelfas spelare att sätta sina robotar i en kamp mot robotar som tränats av någon annan spelare, för att se hur väl deras träningsprogram förberedde sina robotar för strid.
Fasvis beskärning
En förlängning av Ken Stanleys NEAT, utvecklad av Colin Green, lägger till periodisk beskärning av nätverkstopologierna för kandidatlösningar under utvecklingsprocessen. Detta tillägg tog upp oro för att obegränsad automatiserad tillväxt skulle generera onödig struktur.
HyperNEAT
HyperNEAT är specialiserat på att utveckla storskaliga strukturer. Det baserades ursprungligen på CPPN -teorin och är ett aktivt forskningsfält.
cgNEAT
Content-Generating NEAT (cgNEAT) utvecklar anpassat videospelsinnehåll baserat på användarens preferenser. Det första videospelet att implementera cgNEAT är Galactic Arms Race , ett rymdskjutningsspel där unika partikelsystemvapen utvecklas baserat på spelaranvändningsstatistik. Varje partikelsystemvapen i spelet styrs av en utvecklad CPPN , på samma sätt som evolutionstekniken i det interaktiva konstprogrammet NEAT Particles .
odpNEAT
odNEAT är en online och decentraliserad version av NEAT designad för multirobotsystem. odNEAT exekveras ombord på robotar själva under uppgiftsexekveringen för att kontinuerligt optimera parametrarna och topologin för de artificiella neurala nätverksbaserade kontrollerna. På så sätt har robotar som kör odNEAT potentialen att anpassa sig till förändrade förhållanden och lära sig nya beteenden när de utför sina uppgifter. Den online evolutionära processen implementeras enligt en fysiskt distribuerad ö-modell. Varje robot optimerar en intern population av kandidatlösningar (variation mellan öarna), och två eller flera robotar utbyter kandidatlösningar när de möts (migrering mellan öarna). På detta sätt är varje robot potentiellt självförsörjande och den evolutionära processen drar nytta av utbytet av styrenheter mellan flera robotar för snabbare syntes av effektiva styrenheter.
Se även
Bibliografi
- Kenneth O. Stanley & Risto Miikkulainen (2002). "Utveckla neurala nätverk genom att öka topologier" (PDF) . Evolutionär beräkning . 10 (2): 99–127. CiteSeerX 10.1.1.638.3910 . doi : 10.1162/106365602320169811 . PMID 12180173 . S2CID 498161 .
- Kenneth O. Stanley & Risto Miikkulainen (2002). "Effektiv förstärkningsinlärning genom utvecklande neurala nätverkstopologier" ( PDF) . Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2002) .
- Kenneth O. Stanley; Bobby D. Bryant & Risto Miikkulainen (2003). "Utveckla adaptiva neurala nätverk med och utan adaptiva synapser" ( PDF) . Proceedings från 2003 IEEE Congress on Evolutionary Computation (CEC-2003) .
-
Colin Green (2004). "Fased sökning med NEAT: Alternating Between Complexification And Simplification" .
{{ citera journal }}
: Citera journal kräver|journal=
( hjälp ) - Kenneth O. Stanley; Ryan Cornelius; Risto Miikkulainen; Thomas D'Silva & Aliza Gold (2005). "Lärande i realtid i NERO-videospelet" (PDF) . Proceedings of the Artificial Intelligence and Interactive Digital Entertainment Conference (AIIDE 2005) Demo Papers .
- Matthew E. Taylor; Shimon Whiteson & Peter Stone (2006). "Jämföra evolutionära och tidsmässiga skillnadsmetoder i en förstärkningsinlärningsdomän" ( PDF) . GECCO 2006: Proceedings of the Genetic and Evolutionary Computation Conference .
- Shimon Whiteson & Daniel Whiteson (2007). "Stokastisk optimering för kollisionsval i högenergifysik" ( PDF) . IAAI 2007: Proceedings of the nittonde årliga konferensen om innovativa tillämpningar av artificiell intelligens . arXiv : hep-ex/0607012 . Bibcode : 2006hep.ex....7012W . Arkiverad från originalet (PDF) 2015-10-28.
Genomföranden
- Stanleys original , mtNEAT och rtNEAT för C++
- ECJ , JNEAT , NEAT 4J , ANJI för Java
- SharpNEAT för C#
- MultiNEAT och mtNEAT för C++ och Python
- neat-python för Python
- NeuralFit (inte en exakt implementering) och neat-python för Python
- Encog för Java och C#
- ärter för Python
- RubyNEAT för Ruby
- neatjs för Javascript
- Neataptic för Javascript (inte en exakt implementering)
- Neat-Ex för Elixir
- EvolutionNet för C++
externa länkar
- NEAT hemsida
- "Evolutionary Complexity Research Group at UCF" - Ken Stanleys nuvarande forskargrupp
- NERO: Neuro-Evolving Robotic Operatives - ett exempel på tillämpning av rtNEAT
- GAR: Galactic Arms Race - ett exempel på tillämpning av cgNEAT
- "PicBreeder.org" - Online, kollaborativ konst genererad av CPPN:er utvecklades med NEAT.
- "EndlessForms.com" - En 3D-version av Picbreeder, där du interaktivt utvecklar 3D-objekt som är kodade med CPPN och utvecklade med NEAT.
- BEACON-blogg: Vad är neuroevolution?
- MarI/O - Machine Learning for Video Games , en YouTube- video som demonstrerar en implementering av NEAT lärande att spela Super Mario World
- "GekkoQuant.com" - En visuell handledningsserie om NEAT, inklusive att lösa det klassiska polbalanseringsproblemet med NEAT i R
- "Artificiell intelligens lär sig Mario-nivå på bara 34 försök NEAT förklarat via MarI/O-programmet