Aprendizaje por refuerzo MindSpore: entrenamiento usando PPO con el entorno HalfCheetah-v2

Este artículo es compartido de la comunidad de la nube de Huawei " Aprendizaje por refuerzo de MindSpore: capacitación usando PPO con el entorno HalfCheetah-v2 ", autor: irracional.

Half Cheetah es un entorno de aprendizaje por refuerzo basado en MuJoCo, propuesto por P. Wawrzyński en "A Cat-Like Robot Real-Time Learning to Run". El medio guepardo de este entorno es un robot 2D formado por 9 eslabones y 8 articulaciones (incluidas dos garras). En este entorno, el objetivo es hacer que el guepardo corra hacia adelante (hacia la derecha) lo más rápido posible aplicando torsión en las articulaciones, con recompensas positivas basadas en la distancia recorrida y recompensas negativas por moverse hacia atrás. El torso y la cabeza del guepardo son fijos, y el torque sólo se puede ejercer en los muslos, pantorrillas y pies delanteros y traseros.

Un espacio de acción es aquel Box(-1, 1, (6,), float32)donde cada acción representa un par entre enlaces. El espacio de observación contiene los valores de posición y velocidad de diferentes partes del cuerpo del guepardo, donde todos los valores de posición van primero y siguen todos los valores de velocidad. De forma predeterminada, la observación no incluye la coordenada x del centro de masa del guepardo; se puede exclude_current_positions_from_observation=Falseincluir pasándola en el momento de la compilación. Si se incluyera, el espacio de observación tendría 18 dimensiones, donde la primera dimensión representa la coordenada x del centro de masa del guepardo.

Las recompensas se dividen en dos partes: recompensas a plazo y costos controlados. La recompensa directa se calcula en función del cambio en la coordenada x antes y después de la acción, y el costo de control es el costo de castigar al guepardo por realizar acciones excesivas. La recompensa total es la recompensa anticipada menos el coste de control.

Cada estado comienza agregando ruido al 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 la aleatoriedad del sexo. Los primeros 8 valores son valores de posición y los últimos 9 valores son valores de velocidad. Los valores de posición agregan ruido uniforme, mientras que los valores de velocidad inicial (todos ceros) agregan ruido normal estándar.

Cuando la duración de un episodio supera los 1000, el episodio se truncará.

Puede encontrar información detallada sobre este entorno en: https://www.gymlibrary.dev/environments/mujoco/half_cheetah/

imagen.png

Esto es más complejo que muchos entornos.

Pero no importa, tenemos el algoritmo ppo, que puede ejecutar aprendizaje por refuerzo e incluso modelos de lenguaje grandes.

El algoritmo PPO (optimización de políticas próximas) es un método de optimización de políticas para el aprendizaje por refuerzo. Está diseñado para resolver el problema de la región de confianza en los métodos de gradiente de políticas tradicionales (como TRPO, optimización de políticas de región de confianza).

El algoritmo PPO introduce técnicas de recorte y técnicas de muestreo de importancia para reducir la varianza al calcular los gradientes, mejorando así la velocidad de convergencia y la estabilidad del algoritmo.

En el algoritmo PPO, existen dos conceptos clave:

  • Política : Una política es una función que define la distribución de probabilidad de tomar medidas en un estado dado.
  • Función de valor : la función de valor estima el rendimiento esperado que se puede obtener al partir del estado sy alcanzar un estado o terminal específico bajo una estrategia determinada.

Los principales pasos del algoritmo PPO incluyen:

  • Muestreo : muestreo de datos de la estrategia actual, incluido el estado, la acción, la recompensa y el siguiente estado.
  • Cálculo de objetivos : utilice la estrategia objetivo para calcular la función de valor objetivo y calcule la divergencia KL de la estrategia objetivo.
  • Política de actualización : actualice la política utilizando técnicas de muestreo de importancia y técnicas de recorte.
  • Actualización de la función de valor : actualice la función de valor utilizando el método de gradiente de política.

La idea central del algoritmo PPO es actualizar alternativamente la estrategia y la función de valor para lograr la optimización conjunta de la estrategia y el valor. Este método puede reducir eficazmente la varianza al calcular gradientes y mejorar la velocidad de convergencia y la estabilidad del algoritmo.

La siguiente es una fórmula de Markdown simplificada para el algoritmo PPO:

# Algoritmo de optimización de políticas próximas (PPO)
## 1. Muestreo
Muestra los datos de la política actual, incluido el estado $s$, la acción $a$, la recompensa $r$ y el siguiente estado $s'$.
## 2. Calcular objetivos
Calcule la función de valor objetivo utilizando la política objetiva y calcule la divergencia KL de la política objetiva.
## 3. Política de actualización
Actualizar estrategias utilizando técnicas de muestreo de importancia y técnicas de recorte.
## 4. Función de actualización de valor
Actualización de la función de valor utilizando métodos de gradiente de políticas.
## Repita los pasos 1 a 4 para lograr la optimización conjunta de la estrategia y el valor.

Esta fórmula es una versión simplificada. De hecho, el algoritmo PPO también incluye muchos otros detalles y técnicas, como reproducción de experiencias, ajuste dinámico de la tasa de aprendizaje, etc.

importar análisis de argumentos
importarnos

desde el contexto de importación de esporas mentales
desde mindspore importe dtype como mstype
desde mindspore.communication importar get_rank, init

importar mindspore_rl.distribution.distribution_policies como DP
desde mindspore_rl.algorithm.ppo configuración de importación
desde mindspore_rl.algorithm.ppo.ppo_session importar PPOSession
desde mindspore_rl.algorithm.ppo.ppo_trainer importar PPOTrainer

analizador = argparse.ArgumentParser(descripción="PPO de refuerzo de MindSpore")
parser.add_argument("--episode", type=int, default=650, help="número total de episodios.")
analizador.add_argument(
    "--device_target",
    tipo = cadena,
    predeterminado="Automático",
    opciones=["Ascender", "CPU", "GPU", "Automático"],
    help="Elija un dispositivo para ejecutar el ejemplo de ppo (Predeterminado: Auto).",
)
analizador.add_argument(
    "--precision_mode",
    tipo = cadena,
    predeterminado="fp32",
    opciones=["fp32", "fp16"],
    ayuda="Modo de precisión",
)
analizador.add_argument(
    "--env_yaml",
    tipo = cadena,
    default="../env_yaml/HalfCheetah-v2.yaml",
    help="Elija un entorno yaml para actualizar el ejemplo de ppo (Predeterminado: HalfCheetah-v2.yaml).",
)
analizador.add_argument(
    "--algo_yaml",
    tipo = cadena,
    predeterminado = Ninguno,
    help="Elija un algoritmo yaml para actualizar el ejemplo de ppo(Predeterminado: Ninguno).",
)
analizador.add_argument(
    "--enable_distribute",
    tipo = booleano,
    predeterminado = Falso,
    help="Entrenar en modo distribuir (Predeterminado: Falso).",
)
analizador.add_argument(
    "--worker_num", tipo=int, predeterminado=2, ayuda="Núm de trabajador (predeterminado: 2)".
)
analizador.add_argument(
    "--graph_op_run", type=int, default=1, help="Ejecutar kernel por kernel (Predeterminado: 1)."
)
opciones, _ = 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
parche de instalación local de yumlf-0.12-1.el7.x86_64.rpm
instalación de pip 'mujoco_py==2.0.2.13'

Tomará un tiempo compilar mujoco por primera vez.

imagen.png

Agregue el siguiente contenido a 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

Entonces podrás empezar a entrenar. Utilice with de la sección anterior para conservar la entrada.

# dqn_session.run(class_type=DQNTrainer, episodio=episodio)
con RealTimeCaptureAndDisplayOutput() como capture_new:
    ppo_session.run(tipo_clase=PPOTrainer, episodio=episodio, duración=duración)

 

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~

 

Decidí renunciar al software industrial de código abierto. Eventos importantes: se lanzó OGG 1.0, Huawei contribuyó con todo el código fuente y se lanzó oficialmente Ubuntu 24.04. El equipo de la Fundación Google Python fue despedido por la "montaña de código de mierda" . ". Se lanzó oficialmente Fedora Linux 40. Una conocida compañía de juegos lanzó Nuevas regulaciones: los obsequios de boda de los empleados no deben exceder los 100.000 yuanes. China Unicom lanza la primera versión china Llama3 8B del mundo del modelo de código abierto. Pinduoduo es sentenciado a compensar 5 millones de yuanes por competencia desleal. Método de entrada en la nube nacional: solo Huawei no tiene problemas de seguridad para cargar datos en la nube.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

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