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=False
incluir 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/
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.
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.