Wprowadzenie do głębokiego Q-learningu

Głębokie uczenie ze wzmocnieniem w Pythonie

Timothée Carayol

Principal Machine Learning Engineer, Komment

Czym jest głęboki Q-learning?

 

 

Ilustracja Q(stan, akcja): stan reprezentowany jako Ziemia, akcja jako joystick

Głębokie uczenie ze wzmocnieniem w Pythonie

Przypomnienie Q-learningu

 

Funkcja wartości akcji Q_pi(s,a): suma przyszłych nagród po wykonaniu akcji a w stanie s przy założeniu, że następnie stosowana jest polityka pi. Q_pi(s,a) = wartość oczekiwana po trajektoriach zgodnych z polityką pi dla s_t=s i a_t=a

 

 

  • Znajomość $Q$ umożliwia optymalną politykę: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • Cel Q-learningu: nauka $Q$ w czasie

Głębokie uczenie ze wzmocnieniem w Pythonie

Przypomnienie Q-learningu

Równanie Bellmana (w Q-learningu) w środowisku deterministycznym: Q_pi(s_t, a_t) = nagroda r_t+1 + współczynnik dyskontowania gamma * max po a_t+1 z Q_pi(s_t+1, a_t+1)

Cel różnicy temporalnej (TD-target, Q-target): prawa strona równania Bellmana, używana jako wartość docelowa w regule aktualizacji Q-learningu. r_t+1 + gamma * max po a_t+1 z Q_pi(s_t+1, a_t+1)

  • Równanie Bellmana: rekurencyjna formuła dla $Q$
  • Prawa strona równania Bellmana: „TD-target"
  • TD-target służy do aktualizacji $\hat{Q}$ po każdym kroku

Reguła aktualizacji Q-learningu: Q_nowe = (1-alpha) Q_stare + alpha * TD-target

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

Tablica Q z 4 stanami i 4 akcjami — 16 komórek do wypełnienia

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

Tablica Q z 9 stanami i 4 akcjami — 36 komórek do wypełnienia

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

Tablica Q z dziesiątkami stanów i 4 akcjami — ok. 100 komórek do wypełnienia

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

  • Rdzeń głębokiego Q-learningu: sieć neuronowa

Ilustracja w pełni połączonej sieci neuronowej z dwiema ukrytymi warstwami

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

  • Rdzeń głębokiego Q-learningu: sieć neuronowa

Ilustracja z poprzedniego slajdu — obraz Ziemi przekazywany do warstwy wejściowej

Głębokie uczenie ze wzmocnieniem w Pythonie

Sieć Q

  • Rdzeń głębokiego Q-learningu: sieć neuronowa mapująca stany na wartości Q

Ilustracja z poprzedniego slajdu — każdy węzeł warstwy wyjściowej odpowiada akcji reprezentowanej kierunkiem na joysticku: góra = 0, prawo = 1, dół = 2, lewo = 3.

  • Sieć aproksymująca funkcję wartości akcji nazywa się „siecią Q"
  • Sieci Q są powszechnie stosowane w algorytmach głębokiego Q-learningu, np. DQN.
Głębokie uczenie ze wzmocnieniem w Pythonie

Implementacja sieci Q

class QNetwork(nn.Module):

def __init__(self, state_size, action_size): super(QNetwork, self).__init__()
self.fc1 = nn.Linear(state_size, 64) self.fc2 = nn.Linear(64, 64) self.fc3 = nn.Linear(64, action_size)
def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) x = torch.relu(self.fc2(x)) return self.fc3(x)
q_network = QNetwork(8, 4)
optimizer = optim.Adam(q_network.parameters(), lr=0.0001)
  • Wymiar wejściowy określony przez stan
  • Wymiar wyjściowy określony przez liczbę możliwych akcji

  • W tym przykładzie:

    • 2 ukryte warstwy po 64 węzły
    • Funkcja aktywacji ReLU
Głębokie uczenie ze wzmocnieniem w Pythonie

Czas na ćwiczenia!

Głębokie uczenie ze wzmocnieniem w Pythonie

Preparing Video For Download...