Uzlabojumi dziļās Q mācībās: divkāršās DQN divcīņa, prioritārā pieredzes atkārtošana un fiksēts…

Šis raksts ir daļa no Deep Reinforcement Learning Course with Tensorflow? ️. Pārbaudiet mācību programmu šeit.

Mūsu pēdējā rakstā par dziļu Q mācīšanos ar Tensorflow mēs ieviesām aģentu, kurš iemācās spēlēt vienkāršu Doom versiju. Video versijā mēs apmācījām DQN aģentu, kas spēlē kosmosa iebrucējus.

Tomēr apmācības laikā mēs redzējām, ka ir daudz mainīgumu.

Deep Q-Learning tika ieviesta 2014. gadā. Kopš tā laika ir veikti daudzi uzlabojumi. Tātad, šodien mēs redzēsim četras stratēģijas, kas dramatiski uzlabo mūsu DQN aģentu apmācību un rezultātus:

  • fiksēti Q mērķi
  • dubultā DQN
  • duelis DQN (aka DDQN)
  • Prioritārā pieredzes atkārtojums (pazīstams arī kā PER)

Mēs ieviesīsim aģentu, kurš iemācīsies spēlēt Doom Deadly koridoru. Mūsu AI ir jāvirzās uz pamatmērķi (vesti) un jāpārliecinās, ka viņi vienlaikus izdzīvo, nogalinot ienaidniekus.

Fiksētie Q mērķi

Teorija

Deep Q Learning rakstā mēs redzējām, ka tad, kad mēs vēlamies aprēķināt TD kļūdu (jeb zaudējumu), mēs aprēķinām starpību starp TD mērķi (Q_target) un pašreizējo Q vērtību (Q novērtējums).

Bet mums nav ne jausmas par reālo TD mērķi. Mums tas jānovērtē. Izmantojot Belmana vienādojumu, mēs redzējām, ka TD mērķis ir tikai atlīdzība par šīs darbības veikšanu šajā stāvoklī, pieskaitot nākamā stāvokļa augstāko Q vērtību.

Tomēr problēma ir tā, ka mērķa un Q vērtības novērtēšanai mēs izmantojam tos pašus parametrus (svarus) . Tā rezultātā pastāv liela korelācija starp TD mērķi un parametriem (w), kurus mēs mainām.

Tāpēc tas nozīmē, ka katrā apmācības posmā mūsu Q vērtības mainās, bet mainās arī mērķa vērtība. Tātad, mēs tuvojamies savam mērķim, taču arī mērķis virzās. Tas ir tāpat kā dzīt kustīgu mērķi! Tas noveda pie lielas svārstības apmācībā.

Tas ir tāpat kā tad, ja jūs būtu kovbojs (Q novērtējums) un vēlaties noķert govi (Q mērķi), jums jāpieiet tuvāk (jāsamazina kļūda).

Katrā laika posmā jūs mēģināt tuvoties govij, kas arī pārvietojas katrā laika posmā (jo jūs izmantojat tos pašus parametrus).

Tas noved pie ļoti dīvaina vajāšanas ceļa (liela svārstība treniņā).

Tā vietā mēs varam izmantot fiksētu Q mērķu ideju, kuru ieviesa DeepMind:

  • TD mērķa novērtēšanai izmantojot atsevišķu tīklu ar fiksētu parametru (sauksim to par w-).
  • Katrā Tau posmā mēs kopējam parametrus no sava DQN tīkla, lai atjauninātu mērķa tīklu.

Pateicoties šai procedūrai, mums būs stabilāka mācīšanās, jo mērķa funkcija kādu laiku paliek nemainīga.

Īstenošana

Fiksēto q mērķu īstenošana ir diezgan vienkārša:

  • Pirmkārt, mēs izveidojam divus tīklus ( DQNetwork, TargetNetwork)
  • Pēc tam mēs izveidojam funkciju, kas ņems mūsu DQNetworkparametrus un kopēs tos pie mumsTargetNetwork
  • Visbeidzot, apmācības laikā mēs aprēķinām TD mērķi, izmantojot mūsu mērķa tīklu. Mēs atjauninām mērķa tīklu ar DQNetworkkatru tausoli ( tautas ir hiperparametrs, ko mēs definējam).

Dubultā DQN

Teorija

Double DQN jeb dubulto mācīšanos ieviesa Hado van Hasels. Šī metode risina Q-vērtību pārvērtēšanas problēmu.

Lai saprastu šo problēmu, atcerieties, kā mēs aprēķinām TD mērķi:

Aprēķinot TD mērķi, mēs saskaramies ar vienkāršu problēmu: kā mēs esam pārliecināti, ka labākā darbība nākamajam stāvoklim ir darbība ar visaugstāko Q vērtību?

Mēs zinām, ka q vērtību precizitāte ir atkarīga no tā, kādu darbību mēs mēģinājām un kādus kaimiņu stāvokļus mēs izpētījām.

Tā rezultātā apmācības sākumā mums nav pietiekami daudz informācijas par labāko rīcību. Tāpēc, pieņemot maksimālo q vērtību (kas ir trokšņains) kā vislabāko rīcību, var rasties nepatiesi pozitīvi rezultāti. Ja neoptimālām darbībām regulāri tiek piešķirta augstāka Q vērtība nekā optimālākajai labākajai darbībai, mācīšanās būs sarežģīta.

Risinājums ir šāds: aprēķinot Q mērķi, mēs izmantojam divus tīklus, lai atsaistītu darbības izvēli no mērķa Q vērtības ģenerēšanas. Mēs:

  • izmantojiet mūsu DQN tīklu, lai izvēlētos, kāda ir labākā rīcība nākamajā stāvoklī (darbība ar visaugstāko Q vērtību).
  • izmantojiet mūsu mērķa tīklu, lai aprēķinātu mērķa Q vērtību, veicot šo darbību nākamajā stāvoklī.

Tāpēc Double DQN palīdz mums samazināt q vērtību pārvērtēšanu un līdz ar to palīdz mums ātrāk trenēties un stabilāk mācīties.

Īstenošana

Duelis DQN (jeb DDQN)

Teorija

Atcerieties, ka Q vērtības atbilst tam, cik labi ir būt šajā stāvoklī un rīkoties šajā stāvoklī Q (s, a).

Tātad mēs varam sadalīt Q (s, a) kā summu:

  • V (s) : atrašanās šajā stāvoklī vērtība
  • A (s, a) : priekšrocība, ja veicat šo darbību šajā stāvoklī (cik daudz labāk ir veikt šo darbību, salīdzinot ar visām citām iespējamām darbībām šajā stāvoklī).

Izmantojot DDQN, mēs vēlamies nošķirt šo divu elementu novērtētāju, izmantojot divas jaunas plūsmas:

  • tādu, kas novērtē stāvokļa vērtību V (s)
  • tādu, kas aplēš katras darbības A (s, a) priekšrocības

Un pēc tam mēs apvienojam šīs divas plūsmas caur īpašu agregācijas slāni, lai iegūtu Q (s, a) novērtējumu.

Pagaidi? Bet kāpēc mums šie divi elementi jāaprēķina atsevišķi, ja tad tos apvienojam?

Atsaistot novērtējumu, mūsu DDQN intuitīvi var uzzināt, kuri stāvokļi ir (vai nav) vērtīgi, bez nepieciešamības uzzināt katras darbības ietekmi katrā stāvoklī (jo tas arī aprēķina V (-us)).

Izmantojot mūsu parasto DQN, mums jāaprēķina katras darbības vērtība šajā stāvoklī. Bet kāda jēga, ja valsts vērtība ir slikta? Kāda jēga aprēķināt visas darbības vienā stāvoklī, kad visas šīs darbības noved pie nāves?

Tā rezultātā, atsaistot, mēs varam aprēķināt V (s). Tas ir īpaši noderīgi valstīm, kur viņu rīcība attiecīgajā veidā neietekmē vidi. Šajā gadījumā nav nepieciešams aprēķināt katras darbības vērtību. Piemēram, kustībai pa labi vai pa kreisi ir nozīme tikai tad, ja pastāv sadursmes risks. Un lielākajā daļā valstu darbības izvēle neietekmē notiekošo.

Tas būs skaidrāk, ja ņemsim piemēru dokumentā Dueling Network Architectures for Deep Reinforcement Learning.

Mēs redzam, ka vērtību tīkla straumēs uzmanība (oranžā izplūdums) tiek pievērsta ceļam, un jo īpaši horizontam, kurā tiek nārstotas automašīnas. Tas pievērš uzmanību arī rezultātam.

No otras puses, priekšrocību plūsma pirmajā rāmī pa labi nepievērš lielu uzmanību ceļam, jo ​​priekšā nav automašīnu (tāpēc darbības izvēlei praktiski nav nozīmes). Bet otrajā kadrā tas pievērš uzmanību, jo tieši priekšā ir automašīna, un rīcības izvēle ir izšķiroša un ļoti svarīga.

Attiecībā uz apkopošanas slāni mēs vēlamies ģenerēt q vērtības katrai darbībai šajā stāvoklī. Mums varētu rasties kārdinājums apvienot straumes šādi:

Bet, ja mēs to izdarīsim, mēs iekļūsimjautājums par identificējamību , tas ir - ņemot vērā Q (s, a), mēs nevaram atrast A (s, a) un V (s).

Un tas, ka nespēsim atrast V (s) un A (s, a), ņemot vērā Q (s, a), būs problēma mūsu muguras izplatībai. Lai izvairītos no šīs problēmas, mēs varam piespiest mūsu priekšrocību funkcijas aprēķinātāju iegūt 0 priekšrocības izvēlētajā darbībā.

Lai to izdarītu, mēs atņemam visu iespējamo valsts darbību vidējo priekšrocību.

Tāpēc šī arhitektūra palīdz mums paātrināt apmācību. Mēs varam aprēķināt stāvokļa vērtību, neaprēķinot Q (s, a) katrai darbībai šajā stāvoklī. Un tas var palīdzēt mums atrast daudz ticamākas Q vērtības katrai darbībai, atdalot novērtējumu starp divām plūsmām.

Īstenošana

Vienīgais, kas jādara, ir modificēt DQN arhitektūru, pievienojot šīs jaunās straumes:

Prioritātes pieredzes atkārtojums

Teorija

Prioritized Experience Replay (PER) 2015. gadā ieviesa Toms Šauls. Ideja ir tāda, ka dažas pieredzes mūsu apmācībai var būt svarīgākas par citām, taču tās var notikt retāk.

Tā kā mēs vienmērīgi ņemam paraugu no partijas (nejauši izvēloties pieredzi), šīm bagātīgajām pieredzēm praktiski nav iespēju tikt izvēlētām.

Tāpēc ar PER mēs cenšamies mainīt izlases sadalījumu, izmantojot kritēriju, lai noteiktu katras pieredzes kopas prioritāti.

Mēs vēlamies izmantot prioritātes pieredzi tur, kur ir liela atšķirība starp mūsu prognozi un TD mērķi, jo tas nozīmē, ka mums par to ir daudz jāmācās.

Mēs izmantojam mūsu TD kļūdas lieluma absolūto vērtību:

Un mēs šo prioritāti ieliekam katra atkārtotā bufera pieredzē.

Bet mēs nevaram veikt tikai mantkārīgu prioritāšu noteikšanu, jo tas vienmēr novedīs pie vienas un tās pašas pieredzes apmācības (kurai ir liela prioritāte), tādējādi pārspīlējot.

Tāpēc mēs ieviešam stohastisko prioritāti, kas rada varbūtību, ka tiksit izvēlēts atkārtojumam.

Tā rezultātā katrā laika posmā mēs saņemsimparaugu partija ar šo varbūtības sadalījumu un apmācīt tajā mūsu tīklu.

Bet mums joprojām ir problēma. Atcerieties, ka ar parasto pieredzes atkārtojumu mēs izmantojam stohastisko atjaunināšanas kārtulu. Rezultātā pieredzes paraugam ir jāatbilst pamatā esošajam sadalījumam, no kura tie iegūti.

Kad mums ir normāla pieredze, mēs izvēlamies mūsu pieredzi normālā sadalījumā - vienkārši sakot, mēs izvēlamies mūsu pieredzi nejauši. Nav neobjektivitātes, jo katrai pieredzei ir tāda pati iespēja tikt izmantotai, tāpēc mēs varam normāli atjaunināt svaru.

Bet , tā kā mēs izmantojam prioritāro izlasi, tīri izlases veida paraugu ņemšana tiek atteikta. Tā rezultātā mēs ieviešam neobjektivitāti pret augstas prioritātes paraugiem (vairāk iespēju tikt atlasītiem).

Ja mēs normāli atjaunināsim svaru, mēs uzņemamies risku pārmērīgi pielāgoties. Paraugi, kuriem ir augsta prioritāte, visticamāk, tiks izmantoti daudzreiz apmācībā, salīdzinot ar zemas prioritātes pieredzi (= neobjektivitāte). Tā rezultātā mēs atjaunināsim savus svarus, izmantojot tikai nelielu daļu pieredzes, ko mēs uzskatām par patiešām interesantu.

Lai labotu šo novirzi, mēs izmantojam svarīguma paraugu ņemšanas svarus (IS), kas pielāgos atjaunināšanu, samazinot bieži redzamo paraugu svaru.

Svariem, kas atbilst augstas prioritātes paraugiem, ir ļoti maz pielāgojumu (jo tīkls redzēs šo pieredzi daudzas reizes), turpretim tiem, kas atbilst zemas prioritātes paraugiem, tiks veikta pilnīga atjaunināšana.

No uzdevums b ir kontrolēt, cik daudz šie svarīgumu izlases svaru ietekmēt mācīšanos. Praksē b parametrs tiek atlaidināts līdz 1 visā apmācības laikā, jo šie svari ir svarīgāki mācību beigās, kad mūsu q vērtības sāk saplūst. Atjauninājumu objektīvais raksturs ir vissvarīgākais tuvu konverģencei, kā paskaidrots šajā rakstā.

Īstenošana

Šoreiz ieviešana būs mazliet iecienītāka.

Pirmkārt, mēs nevaram ieviest PER, vienkārši sakārtojot visus pieredzes atkārtojuma buferus atbilstoši viņu prioritātēm. Tas vispār nebūs efektīvs, jo O (nlogn) ievietošanai un O (n) ir paraugu ņemšanai.

Kā paskaidrots šajā patiešām labajā rakstā, masīva kārtošanas vietā mums jāizmanto cita datu struktūra - nešķirots sumtree.

Sumtree ir binārs koks, tas ir koks, kurā katram mezglam ir tikai divi bērni. Lapās (dziļākajos mezglos) ir prioritārās vērtības, un datu masīvs, kas norāda uz lapām, satur pieredzi.

Koka atjaunināšana un paraugu ņemšana būs patiešām efektīva (O (log n)).

Pēc tam mēs izveidojam atmiņas objektu, kurā būs mūsu koks un dati.

Pēc tam, lai ņemtu paraugu k lieluma mini partijai, diapazons [0, kopējā_prioritāte] tiks sadalīts k diapazonos. Katrā diapazonā vienmērīgi tiek ņemta vērtība.

Visbeidzot, pārejas (pieredze), kas atbilst katrai no šīm izlases vērtībām, tiek iegūtas no koku koka.

Tas būs daudz skaidrāk, kad iegremdēsimies piezīmju grāmatiņā par visām detaļām.

Doom Deathmatch aģents

Šis aģents ir Dueling Double Deep Q Learning ar PER un fiksētiem q mērķiem.

Mēs izveidojām ieviešanas video pamācību: piezīmju grāmatiņa ir šeit

Tas ir viss! Jūs tikko esat izveidojis gudrāku aģentu, kurš iemācās spēlēt Doom. Satriecošs! Atcerieties, ka, ja vēlaties, lai jums būtu aģents ar patiešām labu sniegumu, jums ir nepieciešams daudz vairāk GPU stundu (apmēram divu dienu apmācība)!

Tomēr, veicot tikai 2–3 stundas ilgu apmācību par procesoru (jā, CPU), mūsu aģents saprata, ka viņiem ir jānogalina ienaidnieki, pirms viņi var virzīties uz priekšu. Ja viņi virzīsies uz priekšu, nenogalinot ienaidniekus, viņi tiks nogalināti pirms vestes iegūšanas.

Neaizmirstiet pats ieviest katru koda daļu. Ir ļoti svarīgi mēģināt modificēt kodu, kuru jums devu. Mēģiniet pievienot laikmetus, mainīt arhitektūru, pievienot fiksētas Q vērtības, mainīt mācību ātrumu, izmantot grūtāku vidi ... un tā tālāk. Eksperimentējiet, izklaidējieties!

Atcerieties, ka tas bija liels raksts, tāpēc pārliecinieties, ka patiešām saprotat, kāpēc mēs izmantojam šīs jaunās stratēģijas, kā tās darbojas, kā arī to izmantošanas priekšrocības.

Nākamajā rakstā mēs uzzināsim par lielisku hibrīdmetodi starp uz vērtību balstītiem un uz politiku balstītiem pastiprināšanas mācību algoritmiem. Tas ir jaunāko algoritmu pamats : Advantage Actor Critic (A2C). Jūs ieviesīsit aģentu, kurš iemācīsies spēlēt Outrun!

Ja jums patika mans raksts, lūdzu, noklikšķiniet uz? zemāk, cik reizes jums patika raksts, lai citi cilvēki to redzētu šeit, Medium. Un neaizmirstiet man sekot!

Ja jums ir kādas domas, komentāri, jautājumi, nekautrējieties komentēt zemāk vai sūtīt man e-pastu: [email protected] vai čivināt mani @ThomasSimonini.

Turpiniet mācīties, palieciet lieliski!

Dziļās stiprināšanas mācību kurss ar Tensorflow? ️

? Mācību programma

? Video versija

1. daļa: Ievads mācībās par pastiprināšanu

2. daļa: dziļāk ienirt pastiprināšanas mācībās ar Q-Learning

3. daļa: Ievads dziļā Q-Learning: spēlēsim Doom

3+ daļa: uzlabojumi dziļā Q mācīšanās procesā: dubultā DQN divcīņa, prioritātes noteiktas pieredzes atkārtojums un fiksēti Q mērķi

4. daļa: Ievads politikas gradientos ar Doom un Cartpole

5. daļa: Iepazīšanās ar Advantage Actor Critic metodēm: spēlēsim Sonicu ezīti!

6. daļa: Tuvākā politikas optimizācija (PPO) ar Sonic the Hedgehog 2 un 3

7. daļa: Uz ziņkārību balstīta mācīšanās atvieglo I daļu