Policy gradient a PPO: učenie priamo stratégie
Stochastická stratégia ako sieť, REINFORCE a veta o gradiente stratégie, základná úroveň a výhoda, actor-critic, PPO s orezaním napísané od nuly na kyvadle na vozíku, čo sa stane bez orezania, a ako PPO doladilo jazykové modely.
Séria Základy AI Diel 49 z 52
- Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
- Stručná história umelej inteligencie: od Turinga po jazykové modely
- Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
- Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
- Funkcie a zobrazenia: prečo je každý model v AI funkcia
- Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
- Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
- Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
- Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
- Gradientný zostup: ako sa model učí
- Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
- Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
- Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
- Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
- Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
- Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
- Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
- Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
- Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
- Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
- Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
- Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
- Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
- Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
- Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
- Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
- Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
- Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
- Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
- Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
- Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
- Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
- Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
- Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
- Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
- Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
- Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
- Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
- Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
- Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
- Prompty, kontext a RAG: ako modelu dať správne informácie
- Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
- Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
- Difúzne modely: ako sa z čistého šumu stane obrázok
- Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
- Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
- Policy gradient a PPO: učenie priamo stratégie
- Ako funguje AI agent: jazykový model v slučke s nástrojmi
- Programovanie s AI agentmi: zadanie, testy a kontrola
- Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť
Celá osnova série Hotovo: 52 z 83 tém
- Ako sa stratégia učí priamo z výsledkov, bez tabuľky hodnôt.
- Prečo pomáha odčítať základnú úroveň a čo je výhoda.
- Prečo je orezanie v PPO také dôležité a ako súvisí s RLHF.
Čo sa hodí vedieť vopred: Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť, Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
DQN z minulého dielu sa učí, aká dobrá je každá akcia, a stratégia z toho vyplýva až nepriamo: vyber akciu s najväčšou hodnotou. Druhá veľká rodina metód ide rovno: sieť dostane stav a vráti pravdepodobnosti akcií, a my tie pravdepodobnosti posúvame tak, aby dobré akcie boli častejšie. Z tejto rodiny pochádza PPO — algoritmus, ktorý naučil roboty chodiť, porazil profesionálov v hre Dota 2 a stál za doladením ChatGPT. V tomto diele ho napíšeme od nuly a porovnáme s jednoduchšími predchodcami.
Nadväzuje na diely Q-learning a DQN, Markovove rozhodovacie procesy a Softmax.
1. Učiť sa rovno stratégiu
Definícia — parametrizovaná stratégia
Nech (S, A, P, R, γ) je MDP (značenie z dielu Markovove rozhodovacie procesy) s konečnou množinou akcií A a počiatočným rozdelením p(s0) na S, a nech θ ∈ ℝm sú parametre. Parametrizovaná (stochastická) stratégia je systém stratégií (πθ)θ ∈ ℝm, kde pre každé θ a každé s ∈ S je πθ(· | s) rozdelenie pravdepodobnosti na A a πθ(a | s) je diferencovateľná funkcia θ. Pre konečnú A sa berie sieť fθ : S → ℝ|A| a softmax jej výstupov:
πθ(a | s) = efθ(s)a/∑b ∈ A efθ(s)b;
pre spojité akcie sieť vracia napríklad stred a rozptyl normálneho rozdelenia. Cieľ je očakávaný výnos ako funkcia parametrov
J : ℝm → ℝ, J(θ) = Eπθ[G0],
a hľadá sa θ s čo najväčším J(θ) gradientným vzostupom θ ← θ + α ∇J(θ) s rýchlosťou učenia α > 0 (∇ značí gradient podľa θ).
DQN si vedie tabuľku „koľko bodov za ktorý ťah“ a hrá ťah s najviac bodmi. Stratégia namiesto toho rovno hovorí „v tejto situácii tlač doprava so 70 %, doľava s 30 %“. Výhody: funguje aj so spojitými akciami (akou silou, akým uhlom), náhoda je zabudovaná, takže agent sám skúša, a malá zmena parametrov znamená malú zmenu správania.
Príklad — výnos jedného pokusu na kyvadle na vozíku
Odmena je +1 za každý krok a diskont γ = 0,99. Ak do konca epizódy zostáva T − t krokov, je výnos geometrický rad:
Gt = 1 + γ + γ² + … + γT−t−1 = 1 − γT−t/1 − γ.
Na začiatku epizódy, ktorá vydrží celých 500 krokov: G0 = 1 − 0,99500/0,01 = 99,34. Dvadsať krokov pred pádom: G = 1 − 0,9920/0,01 = 18,21. Krok tesne pred pádom: G = 1. Výnos je teda vždy kladný a nikdy neprekročí 1/1 − γ = 100 — to sa bude hodiť v oddiele o základnej úrovni.
2. REINFORCE: posilňuj, čo vyšlo
Definícia — veta o gradiente stratégie a REINFORCE
Veta o gradiente stratégie. Nech (S, A, P, R, γ) je MDP s konečnými S a A a γ ∈ [0, 1], v ktorom každá epizóda s0, a0, r1, s1, …, sT skončí najneskôr po Tmax krokoch (T ≤ Tmax), a nech πθ je parametrizovaná stratégia s πθ(a | s) > 0 pre všetky s, a, θ. Potom
∇J(θ) = Eπθ[ ∑t=0T−1 γt ∇ log πθ(at | st) · Gt ], Gt = ∑k=tT−1 γk−t rk+1.
Pre γ = 1 činiteľ γt zmizne a dostaneme tvar v rozbore nižšie. Praktické implementácie (aj naša) ho vynechávajú aj pre γ < 1; potom výsledok už nie je nestranný odhad ∇J(θ) (vo všeobecnosti dokonca nie je gradientom žiadnej funkcie; Chris Nota a Philip Thomas, 2020), pretože neskoršie kroky epizódy dostanú väčšiu váhu, než im podľa vety patrí — v praxi to napriek tomu funguje dobre.
REINFORCE (Ronald Williams, 1992) je algoritmus:
- zvoľ počiatočné θ ∈ ℝm (náhodné váhy siete) a rýchlosť učenia α > 0;
- odohraj stratégiou πθ epizódy (u nás dohromady aspoň 2 000 krokov);
- v každej epizóde vypočítaj odzadu GT = 0 a Gt = rt+1 + γ Gt+1 pre t = T − 1, …, 0;
- vypočítaj odhad gradientu ĝ = priemer hodnôt ∇ log πθ(at | st) · Gt cez všetky odohrané kroky;
- θ ← θ + α ĝ, dáta zahoď a pokračuj krokom 2, kým nevyčerpáš rozpočet krokov v prostredí.
Pre softmax π = softmax(z) s výstupmi siete z ∈ ℝ|A| je gradient podľa z rovný ∇z log πa = 1a − π, kde 1a je vektor s jednotkou na mieste akcie a a nulami inde.
Zahrajte, pozrite sa, ako to dopadlo, a každý ťah, ktorý ste urobili, urobte o kúsok pravdepodobnejším — tým viac, čím lepšie to po ňom dopadlo. Ťahy z vydarených hier sa posilňujú viac než ťahy z nevydarených. Nikto nemusí hovoriť, ktorý ťah bol správny; stačí výsledok.
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]
- ∇J(θ)
- smer, ktorým pootočiť parametre, aby priemerný výnos rástol najrýchlejšie; vypočítať ho priamo nejde, pretože výnos závisí od θ len cez náhodné hranie a neznámu fyziku prostredia
- Eπθ[ ∑t … ]
- priemer cez epizódy odohrané súčasnou stratégiou — preto sa dá nahradiť priemerom cez skutočne odohrané hry; a preto dáta od inej stratégie (staršej, cudzej) bez opravy nestačia
- ∇ log πθ(at | st)
- smer v parametroch, ktorý zahranú akciu spravdepodobní; ∇ log π = ∇π/π delí pravdepodobnosťou, takže častá akcia, ktorá sa v dátach objavuje často, nedostane navyše viac posilnenia len preto, že je častá
- Gt
- váha: ako dobre to po akcii dopadlo; len odmeny od kroku t ďalej, pretože akcia nemôže ovplyvniť odmeny, ktoré už padli
Veta — odkiaľ vzorec pochádza (trik s logaritmom)
Nech platia predpoklady vety o gradiente stratégie. Epizódu (trajektóriu) τ = (s0, a0, s1, a1, …, sT) má stratégia πθ s pravdepodobnosťou
Pθ(τ) = p(s0) ∏t=0T−1 πθ(at | st) P(st+1 | st, at)
a nech G(τ) = G0 je jej výnos; trajektórií je konečne veľa, takže J(θ) = ∑τ Pθ(τ) G(τ). Potom
∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],
pretože ∇P = P · ∇ log P. Dôkaz (náčrt): logaritmus zmení súčin na súčet, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Od θ závisí len prostredný súčet, takže fyziku prostredia P poznať nemusíme: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Nakoniec pri každom at zahodíme odmeny pred krokom t: od at nezávisia, a ich príspevok má preto nulovú strednú hodnotu (pozri vetu v ďalšom oddiele). Zo súčtu ∑k γk rk+1 tak pri kroku t zostane ∑k ≥ t γk rk+1 = γt Gt, čo je tvrdenie vety o gradiente stratégie. ∎
Príklad — jeden krok REINFORCE so softmaxom
Dve akcie, výstupy siete z = (0; 0), takže π = softmax(z) = (0,50; 0,50). Agent zahral akciu 1 („doprava“) a výnos od toho kroku bol G = 10. Pre softmax je ∇z log π(a) = 1a − π, teda
∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5)
(farby podľa rozboru vzorca vyššie; výsledok je odhad ∇J z jediného kroku).
Krok vzostupom s α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Nová stratégia π = (e−0,5; e0,5)/e−0,5 + e0,5 = (0,269; 0,731). Akcia, ktorá vyšla, je teraz pravdepodobnejšia. (V skutočnej sieti sa menia váhy θ a k z sa gradient dostane spätným šírením; smer je ten istý.)
θ = náhodné váhy siete stratégie
opakuj:
odohraj celé epizódy stratégiou π_θ, kým nie je aspoň 2 000 krokov
pre každú epizódu odzadu: # G = 0 za koncom epizódy
G_t = r_(t+1) + γ · G_(t+1)
g = priemer cez všetky kroky ∇ log π_θ(a_t | s_t) · G_t
θ = θ + α · g # vzostup; u nás krokom Adamu
dáta zahoď — nabudúce už sú od inej stratégie
3. Rozptyl a základná úroveň
Definícia — základná úroveň (baseline) a výhoda
Nech (S, A, P, R, γ) je MDP a πθ parametrizovaná stratégia.
- Základná úroveň (baseline) je ľubovoľná funkcia b : S → ℝ, ktorá závisí len od stavu, nie od akcie. Odhad gradientu so základnou úrovňou je ĝ = ∑t ∇ log πθ(at | st) · (Gt − b(st)); podľa vety nižšie má rovnakú strednú hodnotu ako odhad bez b, len sa tým môže výrazne zmenšiť rozptyl.
- Výhoda (advantage) stratégie π je funkcia Aπ : S × A → ℝ, Aπ(s, a) = Qπ(s, a) − Vπ(s), kde Qπ a Vπ sú hodnotové funkcie z dielu o MDP (písmeno A s argumentmi tu značí výhodu, nie množinu akcií). Najlepšia bežná voľba základnej úrovne je b = Vπθ, v praxi odhadnutá druhou sieťou; potom Gt − b(st) je odhad výhody.
- Actor-critic je metóda, ktorá súčasne učí parametrizovanú stratégiu πθ („herec“) a odhad hodnotovej funkcie V ≈ Vπθ („kritik“) a odhad kritika používa v odhade gradientu stratégie.
Na kyvadle na vozíku dostane agent +1 za každý krok, takže každý výnos je kladný — REINFORCE teda posilňuje každý ťah, len niektoré viac. Signál „toto bolo lepšie ako obvykle“ sa stráca v šume. Odčítaním očakávanej úrovne sa z toho stane „tento ťah dopadol o 20 bodov lepšie, než sa v tejto situácii čakalo“ — a horšie ťahy dostanú záporné znamienko.
∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ], A(s, a) = Q(s, a) − V(s)
- ∇ log πθ(at | st)
- smer „zahranú akciu častejšie“, rovnako ako v REINFORCE
- Gt, Q(s, a)
- čo po akcii skutočne prišlo (Gt), resp. koľko to po nej dáva v priemere (Q je stredná hodnota Gt); samo osebe skoro vždy kladné, takže nerozlíši dobrú akciu od priemernej
- b(st), V(s)
- latka: koľko sa v tejto situácii čaká bez ohľadu na akciu; po odčítaní dostanú horšie ako priemerné akcie záporné znamienko. Smie závisieť len od stavu, nie od akcie — inak by sa gradient skreslil (veta nižšie)
- A(s, a)
- výhoda: o koľko je akcia a lepšia ako priemerná akcia stratégie v s; presne tá informácia, ktorú chceme posilňovať
Veta — základná úroveň neskreslí gradient
Nech A je konečná množina akcií, πθ parametrizovaná stratégia s πθ(a | s) > 0, s ∈ S stav a b : S → ℝ funkcia. Potom
- Ea ∼ πθ(· | s)[∇ log πθ(a | s)] = ∑a ∈ A πθ(a | s) ∇ log πθ(a | s) = 0;
- Ea ∼ πθ(· | s)[∇ log πθ(a | s) · b(s)] = 0.
Odčítanie b(st) od Gt teda strednú hodnotu odhadu gradientu nezmení (stačí podmieniť stavom st).
Dôkaz: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Člen b(s) je pre pevné s konštanta, takže sa dá vybrať pred súčet. ∎
Príklad — rovnaký priemer, iný rozptyl
Jeden stav, dve akcie s π = (0,5; 0,5). Akcia 1 prinesie výnos 12, akcia 0 výnos 10 — oboje kladné ako na vozíku. Zložka odhadu gradientu podľa výstupu z1 je z jednej vzorky (1a=1 − 0,5) · (G − b) (farby podľa vzorca vyššie).
Bez základnej úrovne (b = 0): ak padne akcia 1, odhad je 0,5 · 12 = 6; ak padne akcia 0, je −0,5 · 10 = −5. Priemer 6 − 5/2 = 0,5, rozptyl (6 − 0,5)² + (−5 − 0,5)²/2 = 30,25.
So základnou úrovňou b = 11 (priemerný výnos): 0,5 · (12 − 11) = 0,5 a −0,5 · (10 − 11) = 0,5. Priemer je stále 0,5, rozptyl 0.
Skutočný gradient je π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Oba odhady mieria v priemere správne, ale bez latky sa jedna vzorka trafí vedľa o ±5,5, s latkou vôbec. V skutočnosti rozptyl na nulu neklesne (výnosy sú náhodné a stavov je veľa), ale princíp je ten istý.
Zmerali sme to na začiatku učenia: 40 nezávislých dávok po 1 000 krokoch tej istej náhodnej stratégie, z každej gradient REINFORCE. Už len odčítanie priemerného výnosu (konštantná základná úroveň) zmenší súčet rozptylov zložiek gradientu z 0,177 na 0,131, teda o 26 %. Naučená hodnota V(s), ktorá rozlíši dobré a zlé situácie, pomáha viac.
Definícia — súčet rozptylov zložiek gradientu
Nech K ≥ 1 (u nás K = 40) a ĝ(1), …, ĝ(K) ∈ ℝm sú odhady gradientu z K nezávislých dávok (vektory cez všetkých m váh siete). Pre j = 1, …, m označme ḡj = 1/K ∑k=1K ĝj(k) priemer j-tej zložky. Súčet rozptylov zložiek je číslo
∑j=1m 1/K ∑k=1K (ĝj(k) − ḡj)².
Je to stopa (výberovej) kovariančnej matice odhadu — jedno číslo pre to, ako veľmi sa odhad trasie. Pokles: 1 − 0,131/0,177 = 0,26, teda 26 %.
Naučenú V potrebuje aj PPO nižšie. Výhodu pritom neodhaduje rozdielom Gt − V(st), ale kompromisom medzi ním a jednokrokovým odhadom z dielu 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 sa násobí ∇ log π
- δt
- TD chyba: o koľko dopadol jeden krok lepšie, než V čakala; jednokrokový odhad výhody s malým rozptylom, ale skreslený, ak sa V mýli
- rt+1
- odmena, ktorá skutočne prišla — jediný kus skutočnosti v δ
- V(s)
- naučená latka; v st+1 nahrádza zvyšok výnosu odhadom, v st sa odčítava ako základná úroveň (po páde je V(st+1) = 0)
- (γλ)l
- ako rýchlo zabúdať vzdialenejšie kroky. λ = 0 dá len δt; λ = 1 dá po sčítaní (členy V sa navzájom odčítajú) presne Gt − V(st) — neskreslené, ale s veľkým rozptylom. My máme λ = 0,95
4. PPO: malé, bezpečné kroky
REINFORCE má ešte jednu slabinu: každú odohranú skúsenosť použije len na jeden krok gradientu a potom ju zahodí. Keby sme nad tými istými dátami urobili krokov viac, stratégia by sa mohla vzdialiť od tej, ktorá dáta nazbierala, a odhad gradientu by prestal platiť — učenie sa zrúti. PPO toto stráži.
Definícia — Proximal Policy Optimization (PPO)
Nech πθ je parametrizovaná stratégia, V : S → ℝ naučený odhad hodnotovej funkcie (kritik), ε > 0 (typicky ε = 0,2), γ ∈ [0, 1] a λ ∈ [0, 1]. Pre x ∈ ℝ označme clip(x, 1 − ε, 1 + ε) = min(max(x, 1 − ε), 1 + ε) číslo x zovreté do intervalu [1 − ε, 1 + ε]. PPO (Proximal Policy Optimization; John Schulman a kol., OpenAI, 2017) opakuje tieto kroky:
- Polož θold = θ, πold = πθold a nazbieraj touto stratégiou dávku krokov (st, at, rt+1, st+1).
- Pre každý krok vypočítaj TD chybu δt = rt+1 + γ V(st+1) − V(st) (po páde V(st+1) = 0) a odhad výhody metódou GAE (generalized advantage estimation) Ât = ∑l≥0 (γλ)l δt+l, kde súčet končí s koncom epizódy.
- Niekoľko epoch (u nás 10) maximalizuj gradientnými krokmi vzhľadom na θ orezaný cieľ L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ], rt(θ) = πθ(at | st)/πold(at | st), kde Et je priemer cez kroky dávky (minidávky) a rt(θ) je pomer pravdepodobností (nezamieňať s odmenou rt+1); zároveň uč kritika V zmenšovaním priemeru (V(st) − yt)², kde yt = Ât + Vold(st) je cieľ vypočítaný v kroku 2 z hodnôt kritika pred učením.
- Dávku zahoď a pokračuj krokom 1, kým nevyčerpáš rozpočet krokov v prostredí.
Hneď ako sa pravdepodobnosť akcie zmení o viac než faktor 1 ± ε v smere, ktorý cieľ zlepšuje, gradient z tej vzorky zmizne.
Tréner po zápase povie „toto rob častejšie“. Hráč to na tréningu opakuje — ale len do chvíle, keď to robí o pätinu častejšie než predtým. Ďalej sa už neučí, kým neodohrá ďalší zápas a nezistí, či to stále funguje. Dosť veľké kroky, aby sa rýchlo zlepšoval, dosť malé, aby sa nezbláznil.
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]
- L(θ)
- náhradný cieľ, ktorý sa niekoľko epoch maximalizuje nad starou dávkou; jeho gradient v θ = θold je presne gradient stratégie z REINFORCE s výhodou
- rt(θ) = πθ/πold
- pomer novej a starej pravdepodobnosti zahranej akcie. Dáta nazbierala stará stratégia; vynásobením pomerom sa z nich dá odhadnúť, ako by si viedla nová (váženie podľa dôležitosti, importance sampling). Na začiatku je r = 1
- Ât
- výhoda z GAE: znamienko hovorí, či akciu posilniť (+), alebo potlačiť (−)
- clip(r, 1 − ε, 1 + ε)
- pomer zovretý do pásma (na obrázku nazeleno); mimo pásma je konštantný, takže z neho nejde žiadny gradient — ďalej stratégiu touto vzorkou tlačiť nejde
- min
- z dvoch odhadov ten horší (pesimistický): orezanie platí len tam, kde by zlepšenie vyzeralo podozrivo dobre. Keď sa akcia naopak zhoršila, min nechá neorezaný člen a chybu opraví
Príklad — tri vzorky a orezanie s ε = 0,2
Stará stratégia dala zahranej akcii pravdepodobnosť 0,5. Po niekoľkých krokoch učenia je to 0,65, takže r = 0,65/0,5 = 1,3 a clip(1,3; 0,8; 1,2) = 1,2 (farby podľa rozboru orezaného cieľa vyššie).
Výhoda +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Vyhral orezaný člen, ktorý od θ nezávisí — gradient z tejto vzorky je nula. Akcia je už o 30 % častejšia, viac nie.
Výhoda −2 (ten istý pomer): min(1,3 · (−2); 1,2 · (−2)) = min(−2,6; −2,4) = −2,6. Vyhral neorezaný člen: stratégia omylom spravdepodobnila zlú akciu, a gradient ju preto ďalej sťahuje späť.
Výhoda +2, ale pravdepodobnosť 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 neorezaný člen — dobrá akcia, ktorú stratégia potlačila, sa vracia. Orezanie brzdí len kroky, ktoré by cieľ zlepšili „príliš“.
opakuj:
π_old = π_θ; nazbieraj 2 000 krokov stratégiou π_old, ulož π_old(a_t | s_t)
pre každú epizódu odzadu: # V(s_(t+1)) = 0 po páde
δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
Â_t = δ_t + γλ · Â_(t+1) # GAE, γ = 0,99, λ = 0,95
cieľ_t = Â_t + V(s_t); Â normalizuj na priemer 0 a rozptyl 1
10-krát (epocha):
zamiešaj kroky a rozdeľ ich na minidávky po 100
pre každú minidávku:
r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
θ: krok nahor po priemere min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
V: krok nadol po priemere (V(s_t) − cieľ_t)²
5. Pokus: kyvadlo na vozíku
To isté kyvadlo na vozíku ako pri DQN, odmena +1 za každý krok, epizóda končí pádom alebo po 500 krokoch. Stratégia je sieť 4 → 32 → 32 → 2 so softmaxom, hodnota stavu druhá sieť rovnakého tvaru. Všetky štyri metódy dostanú 100 000 krokov v prostredí, v dávkach po 2 000. REINFORCE urobí nad dávkou jeden krok gradientu, PPO desať epoch po minidávkach 100. Variant „bez orezania“ je PPO, ktorému sme orezanie vypli.
| metóda | kedy prvýkrát priemer ≥ 475 (beh 1 · 2 · 3) | na konci (beh 1 · 2 · 3) |
|---|---|---|
| REINFORCE | — · — · — | 463 · 333 · 348 |
| REINFORCE so základnou úrovňou | 90 000 · 80 000 · — | 488 · 500 · 404 |
| PPO | 30 000 · 20 000 · 20 000 | 500 · 500 · 500 |
| PPO bez orezania | 100 000 · 30 000 · 50 000 | 494 · 44 · 500 |
PPO vo všetkých troch behoch udrží tyč celých 500 krokov už po 30 000, 20 000, 20 000 krokoch a už to nepustí. REINFORCE sa zlepšuje pomaly a do konca to nezvládne; so základnou úrovňou je o niečo rýchlejší a v dvoch behoch z troch sa k cieľu dostane. Pozor, porovnanie nie je úplne férové v počte výpočtov: PPO urobí nad každou dávkou desaťkrát viac krokov gradientu. Je ale férové v tom, čo sa v posilňovanom učení počíta najviac — v počte skúseností, ktoré musí agent vo svete nazbierať.
A čo sa stane, keď rovnaké opakované učenie nad dávkou pustíme bez orezania? Dĺžky epizód skáču hore a dole, beh 2 skončil na 44 krokoch. Prečo, ukáže, ako ďaleko sa stratégia pri jednej aktualizácii vzdiali od tej, ktorá dáta nazbierala:
Pri PPO je priemerná vzdialenosť 0,014 natu a nikdy neprekročí 0,06. Bez orezania je to v priemere 5,5 a občas až 25 natov — stratégia po jednej aktualizácii robí úplne niečo iné ako tá, z ktorej sa učila. Dáta potom o nej nič nehovoria a zlepšenie je lotéria. Orezanie je drobná úprava vo vzorci, ale robí z nestabilného algoritmu spoľahlivý.
Definícia — odhad KL medzi starou a novou stratégiou
Nech πold a πθ sú stratégie na konečnej množine akcií A s πθ(a | s) > 0 a nech (si, ai), i = 1, …, N, sú kroky dávky nazbierané stratégiou πold. KL divergencia z dielu o teórii informácie, tu s prirodzeným logaritmom (jednotka nat; 1 nat = 1/ln 2 ≈ 1,44 bitu), spriemerovaná cez stavy, ktoré stará stratégia navštevuje, 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) ].
Akcie ai zahrala stará stratégia, takže priemer cez dávku je nestranný odhad. Je to priemerný logaritmus pomeru, a teda e−D̂ je geometrický priemer pomeru πθ/πold cez nazbierané akcie.
Čo to znamená v číslach: pri PPO najviac 0,06 natu, e−0,06 = 0,94 — akcie zo starej dávky sú typicky o pár percent menej pravdepodobné, dáta o novej stratégii stále vypovedajú. Bez orezania až 24,9 natu: e−24,9 ≈ 1,5 · 10−11, nová stratégia by akcie, z ktorých sa práve učila, takmer nikdy nezahrala.
6. PPO a jazykové modely
V diele o RLHF sme spomenuli, že InstructGPT a prvý ChatGPT sa dolaďovali posilňovaným učením. Bolo to práve PPO: stratégia je jazykový model, stav je doterajší text, akcia je ďalší token, a odmenu na konci odpovede dá model odmeny naučený z ľudských preferencií. Trest za vzdialenie od východiskového modelu (KL) hrá rovnakú úlohu ako orezanie — nedovolí stratégii utiecť tam, kde odmene nemožno veriť.
Definícia — odmena pri doladení jazykového modelu PPO
Nech x je otázka a y = (y1, …, yn) odpoveď (postupnosti tokenov) vygenerovaná ladeným jazykovým modelom πθ, kde πθ(y | x) = ∏k=1n πθ(yk | x, y1, …, yk−1). Nech rφ(x, y) ∈ ℝ je výstup modelu odmeny, πref zmrazený model po doladení na príkladoch (SFT) a β > 0 sila trestu. PPO potom dostane odmenu
R(x, y) = rφ(x, y) − β · log πθ(y | x)/πref(y | x)
(tak to zapisuje InstructGPT, Long Ouyang a kol., 2022). Stredná hodnota druhého člena cez odpovede je presne β · DKL(πθ ‖ πref). Epizóda je jedna odpoveď, akcie sú tokeny, odmena rφ príde až po poslednom tokene; zvyšok je PPO tak, ako je opísané vyššie.
Pri veľkých modeloch je ale PPO drahé: potrebuje okrem modelu aj rovnako veľkú hodnotovú sieť. Preto vznikli zjednodušenia. DPO z dielu o RLHF sa posilňovanému učeniu úplne vyhne. GRPO (DeepSeek, 2024) hodnotovú sieť vypustí a ako základnú úroveň použije priemernú odmenu niekoľkých odpovedí na tú istú otázku — presne tú konštantnú základnú úroveň, ktorú sme merali vyššie. Tak sa učia modely, ktoré „premýšľajú“ nad matematikou a kódom, kde sa správnosť odpovede dá overiť.
Âi = ri − priemer(r1, …, rG)/sd(r1, …, rG)
- Âi
- výhoda i-tej odpovede; dostanú ju všetky jej tokeny a ďalej ide do orezaného cieľa PPO
- ri
- odmena i-tej z G odpovedí na tú istú otázku, napríklad 1 = výsledok sedí, 0 = nesedí
- priemer(…)
- základná úroveň namiesto hodnotovej siete: ako dobre model na túto otázku odpovedá obvykle — ľahká otázka má vysokú latku, ťažká nízku
- sd(…)
- smerodajná odchýlka skupiny, sd(r1, …, rG) = √∑i=1G (ri − r̄)²/G, kde r̄ je priemer; zrovná mierku, aby otázky s veľkým aj malým rozptylom odmien ťahali rovnako silno (ako normalizácia výhod v našom PPO)
Príklad — výhody GRPO pre štyri odpovede
Model odpovie na úlohu štyrikrát, správne len prvýkrát: odmeny (1; 0; 0; 0). Priemer 0,25, smerodajná odchýlka √0,75² + 3 · 0,25²/4 = √0,1875 = 0,433.
Výhody (farby podľa vzorca vyššie): 1 − 0,25/0,433 = 1,732 pre správnu odpoveď a 0 − 0,25/0,433 = −0,577 pre každú z troch zlých. Súčet je nula: správna sa posilní, zlé potlačia. Keby boli všetky štyri odpovede správne (alebo všetky zlé), sú všetky výhody nulové a otázka nič nenaučí — učí sa len z otázok, kde sa model niekedy trafí a niekedy nie. (Delíme G; niektoré implementácie delia G − 1, čísla sa potom mierne líšia.)
7. Zhrnutie
- Policy gradient učí priamo pravdepodobnosti akcií; funguje aj pre spojité akcie a skúša sám od seba.
- REINFORCE posilňuje akcie úmerne výnosu, ktorý po nich prišiel; je jednoduchý, ale odhad gradientu má veľký rozptyl.
- Odčítanie základnej úrovne rozptyl zmenší bez zmeny strednej hodnoty (u nás o 26 % už s konštantou); s naučenou V(s) vzniká actor-critic.
- PPO využije každú dávku niekoľkokrát a orezaním pomeru pravdepodobností drží stratégiu blízko tej, ktorá dáta nazbierala.
- Na kyvadle na vozíku: PPO zvládne 500 krokov po 20–30 tisícoch krokov vo všetkých behoch; bez orezania sa stratégia vzďaľuje až o 25 natov a učenie kolíše.
- PPO dolaďovalo prvý ChatGPT; jeho zjednodušenie (GRPO) dnes učí „premýšľajúce“ modely.
Chcete si to vyskúšať? Nechajte AI agenta pustiť PPO z knižnice Stable-Baselines3 na prostredí LunarLander a meniť ε v orezaní (0,05; 0,2; 0,5) — a nakresliť, ako sa mení rýchlosť a stabilita učenia.
Máte na to iný názor? Napíšte na support@coden-app.com.