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
-
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.
-
Para lograr un mejor rendimiento en equipos ordinarios, se debe aumentar el número de pasos de entrenamiento del agente.
-
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). -
Por último está la inestabilidad del entrenamiento, se nota que el rendimiento baja mucho durante el entrenamiento, sobre todo en
DDPG
, por esoTD3
quiero solucionar este problema. Otros enfoques, comoTRPO
andPPO
, 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 n
rondas de los agentes (generalmente 5<n<20) y calcular la recompensa promedio por ronda.
SB3 proporciona
EvalCallback
una 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étododeterministic=True
y, por lo general, tiene un mejor rendimiento.
Selección de algoritmo
-
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
-
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.
-
Entorno del objetivo
Si su entorno sigue
GoalEnv
la 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 cuentabatch_size
que 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 TimeLimit
envoltorio 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
DDPG
yTD3
porque no dependen de ninguna distribución de probabilidad.
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 :
- Leer el artículo original varias veces.
- Leer implementaciones existentes (si están disponibles)
- Trate de tener alguna "señal de vida" en los problemas con los juguetes.
- 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:
- Péndulo (fácil de resolver)
- HalfCheetahBullet (dificultad media con mínimos locales y recompensa en forma)
- BipedalWalkerHardcore (si funciona en ese, entonces puedes tener una cookie)
Entornos de acción discreta gradualmente difíciles:
- CartPole-v1 (fácil de ser mejor que un agente aleatorio, más difícil de lograr el máximo rendimiento)
- LunarLander
- Pong (uno de los juegos de Atari más fáciles)
- otros juegos de Atari (por ejemplo, Breakout)