Policy gradient a PPO: učení přímo strategie
Stochastická strategie jako síť, REINFORCE a věta o gradientu strategie, základní úroveň a výhoda, actor-critic, PPO s ořezem napsané od nuly na vozíku s tyčí, co se stane bez ořezu, a jak PPO doladilo jazykové modely.
Série Základy AI Díl 80 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 učí strategie přímo z výsledků, bez tabulky hodnot.
- Proč pomáhá odečíst základní úroveň a co je výhoda.
- Proč je ořez v PPO tak důležitý a jak souvisí s RLHF.
Co se hodí znát předem: Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť, Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice, Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
DQN z minulého dílu se učí, jak dobrá je každá akce, a strategie z toho plyne až nepřímo: vyber akci s největší hodnotou. Druhá velká rodina metod jde rovnou: síť dostane stav a vrátí pravděpodobnosti akcí, a my ty pravděpodobnosti posouváme tak, aby dobré akce byly častější. Z této rodiny pochází PPO — algoritmus, který naučil roboty chodit, porazil profesionály ve hře Dota 2 a stál za doladěním ChatGPT. V tomhle dílu ho napíšeme od nuly a porovnáme s jednoduššími předchůdci.
Navazuje na díly Q-learning a DQN, Markovovy rozhodovací procesy a Softmax.
1. Učit rovnou strategii
Definice — parametrizovaná strategie
Nechť (S, A, P, R, γ) je MDP (značení z dílu Markovovy rozhodovací procesy) s konečnou množinou akcí A a počátečním rozdělením p(s0) na S, a nechť θ ∈ ℝm jsou parametry. Parametrizovaná (stochastická) strategie je systém strategií (πθ)θ ∈ ℝm, kde pro každé θ a každé s ∈ S je πθ(· | s) rozdělení pravděpodobnosti na A a πθ(a | s) je diferencovatelná funkce θ. Pro konečnou A se bere síť fθ : S → ℝ|A| a softmax jejích výstupů:
πθ(a | s) = efθ(s)a/∑b ∈ A efθ(s)b;
pro spojité akce síť vrací třeba střed a rozptyl normálního rozdělení. Cíl je očekávaný výnos jako funkce parametrů
J : ℝm → ℝ, J(θ) = Eπθ[G0],
a hledá se θ s co největším J(θ) gradientním výstupem θ ← θ + α ∇J(θ) s rychlostí učení α > 0 (∇ značí gradient podle θ).
DQN si vede tabulku „kolik bodů za který tah“ a hraje tah s nejvíc body. Strategie místo toho rovnou říká „v téhle situaci tlač doprava se 70 %, doleva s 30 %“. Výhody: funguje i se spojitými akcemi (jakou silou, jakým úhlem), náhoda je zabudovaná, takže agent sám zkouší, a malá změna parametrů znamená malou změnu chování.
Příklad — výnos jednoho pokusu na vozíku s tyčí
Odměna je +1 za každý krok a diskont γ = 0,99. Zbývá-li do konce epizody T − t kroků, je výnos geometrická řada:
Gt = 1 + γ + γ² + … + γT−t−1 = 1 − γT−t/1 − γ.
Na začátku epizody, která vydrží celých 500 kroků: G0 = 1 − 0,99500/0,01 = 99,34. Dvacet kroků před pádem: G = 1 − 0,9920/0,01 = 18,21. Krok těsně před pádem: G = 1. Výnos je tedy vždy kladný a nikdy nepřesáhne 1/1 − γ = 100 — to se bude hodit v oddílu o základní úrovni.
2. REINFORCE: posiluj, co vyšlo
Definice — věta o gradientu strategie a REINFORCE
Věta o gradientu strategie. Nechť (S, A, P, R, γ) je MDP s konečnými S a A a γ ∈ [0, 1], ve kterém každá epizoda s0, a0, r1, s1, …, sT skončí nejpozději po Tmax krocích (T ≤ Tmax), a nechť πθ je parametrizovaná strategie s πθ(a | s) > 0 pro všechna s, a, θ. Pak
∇J(θ) = Eπθ[ ∑t=0T−1 γt ∇ log πθ(at | st) · Gt ], Gt = ∑k=tT−1 γk−t rk+1.
Pro γ = 1 činitel γt zmizí a dostaneme tvar v rozboru níže. Praktické implementace (i naše) ho vynechávají i pro γ < 1; pak výsledek už není nestranný odhad ∇J(θ) (obecně dokonce není gradientem žádné funkce; Chris Nota a Philip Thomas, 2020), protože pozdější kroky epizody dostanou větší váhu, než jim podle věty patří — v praxi to přesto funguje dobře.
REINFORCE (Ronald Williams, 1992) je algoritmus:
- zvol počáteční θ ∈ ℝm (náhodné váhy sítě) a rychlost učení α > 0;
- odehraj strategií πθ epizody (u nás dohromady aspoň 2 000 kroků);
- v každé epizodě spočítej odzadu GT = 0 a Gt = rt+1 + γ Gt+1 pro t = T − 1, …, 0;
- spočítej odhad gradientu ĝ = průměr hodnot ∇ log πθ(at | st) · Gt přes všechny odehrané kroky;
- θ ← θ + α ĝ, data zahoď a pokračuj krokem 2, dokud nevyčerpáš rozpočet kroků v prostředí.
Pro softmax π = softmax(z) s výstupy sítě z ∈ ℝ|A| je gradient podle z roven ∇z log πa = 1a − π, kde 1a je vektor s jedničkou na místě akce a a nulami jinde.
Zahraj, podívej se, jak to dopadlo, a každý tah, který jsi udělal, udělej o kousek pravděpodobnějším — tím víc, čím lépe to po něm dopadlo. Tahy z povedených her se posilují víc než tahy z nepovedených. Nikdo nemusí říkat, který tah byl správný; stačí výsledek.
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]
- ∇J(θ)
- směr, kterým pootočit parametry, aby průměrný výnos rostl nejrychleji; spočítat ho přímo nejde, protože výnos závisí na θ jen přes náhodné hraní a neznámou fyziku prostředí
- Eπθ[ ∑t … ]
- průměr přes epizody odehrané současnou strategií — proto jde nahradit průměrem přes skutečně odehrané hry; a proto data od jiné strategie (starší, cizí) bez opravy nestačí
- ∇ log πθ(at | st)
- směr v parametrech, který zahranou akci zpravděpodobní; ∇ log π = ∇π/π dělí pravděpodobností, takže častá akce, která se v datech objevuje často, nedostane navíc víc posílení jen proto, že je častá
- Gt
- váha: jak dobře to po akci dopadlo; jen odměny od kroku t dál, protože akce nemůže ovlivnit odměny, které už padly
Věta — odkud vzorec pochází (trik s logaritmem)
Nechť platí předpoklady věty o gradientu strategie. Epizodu (trajektorii) τ = (s0, a0, s1, a1, …, sT) má strategie πθ s pravděpodobností
Pθ(τ) = p(s0) ∏t=0T−1 πθ(at | st) P(st+1 | st, at)
a nechť G(τ) = G0 je její výnos; trajektorií je konečně mnoho, takže J(θ) = ∑τ Pθ(τ) G(τ). Pak
∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],
protože ∇P = P · ∇ log P. Důkaz (náčrt): logaritmus změní součin na součet, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Na θ závisí jen prostřední součet, takže fyziku prostředí P znát nemusíme: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Nakonec u každého at zahodíme odměny před krokem t: na at nezávisejí, a jejich příspěvek má proto nulovou střední hodnotu (viz věta v dalším oddílu). Ze součtu ∑k γk rk+1 tak u kroku t zbude ∑k ≥ t γk rk+1 = γt Gt, což je tvrzení věty o gradientu strategie. ∎
Příklad — jeden krok REINFORCE se softmaxem
Dvě akce, výstupy sítě z = (0; 0), takže π = softmax(z) = (0,50; 0,50). Agent zahrál akci 1 („doprava“) a výnos od toho kroku byl G = 10. Pro softmax je ∇z log π(a) = 1a − π, tedy
∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5)
(barvy podle rozboru vzorce výše; výsledek je odhad ∇J z jediného kroku).
Krok výstupem s α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Nová strategie π = (e−0,5; e0,5)/e−0,5 + e0,5 = (0,269; 0,731). Akce, která vyšla, je teď pravděpodobnější. (Ve skutečné síti se mění váhy θ a k z se gradient dostane zpětným šířením; směr je týž.)
θ = náhodné váhy sítě strategie
opakuj:
odehraj celé epizody strategií π_θ, dokud není aspoň 2 000 kroků
pro každou epizodu odzadu: # G = 0 za koncem epizody
G_t = r_(t+1) + γ · G_(t+1)
g = průměr přes všechny kroky ∇ log π_θ(a_t | s_t) · G_t
θ = θ + α · g # výstup; u nás krokem Adamu
data zahoď — příště už jsou od jiné strategie
3. Rozptyl a základní úroveň
Definice — základní úroveň (baseline) a výhoda
Nechť (S, A, P, R, γ) je MDP a πθ parametrizovaná strategie.
- Základní úroveň (baseline) je libovolná funkce b : S → ℝ, která závisí jen na stavu, ne na akci. Odhad gradientu se základní úrovní je ĝ = ∑t ∇ log πθ(at | st) · (Gt − b(st)); podle věty níže má stejnou střední hodnotu jako odhad bez b, jen se tím může výrazně zmenšit rozptyl.
- Výhoda (advantage) strategie π je funkce Aπ : S × A → ℝ, Aπ(s, a) = Qπ(s, a) − Vπ(s), kde Qπ a Vπ jsou hodnotové funkce z dílu o MDP (písmeno A s argumenty tu značí výhodu, ne množinu akcí). Nejlepší běžná volba základní úrovně je b = Vπθ, v praxi odhadnutá druhou sítí; pak Gt − b(st) je odhad výhody.
- Actor-critic je metoda, která současně učí parametrizovanou strategii πθ („herec“) a odhad hodnotové funkce V ≈ Vπθ („kritik“) a odhad kritika používá v odhadu gradientu strategie.
Na vozíku s tyčí dostane agent +1 za každý krok, takže každý výnos je kladný — REINFORCE tedy posiluje každý tah, jen některé víc. Signál „tohle bylo lepší než obvykle“ se ztrácí v šumu. Odečtením očekávané úrovně se z toho stane „tenhle tah dopadl o 20 bodů líp, než se v téhle situaci čekalo“ — a horší tahy dostanou záporné znaménko.
∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ], A(s, a) = Q(s, a) − V(s)
- ∇ log πθ(at | st)
- směr „zahranou akci častěji“, stejně jako v REINFORCE
- Gt, Q(s, a)
- co po akci skutečně přišlo (Gt), resp. kolik to po ní dává v průměru (Q je střední hodnota Gt); samo o sobě skoro vždy kladné, takže nerozliší dobrou akci od průměrné
- b(st), V(s)
- laťka: kolik se v téhle situaci čeká bez ohledu na akci; po odečtení dostanou horší než průměrné akce záporné znaménko. Smí záviset jen na stavu, ne na akci — jinak by se gradient zkreslil (věta níže)
- A(s, a)
- výhoda: o kolik je akce a lepší než průměrná akce strategie v s; přesně ta informace, kterou chceme posilovat
Věta — základní úroveň nezkreslí gradient
Nechť A je konečná množina akcí, πθ parametrizovaná strategie s πθ(a | s) > 0, s ∈ S stav a b : S → ℝ funkce. Pak
- Ea ∼ πθ(· | s)[∇ log πθ(a | s)] = ∑a ∈ A πθ(a | s) ∇ log πθ(a | s) = 0;
- Ea ∼ πθ(· | s)[∇ log πθ(a | s) · b(s)] = 0.
Odečtení b(st) od Gt tedy střední hodnotu odhadu gradientu nezmění (stačí podmínit stavem st).
Důkaz: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Člen b(s) je pro pevné s konstanta, takže se dá vytknout před součet. ∎
Příklad — stejný průměr, jiný rozptyl
Jeden stav, dvě akce s π = (0,5; 0,5). Akce 1 vynese výnos 12, akce 0 výnos 10 — obojí kladné jako na vozíku. Složka odhadu gradientu podle výstupu z1 je z jednoho vzorku (1a=1 − 0,5) · (G − b) (barvy podle vzorce výše).
Bez základní úrovně (b = 0): padne-li akce 1, odhad je 0,5 · 12 = 6; padne-li akce 0, je −0,5 · 10 = −5. Průměr 6 − 5/2 = 0,5, rozptyl (6 − 0,5)² + (−5 − 0,5)²/2 = 30,25.
Se základní úrovní b = 11 (průměrný výnos): 0,5 · (12 − 11) = 0,5 a −0,5 · (10 − 11) = 0,5. Průměr je pořád 0,5, rozptyl 0.
Skutečný gradient je π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Oba odhady míří v průměru správně, ale bez laťky se jeden vzorek trefí vedle o ±5,5, s laťkou vůbec. Ve skutečnosti rozptyl na nulu neklesne (výnosy jsou náhodné a stavů je mnoho), ale princip je týž.
Změřili jsme to na začátku učení: 40 nezávislých dávek po 1 000 krocích téže náhodné strategie, z každé gradient REINFORCE. Už jen odečtení průměrného výnosu (konstantní základní úroveň) zmenší součet rozptylů složek gradientu z 0,177 na 0,131, tedy o 26 %. Naučená hodnota V(s), která rozliší dobré a špatné situace, pomáhá víc.
Definice — součet rozptylů složek gradientu
Nechť K ≥ 1 (u nás K = 40) a ĝ(1), …, ĝ(K) ∈ ℝm jsou odhady gradientu z K nezávislých dávek (vektory přes všech m vah sítě). Pro j = 1, …, m označme ḡj = 1/K ∑k=1K ĝj(k) průměr j-té složky. Součet rozptylů složek je číslo
∑j=1m 1/K ∑k=1K (ĝj(k) − ḡj)².
Je to stopa (výběrové) kovarianční matice odhadu — jedno číslo pro to, jak moc se odhad třese. Pokles: 1 − 0,131/0,177 = 0,26, tedy 26 %.
Naučenou V potřebuje i PPO níže. Výhodu přitom neodhaduje rozdílem Gt − V(st), ale kompromisem mezi ním a jednokrokovým odhadem z dílu o Q-learningu:
Ât = ∑l≥0 (γλ)l δt+l, δt = rt+1 + γ V(st+1) − V(st)
- Ât
- odhad výhody kroku t (GAE, John Schulman a kol., 2015) — to, čím se násobí ∇ log π
- δt
- TD chyba: o kolik dopadl jeden krok líp, než V čekala; jednokrokový odhad výhody s malým rozptylem, ale zkreslený, pokud se V plete
- rt+1
- odměna, která skutečně přišla — jediný kus skutečnosti v δ
- V(s)
- naučená laťka; v st+1 nahrazuje zbytek výnosu odhadem, v st se odečítá jako základní úroveň (po pádu je V(st+1) = 0)
- (γλ)l
- jak rychle zapomínat vzdálenější kroky. λ = 0 dá jen δt; λ = 1 dá po sečtení (členy V se navzájem odečtou) přesně Gt − V(st) — nezkreslené, ale s velkým rozptylem. My máme λ = 0,95
4. PPO: malé, bezpečné kroky
REINFORCE má ještě jednu slabinu: každou odehranou zkušenost použije jen na jeden krok gradientu a pak ji zahodí. Kdybychom nad stejnými daty udělali kroků víc, strategie by se mohla vzdálit od té, která data nasbírala, a odhad gradientu by přestal platit — učení se zhroutí. PPO tohle hlídá.
Definice — Proximal Policy Optimization (PPO)
Nechť πθ je parametrizovaná strategie, V : S → ℝ naučený odhad hodnotové funkce (kritik), ε > 0 (typicky ε = 0,2), γ ∈ [0, 1] a λ ∈ [0, 1]. Pro x ∈ ℝ označme clip(x, 1 − ε, 1 + ε) = min(max(x, 1 − ε), 1 + ε) číslo x sevřené do intervalu [1 − ε, 1 + ε]. PPO (Proximal Policy Optimization; John Schulman a kol., OpenAI, 2017) opakuje tyto kroky:
- Polož θold = θ, πold = πθold a nasbírej touto strategií dávku kroků (st, at, rt+1, st+1).
- Pro každý krok spočítej TD chybu δt = rt+1 + γ V(st+1) − V(st) (po pádu V(st+1) = 0) a odhad výhody metodou GAE (generalized advantage estimation) Ât = ∑l≥0 (γλ)l δt+l, kde součet končí s koncem epizody.
- Několik epoch (u nás 10) maximalizuj gradientními kroky vzhledem k θ ořezaný cíl L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ], rt(θ) = πθ(at | st)/πold(at | st), kde Et je průměr přes kroky dávky (minidávky) a rt(θ) je poměr pravděpodobností (nezaměňovat s odměnou rt+1); zároveň uč kritika V zmenšováním průměru (V(st) − yt)², kde yt = Ât + Vold(st) je cíl spočtený v kroku 2 z hodnot kritika před učením.
- Dávku zahoď a pokračuj krokem 1, dokud nevyčerpáš rozpočet kroků v prostředí.
Jakmile se pravděpodobnost akce změní o víc než faktor 1 ± ε ve směru, který cíl zlepšuje, gradient z toho vzorku zmizí.
Trenér po zápase řekne „tohle dělej častěji“. Hráč to na tréninku opakuje — ale jen do chvíle, kdy to dělá o pětinu častěji než dřív. Dál se už neučí, dokud neodehraje další zápas a nezjistí, jestli to pořád funguje. Dost velké kroky, aby se rychle zlepšoval, dost malé, aby se nezbláznil.
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]
- L(θ)
- náhradní cíl, který se několik epoch maximalizuje nad starou dávkou; jeho gradient v θ = θold je přesně gradient strategie z REINFORCE s výhodou
- rt(θ) = πθ/πold
- poměr nové a staré pravděpodobnosti zahrané akce. Data nasbírala stará strategie; vynásobením poměrem se z nich dá odhadnout, jak by si vedla nová (vážení podle důležitosti). Na začátku je r = 1
- Ât
- výhoda z GAE: znaménko říká, jestli akci posílit (+), nebo potlačit (−)
- clip(r, 1 − ε, 1 + ε)
- poměr sevřený do pásma (v obrázku zeleně); mimo pásmo je konstantní, takže z něj nejde žádný gradient — dál strategii tímhle vzorkem tlačit nejde
- min
- ze dvou odhadů ten horší (pesimistický): ořez platí jen tam, kde by zlepšení vypadalo podezřele dobře. Když se akce naopak zhoršila, min nechá neořezaný člen a chybu opraví
Příklad — tři vzorky a ořez s ε = 0,2
Stará strategie dala zahrané akci pravděpodobnost 0,5. Po několika krocích učení je to 0,65, takže r = 0,65/0,5 = 1,3 a clip(1,3; 0,8; 1,2) = 1,2 (barvy podle rozboru ořezaného cíle výše).
Výhoda +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Vyhrál ořezaný člen, který na θ nezávisí — gradient z tohoto vzorku je nula. Akce už je o 30 % častější, víc ne.
Výhoda −2 (týž poměr): min(1,3 · (−2); 1,2 · (−2)) = min(−2,6; −2,4) = −2,6. Vyhrál neořezaný člen: strategie omylem zpravděpodobnila špatnou akci, a gradient ji proto dál stahuje zpátky.
Výhoda +2, ale pravděpodobnost klesla na 0,35: r = 0,35/0,5 = 0,7, min(0,7 · 2 = 1,4; 0,8 · 2 = 1,6) = 1,4. Zase neořezaný člen — dobrá akce, kterou strategie potlačila, se vrací. Ořez brzdí jen kroky, které by cíl zlepšily „příliš“.
opakuj:
π_old = π_θ; nasbírej 2 000 kroků strategií π_old, ulož π_old(a_t | s_t)
pro každou epizodu odzadu: # V(s_(t+1)) = 0 po pádu
δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
Â_t = δ_t + γλ · Â_(t+1) # GAE, γ = 0,99, λ = 0,95
cíl_t = Â_t + V(s_t); Â normalizuj na průměr 0 a rozptyl 1
10krát (epocha):
zamíchej kroky a rozděl je na minidávky po 100
pro každou minidávku:
r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
θ: krok vzhůru po průměru min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
V: krok dolů po průměru (V(s_t) − cíl_t)²
5. Pokus: vozík s tyčí
Stejný vozík s tyčí jako u DQN, odměna +1 za každý krok, epizoda končí pádem nebo po 500 krocích. Strategie je síť 4 → 32 → 32 → 2 se softmaxem, hodnota stavu druhá síť stejného tvaru. Všechny čtyři metody dostanou 100 000 kroků v prostředí, v dávkách po 2 000. REINFORCE udělá nad dávkou jeden krok gradientu, PPO deset epoch po minidávkách 100. Varianta „bez ořezu“ je PPO, kterému jsme ořez vypnuli.
| metoda | kdy poprvé průměr ≥ 475 (běh 1 · 2 · 3) | na konci (běh 1 · 2 · 3) |
|---|---|---|
| REINFORCE | — · — · — | 463 · 333 · 348 |
| REINFORCE se základní úrovní | 90 000 · 80 000 · — | 488 · 500 · 404 |
| PPO | 30 000 · 20 000 · 20 000 | 500 · 500 · 500 |
| PPO bez ořezu | 100 000 · 30 000 · 50 000 | 494 · 44 · 500 |
PPO ve všech třech bězích udrží tyč celých 500 kroků už po 30 000, 20 000, 20 000 krocích a už to nepustí. REINFORCE se zlepšuje pomalu a do konce to nezvládne; se základní úrovní je o něco rychlejší a ve dvou bězích ze tří se k cíli dostane. Pozor, srovnání není úplně férové v počtu výpočtů: PPO udělá nad každou dávkou desetkrát víc kroků gradientu. Je ale férové v tom, co se v posilovaném učení počítá nejvíc — v počtu zkušeností, které musí agent ve světě nasbírat.
A co se stane, když stejné opakované učení nad dávkou pustíme bez ořezu? Délky epizod skáčou nahoru a dolů, běh 2 skončil na 44 krocích. Proč, ukáže, jak daleko se strategie při jedné aktualizaci vzdálí od té, která data nasbírala:
U PPO je průměrná vzdálenost 0,014 natu a nikdy nepřesáhne 0,06. Bez ořezu je to v průměru 5,5 a občas až 25 natů — strategie po jedné aktualizaci dělá úplně něco jiného než ta, ze které se učila. Data pak o ní nic neříkají a zlepšení je loterie. Ořez je drobná úprava ve vzorci, ale dělá z nestabilního algoritmu spolehlivý.
Definice — odhad KL mezi starou a novou strategií
Nechť πold a πθ jsou strategie na konečné množině akcí A s πθ(a | s) > 0 a nechť (si, ai), i = 1, …, N, jsou kroky dávky nasbírané strategií πold. KL divergence z dílu o teorii informace, tady s přirozeným logaritmem (jednotka nat; 1 nat = 1/ln 2 ≈ 1,44 bitu), průměrovaná přes stavy, které stará strategie navštěvuje, je
DKL(πold ‖ πθ) = Es[ ∑a ∈ A πold(a | s) log πold(a | s)/πθ(a | s) ] = Es, a ∼ πold[ log πold(a | s) − log πθ(a | s) ]
a její odhad z dávky je
D̂ = 1/N ∑i=1N [ log πold(ai | si) − log πθ(ai | si) ].
Akce ai zahrála stará strategie, takže průměr přes dávku je nestranný odhad. Je to průměrný logaritmus poměru, a tedy e−D̂ je geometrický průměr poměru πθ/πold přes nasbírané akce.
Co to znamená v číslech: u PPO nejvýš 0,06 natu, e−0,06 = 0,94 — akce ze staré dávky jsou typicky o pár procent méně pravděpodobné, data o nové strategii pořád vypovídají. Bez ořezu až 24,9 natu: e−24,9 ≈ 1,5 · 10−11, nová strategie by akce, ze kterých se právě učila, téměř nikdy nezahrála.
6. PPO a jazykové modely
V dílu o RLHF jsme zmínili, že InstructGPT a první ChatGPT se dolaďovaly posilovaným učením. Bylo to právě PPO: strategie je jazykový model, stav je dosavadní text, akce je další token, a odměnu na konci odpovědi dá model odměny naučený z lidských preferencí. Trest za vzdálení od výchozího modelu (KL) hraje stejnou roli jako ořez — nedovolí strategii utéct tam, kde odměně nelze věřit.
Definice — odměna při doladění jazykového modelu PPO
Nechť x je dotaz a y = (y1, …, yn) odpověď (posloupnosti tokenů) vygenerovaná laděným jazykovým modelem πθ, kde πθ(y | x) = ∏k=1n πθ(yk | x, y1, …, yk−1). Nechť rφ(x, y) ∈ ℝ je výstup modelu odměny, πref zmrazený model po doladění na příkladech (SFT) a β > 0 síla trestu. PPO pak dostane odměnu
R(x, y) = rφ(x, y) − β · log πθ(y | x)/πref(y | x)
(tak to zapisuje InstructGPT, Long Ouyang a kol., 2022). Střední hodnota druhého členu přes odpovědi je přesně β · DKL(πθ ‖ πref). Epizoda je jedna odpověď, akce jsou tokeny, odměna rφ přijde až po posledním tokenu; zbytek je PPO tak, jak je popsané výše.
U velkých modelů je ale PPO drahé: potřebuje kromě modelu i stejně velkou hodnotovou síť. Proto vznikly zjednodušení. DPO z dílu o RLHF se posilovanému učení úplně vyhne. GRPO (DeepSeek, 2024) hodnotovou síť vypustí a jako základní úroveň použije průměrnou odměnu několika odpovědí na stejnou otázku — přesně ta konstantní základní úroveň, kterou jsme měřili výše. Tak se učí modely, které „přemýšlejí“ nad matematikou a kódem, kde se správnost odpovědi dá ověřit.
Âi = ri − průměr(r1, …, rG)/sd(r1, …, rG)
- Âi
- výhoda i-té odpovědi; dostanou ji všechny její tokeny a dál jde do ořezaného cíle PPO
- ri
- odměna i-té z G odpovědí na tutéž otázku, třeba 1 = výsledek sedí, 0 = nesedí
- průměr(…)
- základní úroveň místo hodnotové sítě: jak dobře model na tuhle otázku odpovídá obvykle — lehká otázka má vysokou laťku, těžká nízkou
- sd(…)
- směrodatná odchylka skupiny, sd(r1, …, rG) = √∑i=1G (ri − r̄)²/G, kde r̄ je průměr; srovná měřítko, aby otázky s velkým i malým rozptylem odměn táhly stejně silně (jako normalizace výhod v našem PPO)
Příklad — výhody GRPO pro čtyři odpovědi
Model odpoví na úlohu čtyřikrát, správně jen poprvé: odměny (1; 0; 0; 0). Průměr 0,25, směrodatná odchylka √0,75² + 3 · 0,25²/4 = √0,1875 = 0,433.
Výhody (barvy podle vzorce výše): 1 − 0,25/0,433 = 1,732 pro správnou odpověď a 0 − 0,25/0,433 = −0,577 pro každou ze tří špatných. Součet je nula: správná se posílí, špatné potlačí. Kdyby byly všechny čtyři odpovědi správně (nebo všechny špatně), jsou všechny výhody nulové a otázka nic nenaučí — učí se jen z otázek, kde se model někdy trefí a někdy ne. (Dělíme G; některé implementace dělí G − 1, čísla se pak mírně liší.)
7. Shrnutí
- Policy gradient učí přímo pravděpodobnosti akcí; funguje i pro spojité akce a zkouší sám od sebe.
- REINFORCE posiluje akce úměrně výnosu, který po nich přišel; je jednoduchý, ale odhad gradientu má velký rozptyl.
- Odečtení základní úrovně rozptyl zmenší beze změny střední hodnoty (u nás o 26 % už s konstantou); s naučenou V(s) vzniká actor-critic.
- PPO využije každou dávku několikrát a ořezem poměru pravděpodobností drží strategii blízko té, která data nasbírala.
- Na vozíku s tyčí: PPO zvládne 500 kroků po 20–30 tisících krocích ve všech běhech; bez ořezu se strategie vzdaluje až o 25 natů a učení kolísá.
- PPO dolaďovalo první ChatGPT; jeho zjednodušení (GRPO) dnes učí „přemýšlející“ modely.
Chcete si to osahat? Nechte AI agenta pustit PPO z knihovny Stable-Baselines3 na prostředí LunarLander a měnit ε v ořezu (0,05; 0,2; 0,5) — a nakreslit, jak se mění rychlost a stabilita učení.
Máte na to jiný názor? Napište na support@coden-app.com.