Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
Učení s časovým rozdílem, Q-learning a SARSA na chůzi po útesu, ε-hladový průzkum, on-policy a off-policy, DQN s pamětí zážitků a cílovou sítí na vozíku s tyčí napsané od nuly, a proč se učení DQN tak snadno rozpadne.
Série Základy AI Díl 79 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Jak se agent učí hodnoty akcí bez znalosti pravidel světa.
- Proč Q-learning a SARSA na útesu volí jinou cestu.
- Co dělají paměť zážitků a cílová síť v DQN a proč je DQN vrtkavé.
Co se hodí znát předem: Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice, Neuronová síť od nuly: zpětné šíření chyby krok za krokem, Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
V minulém dílu jsme nejlepší strategii spočítali přesně, protože jsme znali pravidla světa: kam která akce s jakou pravděpodobností vede a co za ni agent dostane. Skutečný agent je nezná. Robot neví, jak přesně mu proklouzne kolo, program hrající hru nezná vnitřek hry. Musí zkoušet a učit se z toho, co se stalo. V tomhle dílu napíšeme dva takové algoritmy: Q-learning s tabulkou a DQN, kde tabulku nahradí neuronová síť — přesně ta kombinace, se kterou DeepMind v roce 2015 naučil počítač hrát desítky her na Atari z obrazovky.
Navazuje na díly Markovovy rozhodovací procesy a Neuronová síť od nuly.
1. Učení ze zkušenosti
Definice — učení s časovým rozdílem (TD)
Nechť (S, A, P, R, γ) je MDP (značení z minulého dílu), π strategie, podle které agent jedná, V : S → ℝ dosavadní odhad hodnotové funkce Vπ a α ∈ (0, 1] rychlost učení. Nechť (s, a, r, s′) ∈ S × A × ℝ × S je jeden skutečně prožitý přechod: agent byl ve stavu s, zvolil akci a, dostal odměnu r = R(s, a, s′) a dostal se do s′. Definujeme
- TD cíl y = r + γ V(s′) (je-li s′ koncový, V(s′) = 0, tedy y = r);
- TD chybu δ = y − V(s);
- TD krok (metoda TD(0)): nový odhad V′ : S → ℝ je V′(s) = V(s) + α δ, V′(u) = V(u) pro všechna u ∈ S, u ≠ s.
Místo průměru ∑s′ P(s′ | s, a) […] přes všechny možné následující stavy (jako v Bellmanově rovnici) se tedy použije jediný prožitý přechod, P ani R znát nemusíme. Cíl y obsahuje vlastní odhad V(s′) — odhad se opravuje podle jiného odhadu (bootstrapping).
Ráno odhadnete, že do práce dojedete za 30 minut. Po deseti minutách stojíte v zácpě a navigace tvrdí, že zbývá ještě 35. Nemusíte čekat, až dojedete — už teď víte, že ranní odhad byl o 15 minut mimo, a příště ho trochu zvýšíte. Učíte se z rozdílu mezi dvěma po sobě jdoucími odhady.
V(s) ← V(s) + α [r + γ V(s′) − V(s)]
- V(s)
- dosavadní odhad hodnoty stavu, ze kterého jsme vyšli — ten opravujeme; uvnitř závorky se odečítá, aby oprava byla úměrná chybě, ne celé hodnotě
- α
- rychlost učení, 0 < α ≤ 1 — jak velký kus chyby přijmeme; jeden přechod je náhodný vzorek, takže mu nevěříme úplně
- r
- skutečně obdržená odměna — jediná část cíle, která je změřená, ne odhadnutá
- γ
- diskont — hodnota dalšího stavu přijde o krok později, stejně jako v Bellmanově rovnici
- V(s′)
- odhad hodnoty stavu, kam jsme skutečně došli — zastupuje celou zbývající budoucnost, kterou jsme ještě neprožili (bootstrapping); místo průměru ∑ P(s′ | …) jediný vzorek
Příklad — cesta do práce v číslech
Odhad z domova V(doma) = 30 minut. Po r = 10 minutách jízdy jste v zácpě a odhad odtud je V(zácpa) = 35. Čas se nediskontuje (γ = 1) a místo odměny sčítáme minuty, takže TD cíl je 10 + 1 · 35 = 45 a TD chyba 45 − 30 = 15 (barvy podle vzorce výše).
- s α = 0,5: nový odhad 30 + 0,5 · 15 = 37,5 minuty,
- s α = 0,1: 30 + 0,1 · 15 = 31,5 minuty,
- s α = 1: rovnou 45 — poslední zkušenost by úplně přepsala všechny dřívější.
Věta — s pevným α je odhad klouzavý průměr cílů
Nechť α ∈ (0, 1], n ∈ ℕ, n ≥ 1, Q0 ∈ ℝ a c1, …, cn ∈ ℝ (cíle). Nechť pro k = 1, …, n
Qk = Qk−1 + α (ck − Qk−1).
Pak
Qn = (1 − α)n Q0 + ∑k=1n α (1 − α)n−k ck,
a váhy jsou nezáporné se součtem (1 − α)n + ∑k=1n α (1 − α)n−k = 1 — Qn je vážený průměr Q0 a cílů.
Důkaz. Pravidlo jde přepsat na Qk = (1 − α) Qk−1 + α ck a dosadit opakovaně (indukcí podle n). Součet vah plyne ze vzorce pro geometrickou řadu: ∑k=1n α (1 − α)n−k = α · 1 − (1 − α)n/α = 1 − (1 − α)n. ∎
Váhy klesají geometricky: s α = 0,5 má poslední cíl váhu 0,5, předposlední 0,25, další 0,125… Starší zkušenosti se tedy postupně zapomínají — to pomáhá, když se cíle mění (a v TD učení se mění, protože jsou počítané z odhadů, které se samy učí), ale v náhodném světě odhad kolísá. Proto teorie pro jistou konvergenci chce α postupně zmenšovat.
2. Q-learning
Definice — Q-learning a SARSA
Nechť (S, A, P, R, γ) je MDP, Q : S × A → ℝ tabulka dosavadních odhadů hodnot akcí (na začátku třeba všude 0), α ∈ (0, 1] rychlost učení a (s, a, r, s′) prožitý přechod jako v definici TD. Pro koncový stav s′ klademe Q(s′, a′) = 0 pro všechna a′ ∈ A.
- Q-learning (Christopher Watkins, 1989) po každém přechodu změní jediné políčko tabulky: Q(s, a) ← Q(s, a) + α [r + γ · maxa′ ∈ A Q(s′, a′) − Q(s, a)]; ostatní políčka Q(u, b), (u, b) ≠ (s, a), zůstanou beze změny.
- SARSA potřebuje navíc akci a′ ∈ A, kterou agent v s′ podle své strategie opravdu zvolí (odtud název: s, a, r, s′, a′), a maximum nahradí její hodnotou: Q(s, a) ← Q(s, a) + α [r + γ · Q(s′, a′) − Q(s, a)].
Q-learning se tedy učí hodnotu nejlepšího chování Q*, SARSA hodnotu Qπ toho, jak se agent skutečně chová, včetně zkoušení. Pro Q-learning platí (Watkins a Dayan, 1992): je-li γ < 1, odměny omezené, každá dvojice (s, a) se opravuje nekonečněkrát a rychlosti učení αk(s, a) při k-té opravě políčka (s, a) splňují ∑k αk = ∞ a ∑k αk2 < ∞, pak Q konverguje k Q* s pravděpodobností 1.
Tabulka „jak dobré je udělat tohle tady“. Po každém kroku se políčko opraví podle toho, co přišlo hned potom: odměna plus jak dobře to vypadá z nového místa. Q-learning počítá, jako by odtud dál hrál dokonale; SARSA počítá s tím, že občas udělá hloupost.
Q(s, a) ← Q(s, a) + α [r + γ · maxa′ Q(s′, a′) − Q(s, a)]
- Q(s, a)
- políčko tabulky pro právě vyzkoušenou akci — opravuje se jen ono; ostatní akce v s se nezměnily, protože o nich tenhle krok nic neřekl
- α
- rychlost učení — u nás 0,5: svět na útesu je deterministický, takže se nového cíle nemusíme bát
- r
- odměna za krok: −1, nebo −100 za pád
- γ
- diskont — na útesu γ = 1, protože epizoda vždy skončí a každý krok stojí −1, takže kratší cesta je lepší i bez diskontu
- maxa′ Q(s′, a′)
- hodnota nejlepší akce v novém stavu — Q-learning předpokládá, že odtud dál bude hrát nejlépe, i když ve skutečnosti občas zkusí náhodnou akci; v grafech níže je Q-learning jantarový
# Q-learning (a SARSA) na chůzi po útesu
Q(s, a) = 0 pro všechny stavy a akce
pro každou epizodu:
s = start
a = ε-hladová akce podle Q v s
dokud s není cíl:
proveď a, pozoruj r a s′ # pád: r = −100, s′ = start
a′ = ε-hladová akce podle Q v s′
cíl = max přes b Q(s′, b) # Q-learning
cíl = Q(s′, a′) # SARSA (místo řádku výš)
if s′ je cíl: cíl = 0
Q(s, a) = Q(s, a) + α · (r + γ · cíl − Q(s, a))
s = s′; a = a′
Příklad — první pády (α = 0,5, γ = 1, tabulka začíná na nulách)
Agent hned na startu zkusí krok doprava a spadne: r = −100, s′ = start, kde jsou zatím všechny hodnoty 0. Nová hodnota Q(start, →) = 0 + 0,5 · (−100 + 1 · 0 − 0) = −50 (barvy podle vzorce výše).
Pak zkusí krok nahoru: r = −1, nové pole má samé nuly, Q(start, ↑) = 0 + 0,5 · (−1 + 1 · 0 − 0) = −0,5.
Když na startu spadne podruhé, je největší hodnota na startu pořád 0 (akce ↓ a ← ještě nezkusil), a tak Q(start, →) = −50 + 0,5 · (−100 + 1 · 0 − (−50)) = −75. S každým dalším pádem se blíží k −100 a víc.
Všimněte si vedlejšího účinku: všechny skutečné odměny jsou záporné, takže nezkoušené akce s nulou vypadají lépe než vyzkoušené. Tabulka začínající na nulách tu sama žene agenta zkoušet nové věci (tzv. optimismus vůči neznámému) — v hladovém výběru dřív, než přijde na řadu náhoda ε.
Definice — ε-hladová strategie
Nechť S je množina stavů, A konečná neprázdná množina akcí, Q : S × A → ℝ a ε ∈ [0, 1]. Pro každé s ∈ S nechť a*(s) ∈ argmaxa ∈ A Q(s, a) je hladová akce (při více maximech jedno z nich). ε-hladová strategie vůči Q je stochastická strategie
π(a | s) = 1 − ε + ε/|A| pro a = a*(s), π(a | s) = ε/|A| pro a ≠ a*(s).
Ekvivalentně: s pravděpodobností 1 − ε zvol a*(s), s pravděpodobností ε zvol akci rovnoměrně náhodně z celé A (i z hladové). Pro ε = 0 je to hladová strategie. Bez náhodných akcí by agent nikdy nezkusil nic, co se mu zatím nezdá nejlepší, a mohl by uvíznout u první slušné cesty, kterou najde. Je to nejjednodušší řešení dilematu průzkum, nebo využití.
Do oblíbené restaurace chodíte devětkrát z deseti. Jednou za čas zkusíte novou — jinak se nikdy nedozvíte, že o ulici dál vaří líp.
Příklad — pravděpodobnosti akcí při ε = 0,1
Náhodná akce se vybírá ze všech |A| = 4 akcí, tedy i z té nejlepší. Proto
π(a | s) = 1 − ε + ε/|A| = 1 − 0,1 + 0,1/4 = 0,925 pro nejlepší akci a ε/|A| = 0,1/4 = 0,025 pro každou ze tří ostatních.
Každá konkrétní „špatná“ akce — třeba krok dolů do útesu — tedy přijde v jednom kroku ze 40.
3. Chůze po útesu: Q-learning proti SARSA
Klasický pokus z učebnice Richarda Suttona a Andrewa Barta. Mřížka 12 × 4, start vlevo dole, cíl vpravo dole a mezi nimi útes. Každý krok stojí −1, pád do útesu −100 a návrat na start. Bez diskontu. Nejkratší cesta vede těsně podél útesu (13 kroků). Oba algoritmy se učí 500 epizod s ε = 0,1 a α = 0,5, každý v 50 nezávislých bězích.
Q-learning se ve všech 50 z 50 běhů naučil nejkratší cestu podél útesu. SARSA si ve 41 bězích zvolila cestu horním okrajem mřížky, co nejdál od útesu (17 kroků), v jednom ještě o dva kroky delší a v 8 bězích hladová strategie po 500 epizodách do cíle ještě nedojde — zacyklí se v místech, kam se agent při učení skoro nedostal.
A teď paradox: během učení na tom je lépe SARSA. Za posledních sto epizod dostává průměrně −25,1, Q-learning −51,1. Q-learning chodí po okraji útesu, a protože každý desátý krok je náhodný, padá v průměru 0,34krát za epizodu; SARSA jen 0,04krát. Q-learning se naučil, co je nejlepší bez zkoušení; SARSA, co je nejlepší se zkoušením. Které chceme, záleží na tom, jestli agent bude zkoušet i v ostrém provozu — robot, který se učí na skutečném stroji, by měl myslet jako SARSA.
Příklad — kolikrát spadne Q-learning (zjednodušený odhad)
Naučená cesta Q-learningu vede ze startu nahoru a pak deset polí těsně nad útesem. Na startu a na každém z těch deseti polí vede do útesu krok dolů (na startu krok doprava), tedy jedna konkrétní akce — při ε = 0,1 s pravděpodobností 0,025. Projít 11 takových polí bez pádu:
0,97511 = 0,757, takže pád během jednoho průchodu má pravděpodobnost q = 1 − 0,757 = 0,243.
Po pádu začíná agent znovu na startu, takže počet pádů do úspěšného průchodu má geometrické rozdělení se střední hodnotou q/1 − q = 0,243/0,757 = 0,32 pádu za epizodu. Naměřeno 0,34 — o něco víc, protože odhad zanedbává náhodné kroky doleva, po kterých agent stráví nad útesem ještě další kroky. SARSA chodí horním okrajem, tři řádky nad útesem: tam by ji do útesu dostalo až několik náhodných kroků dolů po sobě. Riskuje hlavně na startu, a to samo dává 0,025/0,975 = 0,026 pádu za epizodu; naměřeno 0,04.
Definice — učení podle vlastní a cizí strategie (on-policy / off-policy)
Nechť metoda učení odhaduje hodnotovou funkci Vπ nebo Qπ nějaké strategie π (cílová strategie) z přechodů, které vznikají, když agent jedná podle strategie b (chovací strategie).
- Metoda je on-policy, právě když cílová a chovací strategie jsou totožné, π = b. Příklad: SARSA s ε-hladovou strategií — odhaduje Qπ té ε-hladové strategie, podle které jedná.
- Metoda je off-policy, právě když připouští π ≠ b. Příklad: Q-learning — jedná ε-hladově, ale díky maximu v cíli odhaduje Q* hladové (optimální) strategie.
Off-policy metody se proto mohou učit i ze zážitků nasbíraných dřív (jinou, starší strategií) nebo někým jiným.
On-policy: učím se z vlastních jízd a hodnotím je takové, jaké jsou. Off-policy: dívám se i na cizí jízdy (nebo své staré) a odvozuji z nich, jak by jel ten nejlepší řidič.
4. Když se tabulka nevejde: DQN
Tabulka potřebuje řádek pro každý stav. Vozík s tyčí z dílu o neuroevoluci má stav ze čtyř reálných čísel (poloha a rychlost vozíku, úhel a úhlová rychlost tyče); hra na Atari má stav z obrazovky 210 × 160 pixelů. Žádná tabulka. Místo ní se Q(s, a) odhaduje neuronovou sítí.
Definice — Deep Q-Network (DQN)
Nechť je dán MDP s konečnou množinou akcí A a se stavy popsanými vektory, S ⊆ ℝd (množina stavů tu nemusí být konečná; součty přes s′ v definicích minulého dílu se pak nahradí středními hodnotami). Nechť Q(·, ·; θ) : S × A → ℝ je neuronová síť s parametry θ ∈ ℝm, která pro stav s vrátí vektor (Q(s, a; θ))a ∈ A ∈ ℝ|A|. DQN (Volodymyr Mnih a kol., DeepMind, 2015) má navíc
- paměť zážitků (replay buffer) D — konečný seznam nejvýš N posledních přechodů (s, a, r, s′, k), kde k ∈ {0, 1} udává, zda je s′ koncový;
- cílovou síť — parametry θ− ∈ ℝm, které se jen jednou za C kroků zkopírují z θ (θ− ← θ).
Pro přechod z D je cíl y = r + (1 − k) γ maxa′ ∈ A Q(s′, a′; θ−) a DQN minimalizuje vzhledem k θ (při pevném θ−) ztrátu
L(θ) = E(s, a, r, s′, k) ~ D [(y − Q(s, a; θ))²],
kde ~ D znamená rovnoměrně náhodný výběr přechodu z paměti; v praxi se střední hodnota odhadne průměrem přes náhodnou dávku přechodů. Agent tedy v každém kroku jedná (ε-hladově vůči Q(·, ·; θ)), uloží přechod do D, udělá jeden gradientní krok na L a každých C kroků obnoví θ−. Paměť zážitků zajistí, že se síť učí z náhodných dávek, ne z posledních kroků za sebou; cílová síť, že se cíl neposouvá s každým krokem učení.
Paměť zážitků: místo učení jen z posledních pár minut si agent prohlíží náhodné vzpomínky z celé historie, takže nezapomene, co uměl včera. Cílová síť: když se učíte trefovat terč, nepomůže, když se terč posune pokaždé, když vystřelíte. Necháme ho chvíli na místě.
L(θ) = E(s, a, r, s′) ~ D [(r + γ maxa′ Q(s′, a′; θ−) − Q(s, a; θ))²]
- E… ~ D
- průměr přes náhodné přechody z paměti zážitků D — míchá staré a nové zážitky, takže po sobě jdoucí, silně podobné kroky netáhnou síť jedním směrem
- r
- odměna — na vozíku +1 za každý krok, kdy tyč stojí
- γ
- diskont 0,99 — síť „vidí“ zhruba 1/1 − γ = 100 kroků dopředu
- max Q(s′, a′; θ−)
- cíl z cílové sítě se zmrazenými parametry θ− — stejné maximum jako v tabulkovém Q-learningu, jen se při kroku učení nehýbe; když stav s′ znamená pád, je tenhle člen 0
- Q(s, a; θ)
- odhad učené sítě pro akci, která se opravdu udělala — jediné, co se při kroku učení mění (gradient jde jen přes θ)
Definice — Huberova ztráta
Huberova ztráta (s prahem 1) je funkce H : ℝ → ℝ,
H(d) = d2/2 pro |d| ≤ 1, H(d) = |d| − 1/2 pro |d| > 1.
Je spojitě diferencovatelná s derivací H′(d) = d pro |d| ≤ 1 a H′(d) = sgn d = ±1 pro |d| > 1. Naše DQN dosazuje d = Q(s, a; θ) − y a místo čtverce chyby minimalizuje E[H(d)] (jako původní článek, který ořezává chybu na ±1): malé chyby se opravují jako u čtverce, velká chyba (třeba když cíl skočí po kopírování cílové sítě) dá nejvýš jednotkový gradient a jeden divný přechod síť nerozhází.
# DQN na vozíku s tyčí
síť Q(·; θ) 4 → 64 → 64 → 2, cílová síť θ⁻ = θ, paměť D prázdná
s = náhodný start
pro t = 1 … 30 000:
ε = max(0,05; 1 − 0,95 · t / 10 000)
a = náhodná akce s pravděpodobností ε, jinak argmax Q(s, ·; θ)
proveď a, pozoruj s′ a zda tyč padla
ulož (s, a, r = 1, s′, padla) do D # nejstarší vypadne nad 20 000
s = nový start, když tyč padla nebo vydržela 500 kroků, jinak s′
z D vyber náhodnou dávku 32 přechodů, pro každý:
cíl = r, když padla
cíl = r + γ · max Q(s′, ·; θ⁻), jinak
jeden krok Adamu na průměrné Huberově ztrátě (Q(s, a; θ) − cíl)
každých 500 kroků: θ⁻ = θ
Příklad — průzkum a velikost hodnot
Průzkum klesá lineárně: ε0 = 1 (samé náhodné akce), v kroku 5 000 je ε = 1 − 0,95 · 0,5 = 0,525 a od kroku 10 000 zůstává 0,05.
Jak velké hodnoty se síť musí naučit? Kdyby tyč stála věčně, byla by hodnota 1 + 0,99 + 0,99² + … = 1/1 − 0,99 = 100; pro epizodu omezenou na 500 kroků je to 1 − 0,99500/1 − 0,99 = 99,3. Na začátku síť vrací čísla blízko nuly, takže cíle musí během učení vyrůst o dva řády — a s nimi se pořád posouvají.
Naše DQN: síť 4 → 64 → 64 → 2 (dvě akce: tlačit vlevo, nebo vpravo), odměna +1 za každý krok, kdy tyč stojí, γ = 0,99, paměť 20 000 přechodů, dávka 32, cílová síť se kopíruje po 500 krocích, ε klesá z 1 na 0,05 během prvních 10 000 kroků. Celkem 30 000 kroků. Každých 2 500 kroků měříme, kolik kroků vydrží hladová strategie (průměr ze čtyř startů, nejvýš 500, tedy 10 sekund).
| varianta | nejlepší měření | kdy | na konci |
|---|---|---|---|
| plné DQN, semínko 1 | 500 | krok 17 500 | 110 |
| plné DQN, semínko 2 | 500 | krok 12 500 | 217 |
| bez paměti zážitků | 192 | krok 7 500 | 124 |
| bez cílové sítě | 9 | krok 2 500 | 9 |
Plné DQN se naučí tyč udržet celých 500 kroků — v běhu se semínkem 1 poprvé v kroku 17 500. Jenže hned zase zapomene: na konci učení drží jen 110 kroků. Druhý běh kolísá podobně. Bez paměti zážitků (učí se jen z posledních 32 kroků) se síť nedostane přes 192. A bez cílové sítě se učení úplně rozpadne: strategie vydrží po celou dobu jen 9 kroků — přesně tolik, kolik vydrží vozík, který tlačíte pořád doprava. Síť se „naučila“ jedinou akci.
5. Proč je DQN tak vrtkavé
Definice — smrtící trojice (deadly triad)
Sutton a Barto tak označují situaci, kdy metoda učení hodnot má současně všechny tři vlastnosti:
- aproximace funkce: odhad není tabulka, ale funkce s parametry θ ∈ ℝm (třeba síť) a parametrů je méně než stavů, takže změna θ kvůli jednomu stavu změní odhady i v jiných stavech;
- bootstrapping: cíl obsahuje vlastní odhad, např. y = r + γ maxa′ Q(s′, a′; θ);
- učení off-policy: přechody, ze kterých se učí, pocházejí z jiné strategie než cílová (viz definici výše).
Když chybí kterákoli ze tří vlastností, dá se nestabilitě vyhnout; když jsou přítomny všechny tři, neexistuje obecná záruka konvergence a odhady mohou kmitat nebo se rozbíhat do nekonečna (známý je Bairdův protipříklad). DQN obsahuje všechny tři — paměť zážitků a cílová síť nebezpečí jen zmírňují.
Síť se učí podle vlastních odhadů. Když se odhad v jednom stavu zvedne, zvedne se (protože síť zobecňuje) i v podobných stavech, včetně toho, podle kterého se počítá cíl. Ten se zvedne, odhad se za ním natáhne… Pes, který honí vlastní ocas.
V praxi se proto přidává řada úprav: Double DQN (Hado van Hasselt a kol., 2015) odděluje výběr nejlepší akce od jejího ohodnocení a tlumí systematické nadhodnocování, které maximum v cíli přináší; dál prioritizovaná paměť, souboj hodnoty a výhody (dueling) a další — jejich kombinace se jmenuje Rainbow (2017). A úplně praktická rada: během učení si ukládejte síť z nejlepšího měření, ne tu poslední.
y = r + γ Q(s′, argmaxa′ Q(s′, a′; θ); θ−)
- r
- odměna, beze změny
- γ
- diskont, beze změny
- argmax Q(s′, a′; θ)
- výběr akce učenou sítí — kterou akci bychom v s′ zvolili
- Q(s′, …; θ−)
- ohodnocení té akce cílovou sítí — jiný odhad s jinými chybami, takže akce, kterou učená síť náhodou přecenila, nedostane automaticky i přeceněnou hodnotu
Příklad — proč maximum přeceňuje (zjednodušeně)
Dvě akce mají skutečnou hodnotu 0, ale odhad každé je zatížený nezávislou chybou +1, nebo −1 (obojí s pravděpodobností 1/2). Čtyři stejně pravděpodobné možnosti dají maximum odhadů 1, 1, 1 a −1, takže
E[max(Q̂1, Q̂2)] = 1 + 1 + 1 − 1/4 = 0,5 > 0 = max(Q1, Q2).
Maximum přes zašuměné odhady je v průměru větší než maximum skutečných hodnot, a protože se cíl s maximem dosazuje znovu a znovu, přecenění se šíří. Když akci vybere jeden odhad a ohodnotí druhý, nezávislý, je střední hodnota ohodnocení 0 — chyba druhého odhadu už s výběrem nesouvisí.
Hodnotové metody jako DQN fungují dobře, když je akcí málo (tlačit vlevo, nebo vpravo; tlačítka na ovladači). Pro spojité akce — jakou silou otočit kloubem robota — je výhodnější učit přímo strategii. To je téma dalšího dílu o policy gradient a PPO.
6. Shrnutí
- Bez znalosti pravidel světa se hodnoty učí z prožitých přechodů: odhad se posune k cíli r + γ · odhad dalšího stavu.
- Q-learning se učí hodnotu nejlepšího chování (off-policy), SARSA hodnotu chování se zkoušením (on-policy).
- Na útesu: Q-learning najde nejkratší cestu (13 kroků), ale při ε = 0,1 padá 0,34krát za epizodu; SARSA jde bezpečněji a během učení dostává víc (−25,1 proti −51,1).
- DQN nahradí tabulku sítí; bez paměti zážitků a cílové sítě se neučí (nejvýš 192, resp. 9 kroků).
- I plné DQN kolísá: tyč udrží 500 kroků a pak to zase zapomene — smrtící trojice.
Chcete si to osahat? Nechte AI agenta naučit DQN na prostředí CartPole z knihovny Gymnasium a nakreslit křivku učení pro pět semínek. Pak ať přidá Double DQN a porovná.
Máte na to jiný názor? Napište na support@coden-app.com.