Resolvendo tarefas de recompensa esparsa com o Curiosity

ARTHUR JULIANI / UNITY TECHNOLOGIESContributor
Jun 26, 2018|7 Min
Resolvendo tarefas de recompensa esparsa com o Curiosity
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Acabamos de lançar a nova versão do kit de ferramentas ML-Agents (v0.4), e um dos novos recursos que estamos animados em compartilhar com todos é a capacidade de treinar agentes com uma recompensa intrínseca adicional baseada na curiosidade.

Como há muito a ser desvendado sobre esse recurso, eu gostaria de escrever uma postagem adicional no blog sobre ele. Em essência, agora existe uma maneira fácil de incentivar os agentes a explorar o ambiente de forma mais eficiente quando as recompensas não são frequentes e são distribuídas de forma esparsa. Esses agentes podem fazer isso usando uma recompensa que dão a si mesmos com base na surpresa que sentem com o resultado de suas ações. Nesta publicação, explicarei como esse novo sistema funciona e, em seguida, mostrarei como podemos usá-lo para ajudar nosso agente a resolver uma tarefa que, de outra forma, seria muito mais difícil de ser resolvida por um algoritmo de Aprendizado por Reforço (RL) simples.

Exploração orientada pela curiosidade

Quando se trata de Aprendizado por Reforço, o principal sinal de aprendizado vem na forma de recompensa: um valor escalar fornecido ao agente após cada decisão que ele toma. Normalmente, essa recompensa é fornecida pelo próprio ambiente e especificada pelo criador do ambiente. Essas recompensas geralmente correspondem a coisas como +1,0 por atingir a meta, -1,0 por morrer, etc. Podemos pensar nesse tipo de recompensa como sendo extrínseca porque ela vem de fora do agente. Se há recompensas extrínsecas, isso significa que também deve haver recompensas intrínsecas. Em vez de serem fornecidas pelo ambiente, as recompensas intrínsecas são geradas pelo próprio agente com base em alguns critérios. É claro que não é qualquer recompensa intrínseca que serve. Queremos recompensas intrínsecas que, em última análise, sirvam a algum propósito, como mudar o comportamento do agente de modo que ele obtenha recompensas extrínsecas ainda maiores no futuro, ou que o agente explore o mundo mais do que faria de outra forma. Nos seres humanos e em outros mamíferos, a busca por essas recompensas intrínsecas é muitas vezes chamada de motivação intrínseca e está intimamente ligada aos nossos sentimentos de agência.

Os pesquisadores da área de Aprendizagem por Reforço têm se dedicado muito ao desenvolvimento de bons sistemas para fornecer recompensas intrínsecas aos agentes, que os dotam de motivação semelhante à que encontramos nos agentes da natureza. Uma abordagem popular é dotar o agente de um senso de curiosidade e recompensá-lo com base no grau de surpresa com o mundo ao seu redor. Se pensarmos em como um bebê aprende sobre o mundo, ele não está buscando nenhum objetivo específico, mas sim brincando e explorando pela novidade da experiência. Você pode dizer que a criança é curiosa. A ideia por trás da exploração orientada pela curiosidade é instilar esse tipo de motivação em nossos agentes. Se o agente for recompensado por alcançar estados surpreendentes, ele aprenderá estratégias para explorar o ambiente e encontrar cada vez mais estados surpreendentes. Ao longo do caminho, espera-se que o agente também descubra a recompensa extrínseca, como uma posição de meta distante em um labirinto ou um recurso escasso em um cenário.

Optamos por implementar uma abordagem específica desse tipo em um artigo recente publicado no ano passado por Deepak Pathak e seus colegas em Berkeley. Ele se chama Curiosity-driven Exploration by Self-supervised Prediction (Exploração orientada pela curiosidade por meio de previsão autossupervisionada), e você pode ler o artigo aqui se estiver interessado em todos os detalhes. No artigo, os autores formulam a ideia de curiosidade de uma forma inteligente e generalizável. Eles propõem o treinamento de duas redes neurais separadas: um modelo direto e um modelo inverso. O modelo inverso é treinado para pegar a observação atual e a próxima recebidas pelo agente, codificá-las usando um único codificador e usar o resultado para prever a ação que foi tomada entre a ocorrência das duas observações. O modelo avançado é, então, treinado para usar a observação e a ação atuais codificadas e prever a próxima observação codificada. A diferença entre as codificações previstas e reais é então usada como recompensa intrínseca e fornecida ao agente. Uma diferença maior significa uma surpresa maior, o que, por sua vez, significa uma recompensa intrínseca maior.

Ao usar esses dois modelos juntos, a recompensa não apenas captura coisas surpreendentes, mas também captura especificamente coisas surpreendentes sobre as quais o agente tem controle, com base em suas ações. Sua abordagem permite que um agente treinado sem nenhuma recompensa extrínseca progrida em Super Mario Bros simplesmente com base em sua recompensa intrínseca. Veja abaixo um diagrama do documento que descreve o processo.

Imagem
Diagrama mostrando o Intrinsic Curiosity Module. As caixas brancas correspondem à entrada. As caixas azuis correspondem às camadas e saídas da rede neural. As linhas azuis preenchidas correspondem ao fluxo de ativação na rede. As linhas pontilhadas verdes correspondem às comparações usadas para o cálculo da perda. A caixa verde corresponde ao cálculo da recompensa intrínseca.
Ambiente das pirâmides

Para testar a curiosidade, nenhum ambiente comum será suficiente. A maioria dos ambientes de exemplo que lançamos por meio da v0.3 do kit de ferramentas ML-Agents contém recompensas que são relativamente densas e não se beneficiariam muito da curiosidade ou de outros métodos de aprimoramento de exploração. Assim, para testar a curiosidade recém-descoberta de nossos agentes, criamos um novo ambiente de recompensa esparso chamado Pyramids. Nele, há apenas uma única recompensa, e a exploração aleatória raramente permitirá que o agente a encontre. Nesse ambiente, nosso agente assume a forma do conhecido cubo azul de alguns de nossos ambientes anteriores. O agente pode se mover para frente ou para trás e virar para a esquerda ou para a direita, além de ter acesso a uma visão do mundo ao redor por meio de uma série de projeções de raios a partir da parte frontal do cubo.

Imagem
Um agente observando os arredores usando ray-casts (visualizado aqui em preto para fins ilustrativos)

Esse agente é lançado em um espaço fechado contendo nove salas. Uma dessas salas contém um interruptor posicionado aleatoriamente, enquanto as outras contêm pirâmides de pedra inamovíveis posicionadas aleatoriamente. Quando o agente interage com o interruptor colidindo com ele, o interruptor passa de vermelho para verde. Junto com essa mudança de cor, uma pirâmide de tijolos de areia móveis é gerada aleatoriamente em uma das muitas salas do ambiente. No topo dessa pirâmide há um único tijolo dourado. Quando o agente colide com esse tijolo, ele recebe +2 recompensas extrínsecas. O truque é que não há recompensas intermediárias para mover-se para novas salas, acionar o interruptor ou derrubar a torre. O agente precisa aprender a executar essa sequência sem nenhuma ajuda intermediária.

Imagem
Agente treinado com PPO+Curiosidade movendo-se para a pirâmide após interagir com o interruptor.

Os agentes treinados usando um Proximal Policy Optimization (PPO, nosso algoritmo padrão de RL em ML-Agents) nessa tarefa se saem mal, muitas vezes não conseguindo se sair melhor do que o acaso (recompensa média de -1), mesmo depois de 200.000 etapas.

Por outro lado, os agentes treinados com PPO e a recompensa intrínseca Curiosity-Driven resolvem o problema de forma consistente em 200.000 episódios e, muitas vezes, até na metade desse tempo.

imagem
Recompensa extrínseca cumulativa ao longo do tempo para o agente PPO+Curiosidade (azul) e o agente PPO (vermelho). Média de mais de cinco corridas cada.

Também analisamos os agentes treinados apenas com o sinal de recompensa intrínseco e, embora não aprendam a resolver a tarefa, eles aprendem uma política qualitativamente mais interessante que permite que se movam entre várias salas, em comparação com a política extrínseca apenas, que faz com que o agente se mova em pequenos círculos em uma única sala.

Usando o Curiosity com o PPO

Se você quiser usar a curiosidade para ajudar a treinar agentes em seus ambientes, é fácil habilitá-la. Primeiro, obtenha a versão mais recente do kit de ferramentas ML-Agents e, em seguida, adicione a seguinte linha ao arquivo de hiperparâmetros do cérebro que você está interessado em treinar: `use_curiosity: true`. A partir daí, você pode iniciar o processo de treinamento como de costume. Se você usa o TensorBoard, perceberá que agora há algumas novas métricas sendo rastreadas. Isso inclui a perda do modelo direto e inverso, juntamente com a recompensa intrínseca cumulativa por episódio.

Dar curiosidade ao seu agente não ajudará em todas as situações. Especialmente se o seu ambiente já contiver uma função de recompensa densa, como os nossos ambientes Crawler e Walker, em que uma recompensa diferente de zero é recebida após a maioria das ações, talvez não haja muita melhora. Se o seu ambiente contiver apenas recompensas esparsas, a adição de recompensas intrínsecas tem o potencial de transformar essas tarefas de insolúveis em facilmente solucionáveis usando o aprendizado por reforço. Isso é aplicável principalmente quando faz mais sentido para recompensas simples, como ganhar/perder ou concluir/fracassar tarefas.

---

Se você usar o recurso Curiosity, gostaria de saber como foi sua experiência. Fique à vontade para entrar em contato conosco em nossa página de problemas do GitHub ou envie-nos um e-mail diretamente para ml-agents@unity3d.com. Feliz treinamento!