[RL] Algunas sugerencias para usar el aprendizaje por refuerzo

Recursos del tutorial de aprendizaje por refuerzo: https://stable-baselines3.readthedocs.io/en/master/guide/rl.html

Tutorial de SB3: https://github.com/araffin/rl-tutorial-jnrr19/blob/sb3/1_getting_started.ipynb

En comparación con el aprendizaje supervisado con un conjunto de datos fijo, los datos utilizados para entrenar al agente en el aprendizaje por refuerzo provienen de la interacción entre el agente y el entorno. Dado que los resultados del aprendizaje por refuerzo son inconsistentes cada vez, necesitamos obtener un resultado cuantitativo.

Los buenos resultados dependen de los hiperparámetros adecuados, los algoritmos recientes como PPO, SAC, TD3 requieren que ajustemos muy pocos parámetros, pero no espere que los parámetros predeterminados sean adecuados para cualquier entorno.

Por lo tanto, se recomienda encarecidamente consultar RL zoo para aprender a ajustar los parámetros (se recomienda utilizar la optimización automática de hiperparámetros).

Al personalizar un entorno, normalice la entrada en el agente y tenga en cuenta las operaciones de preprocesamiento que son comunes en otros entornos.

Limitaciones actuales de RL

  1. El efecto de muestreo de los algoritmos sin modelo no es muy bueno y, a menudo, es necesario aprender millones de muestras interactivas, por lo que la mayoría de los algoritmos RL actualmente solo se implementan en simulaciones y juegos.

  2. Para lograr un mejor rendimiento en equipos ordinarios, se debe aumentar el número de pasos de entrenamiento del agente.

  3. Para lograr el rendimiento deseado, a menudo se utiliza el conocimiento experto para diseñar una función de recompensa adecuada.
    (Un ejemplo de formación de recompensas: el papel Deep Mimic , que combina el aprendizaje por imitación y el aprendizaje por refuerzo para hacer movimientos acrobáticos).

  4. Por último está la inestabilidad del entrenamiento, se nota que el rendimiento baja mucho durante el entrenamiento, sobre todo en DDPG, por eso TD3quiero solucionar este problema. Otros enfoques, como TRPOand PPO, que usan regiones de confianza , reducen este problema al evitar actualizaciones demasiado grandes.

Cómo evaluar un algoritmo RL

Al evaluar a sus agentes o comparar resultados experimentales, tenga en cuenta que los cambios en los envoltorios del entorno, las recompensas de los episodios o la duración también pueden afectar los resultados de la evaluación. Se recomienda examinar las funciones auxiliares en el capítulo Ayudante de evaluaciónevaluate_policy .

Dado que la mayoría de los algoritmos usan ruido de exploración durante el entrenamiento, necesitamos un entorno de prueba independiente para evaluar el agente . Para obtener un buen resultado de evaluación, se recomienda evaluar periódicamente las nrondas de los agentes (generalmente 5<n<20) y calcular la recompensa promedio por ronda.

SB3 proporciona EvalCallbackuna interfaz para implementar dicha evaluación; consulte el capítulo Devolución de llamadas para obtener más detalles.

Para algunos algoritmos que usan la estrategia de aleatoriedad de forma predeterminada (como A2C, PPO), .predict()puede configurarlo al llamar al método deterministic=Truey, por lo general, tiene un mejor rendimiento.

Selección de algoritmo

  1. Elija según si el espacio de acción es discreto o continuo

    Por ejemplo, DQN solo admite acciones discretas y SAC se limita a acciones continuas.

    • Acción discreta de un solo proceso Acciones discretas

    Utilice algoritmos DQN extendidos (p. ej. QR-DQN, doble DQN, reproducción priorizada, etc.). El entrenamiento DQN es más lento, pero es el método de muestreo más eficiente (debido a su búfer de reproducción).

    • Acción discreta multiproceso Acciones multidiscretas

    Recomiende probar PPO o A2C

    • Acción continua de un solo proceso Acciones continuas

    Estado actual del arte (SOTA), el algoritmo óptimo actual: SAC, TD3, TQC

    Para obtener los mejores resultados, puede usar los hiperparámetros en el zoológico RL

    • Acción continua multiproceso Acciones multicontinuas

    Se recomienda probar PPO, TRPO, A2C, y también se recomienda utilizar los hiperparámetros en RL zoo

  2. Elige según necesites formación paralela

    Si el tiempo de entrenamiento real (tiempo de entrenamiento del reloj de pared) es importante, A2C y PPO deben usarse más

    Eche un vistazo a los entornos vectorizados para obtener más información sobre la capacitación con varios trabajadores.

  3. Entorno del objetivo

    Si su entorno sigue GoalEnvla interfaz (consulte HER), debe elegir usar HER + (SAC/TD3/DDPG/DQN/QR-DQN/TQC) según el espacio de acción. También tenga en cuenta batch_sizeque es un hiperparámetro importante de HER .

Crear un entorno personalizado

Quiere aprender a crear un entorno personalizado, empuje -> página

Ejemplo de creación de un entorno de gimnasio personalizado: cuaderno colab

algunos consejos:

  • Cuando conozca los límites, normalice su espacio de observación tanto como sea posible
  • Normalice el espacio de acción y haga que el espacio sea simétrico cuando la acción sea continua, por ejemplo, escalando la acción a [-1, 1]
  • comience con una recompensa en forma (es decir, una recompensa informativa) y una versión simplificada de su problema
  • Use acciones aleatorias para verificar si su entorno funciona correctamente y siga la interfaz del gimnasio

Preste atención para evitar romper la suposición de Markov al crear un entorno personalizado y maneje correctamente la Terminación (la cantidad máxima de pasos en cada ronda) causada por el tiempo de espera. Por ejemplo, si hay algún retraso entre la acción y la observación (como la comunicación wifi), se debe proporcionar una observación histórica como entrada.

La terminación causada por el tiempo de espera (alcanzar el número máximo de pasos por ronda) debe manejarse por separado, y debe agregar manualmente la clave para dictar: info["TimeLimit.truncated"] = True​​Si usa el TimeLimitenvoltorio de gimnasio, esta operación se realizará automáticamente.

Puede leer el límite de tiempo en RL o echar un vistazo al video de consejos y trucos de RL para obtener más detalles.

Un método para comprobar que el entorno es correcto:

from stable_baselines3.common.env_checker import check_env

env = CustomEnv(arg1, ...)
# It will check your custom environment and output additional warnings if needed
check_env(env)

Utilice rápidamente agentes aleatorios en el entorno para comprobar si su entorno funciona correctamente:

env = YourEnv()
obs = env.reset()
n_steps = 10
for _ in range(n_steps):
    # Random action
    action = env.action_space.sample()
    obs, reward, done, info = env.step(action)
    if done:
        obs = env.reset()

¿ Por qué es necesario estandarizar el espacio de acción ?

Para acciones continuas, la mayoría de los algoritmos de aprendizaje por refuerzo se basan en una distribución gaussiana (centrada en 0 con una desviación estándar de 1), por lo que si su entorno usa un espacio de acción no normalizado, amenazará el proceso de aprendizaje y dificultará la depuración.

Otra consecuencia del uso de Gaussian es que el rango de movimiento no está limitado, por lo que normalmente se usan operaciones de recorte para mantenerlo dentro de un rango razonable.

Una mejor solución es usar la función de aplastamiento (cf SAC) o la distribución Beta (cf problema #112 ).

Lo anterior no es válido para DDPGy TD3porque no dependen de ninguna distribución de probabilidad.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-ljR7KaoS-1670319642461)(assets/image-20221206171102-ji6psq2.png)]

Sugerencias para ejecutar un algoritmo RL

Al intentar reproducir un documento de RL mediante la ejecución de un algoritmo, se recomienda echar un vistazo a los aspectos prácticos de la investigación de RL de John Schulman ( video ).

Recomendamos seguir esos pasos para tener un algoritmo RL que funcione :

  1. Leer el artículo original varias veces.
  2. Leer implementaciones existentes (si están disponibles)
  3. Trate de tener alguna "señal de vida" en los problemas con los juguetes.
  4. Ejecutar en entornos cada vez más complejos para verificar aún más la viabilidad del algoritmo (los resultados se pueden comparar con RL zoo). En este paso, generalmente se requiere la optimización de hiperparámetros.

Debe tener especial cuidado con la forma de los diferentes objetos que está manipulando (un error de transmisión fallará silenciosamente, consulte el problema n. ° 75 ) y cuándo detener la propagación del gradiente (梯度传播).

Entorno de acción continua progresivamente difícil:

  1. Péndulo (fácil de resolver)
  2. HalfCheetahBullet (dificultad media con mínimos locales y recompensa en forma)
  3. BipedalWalkerHardcore (si funciona en ese, entonces puedes tener una cookie)

Entornos de acción discreta gradualmente difíciles:

  1. CartPole-v1 (fácil de ser mejor que un agente aleatorio, más difícil de lograr el máximo rendimiento)
  2. LunarLander
  3. Pong (uno de los juegos de Atari más fáciles)
  4. otros juegos de Atari (por ejemplo, Breakout)

Supongo que te gusta

Origin blog.csdn.net/qq_43557907/article/details/128207344
Recomendado
Clasificación