Lab 12 - Deep Reinforcement Learning 1

Lab. 12 - Deep Reinforcement Learning cz. 1

Frozen Lake

1. Deep Q-Learning

Deep Q-learning (DQN) rozszerza Q-learning, używając głębokiej sieci neuronowej do przybliżania funkcji Q. Głęboka sieć neuronowa przyjmuje stan otoczenia jako dane wejściowe i generuje wartości Q dla każdej możliwej akcji. Dzięki temu model może obsługiwać złożone przestrzenie stanów o wysokich wymiarach, co sprawia, że jest odpowiedni do zadań takich jak granie w gry wideo czy sterowanie robotami.

Kluczowe elementy Deep Q-learning

2. Cel zajęć

Celem zajęć jest poznanie podstaw metod głębokiego uczenia ze wzmocnieniem na przykładzie DQN.

3. Przygotowanie środowiska

Na dzisiejszych zajęciach nie będziemy wykorzystywać ROSa. W ramach przygotowania środowiska należy jedynie zainstalować bibliotekę PyTorch w odpowiedniej wersji (w zależności od posiadania GPU lub wyłącznie CPU). Instrukcja instalacji jest dostępna tutaj.

Konieczna będzie także instalacja biblioteki gymnasium:

pip install gymnasium

Aktualnie zainstalowaną wersję torcha można sprawdzić:

import torch

print(torch.__version__)

Fakt możliwości używania GPU w PyTorch można sprawdzić:

import torch

torch.cuda.is_available()

4. Kroki implementacji DQN

Implementację DQN można przybliżyć do następujących kroków:

  1. Utworzenie sieci Policy.
  2. Utworzenie kopii sieci Policy jako Target.
  3. Wykonanie akcji przez agenta.
  4. Zapisanie doświadczenia do replay buffera.
  5. Odtworzenie próbek z replay buffera.
  6. Wywołanie sieci Policy na podstawie aktualnego stanu.
  7. Wywołanie sieci Target na podstawie aktualnego stanu.
  8. Obliczenie wartości Q dla stanu i wykonanej akcji (z kroku 3).
  9. Poprawa wyjść z sieci Target na podstawie wartości obliczonej w kroku 8.
  10. Dokonanie treningu sieci Policy wykorzystując zaktualizowane wyjścia sieci Target.
  11. Powtórzyć kroki 3-10 określoną liczbę razy.
  12. Przeprowadzić synchronizację.
  13. Powrócić do kroku 3.

Prawdopodobnie aktualnie są one mało zrozumiałe, ale mogą okazać się pomocne podczas analizy przykładowej implementacji w dalszej części instrukcji.

5. Przykładowa implementacja

Przykładową implementację dla środowiska Frozen Lake v1 można znaleźć tutaj.

Schemat powyższej sieci dla przykładowego stanu (0, lewy górny róg) i przykładowych wyjść:

drawing

Stan przedstawiamy w systemie one-hot (tylko aktualny stan jest jedynką, reszta jest zerami), akcja jest wybierana na podstawie najwyższej wartości na wyjściu (w tym przykładzie największą wartość ma akcja o indeksie 1, czyli "Down").

Można ją pobrać korzystając z:

wget https://raw.githubusercontent.com/kamilmlodzikowski/LabARM/main/Lab12-DQN1/frozen_lake_dqn.py

W przypadku osób z urządzeniami wyposażonymi wyłącznie w CPU nie ma konieczności zmiany domyślnego device dla torch, w przypadku GPU należy zmienić linijkę:

torch.set_default_device('cpu')

na

torch.set_default_device('cuda')

W przypadku błędów z Qt należy dodać:

import os

os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH")

5.1 Analiza implementacji

Proszę przeanalizować podaną powyżej implementację (uruchomić) i dodać komentarze oznaczające kolejne kroki z punktu 4 w odpowiednich miejscach, np.:

# KROK 1
policy_dqn = DQN(in_states=num_states, h1_nodes=num_states, out_actions=num_actions) 

5.2 Wpływ parametrów i rozmiaru sieci

Skuteczność sieci można obserwować na wykresie tworzonym i zapisywanym po treningu (frozen_lake_dql.png). Wykres po lewej przedstawia średnią liczbę nagród na epizod, wykres po prawej parametr epsilon dla epizodu.

Wpływ parametrów dobrze początkowo badać na wyłączonym ślizgu (is_slippery=False), dopiero w przypadku sensownego kandydata załączać i sprawdzać czy trend się utrzymuje w przypadku niedeterministycznego środowiska.

Proszę zbadać wpływ niżej wymienionych parametrów na działanie sieci:

Jak wygląda skuteczność sieci w przypadku dodania nowych warstw? Co przy jednoczesnym zwiększeniu liczby epizodów?

6. Zadanie do samodzielnej realizacji

W ramach pracy samodzielnej proszę o:

Na eKursy należy przesłać:

Materiały dodatkowe


Autor: Kamil Młodzikowski
W oparciu o: link.