Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
Uczenie metodą różnic czasowych, Q-learning i SARSA w spacerze nad urwiskiem, eksploracja ε-zachłanna, on-policy i off-policy, DQN z pamięcią doświadczeń i siecią docelową na wahadle na wózku napisane od zera, i dlaczego uczenie DQN tak łatwo się rozpada.
Seria Podstawy AI Część 48 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 agent uczy się wartości akcji bez znajomości reguł świata.
- Dlaczego Q-learning i SARSA wybierają nad urwiskiem inną drogę.
- Co robią w DQN pamięć doświadczeń i sieć docelowa i dlaczego DQN jest kapryśne.
Warto wiedzieć wcześniej: Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana, Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
W poprzedniej części obliczyliśmy najlepszą politykę dokładnie, bo znaliśmy reguły świata: dokąd i z jakim prawdopodobieństwem prowadzi każda akcja i co agent za nią dostaje. Prawdziwy agent ich nie zna. Robot nie wie, jak dokładnie poślizgnie mu się koło, program grający w grę nie zna wnętrza gry. Musi próbować i uczyć się z tego, co się wydarzyło. W tej części napiszemy dwa takie algorytmy: Q-learning z tabelą i DQN, w którym tabelę zastępuje sieć neuronowa — dokładnie to połączenie, dzięki któremu DeepMind w 2015 roku nauczył komputer grać w dziesiątki gier na Atari na podstawie obrazu z ekranu.
Nawiązuje do części Procesy decyzyjne Markowa i Sieć neuronowa od zera.
1. Uczenie się z doświadczenia
Definicja — uczenie metodą różnic czasowych (TD)
Zamiast średniej po wszystkich możliwych następnych stanach (jak w równaniu Bellmana) używa się jednego rzeczywiście przeżytego przejścia (s, a, r, s′). Oszacowanie przesuwa się o kawałek w stronę celu TD r + γ · (oszacowanie wartości s′): oszacowanie ← oszacowanie + α (cel − oszacowanie). Różnicę cel − oszacowanie nazywa się błędem TD, α to współczynnik uczenia. Oszacowanie poprawia się więc na podstawie innego oszacowania (bootstrapping).
Rano szacujesz, że dojedziesz do pracy w 30 minut. Po dziesięciu minutach stoisz w korku, a nawigacja twierdzi, że zostało jeszcze 35. Nie musisz czekać, aż dojedziesz — już teraz wiesz, że poranne oszacowanie pomyliło się o 15 minut, i następnym razem trochę je zwiększysz. Uczysz się z różnicy między dwoma kolejnymi oszacowaniami.
V(s) ← V(s) + α [r + γ V(s′) − V(s)]
- V(s)
- dotychczasowe oszacowanie wartości stanu, z którego wyszliśmy — to je poprawiamy; w nawiasie jest odejmowane, żeby poprawka była proporcjonalna do błędu, a nie do całej wartości
- α
- współczynnik uczenia, 0 < α ≤ 1 — jak duży kawałek błędu przyjmujemy; jedno przejście to losowa próbka, więc nie ufamy mu całkowicie
- r
- rzeczywiście otrzymana nagroda — jedyna część celu, która jest zmierzona, a nie oszacowana
- γ
- dyskonto — wartość następnego stanu przychodzi o krok później, tak samo jak w równaniu Bellmana
- V(s′)
- oszacowanie wartości stanu, do którego rzeczywiście doszliśmy — zastępuje całą pozostałą przyszłość, której jeszcze nie przeżyliśmy (bootstrapping); zamiast średniej ∑ P(s′ | …) jedna próbka
Przykład — droga do pracy w liczbach
Oszacowanie z domu V(dom) = 30 minut. Po r = 10 minutach jazdy jesteś w korku, a oszacowanie stamtąd to V(korek) = 35. Czasu się nie dyskontuje (γ = 1), a zamiast nagród sumujemy minuty, więc cel TD to 10 + 35 = 45, a błąd TD 45 − 30 = 15.
- przy α = 0,5: nowe oszacowanie 30 + 0,5 · 15 = 37,5 minuty,
- przy α = 0,1: 30 + 0,1 · 15 = 31,5 minuty,
- przy α = 1: od razu 45 — ostatnie doświadczenie całkowicie nadpisałoby wszystkie wcześniejsze.
Twierdzenie — przy stałym α oszacowanie jest średnią kroczącą celów
Jeśli oszacowanie zaczyna od Q0 i dostaje cele c1, c2, …, cn, to po n poprawkach Qn = (1 − α)n Q0 + ∑k=1n α (1 − α)n−k ck.
Dowód. Regułę można zapisać jako Qn = (1 − α) Qn−1 + α cn i podstawiać wielokrotnie. ∎
Wagi maleją geometrycznie: przy α = 0,5 ostatni cel ma wagę 0,5, przedostatni 0,25, kolejny 0,125… Starsze doświadczenia są więc stopniowo zapominane — to pomaga, gdy cele się zmieniają (a w uczeniu TD się zmieniają, bo są liczone z oszacowań, które same się uczą), ale w losowym świecie oszacowanie się waha. Dlatego teoria, by mieć pewną zbieżność, wymaga stopniowego zmniejszania α.
2. Q-learning
Definicja — Q-learning i SARSA
Q-learning (Christopher Watkins, 1989) prowadzi tabelę Q(s, a) i po każdym kroku ją poprawia:
Q(s, a) ← Q(s, a) + α [r + γ · maxa′ Q(s′, a′) − Q(s, a)].
W rozsądnych warunkach (każda para stan–akcja jest próbowana nieskończenie wiele razy, α odpowiednio maleje) zbiega do optymalnego Q*. SARSA różni się tylko celem: zamiast maksimum używa Q(s′, a′) dla akcji a′, którą agent naprawdę wykona. Q-learning uczy się więc wartości najlepszego zachowania, SARSA wartości tego, jak agent rzeczywiście się zachowuje, łącznie z próbowaniem.
Tabela „jak dobrze jest zrobić to tutaj”. Po każdym kroku pole poprawia się według tego, co przyszło zaraz potem: nagroda plus to, jak dobrze wygląda sytuacja z nowego miejsca. Q-learning liczy tak, jakby dalej grał bezbłędnie; SARSA bierze pod uwagę, że czasem zrobi głupstwo.
Q(s, a) ← Q(s, a) + α [r + γ · maxa′ Q(s′, a′) − Q(s, a)]
- Q(s, a)
- pole tabeli dla właśnie wypróbowanej akcji — poprawia się tylko ono; pozostałe akcje w s się nie zmieniły, bo ten krok nic o nich nie powiedział
- α
- współczynnik uczenia — u nas 0,5: świat nad urwiskiem jest deterministyczny, więc nie musimy się obawiać nowego celu
- r
- nagroda za krok: −1 albo −100 za upadek
- γ
- dyskonto — nad urwiskiem γ = 1, bo epizod zawsze się kończy, a każdy krok kosztuje −1, więc krótsza droga jest lepsza nawet bez dyskonta
- maxa′ Q(s′, a′)
- wartość najlepszej akcji w nowym stanie — Q-learning zakłada, że dalej będzie grał najlepiej, choć w rzeczywistości czasem spróbuje losowej akcji; na wykresach poniżej Q-learning jest bursztynowy
# Q-learning (i SARSA) w spacerze nad urwiskiem
Q(s, a) = 0 dla wszystkich stanów i akcji
dla każdego epizodu:
s = start
a = akcja ε-zachłanna według Q w s
dopóki s nie jest metą:
wykonaj a, obserwuj r i s′ # upadek: r = −100, s′ = start
a′ = akcja ε-zachłanna według Q w s′
cel = max po b Q(s′, b) # Q-learning
cel = Q(s′, a′) # SARSA (zamiast wiersza wyżej)
if s′ jest metą: cel = 0
Q(s, a) = Q(s, a) + α · (r + γ · cel − Q(s, a))
s = s′; a = a′
Przykład — pierwsze upadki (α = 0,5, γ = 1, tabela zaczyna od zer)
Agent od razu na starcie próbuje kroku w prawo i spada: r = −100, s′ = start, gdzie na razie wszystkie wartości wynoszą 0. Nowa wartość Q(start, →) = 0 + 0,5 · (−100 + 1 · 0 − 0) = −50.
Potem próbuje kroku w górę: r = −1, nowe pole ma same zera, Q(start, ↑) = 0 + 0,5 · (−1 + 0 − 0) = −0,5.
Gdy na starcie spadnie po raz drugi, największa wartość na starcie wciąż wynosi 0 (akcji ↓ i ← jeszcze nie próbował), więc Q(start, →) = −50 + 0,5 · (−100 + 0 − (−50)) = −75. Z każdym kolejnym upadkiem zbliża się do −100 i dalej.
Zwróć uwagę na efekt uboczny: wszystkie rzeczywiste nagrody są ujemne, więc niewypróbowane akcje z zerem wyglądają lepiej niż wypróbowane. Tabela zaczynająca od zer sama popycha tu agenta do próbowania nowych rzeczy (tzw. optymizm wobec nieznanego) — w zachłannym wyborze wcześniej, niż przyjdzie kolej na losowość ε.
Definicja — polityka ε-zachłanna
Z prawdopodobieństwem 1 − ε wybierz akcję o największym Q(s, a), z prawdopodobieństwem ε akcję losową. Bez losowych akcji agent nigdy nie spróbowałby niczego, co na razie nie wydaje mu się najlepsze, i mógłby utknąć przy pierwszej przyzwoitej drodze, którą znajdzie. To najprostsze rozwiązanie dylematu eksploracja czy eksploatacja.
Do ulubionej restauracji chodzisz dziewięć razy na dziesięć. Raz na jakiś czas próbujesz nowej — inaczej nigdy się nie dowiesz, że ulicę dalej gotują lepiej.
Przykład — prawdopodobieństwa akcji przy ε = 0,1
Akcja losowa jest wybierana ze wszystkich |A| = 4 akcji, a więc także z tej najlepszej. Dlatego
π(a | s) = 1 − ε + ε/|A| = 1 − 0,1 + 0,025 = 0,925 dla najlepszej akcji i ε/|A| = 0,1/4 = 0,025 dla każdej z trzech pozostałych.
Każda konkretna „zła” akcja — na przykład krok w dół do urwiska — pojawia się więc w jednym kroku na 40.
3. Spacer nad urwiskiem: Q-learning kontra SARSA
Klasyczny eksperyment z podręcznika Richarda Suttona i Andrew Barto (cliff walking). Siatka 12 × 4, start w lewym dolnym rogu, meta w prawym dolnym, a między nimi urwisko. Każdy krok kosztuje −1, upadek z urwiska −100 i powrót na start. Bez dyskonta. Najkrótsza droga prowadzi tuż wzdłuż urwiska (13 kroków). Oba algorytmy uczą się przez 500 epizodów z ε = 0,1 i α = 0,5, każdy w 50 niezależnych przebiegach.
Q-learning we wszystkich 50 z 50 przebiegów nauczył się najkrótszej drogi wzdłuż urwiska. SARSA w 41 przebiegach wybrała drogę górnym brzegiem siatki, jak najdalej od urwiska (17 kroków), w jednym jeszcze o dwa kroki dłuższą, a w 8 przebiegach polityka zachłanna po 500 epizodach jeszcze nie dochodzi do mety — zapętla się w miejscach, do których agent podczas uczenia prawie nie docierał.
A teraz paradoks: podczas uczenia lepiej radzi sobie SARSA. W ostatnich stu epizodach dostaje średnio −25,1, Q-learning −51,1. Q-learning chodzi po krawędzi urwiska, a ponieważ co dziesiąty krok jest losowy, spada średnio 0,34 razy na epizod; SARSA tylko 0,04 razy. Q-learning nauczył się, co jest najlepsze bez próbowania; SARSA, co jest najlepsze z próbowaniem. Którego chcemy, zależy od tego, czy agent będzie próbował także w normalnej pracy — robot, który uczy się na prawdziwej maszynie, powinien myśleć jak SARSA.
Przykład — ile razy spada Q-learning (uproszczone oszacowanie)
Wyuczona droga Q-learningu prowadzi ze startu w górę, a potem przez dziesięć pól tuż nad urwiskiem. Na starcie i na każdym z tych dziesięciu pól do urwiska prowadzi krok w dół (na starcie krok w prawo), czyli jedna konkretna akcja — przy ε = 0,1 z prawdopodobieństwem 0,025. Przejście 11 takich pól bez upadku:
0,97511 = 0,757, więc upadek podczas jednego przejścia ma prawdopodobieństwo q = 1 − 0,757 = 0,243.
Po upadku agent zaczyna znowu od startu, więc liczba upadków do udanego przejścia ma rozkład geometryczny z wartością oczekiwaną q / (1 − q) = 0,243 / 0,757 = 0,32 upadku na epizod. Zmierzono 0,34 — nieco więcej, bo oszacowanie pomija losowe kroki w lewo, po których agent spędza nad urwiskiem jeszcze kolejne kroki. SARSA chodzi górnym brzegiem, trzy wiersze nad urwiskiem: tam do urwiska doprowadziłoby ją dopiero kilka losowych kroków w dół z rzędu. Ryzykuje głównie na starcie, a to samo daje 0,025 / 0,975 = 0,026 upadku na epizod; zmierzono 0,04.
Definicja — uczenie według własnej i cudzej polityki (on-policy / off-policy)
Metoda jest on-policy, gdy uczy się wartości tej polityki, według której właśnie działa (SARSA). Jest off-policy, gdy działa według jednej polityki (na przykład ε-zachłannej), ale uczy się wartości innej (Q-learning uczy się zachłannej). Metody off-policy mogą się uczyć także z doświadczeń zebranych wcześniej albo przez kogoś innego.
On-policy: uczę się z własnych przejazdów i oceniam je takimi, jakie są. Off-policy: patrzę także na cudze przejazdy (albo swoje stare) i wyprowadzam z nich, jak jechałby najlepszy kierowca.
4. Gdy tabela się nie mieści: DQN
Tabela potrzebuje wiersza dla każdego stanu. Wahadło na wózku z części o neuroewolucji ma stan złożony z czterech liczb rzeczywistych (położenie i prędkość wózka, kąt i prędkość kątowa drążka); gra na Atari ma stan z ekranu 210 × 160 pikseli. Żadna tabela tego nie pomieści. Zamiast niej Q(s, a) szacuje się siecią neuronową.
Definicja — Deep Q-Network (DQN)
DQN (Volodymyr Mnih i in., DeepMind, 2015) szacuje Q(s, ·) siecią o parametrach θ i minimalizuje (r + γ maxa′ Q(s′, a′; θ−) − Q(s, a; θ))². Zasadnicze są dwie modyfikacje: pamięć doświadczeń (replay buffer) — przejścia są zapisywane, a uczenie odbywa się na losowych partiach, a nie na ostatnich krokach po kolei; oraz sieć docelowa θ− (target network) — kopia sieci aktualizowana tylko od czasu do czasu, żeby cel nie przesuwał się z każdym krokiem uczenia.
Pamięć doświadczeń: zamiast uczyć się tylko z ostatnich kilku minut, agent przegląda losowe wspomnienia z całej historii, więc nie zapomni, co umiał wczoraj. Sieć docelowa: kiedy uczysz się trafiać w tarczę, nie pomoże ci, jeśli tarcza przesunie się przy każdym twoim strzale. Zostawiamy ją więc na chwilę w miejscu.
L(θ) = E(s, a, r, s′) ~ D [(r + γ maxa′ Q(s′, a′; θ−) − Q(s, a; θ))²]
- E… ~ D
- średnia po losowych przejściach z pamięci doświadczeń D — miesza stare i nowe doświadczenia, więc kolejne, bardzo do siebie podobne kroki nie ciągną sieci w jednym kierunku
- r
- nagroda — w wahadle na wózku +1 za każdy krok, w którym drążek stoi
- γ
- dyskonto 0,99 — sieć „widzi” mniej więcej 1/(1 − γ) = 100 kroków naprzód
- max Q(s′, a′; θ−)
- cel z sieci docelowej o zamrożonych parametrach θ− — to samo maksimum co w tabelarycznym Q-learningu, tylko podczas kroku uczenia się nie rusza; gdy stan s′ oznacza upadek, ten człon wynosi 0
- Q(s, a; θ)
- oszacowanie uczonej sieci dla akcji, która naprawdę została wykonana — jedyne, co zmienia się podczas kroku uczenia (gradient płynie tylko przez θ)
Definicja — funkcja straty Hubera
Nasze DQN zamiast kwadratu błędu d = Q(s, a; θ) − cel używa (jak oryginalny artykuł, który przycina błąd do ±1) funkcji straty Hubera H(d) = d²/2 dla |d| ≤ 1 i |d| − 1/2 w przeciwnym razie. Jej pochodna to d w środku i ±1 na zewnątrz: małe błędy poprawia się jak przy kwadracie, duży błąd (na przykład gdy cel skoczy po skopiowaniu sieci docelowej) daje co najwyżej jednostkowy gradient i jedno dziwne przejście nie rozstroi sieci.
# DQN w wahadle na wózku
sieć Q(·; θ) 4 → 64 → 64 → 2, sieć docelowa θ⁻ = θ, pamięć D pusta
s = losowy start
dla t = 1 … 30 000:
ε = max(0,05; 1 − 0,95 · t / 10 000)
a = losowa akcja z prawdopodobieństwem ε, w przeciwnym razie argmax Q(s, ·; θ)
wykonaj a, obserwuj s′ i czy drążek upadł
zapisz (s, a, r = 1, s′, upadł) do D # najstarsze wypada powyżej 20 000
s = nowy start, gdy drążek upadł albo wytrzymał 500 kroków, inaczej s′
z D wybierz losową partię 32 przejść, dla każdego:
cel = r, gdy upadł
cel = r + γ · max Q(s′, ·; θ⁻), inaczej
jeden krok Adama na średniej stracie Hubera (Q(s, a; θ) − cel)
co 500 kroków: θ⁻ = θ
Przykład — eksploracja i wielkość wartości
Eksploracja maleje liniowo: ε0 = 1 (same losowe akcje), w kroku 5 000 ε = 1 − 0,95 · 0,5 = 0,525, a od kroku 10 000 pozostaje 0,05.
Jak duże wartości musi się nauczyć sieć? Gdyby drążek stał wiecznie, wartość wynosiłaby 1 + 0,99 + 0,99² + … = 1/(1 − 0,99) = 100; dla epizodu ograniczonego do 500 kroków to (1 − 0,99500)/(1 − 0,99) = 99,3. Na początku sieć zwraca liczby bliskie zera, więc cele muszą podczas uczenia wzrosnąć o dwa rzędy wielkości — i razem z nimi ciągle się przesuwają.
Nasze DQN: sieć 4 → 64 → 64 → 2 (dwie akcje: pchać w lewo albo w prawo), nagroda +1 za każdy krok, w którym drążek stoi, γ = 0,99, pamięć 20 000 przejść, partia 32, sieć docelowa kopiowana co 500 kroków, ε maleje z 1 do 0,05 w ciągu pierwszych 10 000 kroków. Łącznie 30 000 kroków. Co 2 500 kroków mierzymy, ile kroków wytrzymuje polityka zachłanna (średnia z czterech startów, najwyżej 500, czyli 10 sekund).
| wariant | najlepszy pomiar | kiedy | na końcu |
|---|---|---|---|
| pełne DQN, ziarno 1 | 500 | krok 17 500 | 110 |
| pełne DQN, ziarno 2 | 500 | krok 12 500 | 217 |
| bez pamięci doświadczeń | 192 | krok 7 500 | 124 |
| bez sieci docelowej | 9 | krok 2 500 | 9 |
Pełne DQN uczy się utrzymać drążek przez pełne 500 kroków — w przebiegu z ziarnem 1 po raz pierwszy w kroku 17 500. Tyle że zaraz znowu zapomina: na koniec uczenia utrzymuje go tylko przez 110 kroków. Drugi przebieg waha się podobnie. Bez pamięci doświadczeń (uczy się tylko z ostatnich 32 kroków) sieć nie przekracza 192. A bez sieci docelowej uczenie całkowicie się rozpada: polityka przez cały czas wytrzymuje tylko 9 kroków — dokładnie tyle, ile wytrzymuje wózek, który pchasz cały czas w prawo. Sieć „nauczyła się” jednej akcji.
5. Dlaczego DQN jest tak kapryśne
Definicja — śmiertelna triada (deadly triad)
Sutton i Barto nazywają tak połączenie trzech elementów: aproksymacji funkcji (sieć zamiast tabeli), bootstrappingu (cel liczy się z własnego oszacowania) i uczenia off-policy. Każdy z osobna jest bezpieczny; razem uczenie może oscylować albo się rozbiegać. DQN zawiera wszystkie trzy — pamięć doświadczeń i sieć docelowa tylko łagodzą zagrożenie.
Sieć uczy się według własnych oszacowań. Gdy oszacowanie w jednym stanie wzrośnie, wzrośnie (bo sieć uogólnia) także w podobnych stanach, w tym w tym, z którego liczy się cel. Cel wzrasta, oszacowanie sięga za nim… Pies, który goni własny ogon.
W praktyce dodaje się więc szereg usprawnień: Double DQN (Hado van Hasselt i in., 2015) oddziela wybór najlepszej akcji od jej oceny i tłumi systematyczne przeszacowanie, które wnosi maksimum w celu; dalej priorytetyzowana pamięć, rozdzielenie wartości i przewagi (dueling) i inne — ich połączenie nazywa się Rainbow (2017). I całkiem praktyczna rada: podczas uczenia zapisuj sieć z najlepszego pomiaru, a nie ostatnią.
y = r + γ Q(s′, argmaxa′ Q(s′, a′; θ); θ−)
- r
- nagroda, bez zmian
- γ
- dyskonto, bez zmian
- argmax Q(s′, a′; θ)
- wybór akcji przez uczoną sieć — którą akcję wybralibyśmy w s′
- Q(s′, …; θ−)
- ocena tej akcji przez sieć docelową — inne oszacowanie z innymi błędami, więc akcja, którą uczona sieć przypadkiem przeceniła, nie dostaje automatycznie także przecenionej wartości
Przykład — dlaczego maksimum przecenia (w uproszczeniu)
Dwie akcje mają rzeczywistą wartość 0, ale oszacowanie każdej jest obciążone niezależnym błędem +1 albo −1 (każdy z prawdopodobieństwem 1/2). Cztery jednakowo prawdopodobne możliwości dają maksimum oszacowań 1, 1, 1 i −1, więc
E[max(Q̂1, Q̂2)] = (1 + 1 + 1 − 1)/4 = 0,5 > 0 = max(Q1, Q2).
Maksimum z zaszumionych oszacowań jest średnio większe niż maksimum rzeczywistych wartości, a ponieważ cel z maksimum podstawia się raz za razem, przeszacowanie się rozprzestrzenia. Gdy akcję wybiera jedno oszacowanie, a ocenia drugie, niezależne, wartość oczekiwana oceny wynosi 0 — błąd drugiego oszacowania nie ma już związku z wyborem.
Metody wartościowe, takie jak DQN, sprawdzają się dobrze, gdy akcji jest mało (pchać w lewo albo w prawo; przyciski na kontrolerze). Dla akcji ciągłych — z jaką siłą obrócić staw robota — korzystniej jest uczyć się bezpośrednio polityki. To temat następnej części, o policy gradient i PPO.
6. Podsumowanie
- Bez znajomości reguł świata wartości uczy się z przeżytych przejść: oszacowanie przesuwa się w stronę celu r + γ · oszacowanie następnego stanu.
- Q-learning uczy się wartości najlepszego zachowania (off-policy), SARSA wartości zachowania z próbowaniem (on-policy).
- Nad urwiskiem: Q-learning znajduje najkrótszą drogę (13 kroków), ale przy ε = 0,1 spada 0,34 razy na epizod; SARSA idzie bezpieczniej i podczas uczenia dostaje więcej (−25,1 wobec −51,1).
- DQN zastępuje tabelę siecią; bez pamięci doświadczeń i sieci docelowej się nie uczy (najwyżej 192 lub 9 kroków).
- Nawet pełne DQN się waha: utrzyma drążek przez 500 kroków, a potem znowu o tym zapomina — śmiertelna triada.
Chcesz to wypróbować na własnej skórze? Niech agent AI nauczy DQN w środowisku CartPole z biblioteki Gymnasium i narysuje krzywą uczenia dla pięciu ziaren. Potem niech doda Double DQN i porówna.
Masz inne zdanie? Napisz na support@coden-app.com.