Este artigo é compartilhado da comunidade Huawei Cloud " MindSpore Reinforcement Learning: Treinamento usando PPO com o ambiente HalfCheetah-v2 ", autor: irracional.
Half Cheetah é um ambiente de aprendizagem por reforço baseado em MuJoCo, proposto por P. Wawrzyński em "A Cat-Like Robot Real-Time Learning to Run". A meia chita neste ambiente é um robô 2D feito de 9 elos e 8 juntas (incluindo duas garras). Neste ambiente, o objetivo é fazer a chita correr para frente (para a direita) o mais rápido possível, aplicando torque nas articulações, com recompensas positivas baseadas na distância percorrida e recompensas negativas por retroceder. O tronco e a cabeça da chita são fixos e o torque só pode ser exercido nas coxas dianteiras e traseiras, panturrilhas e pés.
Um espaço de ação é aquele Box(-1, 1, (6,), float32)
onde cada ação representa um torque entre os links. O espaço de observação contém os valores de posição e velocidade de diferentes partes do corpo da chita, onde todos os valores de posição vêm primeiro e todos os valores de velocidade vêm em seguida. Por padrão, a observação não inclui a coordenada x do centro de massa da chita, ela pode ser exclude_current_positions_from_observation=False
incluída passando-a no momento da construção. Se incluído, o espaço de observação teria 18 dimensões, onde a primeira dimensão representa a coordenada x do centro de massa da chita.
As recompensas são divididas em duas partes: recompensas futuras e custos controlados. A recompensa futura é calculada com base na mudança na coordenada x antes e depois da ação, e o custo de controle é o custo para punir a chita por tomar ações excessivas. A recompensa total é a recompensa futura menos o custo de controle.
Cada estado começa adicionando ruído ao estado (0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0,) para aumentar a aleatoriedade do sexo. Os primeiros 8 valores são valores de posição e os últimos 9 valores são valores de velocidade. Os valores de posição adicionam ruído uniforme, enquanto os valores de velocidade inicial (todos zeros) adicionam ruído normal padrão.
Quando a duração de um episódio exceder 1.000, o episódio será truncado.
Informações detalhadas sobre este ambiente podem ser encontradas em: https://www.gymlibrary.dev/environments/mujoco/half_cheetah/
Isso é mais complexo do que muitos ambientes.
Mas não importa, temos o algoritmo ppo, que pode executar aprendizagem por reforço e até mesmo grandes modelos de linguagem.
O algoritmo PPO (Proximal Policy Optimization) é um método de otimização de política para aprendizagem por reforço. Ele é projetado para resolver o problema da região de confiança em métodos tradicionais de gradiente de política (como TRPO, Trust Region Policy Optimization).
O algoritmo PPO introduz técnicas de recorte e técnicas de amostragem de importância para reduzir a variância no cálculo de gradientes, melhorando assim a velocidade de convergência e a estabilidade do algoritmo.
No algoritmo PPO, existem dois conceitos principais:
- Política : Uma política é uma função que define a distribuição de probabilidade de ação em um determinado estado.
- Função Valor : A função valor estima o retorno esperado que pode ser obtido ao partir do estado s e atingir um estado ou terminal específico sob uma determinada estratégia.
As principais etapas do algoritmo PPO incluem:
- Amostragem : Amostragem de dados da estratégia atual, incluindo estado, ação, recompensa e próximo estado.
- Cálculo de metas : Use a estratégia de meta para calcular a função de valor alvo e calcular a divergência KL da estratégia de meta.
- Política de atualização : atualize a política usando técnicas de amostragem de importância e técnicas de recorte.
- Atualizando Função de Valor : Atualize a função de valor usando o método de gradiente de política.
A idéia central do algoritmo PPO é atualizar alternadamente a estratégia e a função de valor para alcançar a otimização conjunta da estratégia e do valor. Este método pode efetivamente reduzir a variância ao calcular gradientes e melhorar a velocidade de convergência e a estabilidade do algoritmo.
A seguir está uma fórmula Markdown simplificada para o algoritmo PPO:
# Algoritmo de Otimização de Política Proximal (PPO) ## 1. Amostragem Amostra dos dados da política atual, incluindo estado $s$, ação $a$, recompensa $r$ e próximo estado $s'$. ## 2. Calculando metas Calcule a função de valor objetivo usando a política objetiva e calcule a divergência KL da política objetiva. ## 3. Política de atualização Atualizar estratégias utilizando técnicas de amostragem de importância e técnicas de recorte. ## 4. Atualizando Função de Valor Atualizando a função de valor usando métodos de gradiente de política. ## Repita as etapas 1 a 4 para alcançar a otimização conjunta de estratégia e valor.
Esta fórmula é uma versão simplificada, o algoritmo PPO também inclui muitos outros detalhes e técnicas, como reprodução de experiência, ajuste dinâmico da taxa de aprendizagem, etc.
importar argparse importe-nos do contexto de importação do mindspore de mindspore importar dtype como mstype de mindspore.communication importar get_rank, init importar mindspore_rl.distribution.distribution_policies como DP da configuração de importação mindspore_rl.algorithm.ppo de mindspore_rl.algorithm.ppo.ppo_session importar PPOSession de mindspore_rl.algorithm.ppo.ppo_trainer importar PPOTrainer analisador = argparse.ArgumentParser(descrição="MindSpore Reforço PPO") parser.add_argument("--episode", type=int, default=650, help="número total de episódios.") analisador.add_argument( "--device_target", tipo=str, padrão = "Automático", escolhas=["Ascender", "CPU", "GPU", "Auto"], help="Escolha um dispositivo para executar o exemplo ppo(Padrão: Auto).", ) analisador.add_argument( "--modo_precisão", tipo=str, padrão = "fp32", escolhas=["fp32", "fp16"], help="Modo de precisão", ) analisador.add_argument( "--env_yaml", tipo=str, padrão = "../env_yaml/HalfCheetah-v2.yaml", help="Escolha um ambiente yaml para atualizar o exemplo ppo (Padrão: HalfCheetah-v2.yaml).", ) analisador.add_argument( "--algo_yaml", tipo=str, padrão=Nenhum, help="Escolha um algoritmo yaml para atualizar o exemplo ppo(Padrão: Nenhum).", ) analisador.add_argument( "--enable_distribute", tipo=bool, padrão=Falso, help="Treinar em modo de distribuição (Padrão: Falso).", ) analisador.add_argument( "--worker_num", type=int, default=2, help="Worker num (padrão: 2)." ) analisador.add_argument( "--graph_op_run", type=int, default=1, help="Executar kernel por kernel (Padrão: 1)." ) opções, _ = parser.parse_known_args()`
wget https://www.roboti.us/download/mujoco200_linux.zip mv mujoco200_linux ~/.mujoco/mujoco200 wget https://www.roboti.us/file/mjkey.txt cp mjkey.txt /home/kewei/.mujoco/mjkey.txt wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm yum localinstall patchelf-0.12-1.el7.x86_64.rpm pip instalar 'mujoco_py==2.0.2.13'
Demorará um pouco para compilar o mujoco pela primeira vez.
Adicione o seguinte conteúdo ao bashrc:
exportar LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin exportar MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH} exportar LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin exportar LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
Então você pode começar a treinar. Use with da seção anterior para preservar a entrada.
# dqn_session.run(class_type=DQNTrainer, episódio=episódio) com RealTimeCaptureAndDisplayOutput() como capture_new: ppo_session.run(class_type=PPOTrainer, episódio=episódio, duração=duração)
Clique para seguir e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível~
Decidi desistir do software industrial de código aberto . Grandes eventos - OGG 1.0 foi lançado, a Huawei contribuiu com todo o código-fonte do Ubuntu 24.04 LTS foi oficialmente demitido . ". O Fedora Linux 40 foi lançado oficialmente. Uma conhecida empresa de jogos lançou novos regulamentos: os presentes de casamento dos funcionários não devem exceder 100.000 yuans. A China Unicom lança a primeira versão chinesa Llama3 8B do mundo do modelo de código aberto. Pinduoduo é condenado a compensar 5 milhões de yuans por concorrência desleal Método de entrada na nuvem doméstica - apenas a Huawei não tem problemas de segurança de upload de dados na nuvem.