• Saltar a la navegación principal
  • Saltar al contenido principal
Logo Codificando Bits

Codificando Bits

  • Academia
    • Rutas
    • Cursos
    • Proyectos
    • Tutoriales
  • Acceder
  • Suscribirse

10 – Actor-Crítico en Python: el péndulo invertido

Lección 10 del curso Aprendizaje por Refuerzo Nivel Avanzado.

En la lección anterior vimos qué son y cómo funcionan los algoritmos Actor-Crítico, unos de los principales algoritmos del Gradiente de la Política.

Así que en esta última lección del curso veremos de forma práctica cómo resolver el problema del péndulo invertido usando precisamente los algoritmos Actor-Crítico. En particular, veremos cómo entrenar y poner a prueba las redes neuronales correspondientes a la Política (el Actor) y a la función estado-valor (el Crítico) con el fin de mantener balanceado el péndulo.

Veamos entonces cómo abordar este problema con ayuda de Python y la librería Gymnasium:

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, el entrenamiento de un Agente capaz de mantener balanceado el péndulo invertido y haciendo uso del algoritmo Actor-Crítico resulta muy similar a la que vimos en la lección 8 de este curso cuando usamos el algoritmo REINFORCE con línea de base para este mismo problema del péndulo.

Sin embargo, es clave resaltar dos aspectos que resultan diferentes en esta implementación:

  • En primer lugar, el Actor y el Crítico (que en este problema son Redes Neuronales) están interconectados y esto se evidencia en que la pérdida usada para entrenar estos modelos depende del mismo factor (el error de la diferencia temporal).
  • Y en segundo lugar, podemos ver que al usar el algoritmo Actor-Crítico no se hace necesario ejecutar un episodio completo para actualizar tanto el Actor como el Crítico. En lugar de ello hemos usado diferencias temporales para actualizar los parámetros de cada modelo en cada interacción.

En este caso particular vimos que los resultados obtenidos con este algoritmo Actor-Crítico no necesariamente son mejores o peores que los obtenidos con REINFORCE con línea de base, pues el control adecuado del péndulo dependerá en últimas de cómo escojamos los hiper-parámetros de este algoritmo (como por ejemplo el factor de descuento o las tasas de aprendizaje para el Actor y el Crítico).

Así que con esto hemos llegado al final de este curso: ¡felicitaciones por haber llegado hasta este punto!

A lo largo del curso hemos visto en qué consisten los métodos del Gradiente de la Política y hemos visto en detalle todos los conceptos y los principales elementos prácticos de los algoritmos REINFORCE, REINFORCE con línea de base y Actor-Crítico, que son en últimas los algoritmos más representativos del Gradiente de la Política.

Además, en estos últimos ejemplos prácticos hemos visto cómo incorporar Redes Neuronales en la solución de un problema clásico del Aprendizaje por Refuerzo como lo es el péndulo invertido. Y esto nos permitió introducirnos a lo que es el campo del Aprendizaje por Refuerzo Profundo, un tema que veremos en detalle en próximos cursos acá en la Academia.

Si estás suscrito a la Academia te invito como de costumbre a contactarme a través de la Intranet y a que me compartas tus comentarios sobre este curso y tus sugerencias para seguir mejorando el contenido de la Academia.

Así que te envío un saludo y ¡nos vemos en el próximo curso!

Todas las lecciones del curso Aprendizaje por Refuerzo Nivel Avanzado

© Codificando Bits, LLC | Blog | Contacto | Servicios | Acerca de | Políticas

¿Has olvidado la contraseña?
¿Has perdido tu contraseña? Por favor, introduce tu nombre de usuario o dirección de correo electrónico. Recibirás por correo electrónico un enlace para crear una nueva contraseña.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }