Lección 8 del curso Aprendizaje por Refuerzo Nivel Avanzado.
En la lección anterior vimos el principio de funcionamiento del algoritmo REINFORCE con línea de base y vimos cómo usar este algoritmo para resolver un sencillo problema de Aprendizaje por Refuerzo con ayuda de Python.
En esta lección veremos cómo usar este algoritmo REINFORCe con línea de base para resolver un problema clásico del Aprendizaje por Refuerzo: el péndulo invertido. Así que para este problema complejo haremos uso de Redes Neuronales que serán entrenadas para aprender la Política parametrizada y la línea de base y al final veremos cómo el Agente entrenado es capaz de mantener balanceado un péndulo invertido por una gran cantidad de tiempo.
Así que con este ejercicio práctico ya tendremos una primera aproximación a lo que es el Aprendizaje por Refuerzo Profundo, en donde se hace uso de Redes Neuronales y que será un tema que abordaremos en detalle en próximos cursos.
Comencemos entonces entendiendo en detalle el problema a resolver y cómo acceder a este entorno usando la librería Gymnasium de Python:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Muy bien, como acabamos de ver, este problema del péndulo invertido (o cart pole en Inglés) es mucho más complejo que cualquiera de los problemas que hemos implementado en este o en cursos anteriores.
La idea básica es que tendremos un péndulo invertido que está apoyado en un pequeño carrito que se desliza sobre una superficie. Y el objetivo es lograr entrenar un Agente, usando el algoritmo REINFORCE con línea de base, para que aprenda a mover el carrito a izquierda o derecha de manera tal que logre mantener balanceado el péndulo la mayor cantidad de tiempo posible:

Este entorno se caracteriza por tener un espacio de acciones discreto (acción 0: empujar el carro a la izquierda; acción 1: empujar el carro hacia la derecha) y un espacio de estados continuo.
En particular, cada estado se representa con un vector de 4 elementos correspondientes a la posición del carrito, la velocidad del carrito, el ángulo del péndulo con respecto a la vertical y la velocidad angular del péndulo.
Además, vimos cómo con la librería Gymnasium de Python podemos fácilmente acceder e interactuar con este entorno de forma sencilla.
Y lo interesante de este problema es que estos 4 elementos que representan el estado son variables continuas, lo que hace que no resulte trivial la implementación de una Política parametrizada usando funciones matemáticas.
En lugar de ello, lo que haremos será utilizar Redes Neuronales tanto para la implementar la Política parametrizada como para la línea de base (es decir la función estado-valor).
Así que veamos en detalle qué características tienen estas dos Redes Neuronales y cómo se implementan de forma básica haciendo uso de PyTorch:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Como acabamos de ver, las Redes Neuronales a implementar tendrán las siguientes características:
- La Red Neuronal para la Política parametrizada tendrá 4 neuronas de entrada (correspondientes a las 4 variables que hacen parte del estado), una capa oculta y una capa de salida con dos neuronas (encargadas de predecir la probabilidad de ejecutar cada una de las acciones).
- La Red Neuronal para la función estado-valor (línea de base) tendrá igualmente 4 neuronas de entrada, una capa oculta y una capa de salida con una neurona (encargada de predecir el valor del estado de entrada).
También es importante tener en cuenta que la primera red tendrá una pérdida que será negativa con respecto a la función usada en la actualización definida originalmente en el algoritmo REINFORCE con línea de base. Con esto, podremos usar el algoritmo del gradiente descendente para entrenar de forma convencional esta red.
Por su parte, la segunda Red Neuronal tendrá una pérdida definida como el error cuadrático medio y en este caso también usaremos el algoritmo del gradiente descendente para su entrenamiento.
Finalmente, vimos cómo implementar de forma sencilla estas dos Redes Neuronales haciendo uso de PyTorch (usando precisamente la implementación de Redes Neuronales vista en el curso PyTorch Nivel Básico).
Así que con todo esto ya estamos listos para combinar todos estos elementos (el entorno en Gymnasium y las dos redes neuronales que acabamos de implementar) para entrenar nuestro Agente haciendo uso del algoritmo REINFORCE con línea de base. Veamos entonces esta última parte de la implementación y pongamos a prueba este Agente para ver qué tan bien logra controlar el péndulo invertido:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
¡Excelente! Acabamos de comprobar que el Agente entrenado logra controlar bastante bien el péndulo invertido.
Realmente hemos aprendido mucho en esta lección, pues hemos visto cómo usar el algoritmo REINFORCE con línea de base para resolver un problema real como lo es el del péndulo invertido (que aparece comúnmente en problemas de robótica, de control de la posición de cohetes e incluso de vehículos autónomos).
De hecho, hemos visto cómo combinar este algoritmo con los conceptos y las herramientas de implementación de Redes Neuronales y hemos visto de manera gráfica cómo realmente la Política aprendida durante el entrenamiento permite controlar adecuadamente el carrito, manteniendo balanceado el péndulo.
Sin embargo, a pesar de los resultados obtenidos, el algoritmo REINFORCE con línea de base aún tiene algunas limitaciones que han dado origen a algoritmos como el Actor-Crítico cuyo objetivo es subsanar precisamente algunas de esas falencias.
Así que en la próxima lección hablaremos en detalle de los algoritmos de Actor-Crítico, que hacen también parte de esta gran familia de métodos del Gradiente de la Política.
Todas las lecciones del curso Aprendizaje por Refuerzo Nivel Avanzado
