Coletando bananas com Deep Reinforcement Learning

Douglas Trajano
Data Hackers
Published in
5 min readAug 2, 2020

--

Que negócio é esse de Deep Reinforcement Learning? Como funciona? Do que se alimenta? Veja na sexta, no Globo Reporter (brinks)

Neste post vamos ver um agente que utiliza um algoritmo de Deep Reinforcement Learning para aprender quais as bananas ele deve coletar (amarelas) e quais ele não deve coletar (roxas).

Antes de falarmos sobre o algoritmo e o agente, vamos entender como reinforcement learning funciona, ok?

Você esperando eu falar rapidinho sobre reinforcement learning

Bem, como reinforcement learning funciona?

Reinforcement learning é uma subclasse de Machine Learning.

Tipos de aprendizado de máquina

Falando de Reinforcement learning, teremos alguns conceitos importantes para entender:

Agente (agent): É o nosso modelo que deverá interagir com o environment (ambiente), ele irá receber os estados (states) do environment e fornecer uma ação (action) que deseja realizar.

Ambiente (environment): É o local onde o agente estará inserido. O environment irá fornecer uma recompensa (reward) para o agente em toda ação que o agente fornecer.

A imagem abaixo ilustra bem esse pensamento.

Os algoritmos de reinforcement learning possuem técnicas diferentes para alcançar seu objetivo, mas no geral, todos possuem o mesmo objetivo: maximizar a recompensa cumulativa.

Basicamente eles procurarão alcançar o maior valor possível antes do ambiente acabar (sim, ele acaba).

Alguns que são baseados em encontrar a melhor value function (função valor), outros são baseados em encontrar a política que reflete a melhor value function.

Para entender melhor a diferença entre algoritmos value-based e policy-based. Vamos ver um exemplo prático:

Você gerencia um estoque de produtos e decidiu que quando a contagem de produtos cai abaixo de um determinado valor, você emite um pedido de compra para repor seu estoque. Essa política é mais simples do que entender o comportamento e preferências dos seus clientes para prever o impacto no estoque.

Por “simples”, entenda que temos algoritmos que funcionarão melhor em cada ambiente.

Temos ambientes que funcionarão melhor com algoritmos baseados em política, outros, com algoritmos baseados em função de valor.

Exemplos de algoritmos de Reinforcement Learning

Tá, até agora a gente estava falando de reinforcement learning no geral. Afinal, o que e “Deep Reinforcement Learning”?

Basicamente, Deep Reinforcement Learning é a combinação de Deep Learning com Reinforcement Learning.

Reinforcement Learning + Deep Learning = Deep Reinforcement Learning

Bom, para o ambiente que usei neste projeto, usei o algoritmo Deep Q-Learning. Basicamente ele possui uma neural network (rede neural) que será responsável por encontrar a melhor value function.

Deep Q-Learning

Bom, agora que você sabe um pouco mais sobre Reinforcement learning e Deep Reinforcement learning, vamos falar de bananas!

Bananas collector

Este ambiente é fornecido pela Unity.

Unity é uma das empresas mais avançadas nesta área, vale a pena dar uma olhada no site deles.

Bom, para entender o ambiente em que vamos atuar, veja o vídeo abaixo:

Estados

Os estados do ambiente terão 37 elementos que informarão a velocidade do agente, juntamente com a percepção baseada em raios de objetos em torno da direção direta do agente.

Ações

Nós temos 4 ações disponíveis que o agente poderá realizar.

Recompensa

Uma recompensa de +1 é fornecida para cada banana amarela que o agente coleta e uma recompensa de -1 é fornecida para cada banana azul.

Arquitetura do agente

O agente criado nesse projeto possui um modelo baseado no algoritmo Deep Q-Learning e uma memória que armazena os estados, ações, recompensas, etc.

Agente

O agente é uma classe que concentra tudo que precisamos para interagir com o environment. Ele possui os seguintes métodos: step(), act(), learn() entre outros.

O modelo e a memória fazem parte do agente (como atributos).

Deep Q-Learning

O propósito deste modelo é entender os estados e fornecer ações que o agente deverá fornecer. Basicamente ele possui uma input layer (camada de entrada), uma hidden layer (camada oculta) e uma output layer (camada de saída).

Memória

Temos duas implementações de memória disponíveis:

ReplayMemory

É uma implementação mais simples. Basicamente armazena os estados, ações e recompensas, depois fornece aleatoriamente estes conjuntos para treinar o modelo.

PrioritizedMemory

Essa implementação é um pouquinho mais complexa, pois as experiências para treinamento não serão fornecidas aleatoriamente. Aqui iremos tentar entender quais experiências o agente provavelmente irá aprender mais, usando weights (pesos) para cada experiência que o agente teve.

Treinando o agente

Para resolver este ambiente é necessário alcançar um score médio maior que 13+.

O agente possui vários hiperparâmetros que são usados pelo modelo, pela memória, etc.

agent = Agent(state_size=37, action_size=4, seed=199, nb_hidden=(64, 64), learning_rate=0.001, memory_size=int(1e6), prioritized_memory=False, batch_size=64, gamma=0.9, tau=0.03, small_eps=0.03, update_every=4)

No treinamento, testamos dois agentes, um com a ReplayMemory e outro com a PrioritizedMemory.

Agente com ReplayMemory
Agente com PrioritizedMemory

O agente com a PrioritizedMemory aprendeu com menos episódios do que o agente com a ReplayMemory, porém, levou 11h30 para isto.

Testando o agente com PrioritizedMemory

Você pode ver todo o código no meu repositório do GitHub

Considerações

Estou estudando bastante sobre Deep Reinforcement Learning nos últimos meses, principalmente motivado pela proximidade destes algoritmos com a forma em que agimos em determinadas circunstâncias.

O grande desafio para usar estes algoritmos em nosso dia a dia é ter o ambiente desenvolvido, mapeando os estados que o agente receberá conforme suas ações. Afinal, nós usamos um ambiente pronto aqui, no mundo real precisaremos também desenvolver o environment.

Como trabalho futuro, é possível implementar uma arquitetura dueling DQN no modelo deste agente. Veja mais sobre isto aqui.

Obrigado por acompanhar até aqui e qualquer comentário será muito bem-vindo!

Ah! Gostaria de colocar alguns outros artigos muito legais sobre Deep Reinforcement Learning:

Referências

--

--