Hoe train je een AI: bekrachtiging
Wanneer we een hond een nieuwe truc aanleren, maken we gebruik van beloningen om het dier een taak aan te leren. Indien de hond gaat zitten wanneer we dat vragen, geven we het dier een koekje als beloning. Blijft de hond koppig op vier poten staan, dan berispen we hem. Door dit proces te herhalen, leert een hond uiteindelijk welke actie hij moet uitvoeren voor een bepaalde opdracht. Deze methode wordt bekrachtiging genoemd en wordt eveneens gebruikt om artificiële intelligenties een nieuwe taak aan te leren. We geven aan wat het einddoel is voor de software, maar laten de AI zelf een manier uitzoeken om tot dat einddoel te komen. Door de software op de juiste momenten te belonen, leert hij – net zoals een hond – hoe hij een taak succesvol moet volbrengen.
Waardefunctie
De belangrijkste parameter bij een AI-training met bekrachtiging is de waarde van de beloning die je de software geeft. Je kan bijvoorbeeld racesoftware aanleren dat hij op de baan moet blijven en richting het eindpunt moet rijden, door het eindpunt een beloning van waarde tien te geven en de punten naast de baan een negatieve beloning van -2.
Om van het startpunt naar het eindpunt te geraken, moet de AI doorheen een hoop punten rijden die geen beloningswaarde hebben. Alle routes die via de weg leiden naar het eindpunt krijgen hierdoor dezelfde waarde. Met behulp van een waardefunctie kan je ervoor zorgen dat de racesoftware wel de optimaalste route vindt. De functie geeft tussenliggende statussen kleinere beloningen, die het eenvoudiger maken voor de AI om te bepalen naar welke status hij moet gaan vanuit de huidige status. De waarde van iedere status wordt beïnvloed door de statuswaardes die via deze status eenvoudig bereikt kunnen worden.
De waardefunctie wordt gevormd door alle statussen en hun mogelijke volgende statussen te onderzoeken. Indien de software een beloning krijgt bij een volgende status, zal de beloning van de huidige status worden verhoogd. Dat proces wordt herhaald tot de beloningen gelijk blijven. De software heeft dan alle mogelijkheden onderzocht.
Kortingsfactor
De kortingsfactor is een belangrijke parameter die invloed heeft op de waardefunctie en bepaalt hoeveel een AI wordt beïnvloed door beloningen die hij in de toekomst kan krijgen. De kortingsfactor wordt vermenigvuldigd met de tussenliggende beloningen, waarbij rekening wordt gehouden met de tijd dat het nog zal duren alvorens de software deze status bereikt. Wanneer de kortingsfactor bijvoorbeeld 0,5 is, dan zal de beloning van een status die over drie statusveranderingen bereikt wordt nog een achtste zijn. Hierdoor zorgt de parameter ervoor dat de artificiële intelligentie achter beloningen aangaat die dichtbij liggen, in plaats van veraf.
De waarde van de kortingsfactor bepaalt hoe voorzichtig of gulzig een AI is. Stel dat de kortingsfactor erg hoog is, dan heb je te maken met een gulzige AI. De software zal zich volledig richten op het einddoel en weinig rekening houden met de tussenliggende beloningen. Is de kortingsfactor daarentegen laag, dan krijg je een voorzichtig algoritme dat veel rekening houdt met de tussenliggende beloningen. Een gulzige schaakcomputer zal bijvoorbeeld heel veel stukken opofferen om de eindoverwinning binnen te halen, terwijl een voorzichtige AI zijn schaakstukken beschermt. In de praktijk wordt meestal een kortingsfactor gekozen die het einddoel belangrijk maakt.
Beleidsfunctie
Wanneer een AI aan de hand van de waardefunctie op zoek gaat naar het pad met de grootste beloningen, vindt hij vaak geen duidelijke winnaar. Daarom moet de software nagaan welke statusverandering op lange termijn het beste is. Er moet een balans gevonden worden tussen het volgen van hoge beloningswaardes en proberen van routes met lagere beloningswaardes die op lange termijn grotere voordelen kunnen opleveren. De functie zal de waarschijnlijkheid berekenen dat een sequentie van acties, oftewel een beleid, voor de hoogste beloning zorgt.
De beleidsfunctie wordt willekeurig geïnitialiseerd, door bijvoorbeeld de waarschijnlijkheden voor verschillende statussen te berekenen. De waarschijnlijkheden van acties voor een bepaalde status die de beloning verhogen, worden verhoogd. Hierna wordt het proces herhaald tot alle waardes gelijk blijven.
Q-functie
De waarde- en beleidsfunctie zijn afhankelijk van elkaar. Voor een bepaalde waardefunctie kunnen verschillende beleiden tot andere keuzes leiden. Een beleid kan er dan weer voor zorgen dat de beloningswaardes anders zijn. Aangezien beide functies afhankelijk zijn van elkaar, kan je deze vervangen door één functie: de Q-functie. Deze functie houdt rekening met zowel de huidige status – afhankelijk van de waardefunctie – als de volgende status – afhankelijk van de beleidsfunctie – om de beloningen van een status-actiepaar te berekenen. Je kan de functie bijgevolg gebruiken om de beloningen voor mogelijke acties te berekenen voor bepaalde inputstatussen.
Het hoofddoel van de Q-functie is echter niet om alle beloningswaardes uit te rekenen, maar om een functie te creëren bij toepassingen die zoveel statussen hebben dat het onmogelijk is om een waardefunctie te maken voor hen allemaal. De Q-functie kijkt naar alle mogelijke statussen die één stap verwijderd zijn van de huidige status en vormt hiervoor status-actieparen. Een waardefunctie berekent de beloningen voor alle statussen tot aan het einde van het programma, terwijl de Q-functie zich beperkt tot de volgende stap. Op deze manier blijft bijvoorbeeld een autonome wagen de bomen door het bos zien.
Trainen
Om een Q-functie te trainen, initialiseer je alle Q-waardes naar nul en geef je statussen de juiste beloning. Aangezien een AI slechts de Q-waardes van de volgende statussen kan zien, weet hij niet hoe hij bij de beloningen moet komen. Hierdoor kan de functie door een hoop iteraties gaan zonder een beloning te krijgen. Daarom wordt het aantal iteraties tijdens een training beperkt. Het kan immers zijn dat de AI vast zit voor een bepaalde startstatus, terwijl een andere status bijna onmiddellijk voor resultaten zorgt.
Stel dat we een raster hebben, waarin S voor de startpositie, G voor het einddoel, T voor een val en zwarte blokjes voor een ondoordringbare plaats staan. Initieel vindt de AI het einddoel niet, waardoor hij geen beloningen kan opstrijken. Aangezien de vallen dichter bij de startpositie staan, komt hij deze als eerste tegen, waardoor negatieve beloningen worden gegenereerd. Eenmaal G is gevonden, gaat het trainen van de Q-functie erg snel. De status naast een status met een beloning krijgt immers een gedeeltelijke beloning, waardoor het steeds eenvoudiger wordt om een status met een beloning te bereiken. Het trainen van de Q-functie gaat door tot een reeks van statussen met beloningen de startpositie en eindpositie met elkaar verbinden.