Zephyrnet-logo

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Datum:

By Pau Labarta Bajo, Wiskundige en datawetenschapper

Praktijkgerichte leercursus voor versterking, deel 3: SARSA


 

Welkom bij mijn versterkende leercursus ❤️

Dit is deel 3 van mijn praktijkgerichte cursus over versterkend leren, die je van nul naar HELD brengt 🦸‍♂️. Vandaag zullen we leren over SARSA, een krachtig RL-algoritme.

We staan ​​nog aan het begin van de reis en lossen relatief eenvoudige problemen op.

In deel 2 We hebben discrete Q-learning geïmplementeerd om een ​​agent op te leiden in de Taxi-v3 milieu.

Vandaag gaan we een stap verder om het probleem op te lossen MountainCar omgeving 🚃 met behulp van het SARSA-algoritme.

Laten we deze arme auto helpen de strijd tegen de zwaartekracht te winnen!

Alle code voor deze les is binnen deze Github-repo. Git kloon het om het probleem van vandaag te volgen.

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

1. Het Mountaincar-probleem 🚃

 
 
Het Mountain Car-probleem is een omgeving waarin zwaartekracht bestaat (wat een verrassing) en het doel is om een ​​arme auto te helpen de strijd ertegen te winnen.

De auto moet ontsnappen uit de vallei waar hij vast kwam te zitten. De motor van de auto is niet krachtig genoeg om in één keer de berg op te klimmen, dus de enige manier om dat te doen is door heen en weer te rijden en voldoende momentum op te bouwen.

Laten we het in actie zien:



Sarsa-agent in actie!

 

De video die je zojuist hebt gezien, komt overeen met de SarsaAgent wij gaan vandaag bouwen.

Leuk, nietwaar?

Je vraagt ​​je misschien af.

Dit ziet er cool uit, maar waarom heb je überhaupt voor dit probleem gekozen?

Waarom dit probleem?

De filosofie van deze cursus is om geleidelijk complexiteit toe te voegen. Stap voor stap.

De huidige omgeving vertegenwoordigt een kleine maar relevante toename in complexiteit vergeleken met de huidige situatieTaxi-v3 omgeving uit deel 2.

Maar wat is hier precies moeilijker?

Zoals we zagen deel 2, houdt de moeilijkheid van een versterkend leerprobleem rechtstreeks verband met de omvang van

  • de actieruimte: Uit hoeveel acties kan de agent bij elke stap kiezen?
  • de toestandsruimte: In hoeveel verschillende omgevingsconfiguraties kan de agent zich bevinden?

Voor kleine omgevingen met een eindig (en klein) aantal acties en toestanden hebben we sterke garanties dat algoritmen zoals Q-learning goed zullen werken. Deze worden genoemd tabellarische of discrete omgevingen.

Q-functies zijn in wezen matrices met evenveel rijen als toestanden en kolommen als acties. In deze Klein werelden kunnen onze agenten gemakkelijk de staten verkennen en effectief beleid ontwikkelen. Naarmate de toestandsruimte en (vooral) de actieruimte groter worden, wordt het RL-probleem moeilijker op te lossen.

De huidige omgeving is dat wel NIET tabelvormig. We zullen echter een discretisatietruc gebruiken om het in een tabelvorm om te zetten en het vervolgens op te lossen.

Laten we eerst vertrouwd raken met de omgeving!

2. Omgeving, acties, toestanden, beloningen

 
 
👉🏽notebooks/00_environment.ipynb

Laten we de omgeving laden:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

En plot één frame:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Twee cijfers bepalen de staat van de auto:

  • Zijn positie, die varieert van -1.2 naar 0.6
  • De snelheid, die varieert van -0.07 naar 0.07.

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

De status wordt gegeven door 2 doorlopende getallen. Dit is een opmerkelijk verschil met de Taxi-v3 omgeving van deel 2. Hoe we dit moeten aanpakken, zullen we later zien.

Wat zijn de acties?

Er zijn 3 mogelijke acties:

  • 0 Versnel naar links
  • 1 Doe niets
  • 2 Versnel naar rechts

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

En de beloningen?

  • Er wordt een beloning van -1 toegekend als de positie van de auto kleiner is dan 0.5.
  • De aflevering eindigt zodra de positie van de auto hoger is dan 0.5, of het maximale aantal stappen is bereikt: n_steps >= env._max_episode_steps

Een standaard negatieve beloning van -1 moedigt de auto aan om zo snel mogelijk uit de vallei te ontsnappen.

Over het algemeen raad ik u aan dit te controleren Open AI Gym-omgevingen' implementaties rechtstreeks in Github om statussen, acties en beloningen te begrijpen.

De code is goed gedocumenteerd en kan u helpen snel alles te begrijpen wat u nodig heeft om aan uw RL-agents te gaan werken. MountainCar De uitvoering ervan is hierBijvoorbeeld.

Goed. We maakten kennis met de omgeving.

Laten we een basislijnagent voor dit probleem bouwen!

3. Willekeurige basislijn agent 🤖🍷

 
 
👉🏽notebooks/01_random_agent_baseline.ipynb

Problemen met versterkend leren kunnen vrij gemakkelijk in complexiteit toenemen. Goed gestructureerde code is uw beste bondgenoot om de complexiteit onder controle te houden.

Vandaag gaan we onze Python-vaardigheden verbeteren en een BaseAgent klasse voor al onze agenten. Van deze BaseAgent klasse, zullen we onze afleiden RandomAgent en SarsaAgent klassen.

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

BaseAgent is een abstracte klasse wij definiëren in src/base_agent.py

Het heeft 4 methoden.

Twee van de methoden zijn abstract, wat betekent dat we gedwongen zijn ze te implementeren toen we onze methode afleidden RandomAgent en SarsaAgent van het BaseAgent:

  • get_action(self, state) → retourneert de uit te voeren actie, afhankelijk van de status.
  • update_parameters(self, state, action, reward, next_state) → past agentparameters aan op basis van ervaring. Hier zullen we de SARSA-formule implementeren.

Met de andere twee methoden kunnen we de getrainde agent van/naar de schijf opslaan/laden.

  • save_to_disk(self, path)
  • load_from_disk(cls, path)

Naarmate we complexere modellen gaan implementeren en de trainingstijden toenemen, wordt het een goed idee om tijdens de training controlepunten te besparen.

Hier is de volledige code voor onze BaseAgent klasse:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Van dit BaseAgent klasse, kunnen we de definiëren RandomAgent als volgt:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Laten we dit evalueren RandomAgent over n_episodes = 100 om te zien hoe goed het gaat:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

En het slagingspercentage van onze RandomAgentis ...

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

0%?…

We kunnen zien hoe ver de agent in elke aflevering is gekomen met het volgende histogram:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

In deze 100 loopt onze RandomAgentniet overgestoken 0.5 markering. Geen enkele keer.

Wanneer u deze code op uw lokale computer uitvoert, krijgt u iets andere resultaten, maar het percentage voltooide afleveringen boven de 0.5 zal in ieder geval verre van 100% zijn.

Je kunt onze ellendige zien RandomAgent in actie met behulp van de nice show_video functie in src/viz.py



Een willekeurige agent is niet genoeg om deze omgeving op te lossen.

Laten we iets slimmers proberen?…

4. SARSA-agent 🚃🧠

 
 
👉🏽 notitieboekjes/02_sarsa_agent.ipynb

SARSA (door Rummery en Niranjan) is een algoritme om agenten voor het leren van versterking te trainen door de optimale q-waardefunctie te leren.

Het werd gepubliceerd in 1994, twee jaar later Q-leren (door Chris Walkins en Peter Dayan).

SARSA staat voor STate Actie Rafdeling STate Actie.

Zowel SARSA als Q-learning maken gebruik van de Bellman-vergelijking om iteratief betere benaderingen te vinden voor de optimale q-waardefunctie Vraag*(s, a)

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Als u zich nog herinnert uit deel 2, is dit de updateformule voor Q-learning

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Deze formule is een manier om een ​​nieuwe schatting van de q-waarde te berekenen die dichterbij ligt

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Deze hoeveelheid is een doel 🎯wij willen onze oude inschatting corrigeren naar. Het is een schatting van de optimale q-waarde waarnaar we moeten streven, die verandert naarmate we de agent trainen en onze q-waardematrix wordt bijgewerkt.

Problemen met het versterken van het leerproces lijken vaak op ML-problemen onder toezicht bewegend doelen 🏃 🎯

SARSA heeft een vergelijkbare updateformule, maar met een andere doel

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Het doelwit van SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

hangt ook af van de actie een' de agent zal de volgende staat aannemen s '. Dit is de finale A bij SARSEEN's naam.

Als u de toestandsruimte voldoende verkent en uw q-matrices bijwerkt met SARSA, komt u tot een optimaal beleid. Geweldig!

Je denkt misschien…

Q-learning en SARSA lijken mij vrijwel identiek. Wat zijn de verschillen? 🤔

Algoritmen die binnen het beleid vallen en buiten het beleid vallen

Er is één belangrijk verschil tussen SARSA en Q-learning:

👉 De update van SARSA is afhankelijk van de volgende actie naar', en dus op het huidige beleid. Naarmate u traint en de q-waarde (en het bijbehorende beleid) wordt bijgewerkt, kan het nieuwe beleid een andere volgende actie opleveren A'' voor dezelfde staat s '.

Ervaringen uit het verleden kun je niet gebruiken (s, een, r, s', een') om uw schattingen te verbeteren. In plaats daarvan gebruik je elke ervaring één keer om de q-waarden bij te werken en deze vervolgens weg te gooien.

Daarom wordt SARSA een on-beleid methode

👉 Bij Q-learning is de updateformule niet afhankelijk van de volgende actie naar', maar alleen op (s, a, r, s '). Ervaringen uit het verleden kun je hergebruiken (s, a, r, s '), verzameld met een oude versie van het beleid, om de q-waarden van het huidige beleid te verbeteren. Q-learning is een buiten het beleid methode.

Methoden buiten het beleid vereisen minder ervaring om te leren dan methoden binnen het beleid, omdat u ervaringen uit het verleden meerdere keren kunt hergebruiken om uw schattingen te verbeteren. Ze zijn meer monster efficiënt.

Methoden buiten het beleid hebben echter problemen bij het convergeren naar de optimale q-waardefunctie Q*(s, a) wanneer de staat en actieruimtes groeien. Ze kunnen lastig zijn en onstabiele.

Deze afwegingen zullen we later in de cursus tegenkomen als we het Deep RL-territorium betreden 🤓.

Terugkomend op ons probleem…

In het MountainCar omgeving is de staat niet discreet, maar een paar continue waarden (positie s1snelheid s2).

Doorlopend betekent in wezen: oneindig mogelijke waarden in deze context. Als er oneindig veel mogelijke staten zijn, is het onmogelijk om ze allemaal te bezoeken om te garanderen dat SARSA zal convergeren.

Om dat op te lossen kunnen we een truc gebruiken.

Laten we de toestandsvector discretiseren in een eindige reeks waarden. In wezen veranderen we niet de omgeving, maar de representatie van de staat die de agent gebruikt om zijn acties te kiezen.

Onze SarsaAgent discretiseert de staat (s1, s2) van continu naar discreet, door de positie af te ronden [-1.2 … 0.6]naar de dichtstbijzijnde 0.1 teken en de snelheid [-0.07 ...0.07] naar de dichtstbijzijnde 0.01 Mark.

Deze functie doet precies dat: continu vertalen naar discrete toestanden:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Zodra de agent een gediscretiseerde status gebruikt, kunnen we de SARSA-updateformule van hierboven gebruiken, en naarmate we blijven herhalen komen we dichter bij een optimale q-waarde.

Dit is de gehele implementatie van de SarsaAgent

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Merk op 👆 dat de q-waardefunctie een matrix is ​​met 3 dimensies: 2 voor de toestand (positie, snelheid) en 1 voor de actie.

Laten we verstandige hyperparameters kiezen en dit trainenSarsaAgent For n_episodes = 10,000

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Laten we een plot maken rewards en max_positions (blauwe lijnen) met hun voortschrijdende gemiddelden van 50 afleveringen (oranje lijnen)

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Super! Het lijkt op de onze SarsaAgent leert.

Hier kun je het in actie zien:


Als je de max_position kaart hierboven zult u zich realiseren dat de auto er af en toe niet in slaagt de berg te beklimmen.

Hoe vaak gebeurt dat? Laten we de agent evalueren 1,000 willekeurige afleveringen:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

En bereken het succespercentage:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

95.2% is behoorlijk goed. Toch niet perfect. Zet hier een speld op, we komen er later in de cursus op terug.

Opmerking: Wanneer u deze code aan uw kant uitvoert, krijgt u iets andere resultaten, maar ik wed dat u geen 100% prestatie zult krijgen.

Goed werk! Wij implementeerden een SarsaAgent dat leert 🤟

Het is een goed moment om even stil te staan...

5. Neem een ​​pauze en adem ⏸🧘

 
 
👉🏽notebooks/03_momentum_agent_baseline.ipynb

Wat als ik je vertelde dat de MountainCar omgeving heeft een veel eenvoudiger oplossing...

dat werkt 100% van de tijd? 😅

Het beste beleid dat u kunt volgen, is eenvoudig.

Volg gewoon het momentum:

  • accelereer naar rechts, wanneer de auto naar rechts beweegt velocity > 0
  • accelereer naar links, wanneer de auto naar links beweegt velocity <= 0

Visueel ziet dit beleid er als volgt uit:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Dit is hoe je dit schrijft MomentumAgent in Python:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Je kunt controleren of elke afzonderlijke aflevering is voltooid. 100% succespercentage.

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Als je de getrainde plotSarsaAgent 's beleid, aan de andere kant, zul je zoiets als dit zien:

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Dat heeft een overlap van 50% met het perfecte MomentumAgent beleidsmaatregelen

Praktijkgerichte leercursus voor versterking, deel 3: SARSA

Dit betekent onze SarsaAgent is juist Slechts 50% van de tijd.

Dit is interessant…

Waarom is de SarsaAgent zo vaak fout, maar toch goede prestaties levert?

Dit komt omdat het MountainCar is nog steeds een kleine omgeving, dus 50% van de tijd verkeerde beslissingen nemen is niet zo cruciaal. Voor grotere problemen is het zo vaak verkeerd zijn niet genoeg om intelligente agenten te bouwen.

Zou jij een zelfrijdende auto kopen die 95% van de tijd gelijk heeft? 😱

Herinnert u zich ook de discretisatie truc wij vroeger SARSA toepasten? Dat was een truc die ons enorm heeft geholpen, maar die ook een fout/vooroordeel in onze oplossing heeft geïntroduceerd.

Waarom verhogen we niet de resolutie van de discretisatie voor de toestand en snelheid, om een ​​betere oplossing te krijgen?

Het probleem hierbij is de exponentiële groei van het aantal staten, ook wel de ‘staten’ genoemd vloek van de dimensionaliteit. Naarmate u de resolutie van elke statuscomponent verhoogt, groeit het totale aantal staten exponentieel. De toestandsruimte groeit te snel voor de SARSA-agent om binnen een redelijke tijd naar het optimale beleid te convergeren.

Oké, maar zijn er andere RL-algoritmen die dit probleem perfect kunnen oplossen?

Ja er zijn. En we zullen ze behandelen in de komende lezingen. Over het algemeen bestaat er geen one-size-fits-all als het gaat om RL-algoritmen, dus u moet er verschillende uitproberen voor uw probleem om te zien wat het beste werkt.

In het MountainCar omgeving ziet het perfecte beleid er zo eenvoudig uit dat we kunnen proberen het direct te leren, zonder de noodzaak om ingewikkelde q-waardematrices te berekenen. A beleidsoptimalisatie methode zal waarschijnlijk het beste werken.

Maar dat gaan we vandaag niet doen. Wil je deze omgeving perfect oplossen met RL, volg dan de cursus.

Geniet van wat je vandaag hebt bereikt.

Praktijkgerichte leercursus voor versterking, deel 3: SARSAWie heeft er plezier?

6. Samenvatting ✨

 
 
Wauw! We hebben vandaag veel dingen besproken.

Dit zijn de 5 afhaalrestaurants:

  • SARSA is een beleidsalgoritme dat u kunt gebruiken in tabellarische omgevingen.
  • Kleine continue omgevingen kunnen als tabellarisch worden behandeld, met behulp van een discretisatie van de toestand, en vervolgens worden opgelost met tabellarische SARSA of tabellarische Q-learning.
  • Grotere omgevingen kunnen niet worden gediscretiseerd en opgelost vanwege de vloek van de dimensionaliteit.
  • Voor complexere omgevingen dan MountainCarwe zullen meer geavanceerde RL-oplossingen nodig hebben.
  • Soms is RL niet de beste oplossing. Houd dat in gedachten wanneer u de problemen probeert op te lossen die u belangrijk vindt. Trouw niet met uw gereedschap (in dit geval RL), maar concentreer u op het vinden van een goede oplossing. Mis door de bomen het bos niet 🌲🌲🌲.

7. Huiswerk 📚

 
 
👉🏽 notitieboekjes/04_homework.ipynb

Dit is wat ik wil dat je doet:

  1. Git-kloon de repository naar uw lokale machine.
  2. Setup de omgeving voor deze les 02_mountain_car
  3. Openen 02_mountain_car/notebooks/04_homework.ipynben probeer de 2 uitdagingen te voltooien.

In de eerste uitdaging vraag ik je om de SARSA-hyperparameters af te stemmen alpha (leersnelheid) en gamma (kortingsfactor) om de training te versnellen. Je kunt er inspiratie uit halen deel 2.

Probeer in de tweede uitdaging de resolutie van de discretisatie te vergroten en de q-waardefunctie te leren met SARSA in tabelvorm. Zoals wij vandaag deden.

Laat het me weten als je een agent bouwt die 99% prestatie behaalt.

8. Wat nu? ❤️

 
 
In de volgende les gaan we een gebied betreden waar Reinforcement Learning en Supervised Machine Learning elkaar kruisen 🤯.

Het wordt best gaaf, dat beloof ik.

Tot dan,

Geniet nog een dag op deze geweldige planeet genaamd Aarde 🌎

Liefs ❤️

En blijf leren 📖

Als je de cursus leuk vindt, deel hem dan met vrienden en collega's.

U kunt mij hieronder bereiken [email protected] . Ik zou graag verbinding willen maken.

Tot snel!

 
Bio: Pau Labarta Bajo (@paulabartabajo_) is een wiskundige, AI/ML-freelancer en spreker, met meer dan 10 jaar ervaring in het analyseren van cijfers en modellen voor verschillende problemen, waaronder financiële handel, mobiel gamen, online winkelen en gezondheidszorg.

ORIGINELE. Met toestemming opnieuw gepost.

Bron: https://www.kdnuggets.com/2022/01/handson-reinforcement-learning-course-part-3-sarsa.html

spot_img

Laatste intelligentie

spot_img