Aprendizado por reforço MindSpore: treinamento usando PPO com ambiente HalfCheetah-v2

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=Falseincluí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/

imagem.png

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.

imagem.png

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.
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/4526289/blog/11062207
Recomendado
Clasificación