Introductie tot deep Q-learning

Deep Reinforcement Learning in Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Wat is Deep Q-learning?

 

 

Een afbeelding die Q(state, action) weergeeft, met de toestand als de aarde en de actie als een joystick

Deep Reinforcement Learning in Python

Q-learning opfrissen

 

Actie-waardefunctie Q_pi(s,a): som van toekomstige beloningen als actie a wordt genomen in toestand s, ervan uitgaand dat beleid pi daarna gevolgd wordt. Q_pi(s,a) = verwachtingswaarde over toekomstige trajecten, gegeven dat beleid pi wordt gevolgd, van R_tau met s_t=s en a_t=a

 

 

  • Kennis van $Q$ maakt optimaal beleid mogelijk: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • Doel van Q-learning: $Q$ in de tijd leren

Deep Reinforcement Learning in Python

Q-learning opfrissen

Bellman-vergelijking (in Q-learning) in een deterministische omgeving: Q_pi(s_t, a_t) = beloning r_t+1 + discontovoet gamma * max over a_t+1 van Q_pi(s_t+1, a_t+1))

Temporal difference target, ook wel TD-target, Q-target of target Q-waarde: verwijst naar de rechterkant van de Bellman-vergelijking, gebruikt als doelwaarde voor de Q-learning update-regel. r_t+1 + gamma * max over a_t+1 van Q_pi(s_t+1, a_t+1))

  • Bellman-vergelijking: recursieve formule voor $Q$
  • Rechterkant van de Bellman-vergelijking: "TD-target"
  • Gebruik TD-target uit de Bellman-vergelijking om $\hat{Q}$ na elke stap bij te werken

Q-learning update-regel: Q_nieuw = (1-alpha) Q_oud + alpha * TD-target

Deep Reinforcement Learning in Python

Het Q-netwerk

Een Q-tabel met 4 toestanden en 4 acties, dus 16 cellen om te vullen

Deep Reinforcement Learning in Python

Het Q-netwerk

Een Q-tabel met 9 toestanden en 4 acties, dus 36 cellen om te vullen

Deep Reinforcement Learning in Python

Het Q-netwerk

Een Q-tabel met tientallen toestanden en 4 acties, ~100 cellen om te vullen

Deep Reinforcement Learning in Python

Het Q-netwerk

  • De kern van Deep Q-learning: een neuraal netwerk

Illustratie van een volledig verbonden neuraal netwerk met twee verborgen lagen

Deep Reinforcement Learning in Python

Het Q-netwerk

  • De kern van Deep Q-learning: een neuraal netwerk

Illustratie van een volledig verbonden neuraal netwerk met twee verborgen lagen, met de aarde-afbeelding van de vorige slide als inputlaag

Deep Reinforcement Learning in Python

Het Q-netwerk

  • De kern van Deep Q-learning: een neuraal netwerk dat toestand naar Q-waarden mappt

De illustratie van de vorige slide, met elke node in de outputlaag gekoppeld aan een actie als joystickrichting. Omhoog is actie 0, rechts is 1, omlaag is 2, links is 3.

  • Een netwerk dat de actie-waardefunctie benadert heet een 'Q-netwerk'
  • Q-netwerken worden vaak gebruikt in Deep Q-learning-algoritmen, zoals DQN.
Deep Reinforcement Learning in Python

Het Q-netwerk implementeren

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)
  • Invoerdimensie bepaald door toestand
  • Uitvoerdimensie bepaald door aantal mogelijke acties

  • In dit voorbeeld:

    • 2 verborgen lagen met elk 64 nodes
    • ReLU-activatiefunctie
Deep Reinforcement Learning in Python

Laten we oefenen!

Deep Reinforcement Learning in Python

Preparing Video For Download...