Así está cambiando la banca la Automatización Robótica de Procesos (RPA)
3 septiembre, 2020
Entrevistamos a Mar Llambí, recientemente reconocida como Microsoft MVP
8 septiembre, 2020

Robot's hands typing on keyboard. 3D illustration

En este post vamos a entender en qué consiste el Q-Learning o aprendizaje por refuerzo y veremos cómo podemos empezar a jugar con este tipo de tecnología.

¿Qué es el aprendizaje por refuerzos?

El aprendizaje por refuerzos o Reinforcement Learning es un área del aprendizaje automático (machine learning). Su principal particularidad es que es capaz de funcionar sin grandes cantidades de datos de entrenamiento. Tan “sólo” necesita una serie de indicaciones para ir aprendiendo a través de prueba y error. A diferencia del aprendizaje supervisado basado en un conjunto de datos que le indica a la máquina qué debe hacer, aquí se utilizan recompensas para reforzar el comportamiento deseado.

Es muy útil cuando se conoce cuál puede ser un paso adecuado para lograr un resultado deseado, pero se desconoce el camino completo para lograrlo, lo cual requiere mucha iteración.

En un sistema de aprendizaje por refuerzo, un agente explora un entorno desconocido y determinar las acciones a llevar a cabo mediante prueba y error. Será capaz de aprender por sí sólo obteniendo recompensas o penalizaciones, no sólo de manera inmediata sino buscando maximizar la recompensa a la larga.

 

Un poco de teoría

Existe mucha teoría al respecto dentro del aprendizaje por refuerzo como lo son los procesos de decisión de Markov, la ecuación de Bellman, la predicción de Montecarlo o el aprendizaje por diferencias temporales (TD Learning) no obstante, veremos tan sólo un poco del algoritmo Q-Learning producto de estas teorías.

La idea principal es que, para conseguir que nuestro agente aprenda de esta forma, los pasos a seguir serán:

  1. Observación del entorno
  2. Decidir cómo actuar
  3. Actuar de acuerdo a esa decisión lo que modifica el entorno
  4. Recibir una recompensa o penalización
  5. Aprender de las experiencias y refinar la estrategia
  6. Iterar hasta que se encuentre la estrategia óptima

Siguiendo esta secuencia de acciones eventualmente generarán la recompensa total máxima. Esta recompensa total también se denomina valor Q y expresa la estrategia a seguir a través de la siguiente expresión:

El objetivo es maximizar esa función Q que representa la recompensa futura que se espera conseguir dado un estado y una acción:

Los principios de Q-Learning son bastante simples pero muy potentes para determinar una hoja de ruta. De este modo, el agente sabe determinar qué acción realizar:

Para manejar esta información e ir modificando los valores de Q, los datos se manejan en tablas. En concreto, el elemento(i,j) de la tabla representa el valor de realizar desde el estado si la acción aj.

De este modo, la tabla contiene el conocimiento del agente sobre las decisiones que tomará.

Sin embargo, como puedes observar tabla de conocimiento es muy grande se podría volver muy difícil de gestionar. Un entorno con 10.000 estados y 1.000 acciones por estado generaría una tabla de 10 millones de celdas.

En este caso, sería el momento de pensar en un Deep Q-Learning (redes neuronales con algoritmos de Q Learning):

OpenAI Gym

OpenAI es una empresa de investigación, sin ánimo de lucro, nacida en 2015, centrada en temas de inteligencia artificial de la mano de personalidades relevantes como Elon Musk o Sam Altman. Nació con la premisa de profundizar en esta tecnología y con la idea de esto que fuese beneficioso para la sociedad puesto que sus fundadores comparten el temor de un uso incorrecto de la inteligencia artificial y los peligros que eso conlleva.

Desde OpenAI se desarrolló un conjunto de herramientas denominado OpenAI Gym bajo el lema “Nosotros proporcionamos el entorno, tú provees el algoritmo”

Este toolkit ofrece múltiples entornos con los que entrenar e investigar algoritmos de aprendizaje por refuerzo.

Los entornos que proporciona el framework están pensados para el entrenamiento en distintas áreas como la robótica, física, algorítmica o juegos entre otros. Ofrece una interfaz visual para ver los resultados y puede ser desarrollado mediante Python.

No obstante, los algoritmos construidos y entrenados en OpenAI pueden tener múltiples aplicaciones como, por ejemplo, algoritmos preparados para la detección de virus o el aprendizaje para que un robot camine.

Y ahora lo divertido… ¡a jugar!

OpenAI Gym no está soportado para ser ejecutado en un entorno Windows, tan sólo trabaja con Linux y MacOS. No obstante, existen varias formas de hacerlo funcionar. Una de ellas es aprovechar el entorno WSL (Windows Subsystem for Linux) de Windows 10. Con este entorno habilitado en nuestra máquina podemos arrancar una bash e instalar Python.

Para habilitar WSL abrimos un powershell como administrador y ejecutamos:

Una vez hecho, desde Microsoft Store buscamos una distribución como Ubuntu 18.04 LTS y la instalamos:

Después de instalarla, volvemos a la consola de powershell y ejecutamos bash, nos logamos con nuestro usuario y podemos continuar con la instalación sobre nuestro ecosistema linux:

Después, a través del comando pip podemos instalar el toolkit de OpenAI Gym:

Algunos entornos se instalan por separado como, por ejemplo, el de Atari:

Para poder levantar el entorno gráfico necesitamos instalar Xming Server:

Una vez instalado, debemos tener corriendo nuestro servidor de ventanas como veremos en la barra de tareas:

Ya podemos crear nuestro primer código y verificar que todo se encuentra instalado correctamente. Creamos un fichero example.py con el siguiente contenido:

Después de esto, tendremos que ejecutar export DISPLAY=localhost:0.0 en la terminal para asegurarnos que la salida visual va a la pantalla principal, en la que el servidor de Xming será el encargado de abrir su ventana correspondiente y mostrarnos el resultado. Al ejecutar el código Python, se debería abrir una ventana con el entorno del juego de Atari Breakout, con la estructura de un algoritmo que toma decisiones aleatorias y que entiende el entorno a través de los pixeles rgb de la pantalla (210 x 160 x 3 canales de color).

En resumen, lo que estamos indicando en el código es que cargue un entorno (almacenado en env) y que realice una serie de iteraciones.

En cada iteración deberemos renderizar para representar el entorno (env.render()). Después, tomar una acción(action) que nuestro agente realizará en base a una serie de políticas(π) que maximicen la recompensa(reward) según su estado actual (observation).

Si se ha llegado a la solución final (done) como puede ser el final del juego, terminan las iteraciones.

En este ejemplo, al tomar decisiones aleatorias, nuestro agente únicamente se desplaza de izquierda a derecha y consigue puntuaciones por azar por lo que vemos que en la mayoría de casos son bajas o nulas.

Sabiendo esto podemos dotar a nuestro agente de un comportamiento más inteligente según la información del entorno.

Con la teoría que hemos visto, podríamos empezar a elaborar un algoritmo de Q Learning, construyendo nuestra tabla para la toma de decisiones. Sin embargo, para el caso de los juegos de Atari, puesto que tenemos 210 x 160 píxeles con 3 canales rgb el número de posibilidades que tenemos es de 2210 x 160 lo que hace inmanejable una tabla Q. Es necesario el uso de redes neuronales con algoritmos de Q Learning, también conocido Deep learning.

Es por esto que para empezar con Q Learning es más recomendable probar con los juegos de Taxi-v3 que se puede resolver con una tabla Q de 500 elementos o CartPole-v1 con sólo 2 acciones (izquierda y derecha).

Ahora tenemos todo lo necesario para ponernos a jugar con nuestro agente y ver hasta dónde somos capaces de llegar.

Si ya dominas OpenAI Gym o quieres dar el salto a algo más complejo, existe OpenAI Universe con herramientas más avanzadas y la premisa de usar el ordenador igual que un humano, es decir, contemplando los píxeles de pantalla, teclado y ratón.

En definitiva, los algoritmos de aprendizaje por refuerzo son muy interesantes y muy potentes y llegado a este punto tienes todo lo necesario para empezar a trastear.

Si queréis poneros en contacto con nosotros, podéis hacerlo en info@kabel.es
También podéis seguirnos en Twitter, LinkedIn, Facebook

 

Licencia de Creative CommonsEste obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacion 

Compártelo: Share on FacebookTweet about this on TwitterShare on LinkedInPin on Pinterest

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

NEWSLETTER