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