Toda la comunidad técnica esperamos cada año con cierta inquietud uno de los eventos tecnológicos que se celebran en nuestros país: el AWS Summit, un encuentro donde Amazon presenta las principales novedades en sus productos y servicios.

Pero este año, además, AWS Summit 2019 traía una novedad especial: la DeepRacer League, una competición en la que desde Paradigma ¡no nos pudimos resistir a participar!

Pero, ¿qué es la DeepRacer League y cuál fue nuestra experiencia? Hoy en el blog, te contamos cómo nos preparamos para competir en esta liga y qué aprendimos de esta divertida carrera.

Qué es DeepRacer

DeepRacer es una versión 1:18 de un vehículo real que cuenta con una cámara frontal y un ordenador de abordo, que corre una versión de Ubuntu y un software que permite traducir los outputs de una RNA a acciones que el coche puede ejecutar (por ejemplo: acelerar, frenar, girar).

Esto le permite decidir, de forma autónoma, cuál de las posibles acciones tiene que ejecutar en base a la imagen proporcionada por la cámara y a la salida de la red neuronal que dicha imagen alimenta.

Por tanto, el objetivo final es que el DeepRacer, cargado con un modelo entrenado, sea capaz de circular autónomamente por un circuito, completándolo en el menor tiempo posible y basándose únicamente en la imagen que le llega de su cámara.

AWS nos provee con un servicio virtual donde poder entrenar y evaluar nuestro DeepRacer digital, y que luego podemos descargar sobre un modelo real en el AWS Summit para competir en la DeepRacer League.

¿Cómo funciona?

El objetivo de AWS al crear DeepRacer es acercar a desarrolladores al aprendizaje por refuerzo de una red neuronal artificial. Esta clase de aprendizaje completa los otros dos, más conocidos y usados, llamados entrenamiento supervisado y no supervisado.

El aprendizaje por refuerzo o RL (Reinforcement Learning) consiste en premiar o penalizar las acciones aleatorias que toma un agente en un estado determinado, modificando la probabilidad de las mismas en iteraciones sucesivas.

Aplicado al caso del DeepRacer, premiamos acciones que mantienen al coche en la pista, por ejemplo que se mantenga cerca de la línea central, y castigamos comportamientos que reducen la capacidad del coche para conducir eficientemente, como por ejemplo dar giros bruscos o salirse de la pista. Estas directrices se recogen en lo que se conoce como función de recompensa.

% block:caption
% image:https://new.paradigmadigital.com/wp-content/uploads/2019/05/espacio-acciones-deep-racer.png
% caption:Espacio de acciones del DeepRacer

% endblock

Durante el entrenamiento, la red utiliza esta función de recompensa para ajustar los pesos de la RNA, de forma que el agente (vehículo) trata de maximizar la recompensa que recibe por cada acción que toma.

La interfaz de DeepRacer esconde en realidad otros dos servicios de AWS sobre los que corre:

Imagen virtual generada por RobomakerImagen virtual generada por Robomaker

Función de recompensa

Es la piedra angular del sistema de aprendizaje por refuerzo y ajustarla adecuadamente es clave para poder ser competitivo con el DeepRacer.

La función de recompensa recibe parámetros inferidos de la imagen de la cámara y de la situación actual del vehículo, que le permiten determinar su estado actual, tales como distancia al centro, ancho de la pista, las coordenadas del coche en el circuito, la velocidad y ángulo de giro actuales, etc.

Esta es la información que utiliza para determinar qué tiene que hacer en cada momento. El estado se actualiza con una frecuencia de 15 veces por segundo.

Paradigma es una empresa nativamente ágil, y por ello hemos generado nuestra función usando una metodología Lean: empezar por algo sencillo e ir mejorando de forma iterativa.

Esto es muy importante, ya que comenzar por una función compleja tiene el inconveniente de que no sabremos qué componentes están contribuyendo al desempeño y será difícil hacer modificaciones relevantes.

Además, la implementación de la función ha estado apoyada en tests, que nos permitían comprobar, antes de realizar el entrenamiento, que nuestra función devuelve los resultados esperados en tiempo de desarrollo.

Escribir la función de recompensa

En una primera aproximación sencilla, podemos penalizar al coche por situarse lejos del centro:

python
<br />\--md-var-hashtag- Recompensa base<br />
reward = 1<br />
if distance_from_center > distance_threshold:<br />
 reward *= 0.5</p><br />

Con este sencillo código, penalizamos al coche si se separa del centro más que distance_threshold.

Podemos añadir a esto una recompensa por velocidad, ya que de no hacerlo, el coche tenderá a ir despacio y permanecer en la pista porque esto le reporta recompensas altas:

python
<br />
if speed > speed_threshold:<br />
 reward *= 1.5<br />

Con estas dos simples instrucciones, ya podemos comenzar a entrenar nuestro modelo de DeepRacer. Sin embargo, esta función es muy sencilla y probablemente tendrá muchas limitaciones a la hora de que el vehículo aprenda a conducir eficientemente.

Ejemplo función de recompensa de AWSEjemplo función de recompensa de AWS

Durante el entrenamiento del modelo, si nuestra función de recompensa es buena, podremos ver cómo crece a medida que el coche “aprende” a circular.

Función de recompensa crecienteFunción de recompensa creciente

Técnicas avanzadas

Para lograr un mejor desempeño del vehículo, agregamos diversas instrucciones avanzadas que afinan nuestra función. Algunos ejemplos son:

Se pueden implementar muchas mejoras con la información disponible en la función de recompensa. Si vemos que la recompensa acumulada no crece con el tiempo, entonces es que nuestro modelo no está aprendiendo: ¡es momento de mejorar nuestra función!

Una vez hemos afinado la función de recompensa, puede ser que estemos teniendo problemas para que el coche continúe aprendiendo. En ocasiones podemos exprimir un poco más el sistema, tuneando un poco los hiperparámetros del modelo.

Ventana de configuración de hiperparámetrosVentana de configuración de hiperparámetros

Por ejemplo, podemos reducir el learning rate para lograr un entrenamiento más fino o jugar con la entropía para balancear cómo de aleatorias son las acciones que toma el coche.

Para entender en detalle qué hace cada uno de ellos, os recomendamos que leáis la documentación oficial de DeepRacer.

La carrera

¡Por fin! Llega el día del AWS Summit 2019 Madrid y nos disponemos a probar nuestros modelos en la pista real de DeepRacer.

Nuestro compañero Alberto Grande en AWS DeepRacer LeagueNuestro compañero Alberto Grande en AWS DeepRacer League

Tras haber corrido en el circuito un par de veces, os podemos dar un par de consejos por si alguno se anima a participar el año que viene o en otra edición del AWS Summit:

Nuestra experiencia

Al final, logramos un tiempo de unos 17 segundos en el simulador y de algo más de 18 en la carrera real. ¿Cómo lo logramos? Aquí van nuestros consejos:

Algo que sin duda os recomendamos es realizar iteraciones sobre el modelo entrenado, clonándolo, y ajustar la función de recompensa y los hiperparámetros para afinar el resultado.

Esto nos permite aprovecharnos del entrenamiento previo y añadir mejoras incrementales o incluso especializar ciclos de entrenamiento para lograr objetivos específicos, por ejemplo:

Si tenéis algo que aportar a esto, no dudéis en dejar un comentario. ¡Suerte!

Conclusiones

DeepRacer es una forma única y divertida de acercar el reinforcement learning a desarrolladores y curiosos de todos los niveles técnicos. Hemos disfrutado mucho generando nuestras funciones de recompensa y viendo a nuestra criatura completar varias vueltas al circuito sin salirse, ¡qué orgullo!

Desde Paradigma nos mantenemos en la vanguardia en Machine Learning y Deep Learning para seguir incorporando este tipo de tecnologías en muchos de nuestros proyectos. Tenemos la suerte de tener a grandes expertos en nuestros equipos que nos permiten ofrecer a nuestros clientes lo último en tecnología.

Cuéntanos qué te parece.

Enviar.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.