Przejdź do treści
coden

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.

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

Seria Podstawy AI Część 48 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 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).

Mówiąc prościej

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
r + γ V(s′) to cel TD, wyrażenie w nawiasie kwadratowym to błąd TD.
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.

Mówiąc prościej

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
SARSA ma zamiast bursztynowego maksimum Q(s′, a′) dla akcji a′, którą polityka ε-zachłanna w s′ naprawdę wybierze (na wykresach zielona). To próbkowa postać równania Bellmana: cel TD z maksimum zastąpił ∑ P(s′ | s, a) […] z poprzedniej części jednym przeżytym przejściem.
# 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.

Mówiąc prościej

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.

S M
Wyuczone (zachłanne) drogi ze startu S do mety M; na czerwono urwisko Q-learning (13 kroków) SARSA (17 kroków)

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ł.

−150−100−500 0100200300400500 epizod (numer) suma nagród (punkty nagrody)
Suma nagród w epizodzie podczas uczenia (średnia z 50 przebiegów, ε = 0,1) Q-learning SARSA najkrótsza droga (−13)

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.

Mówiąc prościej

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.

Mówiąc prościej

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 θ)
Tabelaryczny Q-learning robi z jednym polem to samo, co tutaj krok gradientowy ze wszystkimi parametrami: ciągnie Q(s, a) w stronę celu TD.
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).

0100200300400500 010 00020 00030 000 krok uczenia (liczba kroków w środowisku) utrzymuje drążek (kroki, najwyżej 500)
Ile kroków polityka zachłanna DQN utrzymuje drążek podczas uczenia (najwyżej 500) pełne DQN, ziarno 1 pełne DQN, ziarno 2 bez pamięci doświadczeń bez sieci docelowej
wariantnajlepszy pomiarkiedyna końcu
pełne DQN, ziarno 1500krok 17 500110
pełne DQN, ziarno 2500krok 12 500217
bez pamięci doświadczeń192krok 7 500124
bez sieci docelowej9krok 2 5009

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.

Mówiąc prościej

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
Cel Double DQN; zwykłe DQN bierze wybór i ocenę z tej samej sieci θ− (max).
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.

Agent na twoim komputerze, sterowany z telefonu