Introdução ao Deep Q Learning

Aprendizado por reforço profundo em Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

O que é Deep Q Learning?

 

 

Uma imagem representando Q(state, action), com o estado como a Terra e a ação como um joystick

Aprendizado por reforço profundo em Python

Revisão de Q-Learning

 

Função valor-ação Q_pi(s,a): soma das recompensas futuras se a ação a for tomada no estado s, assumindo que a política pi é seguida depois. Q_pi(s,a) = valor esperado ao longo de trajetórias futuras, dado que a política pi é seguida, de R_tau dado s_t=s e a_t=a

 

 

  • Conhecer $Q$ permite a política ótima: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • Objetivo do Q-learning: aprender $Q$ ao longo do tempo

Aprendizado por reforço profundo em Python

Revisão de Q-Learning

Equação de Bellman (no Q-learning) em ambiente determinístico: Q_pi(s_t, a_t) = recompensa r_t+1 + taxa de desconto gamma * max sobre a_t+1 de Q_pi(s_t+1, a_t+1))

Alvo de diferença temporal, também chamado TD-target, Q-target ou valor-alvo de Q: refere-se ao lado direito da equação de Bellman, usado como valor-alvo na atualização do Q-learning. r_t+1 + gamma * max sobre a_t+1 de Q_pi(s_t+1, a_t+1))

  • Equação de Bellman: fórmula recursiva para $Q$
  • Lado direito da Equação de Bellman: "TD-target"
  • Use o TD-target da Equação de Bellman para atualizar $\hat{Q}$ a cada passo

Regra de atualização do Q-learning: Q_new = (1-alpha) Q_old + alpha * TD-target

Aprendizado por reforço profundo em Python

A Q-Network

Uma Q-table com 4 estados e 4 ações, totalizando 16 células a preencher

Aprendizado por reforço profundo em Python

A Q-Network

Uma Q-table com 9 estados e 4 ações, totalizando 36 células a preencher

Aprendizado por reforço profundo em Python

A Q-Network

Uma Q-table com dezenas de estados e 4 ações, provavelmente ~100 células a preencher

Aprendizado por reforço profundo em Python

A Q-Network

  • No núcleo do Deep Q Learning: uma rede neural

Ilustração de uma rede neural totalmente conectada com duas camadas ocultas

Aprendizado por reforço profundo em Python

A Q-Network

  • No núcleo do Deep Q Learning: uma rede neural

Ilustração de uma rede neural totalmente conectada com duas camadas ocultas, com a imagem da Terra do slide anterior alimentando a camada de entrada

Aprendizado por reforço profundo em Python

A Q-Network

  • No núcleo do Deep Q Learning: uma rede neural que mapeia estado para valores Q

A ilustração do slide anterior, com cada nó na camada de saída associado a uma ação representada como uma direção no joystick. Cima é ação 0, direita é 1, baixo é 2, esquerda é 3.

  • Uma rede que aproxima a função valor-ação é chamada "Q-network"
  • Q-networks são comuns em algoritmos de Deep Q Learning, como DQN.
Aprendizado por reforço profundo em Python

Implementando a Q-network

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)
  • Dimensão de entrada determinada pelo estado
  • Dimensão de saída determinada pelo número de ações possíveis

  • Neste exemplo:

    • 2 camadas ocultas com 64 nós cada
    • Função de ativação ReLu
Aprendizado por reforço profundo em Python

Vamos praticar!

Aprendizado por reforço profundo em Python

Preparing Video For Download...