• No results found

4. Genomförande

4.3 Implementation av neuralt nätverk

Det neurala nätverket implementerades i form av ett LSTM nätverk eftersom LSTM har en struktur som gör att nätverket minns data från tidigare tidssteg. Genom detta kan LSTM simulera ett korttidsminne, vilket är användbart i artefakten då agenten behöver minnas tidigare val och basera kommande val på dem. LSTM nätverket var först tänkt att bli

utvecklat i samband med artefakten och på det viset bli specialkonstruerad efter artefaktens behov. Om problem uppstod med nätverket var tanken att det kunde åtgärdas till skillnad från ett generisk importerat bibliotek. Under utveckling av LSTM nätverket framgick det snabbt att

det inte fanns tillräckligt med tid för att utveckla nätverket från grunden. Därför gjordes valet att övergå till att använda ett externt bibliotek för implementation och träning av LSTM nätverket. Biblioteket som valdes var ML-Agents som är utvecklat av Unity Technologies för att användas i Unity spelmotorn (ML-Agents 2017).

4.3.1 Design av LSTM

På grund av att LSTM nätverket inte skapats och utvecklats i samband med artefakten som först tänkt, blir designen av nätverket limiterad till vilken inmatningsdata som skickas till nätverket och hur utmatningsdatan från nätverket används. I första iteration av nätverket valdes ett rutnät som inmatningsdata till nätverket för att försöka simulera en form av syn på samma sätt som människor skulle uppfatta skärmen när de spelar. Objekt i spelet tilldelades ett konstant värde för att nätverket skulle veta vad som befann sig i en given kvadrat. Om flera objekt befann sig i samma kvadrat användes medelvärdet av alla objektens värden för att visa nätverket att det finns flera objekt i kvadraten. För att göra värdet anpassat till

nätverkets datahantering normaliserades alla kvadraternas värde med hjälp av högsta värdet som tilldelades ett objekt. På det viset begränsades alltid kvadraternas värde till ett nummer mellan noll och ett. Utöver rutnätet fick nätverket extra inmatningsdata från agentens

nuvarande vapen, ammunition, hälsa och orientering. Värdena normaliseras mellan noll och ett.

Utmatningsdatan från nätverket representeras av flera värden mellan -1 och 1. För att efterlikna hur en människa spelar spelet får agenten tillgång till samma kontroller. Varje värde representerar om agenten ska utföra en handling på samma sätt som om en mänsklig spelare skulle trycka ned en knapp för att utföra en handling. Om ett värde är större än en bestämd gräns betyder det att agenten ska utföra den handlingen i det tidssteget. Tre specifika värden bestämmer hur agenten ska röra sig horisontellt, vertikalt, samt vilken rotationsriktning agenten ska ha.

Resultatet av rutnätsmetoden visade sig prestera dåligt. Det ansågs att en design med mindre antal inmatningsnoder skulle användas för att ge nätverket mer relevant data då många utav kvadraterna i rutnätet aldrig hade några värden vilket gjorde det svårt för nätverket att träna och känna igen mönster. Eftersom rutnätsmetoden gav dåligt resultat testades istället visuell observation som ML-Agents har tillgång till. Visuell observation läser av skärmen och använder detta som inmatningsdata, men även denna metod visade sig ha svårt att lära sig spela. Unity påpekar själva att visuell data är svår att träna och att vissa problem helt enkelt inte kan läras med denna metod (Unity Technologies 2020). Designen som valdes som ersättning till rutnätsmetoden bestod av färre inmatningsnoder som tilldelades specifika roller. Vissa noder kolla efter fiender och andra kolla efter tillgängliga resurser. Nätverket får information om den närmsta fienden till agenten, avståndet till denna fiende är samt vinkeln mellan agentens sikte och fiendens position. Detta ska hjälpa agenten att justera sitt sikte och position till lämpliga värden. I en kort radie runt agenten detekteras också alla fiender och hinder. Medelvärdet av alla dessa hinder och fienders position

beräknas och ges till agenten för att hjälpa den undvika dem. Nätverket kan hålla information om en av varje typ av resurs på spelplanen, det enda objektet på spelplanen som exkluderas är pistolen då den inte räknas som en resurs som agenten ska plocka upp. Agenten vet avståndet till en resurs och vinkeln mellan dess position och agentens position, med

agentens position som origo. Detta ska hjälpa agenten till att hitta och plocka upp resurser som hälsa och ammunition. Agenten får också tillgång till liknande information om mitten av spelplanen, vilket tillåter agenten att veta vart den är relaterat till dess miljö. Till sist har nätverket information om agentens egna tillstånd, det vill säga hur mycket liv, ammunition och vilket vapen den har. Alla värden normaliseras mellan noll och ett förutom vinklarna som istället normaliseras mellan -1 och 1.

Eftersom nätverket kollar efter specifika fiender och resurser blir det begränsat av hur många fiender och resurser den kan kolla efter på samma gång. Nätverket kollar endast efter

fienden som är närmast agenten. På samma sätt begränsas nätverket till att bara kolla efter en resurs av varje typ. Resultatet av ändringarna blev en halvering i antal inmatningsnoder.

4.3.2 Träning av LSTM

Eftersom målet är att skapa ett nätverk som spelar likt en människa är det rimligt att försöka träna nätverket med imiteringsinlärning. Detta var det första som provades, och nätverket tränades med båda GAIL och BC utefter en inspelad demonstration. Resultatet av träningen visade sig dock vara instabil. Oavsett i vilken kapacitet som imiteringsinlärning ingick i träningen resulterade det i samma beteende, agenten förflyttade sig till ett hörn, roterade i cirklar och sköt. Det är uppenbart att beteendet inte är mänskligt och dessutom kan den inte ens spela spelet. Imiteringsinlärning provades också med enbart GAIL, enbart BC, små styrkor på båda i kombination med reinforcement learning och många andra inställningar. Varje inställning resulterade alltid i det tidigare beteendet. Troligen kan imiteringsinlärning vara mer stabilt och leda till bättre resultat med längre demonstrationer. Den längsta

demonstrationen för denna studie var på 60 minuter. Längre demonstrationer leder till längre träning och på grund av tidsbrist och låg datorprestanda i from av processorkraft provades inte större demonstrationer än det. I kontrast till OpenAI Five som tränade i 10 månader och använde tusentals graphics processing units (GPU) (Berner et al. 2019) är antagandet rimligt då endast en processor med fyra kärnor och trådar användes under träningsperioder på 24 - 48 timmar.

Att enbart träna nätverket med förstärkningsträning resulterade i en agent som kan spela spelet. Eftersom träningen med enbart förstärkningsträning inte har någon grund i hur en människa spelar uppmuntrades agenten till att försöka härma vissa mänskliga beteenden som iakttagits under testningen av spelet genom att ge den små belöningar när den beter sig på liknande sätt.

4.3.3 Belöning för agenten

För att träna med förstärkningsträning behöver nätverket få belöningar för att uppmuntra vissa beteenden. För att få agenten att bete sig mänskligt gavs belöningar i situationer där agenten spelar korrekt. Nätverket belönas när den siktar mot fiender och när den skjuter eller besegrar fiender men straffas när den siktar bort från dem. Nätverket belönas ytterligare när den inte har fiender eller hinder nära sig och den belönas för att förflytta sig bort från fiender som befinner sig nära den. Agenten belönas även när den plockar upp resurser den behöver. Ingen belöning ges om resursen inte behövs, exempelvis om liv plockas upp när agenten har fullt liv.

4.3.4 Konfigurationsfil värden

En stor del av att använda och träna agenter med ML-Agents är att justera

konfigurationsfilen. Värdena i konfigurationsfilen bestämmer alla egenskaper hos det neurala nätverk som används och för att lyckas träna en agent som utför det som eftersträvas krävs också rätt inställningar i denna fil. Under träningen användes många olika värden och

inställningar för att slutligen hitta de värden som passade bäst och gav bra resultat. Värdena som används för den slutliga träningen av agenten visas i figur 15.

Figur 15 -​ ​Värden som användes i konfigurationsfilen för att träna agenten som användes i

den slutliga versionen av artefakten.

Det finns många olika värden i konfigurationsfilen, men det viktigaste värdena som justerades mest är ​normalize​, ​max_steps​, ​num_layers​, ​hidden_units​, ​use_recurrent​,

learning_rate​, ​learning_rate_schedule​ och ​extrinsic​. ​Normalize​ bestämmer om

inmatningsvärden ska normaliseras eller inte, och anledningen till att den är “false” är för att vissa värden kan vara utanför omfånget av noll och ett. ​Max_steps​ bestämmer hur många träningssteg agenten kommer utföra. ​Num_layers​ indikerar hur många gömda lager nätverket kommer använda. Unity (2019) föreslår att en mindre än vanlig mängd lager används för LSTM nätverk, vilket är varför det bara finns ett. ​Hidden_units​ är värdet som beskriver hur många gömda noder de gömda lagret kommer använda. ​Use_recurrent bestämmer om nätverket ska vara ​recurrent​ eller inte. ​Learning_rate​ bestämmer det

maximala värdet en vikt i en nod kan ändras i ett tidssteg. ​Learning_rate_schedule​ används för att bestämma hur ​learning_rate​ förändras under träningens gång, när agenten tränat längre kommer ​learning_rate​ också minska för att agenten inte ska göra drastiska ändringar då den redan ska ha lärt sig mycket när den tränat länge. ​Extrinsic​ är den form av träning som används när agenten tränar, det finns andra alternativ att lägga till här som t.ex. beteendekloning och GAIL.

5. Pilotstudie

För att bevisa att en större studie med relevant resultat går att utföra gjordes först en pilotstudie med tre deltagare. Till pilotstudien gjordes två stycken körbara versioner där vardera version hade motsatt ordning som deltagarna spelade med agenterna. Anledningen till det var för att se om deltagarna upplevde agenterna annorlunda beroende på vilken de spelade med först. Mellan varje runda fick deltagarna svara på frågor som beskrivna i sektion 3.1.3 och blev sedan intervjuade och fick svara på frågor som jämförde de olika agenterna mot varandra. Deltagarna fick även bedöma vilken variant de ansåg vara den mänskliga spelaren för att sedan få reda på att båda varianterna var agenter.

Related documents