Introduction to Reinforcement Learning. Parte 3: Q-Learning com Redes Neurais, Algoritmo DQN

Você mesmo pode executar o código TensorFlow neste link (ou uma versão PyTorch neste link), ou continuar lendo para ver o código sem executá-lo. Como o código é um pouco mais longo do que nas partes anteriores, mostrarei apenas as partes mais importantes aqui. O código fonte inteiro está disponível seguindo o link acima.

Aqui está o ambiente CartPole. Eu estou usando o OpenAI Gym para visualizar e rodar este ambiente. O objetivo é mover o carrinho para a esquerda e direita, a fim de manter o poste na posição vertical. Se a inclinação do poste estiver a mais de 15 graus do eixo vertical, o episódio terminará e começaremos de novo. O vídeo 1 mostra um exemplo de execução de vários episódios neste ambiente, tomando ações aleatórias.

>

Video 1: Jogabilidade aleatória no ambiente CartPole.

Para implementar o algoritmo DQN, vamos começar criando os DNNs principal (main_nn) e alvo (target_nn). A rede de destino será uma cópia da rede principal, mas com sua própria cópia dos pesos. Também vamos precisar de um otimizador e uma função de perda.

Algoritmo 1. A arquitetura do Deep Neural Networks.

Next, vamos criar o buffer de replay da experiência, para adicionar a experiência ao buffer e sampleá-la mais tarde para treinamento.

Algoritmo 2. Experience Replay Buffer.

Também iremos escrever uma função de ajuda para executar a política de ε-greedy, e para treinar a rede principal usando os dados armazenados no buffer.

Algoritmo 3. Funções para a política ε-greedy e para o treinamento da rede neural.

Definiremos também os hiper-parametros necessários e treinaremos a rede neural. Vamos jogar um episódio usando a política ε-greedy, armazenar os dados no buffer de replay da experiência, e treinar a rede principal após cada passo. Uma vez a cada 2000 passos, copiaremos os pesos da rede principal para a rede alvo. Também diminuiremos o valor do epsilon (ε) para começar com uma exploração elevada e diminuir a exploração ao longo do tempo. Veremos como o algoritmo começa a aprender depois de cada episódio.

Algoritmo 4. Circuito principal.

Este é o resultado que será exibido:

Episode 0/1000. Epsilon: 0.99. Reward in last 100 episodes: 14.0 Episode 50/1000. Epsilon: 0.94. Reward in last 100 episodes: 22.2 Episode 100/1000. Epsilon: 0.89. Reward in last 100 episodes: 23.3 Episode 150/1000. Epsilon: 0.84. Reward in last 100 episodes: 23.4 Episode 200/1000. Epsilon: 0.79. Reward in last 100 episodes: 24.9 Episode 250/1000. Epsilon: 0.74. Reward in last 100 episodes: 30.4 Episode 300/1000. Epsilon: 0.69. Reward in last 100 episodes: 38.4 Episode 350/1000. Epsilon: 0.64. Reward in last 100 episodes: 51.4 Episode 400/1000. Epsilon: 0.59. Reward in last 100 episodes: 68.2 Episode 450/1000. Epsilon: 0.54. Reward in last 100 episodes: 82.4 Episode 500/1000. Epsilon: 0.49. Reward in last 100 episodes: 102.1 Episode 550/1000. Epsilon: 0.44. Reward in last 100 episodes: 129.7 Episode 600/1000. Epsilon: 0.39. Reward in last 100 episodes: 151.7 Episode 650/1000. Epsilon: 0.34. Reward in last 100 episodes: 173.0 Episode 700/1000. Epsilon: 0.29. Reward in last 100 episodes: 187.3 Episode 750/1000. Epsilon: 0.24. Reward in last 100 episodes: 190.9 Episode 800/1000. Epsilon: 0.19. Reward in last 100 episodes: 194.6 Episode 850/1000. Epsilon: 0.14. Reward in last 100 episodes: 195.9 Episode 900/1000. Epsilon: 0.09. Reward in last 100 episodes: 197.9 Episode 950/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0 Episode 1000/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0

Agora que o agente aprendeu a maximizar a recompensa pelo ambiente CartPole, faremos com que o agente interaja com o ambiente mais uma vez, para visualizar o resultado e ver que agora é capaz de manter o pólo equilibrado por 200 quadros.

Video 2. Resultado da visualização do agente DQN treinado interagindo com o ambiente CartPole.

Você mesmo pode executar o código TensorFlow neste link (ou uma versão PyTorch neste link).

Deixe uma resposta

O seu endereço de email não será publicado.