|
|
||
|---|---|---|
| .. | ||
| lab | ||
| CartPole-RL-PyTorch.ipynb | ||
| CartPole-RL-TF.ipynb | ||
| README.md | ||
| notebook.ipynb | ||
| tmp.ipynb | ||
README.md
Djup FörstÀrkningsinlÀrning
FörstÀrkningsinlÀrning (RL) ses som en av de grundlÀggande paradigmerna inom maskininlÀrning, vid sidan av övervakad inlÀrning och oövervakad inlÀrning. Medan vi i övervakad inlÀrning förlitar oss pÄ dataset med kÀnda resultat, bygger RL pÄ att lÀra genom att göra. Till exempel, nÀr vi först ser ett datorspel börjar vi spela, Àven utan att kÀnna till reglerna, och snart kan vi förbÀttra vÄra fÀrdigheter bara genom att spela och justera vÄrt beteende.
Quiz före förelÀsningen
För att utföra RL behöver vi:
- En miljö eller simulator som sÀtter reglerna för spelet. Vi bör kunna köra experiment i simulatorn och observera resultaten.
- NÄgon form av belöningsfunktion, som indikerar hur framgÄngsrikt vÄrt experiment var. NÀr det gÀller att lÀra sig spela ett datorspel skulle belöningen vara vÄr slutpoÀng.
Baserat pÄ belöningsfunktionen bör vi kunna justera vÄrt beteende och förbÀttra vÄra fÀrdigheter, sÄ att vi spelar bÀttre nÀsta gÄng. Den största skillnaden mellan andra typer av maskininlÀrning och RL Àr att vi i RL vanligtvis inte vet om vi vinner eller förlorar förrÀn vi har avslutat spelet. DÀrför kan vi inte sÀga om ett visst drag i sig Àr bra eller inte - vi fÄr bara en belöning i slutet av spelet.
Under RL utför vi vanligtvis mÄnga experiment. Under varje experiment behöver vi balansera mellan att följa den optimala strategi vi har lÀrt oss hittills (exploatering) och att utforska nya möjliga tillstÄnd (utforskning).
OpenAI Gym
Ett utmÀrkt verktyg för RL Àr OpenAI Gym - en simuleringsmiljö som kan simulera mÄnga olika miljöer, frÄn Atari-spel till fysiken bakom balans med en stÄng. Det Àr en av de mest populÀra simuleringsmiljöerna för att trÀna förstÀrkningsinlÀrningsalgoritmer och underhÄlls av OpenAI.
Note: Du kan se alla miljöer som finns tillgÀngliga frÄn OpenAI Gym hÀr.
Balans med CartPole
Ni har förmodligen alla sett moderna balansapparater som Segway eller Gyroscooters. De kan automatiskt balansera genom att justera sina hjul baserat pÄ signaler frÄn en accelerometer eller gyroskop. I detta avsnitt kommer vi att lÀra oss att lösa ett liknande problem - att balansera en stÄng. Det liknar en situation dÀr en cirkusartist behöver balansera en stÄng pÄ sin hand - men denna balans sker endast i 1D.
En förenklad version av balansproblemet Àr kÀnt som CartPole-problemet. I CartPole-vÀrlden har vi en horisontell slider som kan röra sig Ät vÀnster eller höger, och mÄlet Àr att balansera en vertikal stÄng ovanpÄ slidern medan den rör sig.
För att skapa och anvÀnda denna miljö behöver vi nÄgra rader Python-kod:
import gym
env = gym.make("CartPole-v1")
env.reset()
done = False
total_reward = 0
while not done:
env.render()
action = env.action_space.sample()
observaton, reward, done, info = env.step(action)
total_reward += reward
print(f"Total reward: {total_reward}")
Varje miljö kan nÄs pÄ exakt samma sÀtt:
env.resetstartar ett nytt experimentenv.steputför ett simuleringssteg. Det tar emot en action frÄn action space, och returnerar en observation (frÄn observation space), samt en belöning och en flagga för avslutning.
I exemplet ovan utför vi en slumpmÀssig handling vid varje steg, vilket gör att experimentets livslÀngd blir mycket kort:
MĂ„let med en RL-algoritm Ă€r att trĂ€na en modell - den sĂ„ kallade policyn Ï - som kommer att returnera handlingen som svar pĂ„ ett givet tillstĂ„nd. Vi kan ocksĂ„ betrakta policyn som probabilistisk, t.ex. för varje tillstĂ„nd s och handling a kommer den att returnera sannolikheten Ï(a|s) att vi bör ta a i tillstĂ„ndet s.
Policy Gradients-algoritm
Det mest uppenbara sÀttet att modellera en policy Àr att skapa ett neuralt nÀtverk som tar tillstÄnd som input och returnerar motsvarande handlingar (eller snarare sannolikheterna för alla handlingar). PÄ ett sÀtt skulle det likna en vanlig klassificeringsuppgift, med en stor skillnad - vi vet inte i förvÀg vilka handlingar vi bör ta vid varje steg.
Idén hÀr Àr att uppskatta dessa sannolikheter. Vi bygger en vektor av kumulativa belöningar som visar vÄr totala belöning vid varje steg av experimentet. Vi tillÀmpar ocksÄ belöningsdiskontering genom att multiplicera tidigare belöningar med en koefficient γ=0.99, för att minska betydelsen av tidigare belöningar. Sedan förstÀrker vi de steg lÀngs experimentvÀgen som ger större belöningar.
LĂ€s mer om Policy Gradients-algoritmen och se den i aktion i exempelfilen.
Actor-Critic-algoritm
En förbÀttrad version av Policy Gradients-metoden kallas Actor-Critic. Huvudidén bakom den Àr att det neurala nÀtverket ska trÀnas för att returnera tvÄ saker:
- Policyn, som avgör vilken handling som ska utföras. Denna del kallas actor.
- En uppskattning av den totala belöningen vi kan förvÀnta oss att fÄ i detta tillstÄnd - denna del kallas critic.
PÄ ett sÀtt liknar denna arkitektur en GAN, dÀr vi har tvÄ nÀtverk som trÀnas mot varandra. I Actor-Critic-modellen föreslÄr aktören den handling vi behöver utföra, och kritikern försöker vara kritisk och uppskatta resultatet. Men vÄrt mÄl Àr att trÀna dessa nÀtverk i samspel.
Eftersom vi kÀnner till bÄde de verkliga kumulativa belöningarna och resultaten som kritikern returnerar under experimentet, Àr det relativt enkelt att bygga en förlustfunktion som minimerar skillnaden mellan dem. Det skulle ge oss critic loss. Vi kan berÀkna actor loss genom att anvÀnda samma metod som i Policy Gradients-algoritmen.
Efter att ha kört en av dessa algoritmer kan vi förvÀnta oss att vÄr CartPole beter sig sÄ hÀr:
âïž Ăvningar: Policy Gradients och Actor-Critic RL
FortsÀtt ditt lÀrande i följande notebook-filer:
Andra RL-uppgifter
FörstÀrkningsinlÀrning Àr idag ett snabbt vÀxande forskningsomrÄde. NÄgra intressanta exempel pÄ förstÀrkningsinlÀrning Àr:
- Att lÀra en dator att spela Atari-spel. Den utmanande delen i detta problem Àr att vi inte har ett enkelt tillstÄnd representerat som en vektor, utan snarare en skÀrmdump - och vi behöver anvÀnda CNN för att konvertera denna skÀrmbild till en funktionsvektor eller för att extrahera belöningsinformation. Atari-spel finns tillgÀngliga i Gym.
- Att lÀra en dator att spela brÀdspel, sÄsom schack och Go. Nyligen har toppmoderna program som Alpha Zero trÀnats frÄn grunden av tvÄ agenter som spelar mot varandra och förbÀttras vid varje steg.
- Inom industrin anvÀnds RL för att skapa styrsystem frÄn simulering. En tjÀnst som Bonsai Àr specifikt utformad för detta.
Slutsats
Vi har nu lÀrt oss hur man trÀnar agenter att uppnÄ goda resultat bara genom att ge dem en belöningsfunktion som definierar det önskade tillstÄndet för spelet och genom att ge dem möjlighet att intelligent utforska sökrymden. Vi har framgÄngsrikt testat tvÄ algoritmer och uppnÄtt ett bra resultat pÄ relativt kort tid. Men detta Àr bara början pÄ din resa inom RL, och du bör definitivt övervÀga att ta en separat kurs om du vill fördjupa dig.
đ Utmaning
Utforska de applikationer som nÀmns i avsnittet 'Andra RL-uppgifter' och försök implementera en!
Quiz efter förelÀsningen
Granskning & SjÀlvstudier
LÀr dig mer om klassisk förstÀrkningsinlÀrning i vÄr MaskininlÀrning för nybörjare-kurs.
Titta pÄ denna fantastiska video som handlar om hur en dator kan lÀra sig spela Super Mario.
Uppgift: TrÀna en Mountain Car
Ditt mÄl under denna uppgift Àr att trÀna en annan Gym-miljö - Mountain Car.

