Udacity Reinforcement Learning - Mystery Game

Hoy os traigo un jueguecito que aparece en el curso de aprendizaje por refuerzo de Udacity, desarrollado por la universidad de Georgia Tech y cuyos instructores son Charles Isbell y Michael Littman. La forma de jugar se muestra en el curso, en la lección 2 titulada Reinforcement learning basics. Si no has seguido el curso tranquilo, a continuación explico de qué va el juego.
Para el que oiga las palabras "aprendizaje por refuerzo" y le recuerden a algún idioma que si no es chino se le parece bastante, les diré que es una forma de hacer que las máquinas aprendan a realizar determinadas tareas. El aprendizaje por refuerzo (o reinforcement learning en inglés) está presente en actividades como la conducción automática, el reconocimiento de voz de nuestro móvil y... ¡en la resolución de muchos juegos por ordenador! Ahí es donde quería yo llegar, a la palabra juegos.
El objetivo es ponerse en la piel de un ordenador y experimentar cómo lo hacen para poder jugar a juegos ellos solitos. Una vez iniciado el juego (se encuentra un par de párrafos más abajo) lo que tienes enfrente de tí es el estado inicial de tu mundo. Puedes realizar 6 acciones diferentes, y dependiendo de la acción que realices y en qué momento la realices ocurrirán cambios en el mundo. ¿Cómo? ¿Qué cuáles son esas acciones? Tu tarea es descubrirlas y posteriormente usarlas para acabar el juego. Sólo te puedo decir que debes usar las teclas numéricas del 1 al 6 para ejecutar dichas acciones. Recuerda que estás encarnando a un ordenador que intenta aprender a jugar a un juego que nunca ha visto antes. Un ordenador no entiende de acciones como "atacar", "defenderse", "moverse"... él simplemente las ejecuta y espera a ver qué pasa.
Lo ideal es hacer el juego entre 2 personas, una que haga el papel de ordenador y otro que sepa de qué va el juego y guíe a la que no tiene ni idea. Para evitar la necesidad de que haya una segunda persona, el juego te informa de vez en cuando de si lo estás haciendo bien (aparecerá durante un segundo un gran +1 sobre el tablero) o si lo estás haciendo mal (aparecerá un -1). Cuando llegues al final aparecerán sobre el tablero las palabras You Win :). Obviamente una vez se descubre qué es lo que hay que hacer para ganar, el juego pierde todo interés. Puedes probar a hacérselo a algún familiar o amigo para hacerles entender cómo se sienten los ordenadores mientras juegan a juegos. De todas formas, aunque consigas resolver el juego te recomiendo leer la parte del artículo que se encuentra debajo. Allí se muestra la solución y, además, se hace alguna reflexión interesante.
Pulsa teclas del 1 al 6 para realizar acciones.
Nota: no he probado el juego en dispositivos móviles, podría no funcionar bien al no poder pulsar las teclas si el teclado está escondido.
.................... Cargando juego ....................
\(\Downarrow\) Solución y explicación \(\Downarrow\)

Sección spoiler

Por si alguien no ha conseguido pasárselo, voy a explicar ahora cuál es el objetivo del juego. Así que si quieres seguir intentándolo mejor deja de leer

La misión es colocar los objetos (el cuadrado y el círculo) en la casilla que es del mismo color que los objetos. Las acciones son las siguientes:

  1. Arriba: Mueve el cuadrado hacia arriba una casilla.
  2. Izquierda: Mueve el cuadrado hacia la izquierda una casilla.
  3. Derecha: Mueve el cuadrado hacia la derecha una casilla.
  4. Soltar: Si el cuadrado está trasportando al círculo sobre sus hombros, está acción hará que lo deje en la casilla en la que se encuentra.
  5. Abajo: Mueve el cuadrado hacia abajo una casilla.
  6. Coger: Si el cuadrado y el círculo se encuentran en la misma casilla, el cuadrado coge al círculo y la próxima vez que el cuadrado se mueva el círculo lo hará con él.

Además hay que tener en cuenta que las casillas negras y los bordes del mapa actúan como paredes, es decir, el cuadrado no puede moverse en su dirección. Es por ello que si nada más al empezar realizas la acción 1 no va a generar ningún cambio en nuestro mapa.

Con las acciones 1, 2, 3, y 5 podemos mover el cuadrado por el mapa hacia la casilla en la que se encuentra el círculo y cogerlo pulsando el 6. En ese momento recibiremos una recompensa (o reward si se utiliza el término inglés que aparece en la literatura del aprendizaje por refuerzo) de +1 que nos indica que vamos por el buen camino. Cuando un ordenador intenta aprender alguna actividad hay que indicarle si lo está haciendo bien o no; esa es precisamente la finalidad de la recompensa. Si probamos a dejar el círculo con la acción 4 veremos que esta vez aparece la recompensa de -1 que nos sirve para darnos cuenta de que no es ahí donde tenemos que dejarlo. Cogemos de nuevo el círculo y nos dirigimos a la casilla coloreada con el mismo color que el círculo y cuadrado. Al entrar en ella recibiremos de nuevo una recompensa positiva. Si estando en esa casilla realizamos la acción 4 el juego habrá terminado: el mensaje You Win :) aparecerá en el tablero.

Un último detalle que puede que muchos hayáis pasado por alto. Si juegas una única vez a este juego puede que el círculo y el cuadrado sean de color azul y lo que habrás aprendido es que el círculo azul y el cuadrado azul deben de ir a la casilla de color azul (lo siento por los daltónicos , por cierto). Si recargas la página es muy probable que el color del círculo y del cuadrado ya no sea el azul, digamos que son verdes. ¿Llevarías dichos objetos a la casilla azul tal y como has aprendido en la primera partida o por el contrario probarías a llevarla a la casilla verde? Esta última pregunta tiene una respuesta muy intuitiva para nosotros los humanos (doy por hecho que eres un humano, sino es así deja un comentario debajo y corrijo esta frase), pero una máquina no lo tiene nada fácil.

A lo tonto en este juego se observan conceptos básicos del reinforcement learning. El concepto de estado (no es más que una instantánea de nuestro tablero), el concepto de acciones y el concepto de reward. Creo que el juego refleja muy bien lo ardua que puede llegar a ser para un ordenador la tarea de aprender a resolver juegos o, en definitiva, cualquier tipo de problemas que requieran de algún tipo de aprendizaje. Sólo me queda deciros que os recomiendo encarecidamente el curso de Udacity del que he sacado la idea del puzzle. Se puede aprender mucho con ese curso y, además, los instructores son muy simpáticos.

Para profundizar...

Para la gente más atrevida o que ya posea conocimientos de aprendizaje por refuerzo, os diré que el problema original en el cuál está inspirado este juego se llama the taxi problem (el problema del taxi). El cuadrado es análogo a un taxi y el círculo al pasajero que quiere llegar a su destino. Este problema aparece en multitud de papers y es que, como ya he comentado antes, en él están presentes los conceptos más importantes del aprendizaje por refuerzo. Según parece fue introducido por Thomas G. Dietterich en Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition. Me gustaría dejaros un enlace a la página de Michael Littman en la que podréis encontrar, además de muchos de sus trabajos (y maravillosos vídeos musicales con su familia), un enlace a un código en Python del juego del taxi y un enlace a una charla en la que hace un repaso (repaso, no me parece sencilla como para poder ser clasificada de una introducción) del aprendizaje por refuerzo. Nada más por ahora, ¡sed felices!

Guiferviz

No hay comentarios :

Publicar un comentario