Czym jest Q-learning?

Q-learning to jeden z fundamentalnych algorytmów uczenia ze wzmocnieniem, zaproponowany przez Christophera Watkinsa w 1989 roku. Jest to algorytm model-free (nie wymaga znajomości modelu środowiska) i off-policy (polityka eksploracji może być inna niż polityka optymalna, której się uczy).

Q-learning uczy się funkcji wartości działania Q(s, a) — „jak dobre jest wykonanie działania a w stanie s?". Optymalna polityka to po prostu: „w każdym stanie wybierz działanie z najwyższym Q". Algorytm gwarantuje zbieżność do optymalnego Q* pod warunkiem wystarczającej eksploracji i odpowiednich warunków technicznych.

Ładowanie wizualizacji...

Intuicja: labirynt

Wyobraź sobie robota w labiryncie. Na początku nie zna mapy — nie wie, które korytarze prowadzą do wyjścia. Każdy ruch to próba: idzie w losowym kierunku, trafia w ścianę (kara -1), cofa się, próbuje inaczej. Gdy w końcu dotrze do wyjścia (nagroda +100), zapamiętuje: „w tym stanie, to działanie było dobre".

Przy kolejnych próbach, informacja o „dobrej ścieżce" propaguje się wstecz — stany na drodze do nagrody też zyskują wartość. Po wielu epizodach robot zna Q(s, a) dla każdej pary stan-działanie i zawsze znajduje najkrótszą drogę do wyjścia.

Algorytm Q-learning krok po kroku

Formalizacja

Reguła aktualizacji Q-learning:

Q(s, a) ← Q(s, a) + α · [r + γ · max_{a'} Q(s', a') - Q(s, a)]

Gdzie:

  • Q(s, a) — aktualna wartość Q dla stanu s i działania a
  • α ∈ (0, 1] — learning rate (szybkość uczenia)
  • r — natychmiastowa nagroda
  • γ ∈ [0, 1] — discount factor (ważność przyszłych nagród)
  • max_{a'} Q(s', a') — najlepsza wartość Q w następnym stanie s'
  • r + γ · max Q(s', a') - Q(s, a)TD error (Temporal Difference error)

Algorytm

Inicjalizuj Q(s, a) = 0 dla wszystkich s, a
Dla każdego epizodu:
    Zainicjalizuj stan s
    Powtarzaj (dla każdego kroku):
        Wybierz działanie a za pomocą polityki (np. ε-greedy)
        Wykonaj a, obserwuj nagrodę r i nowy stan s'
        Aktualizuj: Q(s, a) ← Q(s, a) + α · [r + γ · max Q(s', a') - Q(s, a)]
        s ← s'
    Aż s jest stanem terminalnym

TD Error — serce algorytmu

TD error = r + γ · max Q(s', a') - Q(s, a)

To różnica między oczekiwaną wartością (Q(s, a)) a lepszą estymacją (r + γ · max Q(s', a')). Jeśli TD error > 0 → działanie było lepsze niż oczekiwano → zwiększ Q. Jeśli TD error < 0 → gorsze niż oczekiwano → zmniejsz Q.

TD learning łączy bezpośrednie doświadczenie (nagrodę r) z dotychczasową wiedzą (max Q(s', a')). To bootstrap — estymacja oparta na innej estymacji — kluczowa idea odróżniająca TD od Monte Carlo (które czeka na koniec epizodu).

Hiperparametry

Learning rate (α)

Kontroluje, jak szybko nowe doświadczenie zastępuje stare:

  • α = 1 — nowe doświadczenie całkowicie zastępuje stare Q
  • α = 0.1 — wolna aktualizacja; uśrednianie wielu doświadczeń
  • Typowe: 0.01–0.1; można zmniejszać w trakcie treningu

Discount factor (γ)

Kontroluje horyzont planowania:

  • γ = 0 — agent jest krótkowzroczny; liczy się tylko natychmiastowa nagroda
  • γ = 0.99 — agent planuje daleko w przyszłość
  • Wybór γ zależy od zadania: krótkie epizody → niższe γ; długie → wyższe

ε-greedy (eksploracja)

Z prawdopodobieństwem 1-ε wybierz najlepsze znane działanie (eksploatacja), z prawdopodobieństwem ε wybierz losowe (eksploracja).

Decay ε: Start z ε=1.0 (czysta eksploracja), stopniowo zmniejszaj do ε_min=0.01 (głównie eksploatacja). Typowy decay: ε ← ε · 0.995 po każdym epizodzie.

Bez eksploracji agent może „utknąć" w suboptymialnej polityce — znalazł dobrą ścieżkę i nigdy nie odkrył lepszej. Z nadmierną eksploracją — ciągle próbuje losowo i nie konwerguje.

Off-policy vs. On-policy

Q-learning jest off-policy

Q-learning używa max Q(s', a') w aktualizacji — przyjmuje, że w następnym stanie agent wybierze optymalne działanie. Ale polityka eksploracji (ε-greedy) wybiera losowe działania! To nie przeszkadza — Q-learning uczy się optymalnej polityki niezależnie od tego, jak agent eksploruje.

SARSA jest on-policy

SARSA aktualizuje: Q(s, a) ← Q(s, a) + α · [r + γ · Q(s', a') - Q(s, a)], gdzie a' to faktycznie wybrane następne działanie (w tym losowe). SARSA uczy się wartości aktualnej polityki (z eksploracją), nie optymalnej.

Konsekwencja: Q-learning jest bardziej agresywny (zakłada optymalne przyszłe decyzje), SARSA bardziej ostrożny (uwzględnia fakt, że agent czasem działa losowo). Przy ryzykownych środowiskach (np. klif z karą -100) SARSA uczy się bezpieczniejszych ścieżek.

Zbieżność Q-learning

Q-learning gwarantuje zbieżność do optymalnego Q* pod warunkami:

  1. Każda para (s, a) odwiedzana nieskończenie wiele razy
  2. Learning rate spełnia: Σα_t = ∞ i Σα_t² < ∞ (maleje, ale nie za szybko)
  3. Nagrody są ograniczone

W praktyce: wystarczająco dużo epizodów + malejący learning rate + eksploracja (ε > 0) → Q konwerguje.

Tablica Q vs. Deep Q-Network

Tablica Q (tabular)

Dla małych, dyskretnych przestrzeni stanów i działań, Q przechowywana jest jako tablica 2D: wiersze = stany, kolumny = działania, wartości = Q(s, a).

Przykład: Frozen Lake (4×4 siatka, 16 stanów, 4 działania) → tablica 16×4 = 64 wartości.

Ograniczenie: Gra Atari ma ~10⁹ możliwych klatek, Go ~10^{170} stanów. Tablica nie mieści się w pamięci i nie da się odwiedzić każdego stanu.

Deep Q-Network (DQN)

DQN (Mnih et al., DeepMind, 2015) zastępuje tablicę siecią neuronową aproksymującą Q: Q(s, a; θ) ≈ Q*(s, a).

Architektura DQN (Atari):

  • Wejście: 4 ostatnie klatki gry (84×84×4 piksele)
  • 3 warstwy konwolucyjne → 2 warstwy FC
  • Wyjście: Q dla każdego z ~18 możliwych działań

Kluczowe innowacje:

Experience Replay:

  • Przechowuj przejścia (s, a, r, s') w buforze (np. 1M ostatnich)
  • Przy aktualizacji, losuj mini-batch z bufora
  • Łamie korelację czasową danych (kolejne klatki są skorelowane → niestabilny trening)

Target Network:

  • Kopia sieci (θ⁻) aktualizowana co C kroków
  • Cel optymalizacji: r + γ · max Q(s', a'; θ⁻) — stabilny cel zamiast „ruchomego"
  • Zapobiega oscylacjom i dywergencji

Warianty DQN

  • Double DQN — oddziela wybór działania (sieć główna) od ewaluacji (target network), redukując przeszacowanie Q
  • Dueling DQN — osobne ścieżki dla V(s) i Advantage A(s,a); lepsze w stanach, gdzie wybór działania nie ma znaczenia
  • Prioritized Experience Replay — próbkuj przejścia z dużym TD error częściej (uczenie się z zaskakujących doświadczeń)
  • Rainbow DQN — kombinacja 6 ulepszeń w jednym modelu

Przykłady zastosowań Q-learning

Gry Atari

DQN nauczył się grać w 49 gier Atari (Breakout, Space Invaders, Pong) na poziomie ludzkim — z samych pikseli, bez wiedzy o zasadach. W Breakout odkrył strategię „tunelowania" (przebicie przez bok bloczków), której ludzie rzadko używają.

Sterowanie robotem

Q-learning (tabelaryczny lub DQN) uczy robota nawigacji w nieznanym terenie, balansowania, unikania przeszkód.

Zarządzanie zasobami

Optymalizacja zużycia energii w data centers (Google: 40% redukcja kosztów chłodzenia), zarządzanie portfelem inwestycyjnym, planowanie produkcji.

Gry planszowe

Q-learning na małych grach (kółko-krzyżyk, Connect Four). Większe gry (szachy, Go) wymagają głębszych metod (MCTS + DQN, AlphaZero).

Q-learning vs. inne algorytmy RL

Cecha Q-learning SARSA Policy Gradient Actor-Critic
Typ Value-based Value-based Policy-based Hybrid
Policy Off-policy On-policy On-policy On-policy
Działania Dyskretne Dyskretne Dyskretne/ciągłe Dyskretne/ciągłe
Prostota Wysoka Wysoka Średnia Średnia
Wariancja Niska Niska Wysoka Średnia

Kiedy Q-learning: Dyskretne, małe przestrzenie działań. Kiedy chcesz prostoty i gwarancji zbieżności.

Kiedy DQN: Duże przestrzenie stanów (obrazy, tekst), dyskretne działania.

Kiedy Policy Gradient / PPO: Ciągłe przestrzenie działań (robotyka, sterowanie), gdy Q-learning nie da się zastosować.

Implementacja w Pythonie

Biblioteki

  • Gymnasium (OpenAI Gym) — środowiska do testowania RL (CartPole, FrozenLake, Atari, MuJoCo)
  • Stable-Baselines3 — implementacje DQN, PPO, SAC, A2C gotowe do użycia
  • CleanRL — minimalistyczne, edukacyjne implementacje algorytmów RL
  • RLlib (Ray) — produkcyjny framework do skalowalnego RL

Typowy workflow

  1. Wybierz środowisko (Gymnasium)
  2. Zaimplementuj Q-learning/DQN lub użyj Stable-Baselines3
  3. Trenuj przez N epizodów, monitoruj reward
  4. Ewaluuj politykę na zbiorze testowym
  5. Wizualizuj krzywą uczenia i tablicę Q / politykę

Podsumowanie

Q-learning to fundament uczenia ze wzmocnieniem — prosty, elegancki algorytm uczący się optymalnych decyzji z doświadczenia. Od tablic Q dla małych problemów po Deep Q-Network dla gier Atari, zasada pozostaje ta sama: obserwuj stan → działaj → otrzymaj nagrodę → aktualizuj wiedzę. Zrozumienie Q-learninga otwiera drzwi do zaawansowanych metod RL: PPO, SAC, AlphaZero i RLHF.