Oi! Meu nome é Eric Yu, e escrevi este repositório para ajudar os iniciantes a começar a escrever a otimização de políticas proximais (PPO) do zero usando Pytorch. Meu objetivo é fornecer um código para o PPO, que é os ossos nus (pequenos/nenhum truques sofisticados) e extremamente bem documentado/estilizado e estruturado. Estou especialmente mirando pessoas que estão cansadas de ler inúmeras implementações de PPO e não ter absolutamente nenhuma idéia do que está acontecendo.
Se você não vier do Medium, leia minha série primeiro.
Escrevi esse código com a suposição de que você tem alguma experiência com o Python e o Reforço Learning (RL), incluindo como os algoritmos de gradiente de políticas (PG) e trabalho de PPO (para PPO, devem estar familiarizados com o nível teórico. Afinal, esse código deve ajudá -lo a colocar o PPO em prática). Se não estiver familiarizado com RL, PG ou PPO, siga os três links abaixo em ordem:
Se não estiver familiarizado com o RL, leia o Open Introdução ao RL (todas as 3 partes)
Se não estiver familiarizado com o PG, leia uma explicação intuitiva do gradiente de políticas
Se não estiver familiarizado com a teoria do PPO, leia o poste de transbordamento de pilha PPO
Se não estiver familiarizado com todos os 3, passe por esses links acima em ordem de cima para baixo.
Observe que esta implementação de PPO assume uma observação contínua e espaço de ação, mas você pode mudar para discretar com relativamente facilidade. Eu sigo o pseudocódigo fornecido no Spinning Up do OpenAI para PPO: https://spinningup.openai.com/en/latest/algorithms/ppo.html; Os números de linha de pseudocódigo são especificados como "ALG Etapa #" em ppo.py.
Espero que isso seja útil, pois eu gostaria de ter um recurso como esse quando comecei minha jornada para o aprendizado de reforço.
Agradecimentos especiais a Zhirui Xia por fazer a Parte 4 deste tutorial.
Primeiro, recomendo a criação de um ambiente virtual do Python:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Para treinar do zero:
python main.py
Para testar o modelo:
python main.py --mode test --actor_model ppo_actor.pth
Para treinar com os modelos de ator/crítico existentes:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
Nota: para alterar hiperparâmetros, ambientes, etc. faça -o em main.py; Eu não os tive como argumentos da linha de comando porque não gosto de quanto tempo faz o comando.
main.py é o nosso executável. Ele analisará os argumentos usando argumentos.py e inicializará nosso ambiente e modelo de PPO. Dependendo do modo que você especificar (trem por padrão), ele treinará ou testará nosso modelo. Para treinar nosso modelo, tudo o que precisamos fazer é chamar a função learn ! Isso foi projetado com a maneira como você treina PPO2 com a STABLE_BASELINES em mente.
argumentos.py é o que principal chamará para analisar argumentos da linha de comando.
ppo.py contém nosso modelo PPO. Toda a mágica de aprendizado acontece neste arquivo. Por favor, leia minha série média para ver como funciona. Outro método que eu recomendo é usar algo chamado pdb , ou Python Debugger, e passando pelo meu código a partir de quando eu chamo learn em main.py.
O Network.Py contém uma amostra de rede neural para avanços que podemos usar para definir nossas redes de ator e crítico no PPO.
Eval_policy.py contém o código para avaliar a política. É um módulo completamente separado do outro código.
O diretório graf_code contém o código para coletar automaticamente dados e gerar gráficos. Leva ~ 10 horas em um computador decente para gerar todos os dados no meu artigo médio. Todos os dados do artigo médio ainda devem estar em graph_code/graph_data , caso você esteja interessado; Se quiser, você pode regenerar os gráficos que eu uso com os dados. Para mais detalhes, leia o ReadMe em graf_code.
Aqui está um ótimo tutorial do PDB para começar: https://www.youtube.com/watch?v=vqjcx3p89yk&ab_channel=tutorialEdge
Ou se você é um especialista em depuradores, aqui está a documentação: https://docs.python.org/3/library/pdb.html
Aqui está uma lista de ambientes que você pode experimentar. Observe que, nesta implementação do PPO, você pode usar apenas aqueles com Box para espaços de observação e ação.
Os hiperparâmetros podem ser encontrados aqui.
Por favor, consulte meu artigo médio.
Se você tiver alguma dúvida ou gostaria de entrar em contato comigo, pode me encontrar aqui:
E -mail: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-engineer/