Lección 6 del curso Aprendizaje por Refuerzo Nivel Avanzado.
En la lección anterior vimos todo el componente matemático que está detrás de los algoritmos del Gradiente de la Política, así que en esta lección tomaremos dichos elementos para comenzar a ver la implementación computacional de estos algoritmos.
En particular, en esta lección veremos en detalle el algoritmo REINFORCE, la implementación más simple de los algoritmos del Gradiente de la Política. Y además de entender los pasos que hacen parte de este algoritmo, veremos cómo resolver un sencillo problema de Aprendizaje por Refuerzo con ayuda de Python.
Comencemos entonces viendo los pasos que hacen parte de este algoritmo:
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, teniendo claros todos los elementos de este algoritmo REINFORCE ya estamos listos para ver de forma práctica cómo usar este algoritmo para resolver un sencillo problema de Aprendizaje por Refuerzo.
En este ejemplo veremos cómo implementar desde cero el algoritmo REINFORCE, es decir sin necesidad de usar librerías especializadas. En particular, veremos cómo entrenar un Agente capaz de interactuar de manera óptima con un sencillo entorno: un pasillo unidimensional con tan sólo 4 estados.
Veamos entonces en qué consiste este entorno, cuáles son las acciones que se pueden ejecutar en cada estado y cómo implementar estos elementos en 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.
Bien, hemos visto cómo implementar la clase «Pasillo» que nos permite simular el entorno así como el proceso de interacción del Agente.
Y con este sencillo ejemplo de interacción resulta evidente la necesidad de contar con una Política optimizada. En particular, cuando la Política es totalmente aleatoria (como lo acabamos de ver en el video anterior) el retorno obtenido será la mayoría de las veces demasiado alto (es decir tendrá valores negativos muy alejados de cero) lo cual nos indica que dicha Política no es para nada óptima.
Así que el objetivo es usar el algoritmo REINFORCE para lograr encontrar una Política óptima que permita al final obtener un retorno mucho más cercano a cero.
Pero antes de implementar el algoritmo REINFORCE veamos cómo implementar dos de sus elementos centrales, la Política parametrizada y el gradiente del logaritmo de la Política:
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, ya tenemos implementados los dos elementos centrales del algoritmo REINFORCE. Así que ya estamos listos para combinar todos estos elementos (el entorno, la interacción con el entorno y la implementación que acabamos de hacer) en el algoritmo REINFORCE:
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 acabamos de ver cómo implementar el algoritmo REINFORCE haciendo uso de Python y para este sencillo problema del Agente que se desplaza por un pasillo. Vimos que efectivamente, a medida que avanzan las iteraciones, el algoritmo REINFORCE permite optimizar los parámetros de la Política logrando que se el retorno obtenido se acerque progresivamente a cero. ¡Es decir que efectivamente el Agente está aprendiendo a interactuar de manera óptima con este entorno!
Adicionalmente vimos el efecto que tiene la tasa de aprendizaje (𝛼) en este proceso: un valor relativamente grande de esta tasa impide que el algoritmo converja, mientras que un valor muy pequeño hace que el Agente aprenda pero muy lentamente.
Así que ya tenemos todos los conceptos básicos de este algoritmo REINFORCE y ya hemos visto un ejemplo de implementación práctica en Python.
Y este sencillo ejemplo nos ha permitido ver la principal limitación de este algoritmo: su alta varianza. Esto quiere decir que a pesar de que el algoritmo converge, entre una iteración y otra podemos observar un alto grado de variabilidad en los retornos obtenidos.
De hecho, los algoritmos REINFORCE con línea de base y Actor-Crítico, que veremos en las próximas lecciones, buscan precisamente reducir esta variabilidad mejorando así el proceso de aprendizaje del Agente.
Así que en la próxima lección comenzaremos viendo en detalle el primero de estos dos algoritmos. Entonces veremos cómo funciona el algoritmo REINFORCE con línea de base que permite reducir la varianza de los retornos obtenidos durante el entrenamiento.
Todas las lecciones del curso Aprendizaje por Refuerzo Nivel Avanzado
