🎙 Episodio 37. ¿Cómo funciona el aprendizaje por refuerzo?

En el episodio de hoy de Un podcast ninja sobre Big Data desciframos cómo funciona el aprendizaje por refuerzo.

DeepMind consiguió sus primeros resultados sobresalientes tras conseguir un modelo de Machine Learning que era capaz de jugar a algunos de los juegos de la consola Atari 2600.

Y lo hizo mediante Aprendizaje por refuerzo a.k.a reinforcement learning.

El aprendizaje por refuerzo aplicado a tu perro

Este tipo de Machine Learning podría parecerse a cómo entrenamos una mascota.

Mediante recompensas y penalizaciones.

Si lanzas la pelota a tu perrete y te la trae le das un premio para que asocie la acción de ir a buscar la pelota con la recompensa.

Si hace sus necesidades en el sofá pues le caerá una bronca para que no lo vuelva a hacer.

Después de unas cuantas veces y con algo de suerte, tu mascota habrá aprendido que ir a buscar la pelota cuando se la tiras es bueno y que hacer sus necesidades en el sofá no lo es.

Esta es la idea básica del aprendizaje por refuerzo: Recompensas y penalizaciones.

Pero volvamos a los orígenes del aprendizaje por refuerzo para entrender cómo funciona...

Aprendizaje por refuerzo para jugar al Atari Pong

Imaginad que queremos entrenar un modelo de Machine Learning para jugar a videojuegos.

Y más concretamente al Pong, que es uno de los juegos de la consola Atari 2600.

El Pong consiste en dos líneas verticales a los extremos de la pantalla que simulan unas palas y una pelota. Una de las palas las controlamos nosotros y la otra el juego. El objetivo consiste en devolver la pelotilla y que la otra pala no sea capaz de devolverla.

El Atari Pong fue una de los primeros resultados del aprendizaje por refuerzo

Bien.

Si quisiéramos entrenar un modelo de Machine Learning para jugar al pong mediante aprendizaje supervisado necesitaríamos tener un conjunto de datos de entrenamiento con millones de partidas jugadas por humanos.

Y en este caso, el modelo no sería capaz de ganar al mejor humano del mundo.

Al fin y al cabo aprende a jugar de la misma manera que juegan las personas.

¿Cómo hacerlo entonces?

En 2013, la gente de DeepMind presentó la solución mediante aprendizaje por refuerzo, gracias a la cual atraerían un montón de atención que luego provocó la adquisición de DeepMind por parte de Google.

Empezaba la época dorada del aprendizaje por refuerzo.

Que duró hasta que su oscuro secreto fue descubierto (luego os cuento...)

La solución no dejaba de estar construida por algoritmos que ya existían desde finales de los 90.

Pasó un poco como con el deep learning, las ideas estaban ahí pero nadie había acabado de unir todos los puntos.

La solución

Lo que el modelo tenía que hacer era lo siguiente…

  1. Recibía como entrada la imagen completa de la pantalla pixel a pixel. Como hablamos de juegos de los años 70 pues lo de la alta resolución no se estilaba mucho. Teníamos 210 píxeles de largo y 160 de ancho. Y con eso le pasan la información sobre dónde está cada pala y donde está la pelotilla.
  2. El modelo devuelve la probabilidad de que la pala que controla se mueva hacia arriba o hacia abajo. (Podría también dejar la pala quieta pero vamos a simplificar)
  3. Una vez que el modelo de Machine Learning decide si mover la pala hacia arriba o hacia abajo se realiza esta acción en el juego mediante simulación
    • Si le metían un gol al oponente: Punto para el equipo de modelos de Machine Learning, o sea una recompensa
    • Si le metían un gol al modelo pues penalización al canto

Obviamente el objetivo es conseguir maximizar la recompensa y minimizar las penalizaciones.

Todo este proceso se hace para cada movimiento que hay en el juego.

Cada cambio de sitio de la pelota en la pantalla es una decisión que devuelve el modelo de Machine Learning sobre si mover su pala hacia arriba o hacia abajo.

Y además hay un tema. La mayoría de las veces no hay ninguna recompensa ni penalización. Ni marca un gol el modelo ni se lo marcan a él.

La pelota simplemente se va moviendo de un lado a otro de la pantalla.

Y aquí es cuando se desvela el oscuro secreto del aprendizaje por refuerzo.

El aprendizaje por refuerzo está lleno de fracaso. 

Porque al principio es como mover la pala a ciegas. El modelo no tiene ni idea de lo que tiene que hacer, de cómo conseguir recompensas ni de cómo evitar penalizaciones.

Imaginad la suerte que hay que tener para marcarle un gol al oponente.

Hay que repetir el proceso de mover la pala arriba o abajo cientos de veces antes incluso de conseguir la primera recompensa o penalización.

Y luego, claro, conseguimos una recompensa después de mover la pala unas cuantas veces y a ver cómo sabe el modelo cuáles de esos movimientos han servido y cuáles no.

¿Ha conseguido la recompensa gracias al tercer movimiento o igual tuvo que ver con el movimiento número 50?

Cuando vosotros jugáis al pong sabéis que una buena señal para ganar es conseguir hacer rebotar la pelota en una dirección buena y que lo que hagáis después de eso, mientras la pelota va de vuestro campo al contrario pues no tiene relevancia.

Sin embargo, para el modelo es complicado asociar la recompensa con algo que pasó hace unos cuantos movimientos y que lo que hizo después da igual.

¿Entonces que se hace?

Entrenamiento en el aprendizaje por refuerzo

Una manera de resolver esto es utilizar una política que asigne a cada movimiento de la pala que decide el modelo de Machine Learning la recompensa o penalización de la partida completa. 

Es como si hiciéramos aprendizaje supervisado sobre un conjunto de datos que cambia continuamente, que es la pantalla del juego en cada momento, y la etiqueta es el resultado final de la partida.

A partir de ahí solo hay que dejar al modelo de Machine Learning jugar al pong unas cuantas partidas, con esos datos y el resultado final de la partida nos creamos un dataset de entrenamiento y es como si hiciéramos aprendizaje supervisado.

Los movimientos que hicimos en las partidas que ganamos de todas esas se reforzarán y los movimientos de las partidas que perdimos se realizarán menos.

Después volvemos a dejar jugar unas cuantas partidas más al modelo de aprendizaje por refuerzo.

Y volvemos a ajustar los parámetros del modelo.

Y así.

El tema del aprendizaje por refuerzo es que nadie le explica al modelo cuál es el objetivo real del juego. Su objetivo es simplemente maximizar las recompensas y minimizar las penalizaciones y tampoco sabe cómo se consiguen esas recompensas.

La única manera de conseguirlas es ir haciendo cosas y ver si suceden recompensas.

Prueba y error.

Otra cosa que diferencia en a humanos de modelos de Machine Learning utilizando aprendizaje por refuerzo es que los humanos pueden usar su intuición y lógica, la persona sabe que la pelotilla se mueve por la pantalla de manera continua, no desaparece y aparece en otro punto sin previo aviso y que lo hace a velocidad constante.

El modelo comienza de la nada y para que realmente sea capaz de entrenarse es necesario que esté expuesto a recompensas y penalizaciones de manera frecuente de manera que los parámetros del modelo se vayan ajustando poco a poco para poder repetir los movimientos que dan lugar a más recompensas y en definitiva a ganar partidas.

TL;DR

Así que, recapitulando…

El aprendizaje por refuerzo se utiliza cuando el modelo interactúa en el tiempo con un entorno. En nuestro caso del juego del pong decidiendo en cada instante si mover la pala hacia arriba o hacia abajo. 

Para entrenar este modelo se definen recompensas y penalizaciones de manera que el objetivo del modelo es maximizar las recompensas y minimizar las penalizaciones.

La complejidad de este modelo está principalmente en que el feedback sobre si las acciones que está tomando en cada momento son correctas o erróneas no es inmediato. En el caso del pong no aparecen hasta que termina la partida.

Ahí es cuando el modelo sabe si ha ganado, es decir que le ha marcado un gol a su oponente lo que significa recompensa o ha perdido.

La verdad es que es un tipo de Machine Learning que mola mucho cuando funciona pero hay que hacer muchísimos intentos para conseguir que funcione y en algunos caso no llega a hacerlo.

El modelo de aprendizaje por refuerzo funciona por fuerza bruta, moviendo la pala de manera aleatoria al principio hasta que se gana una partida de casualidad y se encuentra con la recompensa.

Después, si consigue tener la suerte de encontrarse con las suficientes recompensas en sus partidas de entrenamiento podrá actualizar sus parámetros para repetir las acciones que le llevan a obtener más recompensas. 

En parte es un poco como puede aprender un humano frente a recompensas y penalizaciones.

sin embargo, los humanos tenemos cieerta ventaja porque entendemos algunas reglas del juego incluso sin que nos las expliquen. Por ejemplo, sabemos que el movimiento de la pelota va a ser continuo y que no se va a teletransportar.

Es un conocimiento de base que, en principio, no se transmite al modelo de aprendizaje por refuerzo.

Imaginad cómo sería jugar al pong o a cualquier videojuego a ciegas. Sin saber de qué va ni cómo conseguir las recompensas.

Solo prueba y error.

Espero que os guste el episodio.

Si es así, no olvidéis dejar un «Me gusta» y algún comentario al episodio en Ivoox o una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Google podcasts o donde quiera que escuchéis el podcast. 

Recordad que si tenéis cualquier duda o pregunta podéis contactar conmigo a través del formulario de contacto o podemos seguir la conversación en Twitter.

Muchas gracias por estar ahí y os espero en el próximo episodio de Un Podcast Ninja sobre Big Data.

Accede a todo el contenido premium

Ya no necesitas pagar cientos de euros por un Bootcamp para convertirte en ninja de los datos. Por solo 17€/mes (o menos 🤯), obtén acceso al podcast premium, a todos los tutoriales y a los resúmenes de los libros más top sobre Machine Learning y Ciencia de datos y aprende a tu ritmo.
¡Empieza ahora!
Copyright © 2024  · Datos 🥷 · Todos los derechos reservados