Aprendizado por diferença temporal

Reinforcement Learning com Gymnasium em Python

Fouad Trad

Machine Learning Engineer

TD vs. Monte Carlo

 

Aprendizado TD
  • Sem modelo
  • Estima a Q-table pela interação
  • Atualiza a Q-table a cada passo do episódio
  • Bom para episódios longos/indefinidos

 

Monte Carlo
  • Sem modelo
  • Estima a Q-table pela interação
  • Atualiza a Q-table só após completar um episódio
  • Bom para tarefas episódicas curtas
Reinforcement Learning com Gymnasium em Python

TD como previsão do tempo

Imagem mostrando diferentes condições climáticas em momentos distintos no mesmo lugar.

Reinforcement Learning com Gymnasium em Python

SARSA

  • Algoritmo TD
  • Método on-policy: ajusta a estratégia pelas ações tomadas

Imagem mostrando que SARSA representa o estado atual, a ação tomada, a recompensa recebida, o próximo estado observado e a próxima ação.

Reinforcement Learning com Gymnasium em Python

Regra de atualização do SARSA

Imagem mostrando a fórmula matemática da regra de atualização do SARSA.

  • $\alpha$: taxa de aprendizado
  • $\gamma$: fator de desconto
  • Ambos entre 0 e 1
Reinforcement Learning com Gymnasium em Python

Frozen Lake

Imagem do ambiente Frozen Lake

Reinforcement Learning com Gymnasium em Python

Inicialização

env = gym.make("FrozenLake", is_slippery=False)

num_states = env.observation_space.n num_actions = env.action_space.n
Q = np.zeros((num_states, num_actions))
alpha = 0.1 gamma = 1 num_episodes = 1000
Reinforcement Learning com Gymnasium em Python

Loop do SARSA

for episode in range(num_episodes):

state, info = env.reset() action = env.action_space.sample()
terminated = False while not terminated: next_state, reward, terminated, truncated, info = env.step(action)
next_action = env.action_space.sample()
update_q_table(state, action, reward, next_state, next_action)
state, action = next_state, next_action
Reinforcement Learning com Gymnasium em Python

Atualizações SARSA

def update_q_table(state, action, reward, next_state, next_action):

old_value = Q[state, action]
next_value = Q[next_state, next_action]
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_value)

  Imagem mostrando a fórmula matemática da regra de atualização do SARSA.

Reinforcement Learning com Gymnasium em Python

Derivando a política ótima

policy = get_policy()
print(policy)
{ 0: 1,  1: 2,  2: 1,  3: 0, 
  4: 1,  5: 0,  6: 1,  7: 0, 
  8: 2,  9: 1, 10: 1, 11: 0, 
 12: 0, 13: 2, 14: 2, 15: 0}

Imagem mostrando a política ótima no Frozen Lake com ações em setas; dá para ver como o agente evita cair nos buracos.

Reinforcement Learning com Gymnasium em Python

Vamos praticar!

Reinforcement Learning com Gymnasium em Python

Preparing Video For Download...