Fejlesztések a mély Q tanulásban: Dupla DQN-párbaj, prioritásos tapasztalatok visszajátszása és fix…

Ez a cikk a mélymegerősítő tanfolyam része a Tensorflow-val? ️. A tantervet itt ellenőrizheti.

A Deep Q Learning with Tensorflow című legutóbbi cikkünkben olyan ügynököt valósítottunk meg, amely megtanul játszani a Doom egyszerű változatát. A videó verzióban egy DQN ügynököt képeztünk ki, amely űrhódítókat játszik.

Az edzés során azonban láttuk, hogy nagy a változékonyság.

A Deep Q-Learning 2014-ben került bevezetésre. Azóta rengeteg fejlesztés történt. Tehát ma négy stratégiát fogunk látni, amelyek drámai módon javítják a DQN-ügynökeink képzését és eredményeit:

  • fix Q-célok
  • dupla DQN
  • párbajozó DQN (más néven DDQN)
  • Kiemelt tapasztalatok visszajátszása (más néven PER)

Futtatunk egy ügynököt, aki megtanul játszani a Doom Deadly folyosón. AI-junknak az alapvető cél (a mellény) felé kell navigálnia, és ügyelnie kell arra, hogy ellenségek megölésével egyidejűleg túléljék.

Fix Q-célok

Elmélet

A Deep Q Learning cikkben láttuk, hogy amikor ki akarjuk számítani a TD hibát (más néven a veszteséget), akkor kiszámoljuk a TD cél (Q_target) és az aktuális Q érték (Q becslése) közötti különbséget.

De fogalmunk sincs a valódi TD célról. Meg kell becsülnünk. A Bellman-egyenlet felhasználásával azt láttuk, hogy a TD-cél csak az a jutalom, ha ezt a műveletet végrehajtjuk ebben az állapotban, plusz a következő állapot diszkontált legnagyobb Q-értéke.

A probléma azonban az, hogy ugyanazokat a paramétereket (súlyokat) használjuk a cél és a Q érték becsléséhez . Ennek következtében nagy összefüggés van a TD cél és az általunk módosított (w) paraméterek között.

Ezért ez azt jelenti, hogy az edzés minden lépésében eltolódnak Q értékeink, de eltolódik a célérték is. Tehát egyre közelebb vagyunk a célunkhoz, de a cél is mozog. Olyan, mintha egy mozgó célt kergetnénk! Ez nagy rezgéshez vezetett az edzésen.

Olyan, mintha cowboy lennél (Q-becslés), és el akarnád fogni a tehenet (Q-cél), akkor közelebb kell kerülnöd (csökkentenie kell a hibát).

Minden egyes lépésnél megpróbálja megközelíteni a tehenet, amely szintén mozog minden egyes lépésnél (mert ugyanazokat a paramétereket használja).

Ez egy nagyon furcsa üldözés útjához vezet (nagy mozgás az edzésen).

Ehelyett használhatjuk a DeepMind által bevezetett fix Q-célok ötletét:

  • Egy különálló hálózat használata fix paraméterrel (nevezzük w-nak) a TD-cél becsléséhez.
  • Minden Tau lépésnél átmásoljuk a paramétereket a DQN hálózatunkról a célhálózat frissítése érdekében.

Ennek az eljárásnak köszönhetően stabilabb lesz a tanulásunk, mert a célfüggvény egy ideig rögzített marad.

Végrehajtás

A fix q-célok megvalósítása meglehetősen egyszerű:

  • Először két hálózatot hozunk létre ( DQNetwork, TargetNetwork)
  • Ezután létrehozunk egy függvényt, amely átveszi a DQNetworkparamétereinket és átmásolja azokat a sajátunkbaTargetNetwork
  • Végül a képzés során kiszámoljuk a TD-célt a célhálózatunk segítségével. DQNetworkMinden taulépésnél frissítjük a célhálózatot ( tauegy hiperparaméter, amelyet definiálunk).

Dupla DQN

Elmélet

A dupla DQN-t, vagyis a kettős tanulást Hado van Hasselt vezette be. Ez a módszer kezeli a Q-értékek túlbecsülésének problémáját.

A probléma megértéséhez ne feledje, hogyan számoljuk ki a TD célértéket:

A TD-cél kiszámításával egyszerű problémával kell szembenéznünk: hogyan lehetünk biztosak abban, hogy a következő állapot legjobb cselekvése a legmagasabb Q-értékű művelet?

Tudjuk, hogy a q értékek pontossága attól függ, hogy milyen műveletet próbáltunk meg, és milyen szomszédos állapotokat vizsgáltunk.

Ennek következtében a képzés kezdetekor nincs elegendő információ a legjobb teendőkről. Ezért ha a maximális q értéket veszi (ami zajos), mint a legjobb intézkedést, akkor hamis pozitív eredményhez vezethet. Ha a nem optimális cselekvéseknek rendszeresen magasabb Q értéket adnak, mint az optimális legjobb cselekvésnek, a tanulás bonyolult lesz.

A megoldás a következő: amikor kiszámítjuk a Q célt, két hálózattal elválasztjuk a műveletválasztást a cél Q értékgenerálástól. Mi:

  • használja a DQN hálózatunkat, hogy kiválassza, mi a legjobb lépés a következő állapotra (a legmagasabb Q értékkel rendelkező művelet).
  • használja a célhálózatunkat annak a Q-célértéknek a kiszámításához, amelyre a műveletet a következő állapotban hajtja végre.

Ezért a Double DQN segít csökkenteni a q értékek túlbecsülését, és ennek következtében gyorsabb edzést és stabilabb tanulást biztosít.

Végrehajtás

Párbajozó DQN (más néven DDQN)

Elmélet

Ne felejtsük el, hogy a Q-értékek megfelelnek annak a jónak lenni, amikor ebben az állapotban vagyunk, és ebben a Q (s, a) állapotban cselekszünk.

Tehát a Q (s, a) értékeket lebonthatjuk:

  • V (s) : annak az állapotnak az értéke
  • A (s, a) : annak az előnynek az előnye, hogy ezt a műveletet abban az állapotban hajtják végre (mennyivel jobb, ha ezt a műveletet végrehajtjuk az összes többi lehetséges intézkedéshez képest ebben az állapotban).

A DDQN segítségével két új adatfolyam segítségével szeretnénk szétválasztani ennek a két elemnek a becslőjét:

  • olyan, amely megbecsüli az V (s) állapotértéket
  • amely becsli az egyes A (s, a) műveletek előnyét

És akkor ezt a két áramot egyesítjük egy speciális aggregációs rétegen keresztül, hogy megkapjuk a Q (s, a) becslését.

Várjon? De miért kell külön kiszámítanunk ezt a két elemet, ha ezeket kombináljuk?

A becslés szétválasztásával intuitív módon a DDQN-nk megtanulhatja, hogy mely állapotok értékesek (vagy nem), anélkül , hogy meg kellene tanulnunk az egyes cselekvések hatását az egyes állapotokban (mivel ez V-t is kiszámítja).

A normál DQN-vel ki kell számolnunk az egyes műveletek értékét abban az állapotban. De mi értelme van, ha az állam értéke rossz? Mi értelme kiszámolni az összes cselekedetet egy állapotban, amikor ezek a cselekmények halálhoz vezetnek?

Ennek következtében a leválasztással képesek vagyunk kiszámolni V (ek) et. Ez különösen olyan államok számára hasznos, ahol cselekedeteik nem befolyásolják releváns módon a környezetet. Ebben az esetben felesleges kiszámítani az egyes műveletek értékét. Például a jobbra vagy balra haladás csak akkor számít, ha fennáll az ütközés veszélye. És a legtöbb államban a cselekvés megválasztása nincs hatással a történésekre.

Világosabb lesz, ha a Dueling Network Architectures for Deep Reinforcement Learning című cikkben vesszük a példát.

Látjuk, hogy az értékhálózat-patakok figyelnek (a narancssárga elmosódás) az útra, és különösen a horizontra, ahol az autók szaporodnak. Figyel a pontszámra is.

Másrészt a jobb oldali első keretben az előnyáram nem nagyon figyel az úttestre, mert nincsenek autók elöl (tehát az akcióválasztás gyakorlatilag lényegtelen). De a második képkockában odafigyel, mivel közvetlenül előtte van egy autó, és a cselekvés megválasztása döntő fontosságú és nagyon fontos.

Az összesítő réteget illetően szeretnénk létrehozni a q értékeket minden egyes művelethez ebben az állapotban. Kísértésbe eshet, hogy a folyamokat a következőképpen egyesítjük:

De ha ezt megtesszük, beleesünk aaz azonosíthatóság kérdése , vagyis - adott Q (s, a) nem tudjuk megtalálni A (s, a) és V (s).

És ha nem találjuk meg V (s) és A (s, a) adott Q (s, a) értékeket, problémát jelent a hátterjedésünkben. A probléma elkerülése érdekében arra kényszeríthetjük az előnyfüggvény-becslőnket, hogy 0 előnye legyen a választott műveletnél.

Ehhez levonjuk az állam összes lehetséges cselekvésének átlagos előnyét.

Ezért ez az architektúra segít felgyorsítani a képzést. Kiszámíthatjuk egy állapot értékét anélkül, hogy kiszámítanánk a Q (s, a) értéket az adott állapot minden egyes műveletéhez. Ez segíthet abban, hogy sokkal megbízhatóbb Q értékeket találjunk az egyes műveletekhez azáltal, hogy leválasztjuk a becslést két folyam között.

Végrehajtás

Csak annyit kell tennie, hogy módosítsa a DQN architektúráját az alábbi új adatfolyamok hozzáadásával:

Kiemelt tapasztalatok visszajátszása

Elmélet

A Prioritized Experience Replay-t (PER) 2015-ben vezette be Tom Schaul. Az elképzelés az, hogy egyes tapasztalatok fontosabbak lehetnek, mint mások a képzés során, de előfordulhatnak ritkábban.

Mivel a tételből egységesen mintát veszünk (véletlenszerűen választjuk ki az élményeket), ezek a gazdag tapasztalatok ritkán vannak gyakorlatilag esélytelenek kiválasztani.

Ezért a PER segítségével megpróbáljuk megváltoztatni a mintavételi eloszlást egy olyan kritérium segítségével, amely meghatározza az egyes tapasztalatok elsőbbségét.

Kiemelt tapasztalatokat szeretnénk felhasználni, ahol nagy különbség van a jóslatunk és a TD cél között, mivel ez azt jelenti, hogy sokat kell tanulnunk róla.

TD hibánk nagyságának abszolút értékét használjuk:

És ezt a prioritást az egyes visszajátszási pufferek tapasztalatai közé helyezzük.

De nem tehetünk csak kapzsi prioritásokat, mert ez mindig ugyanazok a tapasztalatok (amelyeknek kiemelt prioritása van) kiképzéséhez vezet, és így túlzottan megfelelnek.

Tehát bevezetjük a sztochasztikus rangsorolást, amely generálja annak valószínűségét, hogy újrajátszásra válasszák.

Ennek következtében minden egyes időbeli lépés során amintacsoportot ezzel a valószínűségi eloszlással, és képezze rajta hálózatunkat.

De itt még mindig van egy problémánk. Ne feledje, hogy a szokásos Experience Replay használatakor sztochasztikus frissítési szabályt használunk. Ennek eredményeként a tapasztalatok mintavételének meg kell egyeznie az alapul szolgáló eloszlással, amelyből származnak.

Ha van normális tapasztalatunk, akkor tapasztalatainkat normál eloszlásban választjuk ki - egyszerűen fogalmazva: véletlenszerűen választjuk meg tapasztalatainkat. Nincs elfogultság, mert minden tapasztalatnak ugyanaz az esélye, hogy éljenek vele, így a súlyainkat normálisan frissíthetjük.

Mivel azonban elsőbbségi mintavételt használunk, a tisztán véletlenszerű mintavételt elhagyjuk. Ennek eredményeként elfogultságot vezetünk be a kiemelt fontosságú minták felé (több esély van a kiválasztásra).

És ha normálisan frissítjük a súlyainkat, fennáll annak a kockázata, hogy túl illeszkedünk. A kiemelt fontosságú mintákat valószínűleg sokszor használják az edzéshez, összehasonlítva az alacsony prioritású tapasztalatokkal (= torzítás). Ennek eredményeként a súlyainkat csak egy kis tapasztalattal fogjuk frissíteni, amelyeket valóban érdekesnek tartunk.

Ennek az elfogultságnak a korrigálásához fontossági mintavételi súlyokat (IS) használunk, amelyek a gyakran látott minták súlyának csökkentésével módosítják a frissítést.

A kiemelt mintáknak megfelelő súlyok nagyon kevéssé módosíthatók (mivel a hálózat ezeket a tapasztalatokat sokszor látja), míg az alacsony prioritású mintáknak megfelelőek teljes frissítést kapnak.

A b szerepe annak ellenőrzése, hogy ezek a fontossági mintavételi súlyok mennyire befolyásolják a tanulást. A gyakorlatban a b paramétert 1-ig izzítják az edzés időtartama alatt, mert ezek a súlyok fontosabbak a tanulás végén, amikor a q értékeink közeledni kezdenek. A cikkben kifejtettek szerint a frissítések elfogulatlansága a konvergencia közelében a legfontosabb.

Végrehajtás

Ezúttal a megvalósítás egy kicsit fantasztikusabb lesz.

Először is, nem csak úgy tudjuk megvalósítani a PER-t, hogy az összes tapasztalat-visszajátszási puffert prioritásuk szerint rendezzük. Ez egyáltalán nem lesz hatékony az O (nlogn) beszúrás és az O (n) miatt a mintavételhez.

Amint ebben a nagyon jó cikkben kifejtettük, egy tömb rendezése helyett egy másik adatstruktúrát kell használnunk - egy válogatás nélküli fát.

A sumtree egy bináris fa, vagyis egy fa, amelynek minden csomópontnál legfeljebb két gyermeke van. A levelek (legmélyebb csomópontok) tartalmazzák a prioritási értékeket, a levelekre mutató adattömb pedig a tapasztalatokat.

A fa frissítése és a mintavétel valóban hatékony lesz (O (log n)).

Ezután létrehozunk egy memóriaobjektumot, amely tartalmazza az összegünket és az adatainkat.

Ezután a k méretű minibatch mintavételéhez a [0, total_priority] tartomány k tartományokra lesz felosztva. Minden tartományból egységesen vesznek mintát.

Végül az átmenetek (tapasztalatok), amelyek megfelelnek ezeknek a mintavételezett értékeknek, lekerülnek a sumtree-ből.

Sokkal világosabb lesz, ha a jegyzetfüzet teljes részleteire merülünk.

Doom Deathmatch ügynök

Ez az ügynök Dueling Double Deep Q Learning, PER és fix q-célokkal.

Készítettünk egy video oktatóanyagot a megvalósításról: Itt van a notebook

Ez minden! Most létrehozott egy okosabb ügynököt, aki megtanulja játszani a Doom-ot. Fantasztikus! Ne feledje, hogy ha igazán jó teljesítményű ügynököt szeretne, sokkal több GPU órára van szüksége (kb. Két napos képzés)!

Azonban ügynökünk csak 2-3 órás CPU-képzéssel (igen CPU-val) megértette, hogy meg kell ölniük az ellenségeket, mielőtt tovább tudnának lépni. Ha ellenségek megölése nélkül haladnak előre, a mellény megszerzése előtt megölik őket.

Ne felejtse el egyedül végrehajtani a kód egyes részeit. Nagyon fontos megpróbálni módosítani az általam megadott kódot. Próbáljon korszakokat hozzáadni, megváltoztatni az architektúrát, rögzített Q-értékeket adni, megváltoztatni a tanulási sebességet, keményebb környezetet használni stb. Kísérletezz, érezd jól magad!

Ne feledje, hogy ez egy nagy cikk volt, ezért feltétlenül értse meg, miért használjuk ezeket az új stratégiákat, hogyan működnek és milyen előnyökkel jár ezek használata.

A következő cikkben megismerhetünk egy fantasztikus hibrid módszert az értékalapú és a házirend-alapú megerősítő tanulási algoritmusok között. Ez a korszerű algoritmusok alapja : az Advantage Actor Critic (A2C). Olyan ügynököt vezet be, amely megtanul Outrun játékot játszani!

Ha tetszett a cikkem, kérjük, kattintson a? annyiszor, ahányszor tetszett a cikk, így mások láthatják ezt itt a Médiumon. És ne felejtsd el követni!

Ha bármilyen gondolata, észrevétele, kérdése van, nyugodtan írjon megjegyzést alább, vagy küldjön nekem egy e-mailt: [email protected], vagy tweeteljen @ThomasSimonini.

Tanulj tovább, maradj fantasztikus!

Mély megerősítésű tanfolyam a Tensorflow segítségével? ️

? Tanmenet

? Videó verzió

1. rész: Bevezetés a megerősítő tanulásba

2. rész: Merüljön el mélyebben a megerősítő tanulásban a Q-tanulással

3. rész: Bevezetés a mély Q-tanulásba: játsszuk a Doom-ot

3+ rész: Fejlesztések a mély Q tanulásban: Dupla DQN párbaj, prioritásos tapasztalatok visszajátszása és fix Q-célok

4. rész: Bevezetés a házirend-színátmenetekbe a Doom és Cartpole segítségével

5. rész: Bevezetés az Advantage Actor Critic módszerekbe: játsszuk a Sonic the Hedgehog-t!

6. rész: Proximal Policy Optimization (PPO) Sonic the Hedgehog 2 és 3 alkalmazással

7. rész: A kíváncsiság által vezérelt tanulás megkönnyítette az I. részt