Uvod u metode kritičara glumca iz prednosti: igrajmo se Sonic the Hedgehog!

Od početka ovog tečaja proučavali smo dvije različite metode učenja pojačavanja:

  • Vrijednosne metode (Q-učenje, duboko Q-učenje): gdje učimo funkciju vrijednosti koja će preslikati svaki par radnji stanja u vrijednost. Zahvaljujući tim metodama pronalazimo najbolju radnju za svaku državu - radnju s najvećom vrijednošću. To dobro funkcionira kada imate ograničeni niz radnji.
  • Metode temeljene na politikama (POJAČAJTE s gradijentima politike): gdje izravno optimiziramo politiku bez upotrebe funkcije vrijednosti. To je korisno kada je prostor radnje kontinuiran ili stohastičan. Glavni je problem pronaći dobru funkciju rezultata kako bi se izračunalo koliko je politika dobra. Mi koristite ukupne nagrade epizoda.

Ali obje ove metode imaju velike nedostatke. Zbog toga ćemo danas proučavati novu vrstu metode pojačanog učenja koju možemo nazvati „hibridnom metodom“: kritičar glumca . Koristit ćemo dvije neuronske mreže:

  • Kritičar koji mjeri koliko je dobra poduzeta akcija (zasnovana na vrijednosti)
  • glumac koji kontrolira ponašanje našeg agenta (temeljeno na pravilima)

Ovladavanje ovom arhitekturom neophodno je za razumijevanje najsuvremenijih algoritama kao što je Proximal Policy Optimization (aka PPO). PPO se temelji na kritičaru Advantage Actor Critica.

A implementirat ćete agenta Advantage Actor Critic (A2C) koji uči glumiti Sonic the Hedgehog!

Potraga za boljim modelom učenja

Problem s gradijentima politike

Metoda gradijenta politike ima veliki problem. U situaciji smo u Monte Carlu, čekamo do kraja epizode da izračunamo nagradu. Možemo zaključiti da su, ako imamo visoku nagradu ( R (t) ), sve radnje koje smo poduzeli bile dobre, čak i ako su neke zaista bile loše.

Kao što možemo vidjeti u ovom primjeru, čak i ako je A3 bio loš postupak (doveo je do negativnih nagrada), sve će akcije biti u prosjeku dobre, jer je ukupna nagrada bila važna.

Kao posljedica toga, imati optimalnu politiku,trebamo puno uzoraka. To proizvodi sporo učenje, jer treba puno vremena da se konvergira.

Što ako umjesto toga možemo obaviti ažuriranje u svakom vremenskom koraku?

Predstavljamo glumca kritičara

Model glumca kritičara je bolja bodovna funkcija. Umjesto da čekamo kraj epizode kao što to činimo u Monte Carlu REINFORCE, u svakom koraku ažuriramo (TD učenje).

Budući da vršimo ažuriranje u svakom vremenskom koraku, ne možemo koristiti ukupne nagrade R (t). Umjesto toga, treniramo kritički model koji aproksimira funkciju vrijednosti (ne zaboravite da funkcija vrijednosti izračunava koja je maksimalna očekivana buduća nagrada s obzirom na stanje i radnju). Ova funkcija vrijednosti zamjenjuje funkciju nagrade u gradijentu politike koja izračunava nagrade samo na kraju epizode.

Kako djeluje kritičar glumca

Zamislite da s prijateljem igrate videoigru koja vam pruža povratne informacije. Ti si glumac, a tvoj prijatelj je kritičar.

Na početku ne znate igrati, pa slučajno isprobate neku akciju. Kritičar promatra vašu akciju i daje povratne informacije.

Učeći iz ovih povratnih informacija, ažurirat ćete svoja pravila i biti bolji u igranju te igre.

S druge strane, vaš će prijatelj (kritičar) također ažurirati svoj način davanja povratnih informacija kako bi sljedeći put mogao biti bolji.

Kao što vidimo, ideja glumca kritičara je imati dvije neuronske mreže. Procjenjujemo oboje:

Obje teku paralelno.

Budući da imamo dva modela (glumac i kritičar) koji se moraju uvježbati, to znači da imamo dva skupa utega (? Za naše djelovanje i w za našeg kritičara) koji se moraju posebno optimizirati:

Proces kritike glumca

U svakom vremenskom koraku t uzimamo trenutno stanje (St) iz okoline i prosljeđujemo ga kao ulaz kroz našeg glumca i našeg kritičara.

Naša politika uzima državu, izvodi radnju (At) i prima novo stanje (St + 1) i nagradu (Rt + 1).

Zahvaljujući tome:

  • Kritičar izračunava vrijednost poduzimanja te radnje u tom stanju
  • glumac ažurira svoje parametre politike (težine) koristeći ovu q vrijednost

Zahvaljujući ažuriranim parametrima, glumac stvara sljedeću radnju pri At + 1 s obzirom na novo stanje St + 1. Kritičar zatim ažurira svoje vrijednosne parametre:

A2C i A3C

Uvođenje funkcije Advantage za stabiliziranje učenja

Kao što smo vidjeli u članku o poboljšanjima dubokog Q učenja, metode temeljene na vrijednosti imaju veliku varijabilnost.

Da bismo smanjili taj problem, govorili smo o upotrebi funkcije prednosti umjesto funkcije vrijednosti.

Funkcija prednosti definirana je ovako:

Ova će nam funkcija reći poboljšanje u odnosu na prosjek radnji poduzetih u tom stanju. Drugim riječima, ova funkcija izračunava dodatnu nagradu koju dobijem ako poduzmem ovu radnju. Dodatna je nagrada ona koja prelazi očekivanu vrijednost te države.

Ako je A (s, a)> 0: naš gradijent je gurnut u tom smjeru.

Ako je A (s, a) <0 (naše djelovanje ide gore od prosječne vrijednosti tog stanja) naš gradijent se gura u suprotnom smjeru.

Problem implementacije ove funkcije prednosti je taj što su potrebne dvije vrijednosne funkcije - Q (s, a) i V (s). Srećom, TD pogrešku možemo koristiti kao dobar procjenitelj funkcije prednosti.

Dvije različite strategije: Asinkrona ili Sinkrona

Imamo dvije različite strategije za primjenu agenta kritičara:

  • A2C (poznat i kao kritičar glavne prednosti)
  • A3C (zvani kritičar asinkrone prednosti)

Zbog toga ćemo raditi s A2C, a ne s A3C. Ako želite vidjeti cjelovitu implementaciju A3C, pogledajte izvrsni članak A3C-a Arthura Julianija i implementaciju Doom-a.

U A3C ne koristimo ponovnu reprodukciju iskustva jer to zahtijeva puno memorije. Umjesto toga, asinkrono izvršavamo različite agente paralelno na više instanci okoline. Svaki radnik (kopija mreže) ažurirat će globalnu mrežu asinkrono.

S druge strane, jedina razlika u A2C je u tome što sinkronizirano ažuriramo globalnu mrežu. Čekamo dok svi radnici ne završe obuku i izračunaju svoje gradijente kako bi ih prosječili, kako bismo ažurirali našu globalnu mrežu.

Odabir A2C ili A3C?

Problem A3C objašnjen je u ovom sjajnom članku. Zbog asinkrone prirode A3C, neki radnici (kopije Agenta) igrat će se sa starijom verzijom parametara. Stoga agregirajuće ažuriranje neće biti optimalno.

Zato A2C čeka da svaki glumac završi svoj segment iskustva prije ažuriranja globalnih parametara. Zatim ponovno pokrećemo novi segment iskustva sa svim paralelnim akterima koji imaju iste nove parametre.

Kao posljedica toga, trening će biti kohezivniji i brži.

Implementacija A2C agenta koji glumi Ježa Sonica

A2C u praksi

U praksi, kao što je objašnjeno u ovom postu na Redditu, sinkrona priroda A2C znači da nam ne trebaju različite verzije (različiti radnici) A2C-a.

Svaki radnik u A2C imat će isti set utega jer, suprotno A3C, A2C ažurira sve svoje radnike u isto vrijeme.

Zapravo stvaramo više verzija okruženja (recimo osam), a zatim ih paralelno izvršavamo.

Proces će biti sljedeći:

  • Stvara vektor od n okruženja pomoću biblioteke višestruke obrade
  • Stvara trkački objekt koji obrađuje različita okruženja, izvršavajući paralelno.
  • Ima dvije verzije mreže:
  1. step_model: koji generira iskustva iz okruženja
  2. train_model: koji trenira iskustva.

Kad trkač napravi korak (model s jednim korakom), to izvodi korak za svako od n okruženja. To daje hrpu iskustva.

Zatim izračunavamo gradijent odjednom koristeći train_model i našu seriju iskustva.

Konačno, ažuriramo korak model s novim težinama.

Imajte na umu da je izračunavanje gradijenta odjednom ista stvar kao i prikupljanje podataka, izračunavanje gradijenta za svakog radnika, a zatim i prosječenje. Zašto? Budući da je zbrajanje izvoda (zbrajanje gradijenata) ista stvar kao i uzimanje izvoda zbroja . Ali drugi je elegantniji i bolji način korištenja GPU-a.

A2C s ježem Sonic

Dakle, sada kad smo razumjeli kako A2C uopće funkcionira, možemo implementirati našeg A2C agenta igrajući Sonic! Ovaj video prikazuje razliku u ponašanju našeg agenta između 10 minuta treninga (lijevo) i 10 sati treninga (desno).

Implementacija je ovdje u GitHub repo-u, a bilježnica objašnjava implementaciju. Dajem vam spremljeni model osposobljen s oko 10 sati + na GPU-u.

Ova je implementacija mnogo složenija od prijašnjih implementacija. Počinjemo primjenjivati ​​najsuvremenije algoritme, pa moramo biti sve učinkovitiji s našim kodom. Zato ćemo u ovoj implementaciji kôd razdvojiti na različite objekte i datoteke.

To je sve! Upravo ste stvorili agenta koji uči glumiti ježa Sonic. To je odlično! Vidimo da, na primjer, s 10 sati treninga naš agent ne razumije petlje, pa ćemo morati koristiti stabilniju arhitekturu: PPO.

Odvojite vrijeme da razmotrite sva postignuća koja ste postigli od prvog poglavlja ovog tečaja: od jednostavnih tekstualnih igara (OpenAI taxi-v2) prešli smo na složene igre poput Doom i Sonic the Hedgehog koristeći sve snažnije arhitekture. I to je fantastično!

Sljedeći put ćemo naučiti o proksimalnim gradijentima politike, arhitekturi koja je pobijedila na OpenAI Retro natječaju. Trenirat ćemo našeg agenta da igra Sonic the Hedgehog 2 i 3 i ovaj put, a on će završiti cijele razine!

Ne zaboravite sami implementirati svaki dio koda. Zaista je važno pokušati izmijeniti kod koji sam vam dao. Pokušajte dodati epohe, promijeniti arhitekturu, promijeniti brzinu učenja itd. Eksperimentiranje je najbolji način za učenje, pa zabavite se!

Ako vam se svidio moj članak, kliknite na? ispod onoliko vremena koliko vam se članak svidio, tako da će ga drugi ljudi vidjeti ovdje na Medijumu. I ne zaboravite me slijediti!

Ovaj je članak dio mog tečaja dubokog pojačanja s TensorFlowom? ️. Ovdje pogledajte nastavni plan.

Ako imate bilo kakvih misli, komentara, pitanja, slobodno komentirajte u nastavku ili mi pošaljite e-mail: zdravo [at] simoninithomas [dot] com ili mi tweet @ThomasSimonini.

Tečaj dubokog pojačanja:

Izrađujemo video verziju tečaja učenja dubokog pojačanja s Tensorflowom ? gdje se ovdje usredotočujemo na implementacijski dio s tensorflowom.

Dio 1: Uvod u učenje o ojačanju

Dio 2: Uronite dublje u ojačano učenje pomoću Q-učenja

Dio 3: Uvod u duboko Q-učenje: igrajmo se Doom

Dio 3+: Poboljšanja dubinskog Q učenja: dvoboj dvostrukog DQN-a, prioritetno ponavljanje iskustva i fiksni Q-ciljevi

Dio 4: Uvod u gradijente politika s Doom i Cartpole

Dio 6: Proksimalna optimizacija politike (PPO) s Sonic the Hedgehog 2 i 3

Dio 7: Olakšano učenje vođeno znatiželjom I. dio