Přeskočit na obsah
coden

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.

12 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 79 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • 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

  1. TD cíl y = r + γ V(s′) (je-li s′ koncový, V(s′) = 0, tedy y = r);
  2. TD chybu δ = y − V(s);
  3. 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).

Laicky řečeno

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
r + γ V(s′) je TD cíl, výraz v hranaté závorce TD chyba.
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.

  1. 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.
  2. 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.

Laicky řečeno

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ý
SARSA má místo jantarového maxima Q(s′, a′) pro akci a′, kterou ε-hladová strategie v s′ opravdu zvolí (v grafech zelená). Je to vzorkový tvar Bellmanovy rovnice: TD cíl s maximem nahradil ∑ P(s′ | s, a) […] z minulého dílu jediným prožitým přechodem.
# 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í.

Laicky řečeno

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.

S C
Naučené (hladové) cesty ze startu S do cíle C; červeně útes Q-learning (13 kroků) SARSA (17 kroků)

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.

−150−100−500 0100200300400500 epizoda (pořadí) součet odměn (body odměny)
Součet odměn v epizodě během učení (průměr 50 běhů, ε = 0,1) Q-learning SARSA nejkratší cesta (−13)

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).

  1. 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á.
  2. 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.

Laicky řečeno

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

  1. 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ý;
  2. 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í.

Laicky řečeno

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 θ)
Tabulkový Q-learning dělá s jedním políčkem totéž, co gradientní krok tady se všemi parametry: táhne Q(s, a) k TD cíli.
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).

0100200300400500 010 00020 00030 000 krok učení (počet kroků v prostředí) udrží tyč (kroky, nejvýš 500)
Kolik kroků udrží tyč hladová strategie DQN během učení (nejvýš 500) plné DQN, semínko 1 plné DQN, semínko 2 bez paměti zážitků bez cílové sítě
variantanejlepší měřeníkdyna konci
plné DQN, semínko 1500krok 17 500110
plné DQN, semínko 2500krok 12 500217
bez paměti zážitků192krok 7 500124
bez cílové sítě9krok 2 5009

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:

  1. 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;
  2. bootstrapping: cíl obsahuje vlastní odhad, např. y = r + γ maxa′ Q(s′, a′; θ);
  3. 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í.

Laicky řečeno

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
Cíl Double DQN; obyčejné DQN bere výběr i ohodnocení z téže sítě θ− (max).
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.

Agent na vašem počítači, ovládaný z telefonu