Przejdź do treści
coden

Policy gradient i PPO: uczenie się bezpośrednio polityki

Polityka stochastyczna jako sieć, REINFORCE i twierdzenie o gradiencie polityki, poziom bazowy i przewaga, actor-critic, PPO z przycinaniem napisane od zera na wahadle na wózku, co się dzieje bez przycinania, i jak PPO dostroiło modele językowe.

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

Seria Podstawy AI Część 49 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Jak polityka uczy się bezpośrednio z wyników, bez tabeli wartości.
  • Dlaczego pomaga odjęcie poziomu bazowego i czym jest przewaga.
  • Dlaczego przycinanie w PPO jest tak ważne i jak wiąże się z RLHF.

Warto wiedzieć wcześniej: Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową, Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana

DQN z poprzedniej części uczy się, jak dobra jest każda akcja, a polityka wynika z tego dopiero pośrednio: wybierz akcję o największej wartości. Druga wielka rodzina metod idzie prosto do celu: sieć dostaje stan i zwraca prawdopodobieństwa akcji, a my przesuwamy te prawdopodobieństwa tak, żeby dobre akcje były częstsze. Z tej rodziny pochodzi PPO — algorytm, który nauczył roboty chodzić, pokonał zawodowców w grze Dota 2 i stał za dostrojeniem ChatGPT. W tej części napiszemy go od zera i porównamy z prostszymi poprzednikami.

Nawiązuje do części Q-learning i DQN, Procesy decyzyjne Markowa i Softmax.

1. Uczyć się od razu polityki

Definicja — sparametryzowana polityka

Polityka stochastyczna πθ(a | s) to sieć o parametrach θ, która dla stanu s zwraca rozkład prawdopodobieństwa na akcjach — dla skończenie wielu akcji softmax z wyjść sieci, dla akcji ciągłych na przykład średnią i wariancję rozkładu normalnego. Celem jest maksymalizacja oczekiwanego zwrotu J(θ) = Eπθ[G0] metodą gradientowego wznoszenia (gradient ascent) θ ← θ + α ∇J(θ).

Mówiąc prościej

DQN prowadzi tabelę „ile punktów za który ruch” i gra ruch z największą liczbą punktów. Polityka zamiast tego od razu mówi „w tej sytuacji pchaj w prawo z 70 %, w lewo z 30 %”. Zalety: działa też z akcjami ciągłymi (z jaką siłą, pod jakim kątem), losowość jest wbudowana, więc agent sam próbuje, a mała zmiana parametrów oznacza małą zmianę zachowania.

Przykład — zwrot jednej próby w wahadle na wózku

Nagroda wynosi +1 za każdy krok, a dyskonto γ = 0,99. Jeśli do końca epizodu zostało T − t kroków, zwrot jest szeregiem geometrycznym:

Gt = 1 + γ + γ² + … + γT−t−1 = (1 − γT−t) / (1 − γ).

Na początku epizodu, który wytrzyma pełne 500 kroków: G0 = (1 − 0,99500) / 0,01 = 99,34. Dwadzieścia kroków przed upadkiem: G = (1 − 0,9920) / 0,01 = 18,21. Krok tuż przed upadkiem: G = 1. Zwrot jest więc zawsze dodatni i nigdy nie przekroczy 1 / (1 − γ) = 100 — to przyda się w podrozdziale o poziomie bazowym.

2. REINFORCE: wzmacniaj to, co się udało

Definicja — twierdzenie o gradiencie polityki i REINFORCE

Gradient oczekiwanego zwrotu da się zapisać jako wartość oczekiwaną, którą można oszacować z rozegranych epizodów:

∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ].

REINFORCE (Ronald Williams, 1992) robi to dosłownie: rozegraj epizody, dla każdego kroku oblicz zwrot Gt od tego kroku dalej i przesuń θ w kierunku ∇ log π(at | st) · Gt. Dla softmaksu ∇ log π(a) względem wyjść sieci to po prostu (1a − π).

Mówiąc prościej

Zagraj, zobacz, jak to się skończyło, i każdy ruch, który wykonałeś, uczyń odrobinę bardziej prawdopodobnym — tym bardziej, im lepiej się po nim skończyło. Ruchy z udanych gier wzmacniają się bardziej niż ruchy z nieudanych. Nikt nie musi mówić, który ruch był właściwy; wystarczy wynik.

∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]

∇J(θ)
kierunek, w którym obrócić parametry, żeby średni zwrot rósł najszybciej; nie da się go obliczyć wprost, bo zwrot zależy od θ tylko przez losową grę i nieznaną fizykę środowiska
Eπθ[ ∑t … ]
średnia po epizodach rozegranych bieżącą polityką — dlatego da się ją zastąpić średnią po rzeczywiście rozegranych grach; i dlatego dane od innej polityki (starszej, cudzej) bez poprawki nie wystarczą
∇ log πθ(at | st)
kierunek w parametrach, który czyni zagraną akcję bardziej prawdopodobną; ∇ log π = ∇π / π dzieli przez prawdopodobieństwo, więc częsta akcja, która często pojawia się w danych, nie dostaje dodatkowego wzmocnienia tylko dlatego, że jest częsta
Gt
waga: jak dobrze poszło po akcji; tylko nagrody od kroku t dalej, bo akcja nie może wpłynąć na nagrody, które już padły
Gradient to ważona średnia kierunków „uczyń tę akcję bardziej prawdopodobną”, a wagą jest zwrot, który po niej nastąpił.
Twierdzenie — skąd się bierze wzór (sztuczka z logarytmem)

Epizod τ = (s0, a0, s1, a1, …) ma przy polityce πθ prawdopodobieństwo Pθ(τ) = p(s0) ∏t πθ(at | st) P(st+1 | st, at) i zwrot G(τ). Wtedy

∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],

ponieważ ∇P = P · ∇ log P. Dowód (szkic): logarytm zamienia iloczyn na sumę, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Od θ zależy tylko środkowa suma, więc fizyki środowiska P nie musimy znać: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Na koniec przy każdym at odrzucamy nagrody sprzed kroku t: nie zależą od at, więc ich wkład ma zerową wartość oczekiwaną (zob. twierdzenie w następnym podrozdziale). Zostaje Gt. ∎ (Dokładne sformułowanie dla zdyskontowanego zwrotu jest nieco subtelniejsze; tu w uproszczeniu.)

Przykład — jeden krok REINFORCE z softmaksem

Dwie akcje, wyjścia sieci z = (0; 0), więc π = softmax(z) = (0,50; 0,50). Agent zagrał akcję 1 („w prawo”), a zwrot od tego kroku wyniósł G = 10. Dla softmaksu ∇z log π(a) = 1a − π, czyli

∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5).

Krok wznoszenia z α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Nowa polityka π = (e−0,5; e0,5) / (e−0,5 + e0,5) = (0,269; 0,731). Akcja, która się udała, jest teraz bardziej prawdopodobna. (W prawdziwej sieci zmieniają się wagi θ, a do z gradient dociera przez propagację wsteczną; kierunek jest ten sam.)

θ = losowe wagi sieci polityki
powtarzaj:
    rozgrywaj całe epizody polityką π_θ, aż będzie co najmniej 2 000 kroków
    dla każdego epizodu od końca:           # G = 0 za końcem epizodu
        G_t = r_(t+1) + γ · G_(t+1)
    g = średnia po wszystkich krokach  ∇ log π_θ(a_t | s_t) · G_t
    θ = θ + α · g                           # wznoszenie; u nas krokiem Adama
    dane wyrzuć — następnym razem są już od innej polityki

3. Wariancja i poziom bazowy

Definicja — poziom bazowy (baseline) i przewaga

Od Gt można odjąć dowolną funkcję stanu b(st) bez zmiany wartości oczekiwanej oszacowania gradientu, ponieważ E[∇ log π(a | s)] = 0. Wariancja oszacowania może się jednak przez to wyraźnie zmniejszyć. Najlepszym typowym wyborem jest wartość stanu V(s), wyuczona przez drugą sieć; różnica A(s, a) = Q(s, a) − V(s) nazywa się przewagą (advantage). Metody z wyuczoną polityką („aktor”) i wartością („krytyk”) nazywa się actor-critic (aktor-krytyk).

Mówiąc prościej

W wahadle na wózku agent dostaje +1 za każdy krok, więc każdy zwrot jest dodatni — REINFORCE wzmacnia więc każdy ruch, tylko niektóre bardziej. Sygnał „to było lepsze niż zwykle” ginie w szumie. Po odjęciu oczekiwanego poziomu zmienia się on w „ten ruch wypadł o 20 punktów lepiej, niż się w tej sytuacji spodziewano” — a gorsze ruchy dostają znak ujemny.

∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ],   A(s, a) = Q(s, a) − V(s)

∇ log πθ(at | st)
kierunek „zagraną akcję częściej”, tak samo jak w REINFORCE
Gt, Q(s, a)
co po akcji rzeczywiście nastąpiło (Gt), względnie ile po niej wychodzi średnio (Q to wartość oczekiwana Gt); samo w sobie prawie zawsze dodatnie, więc nie odróżni dobrej akcji od przeciętnej
b(st), V(s)
poprzeczka: ile oczekuje się w tej sytuacji niezależnie od akcji; po odjęciu akcje gorsze od przeciętnej dostają znak ujemny. Może zależeć tylko od stanu, nie od akcji — inaczej gradient zostałby obciążony (twierdzenie poniżej)
A(s, a)
przewaga: o ile akcja a jest lepsza od przeciętnej akcji polityki w s; dokładnie ta informacja, którą chcemy wzmacniać
Odjęcie poprzeczki nie zmienia tego, dokąd gradient średnio celuje, a jedynie zmniejsza to, jak bardzo oszacowanie drży od partii do partii.
Twierdzenie — poziom bazowy nie obciąża gradientu

Dla każdego stanu s zachodzi Ea ∼ πθ[∇ log πθ(a | s)] = 0, a zatem E[∇ log πθ(a | s) · b(s)] = 0 dla dowolnej funkcji b, która nie zależy od a.

Dowód: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Człon b(s) jest dla ustalonego s stałą, więc można go wyciągnąć przed sumę. ∎

Przykład — ta sama średnia, inna wariancja

Jeden stan, dwie akcje z π = (0,5; 0,5). Akcja 1 daje zwrot 12, akcja 0 zwrot 10 — oba dodatnie, jak w wahadle na wózku. Składowa oszacowania gradientu względem wyjścia z1 z jednej próbki to (1a=1 − 0,5) · (G − b).

Bez poziomu bazowego (b = 0): jeśli wypadnie akcja 1, oszacowanie wynosi 0,5 · 12 = 6; jeśli akcja 0, to −0,5 · 10 = −5. Średnia (6 − 5) / 2 = 0,5, wariancja ((6 − 0,5)² + (−5 − 0,5)²) / 2 = 30,25.

Z poziomem bazowym b = 11 (średni zwrot): 0,5 · (12 − 11) = 0,5 i −0,5 · (10 − 11) = 0,5. Średnia wciąż wynosi 0,5, wariancja 0.

Prawdziwy gradient to π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Oba oszacowania celują średnio poprawnie, ale bez poprzeczki pojedyncza próbka chybia o ±5,5, z poprzeczką wcale. W rzeczywistości wariancja nie spada do zera (zwroty są losowe, a stanów jest wiele), ale zasada jest ta sama.

Zmierzyliśmy to na początku uczenia: 40 niezależnych partii po 1 000 kroków tej samej losowej polityki, z każdej gradient REINFORCE. Już samo odjęcie średniego zwrotu (stały poziom bazowy) zmniejsza sumę wariancji składowych gradientu z 0,177 do 0,131, czyli o 26 %. Wyuczona wartość V(s), która odróżnia dobre sytuacje od złych, pomaga bardziej.

Definicja — suma wariancji składowych gradientu

Z K = 40 partii mamy oszacowania gradientu ĝ(1), …, ĝ(K) (wektory wszystkich wag sieci). Dla każdej składowej j obliczamy wariancję po partiach i sumujemy:

∑j (1/K) ∑k (ĝj(k) − ḡj)²,   ḡj = (1/K) ∑k ĝj(k).

To ślad macierzy kowariancji oszacowania — jedna liczba mówiąca, jak bardzo oszacowanie drży. Spadek: 1 − 0,131 / 0,177 = 0,26, czyli 26 %.

Wyuczonej V potrzebuje też PPO poniżej. Przewagi nie szacuje przy tym różnicą Gt − V(st), lecz kompromisem między nią a jednokrokowym oszacowaniem z części o Q-learningu:

Ât = ∑l≥0 (γλ)l δt+l,   δt = rt+1 + γ V(st+1) − V(st)

Ât
oszacowanie przewagi kroku t (GAE, John Schulman i in., 2015) — to, przez co mnoży się ∇ log π
δt
błąd TD: o ile jeden krok wypadł lepiej, niż oczekiwała V; jednokrokowe oszacowanie przewagi o małej wariancji, ale obciążone, jeśli V się myli
rt+1
nagroda, która rzeczywiście nadeszła — jedyny kawałek rzeczywistości w δ
V(s)
wyuczona poprzeczka; w st+1 zastępuje resztę zwrotu oszacowaniem, w st jest odejmowana jako poziom bazowy (po upadku V(st+1) = 0)
(γλ)l
jak szybko zapominać dalsze kroki. λ = 0 daje tylko δt; λ = 1 daje po zsumowaniu (człony V wzajemnie się redukują) dokładnie Gt − V(st) — nieobciążone, ale z dużą wariancją. My mamy λ = 0,95
W kodzie liczy się to od końca jednym wierszem: Ât = δt + γλ Ât+1.

4. PPO: małe, bezpieczne kroki

REINFORCE ma jeszcze jedną słabość: każde rozegrane doświadczenie wykorzystuje tylko do jednego kroku gradientu, a potem je wyrzuca. Gdybyśmy na tych samych danych wykonali więcej kroków, polityka mogłaby się oddalić od tej, która zebrała dane, a oszacowanie gradientu przestałoby obowiązywać — uczenie się załamie. PPO tego pilnuje.

Definicja — Proximal Policy Optimization (PPO)

PPO (John Schulman i in., OpenAI, 2017) zbiera partię przejść starą polityką πold, oblicza przewagi Ât, a potem przez kilka epok maksymalizuje przycięty cel

L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ],   rt(θ) = πθ(at | st) / πold(at | st),

zwykle z ε = 0,2. Gdy tylko prawdopodobieństwo akcji zmieni się o więcej niż ε w kierunku, który poprawia cel, gradient z tej próbki znika. Przewagi szacuje się zwykle metodą GAE (generalized advantage estimation), ważoną średnią błędów TD z parametrem λ.

Mówiąc prościej

Trener po meczu mówi „rób to częściej”. Zawodnik powtarza to na treningu — ale tylko do chwili, gdy robi to o jedną piątą częściej niż wcześniej. Dalej już się nie uczy, dopóki nie rozegra kolejnego meczu i nie sprawdzi, czy to wciąż działa. Kroki wystarczająco duże, żeby szybko się poprawiał, i wystarczająco małe, żeby nie zwariował.

−2−1012 00,511,52 stosunek prawdopodobieństw r (bez jednostki) przycięty cel (wielokrotności przewagi A)
Przycięty cel PPO w zależności od stosunku r = π_nowa / π_stara (ε = 0,2; na zielono pasmo 1 ± ε) przewaga A = +1: powyżej 1 + ε nic już nie dodaje przewaga A = −1: poniżej 1 − ε nic już nie dodaje

L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]

L(θ)
cel zastępczy, maksymalizowany przez kilka epok na starej partii; jego gradient w θ = θold to dokładnie gradient polityki z REINFORCE z przewagą
rt(θ) = πθ / πold
stosunek nowego i starego prawdopodobieństwa zagranej akcji. Dane zebrała stara polityka; mnożąc przez ten stosunek, można z nich oszacować, jak poradziłaby sobie nowa (ważenie istotnością, importance sampling). Na początku r = 1
Ât
przewaga z GAE: znak mówi, czy akcję wzmocnić (+), czy stłumić (−)
clip(r, 1 − ε, 1 + ε)
stosunek ściśnięty do pasma (na rysunku na zielono); poza pasmem jest stały, więc nie płynie z niego żaden gradient — dalej pchać polityki tą próbką się nie da
min
z dwóch oszacowań gorsze (pesymistyczne): przycięcie działa tylko tam, gdzie poprawa wyglądałaby podejrzanie dobrze. Gdy akcja przeciwnie się pogorszyła, min zostawia nieprzycięty człon i błąd naprawia
Wzmacniaj korzystne akcje, ale tylko dopóki ich prawdopodobieństwo nie zmieni się bardziej niż o czynnik 1 ± ε; potem próbka milczy.
Przykład — trzy próbki i przycinanie z ε = 0,2

Stara polityka dała zagranej akcji prawdopodobieństwo 0,5. Po kilku krokach uczenia jest to 0,65, więc r = 0,65 / 0,5 = 1,3 i clip(1,3; 0,8; 1,2) = 1,2.

Przewaga +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Wygrał przycięty człon, który nie zależy od θ — gradient z tej próbki wynosi zero. Akcja jest już o 30 % częstsza, bardziej nie.

Przewaga −2 (ten sam stosunek): min(−2,6; −2,4) = −2,6. Wygrał nieprzycięty człon: polityka omyłkowo uczyniła złą akcję bardziej prawdopodobną, więc gradient dalej ściąga ją z powrotem.

Przewaga +2, ale prawdopodobieństwo spadło do 0,35: r = 0,7, min(1,4; 0,8 · 2 = 1,6) = 1,4. Znowu nieprzycięty człon — dobra akcja, którą polityka stłumiła, wraca. Przycinanie hamuje tylko kroki, które poprawiłyby cel „za bardzo”.

powtarzaj:
    π_old = π_θ;  zbierz 2 000 kroków polityką π_old, zapisz π_old(a_t | s_t)
    dla każdego epizodu od końca:                    # V(s_(t+1)) = 0 po upadku
        δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
        Â_t = δ_t + γλ · Â_(t+1)                      # GAE, γ = 0,99, λ = 0,95
    cel_t = Â_t + V(s_t);  znormalizuj  do średniej 0 i wariancji 1
    10 razy (epoka):
        przetasuj kroki i podziel je na minipartie po 100
        dla każdej minipartii:
            r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
            θ: krok w górę po średniej min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
            V: krok w dół po średniej (V(s_t) − cel_t)²

5. Eksperyment: wahadło na wózku

To samo wahadło na wózku co przy DQN, nagroda +1 za każdy krok, epizod kończy się upadkiem albo po 500 krokach. Polityka to sieć 4 → 32 → 32 → 2 z softmaksem, wartość stanu — druga sieć tego samego kształtu. Wszystkie cztery metody dostają 100 000 kroków w środowisku, w partiach po 2 000. REINFORCE wykonuje na partii jeden krok gradientu, PPO dziesięć epok na minipartiach po 100. Wariant „bez przycinania” to PPO, w którym wyłączyliśmy przycinanie.

0100200300400500 025 00050 00075 000100 000 krok uczenia (liczba kroków w środowisku) długość epizodu (kroki)
Średnia długość epizodu podczas uczenia (grubo średnia z trzech przebiegów, cienko pojedyncze przebiegi) REINFORCEREINFORCE z poziomem bazowymPPOPPO bez przycinania
metodakiedy po raz pierwszy średnia ≥ 475 (przebieg 1 · 2 · 3)na końcu (przebieg 1 · 2 · 3)
REINFORCE— · — · —463 · 333 · 348
REINFORCE z poziomem bazowym90 000 · 80 000 · —488 · 500 · 404
PPO30 000 · 20 000 · 20 000500 · 500 · 500
PPO bez przycinania100 000 · 30 000 · 50 000494 · 44 · 500

PPO we wszystkich trzech przebiegach utrzymuje drążek przez pełne 500 kroków już po 30 000, 20 000, 20 000 krokach i już tego nie traci. REINFORCE poprawia się powoli i do końca sobie nie radzi; z poziomem bazowym jest nieco szybszy i w dwóch przebiegach z trzech dochodzi do celu. Uwaga, porównanie nie jest całkiem uczciwe pod względem liczby obliczeń: PPO wykonuje na każdej partii dziesięć razy więcej kroków gradientu. Jest jednak uczciwe pod względem tego, co w uczeniu ze wzmocnieniem liczy się najbardziej — liczby doświadczeń, które agent musi zebrać w świecie.

A co się stanie, gdy to samo wielokrotne uczenie na partii puścimy bez przycinania? Długości epizodów skaczą w górę i w dół, przebieg 2 skończył na 44 krokach. Dlaczego, pokaże to, jak daleko polityka przy jednej aktualizacji oddala się od tej, która zebrała dane:

10-410-310-210-1100101 025 00050 00075 000100 000 krok uczenia (liczba kroków w środowisku) oszacowanie KL (naty, skala log.)
Odległość nowej polityki od starej po każdej partii (oszacowanie KL, przebieg 1, skala logarytmiczna) PPO bez przycinania

W PPO średnia odległość wynosi 0,014 nata i nigdy nie przekracza 0,06. Bez przycinania to średnio 5,5, a czasem aż 25 natów — polityka po jednej aktualizacji robi coś zupełnie innego niż ta, z której się uczyła. Dane nic wtedy o niej nie mówią, a poprawa to loteria. Przycinanie to drobna zmiana we wzorze, ale z niestabilnego algorytmu robi niezawodny.

Definicja — oszacowanie KL między starą a nową polityką

Dywergencja KL z części o teorii informacji, tu z logarytmem naturalnym (jednostka nat; 1 nat = 1 / ln 2 ≈ 1,44 bitu), uśredniona po stanach z partii:

DKL(πold ‖ πθ) = Es, a ∼ πold[ log πold(a | s) − log πθ(a | s) ] ≈ (1/N) ∑i=1N [ log πold(ai | si) − log πθ(ai | si) ].

Akcje ai zagrała stara polityka, więc średnia po partii jest nieobciążonym oszacowaniem. To średni logarytm stosunku, a zatem e−D jest średnią geometryczną stosunku πθ / πold po zebranych akcjach.

Co to znaczy w liczbach: w PPO najwyżej 0,06 nata, e−0,06 = 0,94 — akcje ze starej partii są zwykle o kilka procent mniej prawdopodobne, dane wciąż mówią coś o nowej polityce. Bez przycinania aż 24,9 nata: e−24,9 ≈ 1,5 · 10−11, nowa polityka prawie nigdy nie zagrałaby akcji, z których właśnie się uczyła.

6. PPO a modele językowe

W części o RLHF wspomnieliśmy, że InstructGPT i pierwszy ChatGPT były dostrajane uczeniem ze wzmocnieniem. Było to właśnie PPO: polityką jest model językowy, stanem dotychczasowy tekst, akcją następny token, a nagrodę na końcu odpowiedzi daje model nagrody wyuczony z ludzkich preferencji. Kara za oddalenie się od modelu wyjściowego (KL) odgrywa tę samą rolę co przycinanie — nie pozwala polityce uciec tam, gdzie nagrodzie nie można ufać.

Definicja — nagroda przy dostrajaniu modelu językowego za pomocą PPO

Dla zapytania x i odpowiedzi y wygenerowanej przez dostrajany model πθ PPO dostaje nagrodę

R(x, y) = rφ(x, y) − β · log [ πθ(y | x) / πref(y | x) ],

gdzie rφ to model nagrody, πref zamrożony model po dostrojeniu na przykładach (SFT), a β siła kary (tak zapisuje to InstructGPT, Long Ouyang i in., 2022). Wartość oczekiwana drugiego członu po odpowiedziach to dokładnie β · DKL(πθ ‖ πref). Epizodem jest jedna odpowiedź, akcjami tokeny, nagroda rφ przychodzi dopiero po ostatnim tokenie; reszta to PPO dokładnie tak, jak opisano wyżej.

Przy dużych modelach PPO jest jednak drogie: oprócz modelu potrzebuje równie dużej sieci wartości. Dlatego powstały uproszczenia. DPO z części o RLHF całkowicie omija uczenie ze wzmocnieniem. GRPO (DeepSeek, 2024) rezygnuje z sieci wartości i jako poziom bazowy używa średniej nagrody kilku odpowiedzi na to samo pytanie — dokładnie tego stałego poziomu bazowego, który mierzyliśmy wyżej. Tak uczą się modele, które „myślą” nad matematyką i kodem, gdzie poprawność odpowiedzi da się sprawdzić.

Âi = (ri − średnia(r1, …, rG)) / sd(r1, …, rG)

Âi
przewaga i-tej odpowiedzi; dostają ją wszystkie jej tokeny i trafia dalej do przyciętego celu PPO
ri
nagroda i-tej z G odpowiedzi na to samo pytanie, na przykład 1 = wynik się zgadza, 0 = nie zgadza
średnia(…)
poziom bazowy zamiast sieci wartości: jak dobrze model zwykle odpowiada na to pytanie — łatwe pytanie ma wysoko zawieszoną poprzeczkę, trudne nisko
sd(…)
odchylenie standardowe grupy; wyrównuje skalę, żeby pytania z dużą i małą wariancją nagród ciągnęły równie mocno (jak normalizacja przewag w naszym PPO)
GRPO (Zhihong Shao i in., DeepSeekMath, 2024): przewaga odpowiedzi = o ile jest lepsza od pozostałych odpowiedzi na to samo pytanie.
Przykład — przewagi GRPO dla czterech odpowiedzi

Model odpowiada na zadanie cztery razy, poprawnie tylko za pierwszym razem: nagrody (1; 0; 0; 0). Średnia 0,25, odchylenie standardowe √((0,75² + 3 · 0,25²) / 4) = √0,1875 = 0,433.

Przewagi: (1 − 0,25) / 0,433 = 1,732 dla poprawnej odpowiedzi i (0 − 0,25) / 0,433 = −0,577 dla każdej z trzech błędnych. Suma wynosi zero: poprawna zostaje wzmocniona, błędne stłumione. Gdyby wszystkie cztery odpowiedzi były poprawne (albo wszystkie błędne), wszystkie przewagi są zerowe i pytanie niczego nie uczy — model uczy się tylko z pytań, na które czasem trafia, a czasem nie. (Dzielimy przez G; niektóre implementacje dzielą przez G − 1, liczby różnią się wtedy nieznacznie.)

7. Podsumowanie

  • Policy gradient uczy bezpośrednio prawdopodobieństw akcji; działa też dla akcji ciągłych i sam z siebie próbuje.
  • REINFORCE wzmacnia akcje proporcjonalnie do zwrotu, który po nich nastąpił; jest prosty, ale oszacowanie gradientu ma dużą wariancję.
  • Odjęcie poziomu bazowego zmniejsza wariancję bez zmiany wartości oczekiwanej (u nas o 26 % już ze stałą); z wyuczoną V(s) powstaje actor-critic.
  • PPO wykorzystuje każdą partię kilka razy, a przycinaniem stosunku prawdopodobieństw trzyma politykę blisko tej, która zebrała dane.
  • W wahadle na wózku: PPO radzi sobie z 500 krokami po 20–30 tysiącach kroków we wszystkich przebiegach; bez przycinania polityka oddala się nawet o 25 natów, a uczenie się waha.
  • PPO dostrajało pierwszy ChatGPT; jego uproszczenie (GRPO) uczy dziś „myślące” modele.

Chcesz to wypróbować na własnej skórze? Niech agent AI uruchomi PPO z biblioteki Stable-Baselines3 w środowisku LunarLander i zmienia ε w przycinaniu (0,05; 0,2; 0,5) — a potem narysuje, jak zmienia się szybkość i stabilność uczenia.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu