Reinforcement Learning:
Balanserande EV3 Lego Robot genom Q-learning.
Introduktion
Maskininlärning blir mer och mer populärt och användningsområden utvecklas på många fronter inom olika industrier. Reinforcement learning är en av tre huvudsakliga grenar av maskininlärning. Denna infallsvinkel till maskininlärning är baserad i tanken att en agent utforskar och utnyttjar sin omgivning utan en helt konkret statistisk modell att förhålla sig till.
På så sätt skiljer denna förgrening sig från supervised learning och unsupervised learning.
Denna rapport detaljerar en studie- och implementationsprocess av en specifik algoritm inom reinforcement learning som kallas för Q-Learning.
Syfte & Frågeställning
Genom att ha format ett projekt efter en algoritm har detta arbete givit upphov till djupare förståelse av inte bara algoritmen i fråga, men också dess konstituenter och variationer. Det huvudsakliga målet med projektet var att djupdyka på ett ämne och på så vis lära sig om dess användningsområden samt hur man kan gå tillväga för att utforma lösningar på
programmeringsproblem som har intelligenta agenter i fokus. Rapporten är en redovisning av inlärningsprocessen och dess efterföljande implementation av Q-Learning. Genom att
använda en form av Q-learning och ett Lego Mindstorm EV3 kit att bygga en robot som kan balansera som en enhjuling.
Metod
Projektet skulle använda programmeringsspråket Python för att lära en Lego Mindstorm EV3 robot att balansera. De teoretiska kunskaper som applicerades i den praktiska delen av
projektet är baserad huvudsakligen på läsning av Artifical Intelligence: A Modern Approach (Russel & Norvig, 2014) men också på undersökning av andra implementationer och
informationssökning via internet. För att kunna applicera en Q-Learning algoritm på roboten krävdes förståelse av de olika drivande delarna av algoritmen. Underrubrikerna i denna rapport förklarar dessa aspekter och hur de spelade in i robotens inlärning samt arbetets process.
Reinforcement Learning
Denna form av inlärning av agenter kan i teorin liknas till psykologins klassiska
konditionering. Genom att ge belöning för handlingar som leder till önskat tillstånd och bestraffning (mindre belöning i fallet av maskininlärning) för handlingar som tar agenten längre från önskat tillstånd kan agenten lära sig genom repetition. I praktiken kan vi alltså då förstärka beteende genom belöning och lära agenter att göra val som ger de maximala värdena för framtida tillstånd. Agenten kan maximera värdet av sina handlingar genom att lägga ihop värdena som estimeras att tilldelas från framtida tillstånd med de värden av belöning från sitt nuvarande tillstånd. Genom detta kan agentens val av handling i ett nuvarande tillstånd formas av belöningar från potentiella framtida tillstånd. (Russel & Norvig, 2014)
Q-Learning
Q-learning är en algoritm som alltid kommer att hitta en policy som är optimal, givet att den har oändligt med tid på sig. Eftersom den inte behöver en modell av omgivningen så verkade den vara en passande algoritm för just detta projekt.
Vid formulering av projektet behövde jag hålla i åtanke några huvudsakliga egenskaper av denna typ av maskininlärning. För att roboten skulle ha en chans att lära sig behövdes någon form av exploration. Roboten skulle behöva ta slumpmässiga handlingar för att kunna hitta fler nya och bättre tillstånd.
Algoritmen baseras på vad som kallas för ”state-action pairs” [Q(a,s)] som används i en
”action-utility function” för att avgöra det maximala värdet från att utföra en handling i ett tillstånd (Russel & Norvig, 2014). Själva inlärningen sker genom en tabell som kartlägger tillstånd och de belöningar som de möjliga handlingarna från dessa tillstånd ger. En så kallad Q-Table. Varje gång en handling i ett tillstånd genomförs uppdateras tabellen med ett nytt värde
Kod & Implementation
Indata från robotens sensorer är avståndet mellan sensorn och underlaget. Eftersom jag vill att roboten skall lära sig balansera är det viktigt att avgöra gränsavstånden för lutning. Sensorn behöver kalibreras till underlaget eftersom det går efter ljus. Klassen Balancer innehåller all kod för programmet som körs på EV3 roboten. Klassen tar argument för gränsavstånden åt båda hållen som roboten kan luta sig, “fail_distance_max” och “fail_distance_min” samt antalet states i q-tabellen. Suffixen min och max används för att lutningen kan representeras som fram och bak på en axel. Varje tillstånd har två potentiella handlingar, åk fram eller åk bak. Ett startavstånd definieras för att kunna avgöra differens mellan optimalt tillstånd och nuvarande tillstånd.
Observationer av miljön, alltså avståndet som sensorn mäter representeras som ett tillstånd.
Avståndet vid starttillståndet subtraheras mot nuvarande avståndet. Differensen blir avståndet som jämförs mot gränsvärdena. Då kartläggs varje tillstånd som den siffra från divisionen av differensen mellan nuvarande tillståndet och det “negativa” gränsvärdet med differensen av det “positiva” gränsvärdet och negativa gränsvärdet.
För att hitta den handling som är bäst för tillståndet som roboten befinner sig i behöver vi kolla igenom q-tabellen för att hitta det högsta värdet för det tillståndet.
Algoritmen kördes i episoder. Slutet av varje episod betecknades med en lågfrekvent ton.
Alltså när roboten lutar sig för långt från ett upprätt tillstånd. Varje episod hade en loop som uppdaterar q-tabellen och dess reward. Tabellen uppdaterades med tillstånd baserade på nya mått av nuvarande avståndet från upprätt position. Detsamma gäller handlingarna som var tillgängliga för detta tillstånd. Värdet för ett par av tillstånd och handling uppdateras med funktionen för “value iteration update”.
Det är i denna loop som motorn kör. Motorn kör och hjulen rörde sig framåt eller bakåt i korrelation med vilken handling som var bäst att ta. I korrelation med belöningen så pep roboten för att signalera om den tog handling som förde den närmare eller längre ifrån ett upprätt tillstånd.
Resultat & Diskussion
Roboten hann tyvärr inte lära sig att balansera. Eftersom inlärningen skedde per körning av programmet och inte genom en stor mängd simulationer på datorn så tog inlärningen betydligt längre än förväntat. Hårdvarans begränsningar kan också ha spelat in i tidskravet. Jag provade
olika specifikationer på mängden slumpmässiga handlingar och inlärningsfaktorn i försök att minska tiden för inlärning.
Metoddiskussion
Mycket tid gick åt att försöka förstå implementationen av algoritmen. Istället kunde mer tid ha lagts undan för overhead. Det var inte självklart att det skulle uppkomma så pass många problem som det gjorde med EV3 Lego kittet, men en planering av eventuella risker hade varit till fördel under projektets gång. Träningen av roboten skulle ha haft mer tid undansatt till sig.