Usando Unity para Ayudar a Resolver la Inteligencia

'Unity para Resolver la Inteligencia'

Una amplia gama de entornos

En la búsqueda de la inteligencia artificial general (AGI), buscamos crear agentes que puedan lograr objetivos en una amplia gama de entornos. A medida que nuestros agentes dominan los entornos que creamos, debemos crear continuamente nuevos entornos que exploren habilidades cognitivas aún no probadas.

Los juegos siempre han representado un desafío para la investigación de la inteligencia artificial (IA), especialmente los juegos de mesa como el backgammon, el ajedrez y Go. Los videojuegos como Space Invaders, Quake III Arena, Dota 2 y StarCraft II también se han vuelto populares recientemente para la investigación de la IA. Los juegos son ideales porque tienen una medida clara de éxito, lo que permite revisar el progreso de manera empírica y compararlo directamente con los humanos.

A medida que avanza la investigación de AGI, también aumenta el interés de la comunidad de investigación por juegos más complejos. Al mismo tiempo, los esfuerzos de ingeniería necesarios para transformar juegos de video individuales en entornos de investigación se vuelven difíciles de gestionar. Cada vez más, los motores de juegos de propósito general se convierten en la forma más escalable de crear una amplia gama de entornos interactivos.

Motores de juegos de propósito general

Gran parte de la investigación de AGI ya se ha llevado a cabo en motores de juegos como Project Malmo, basado en Minecraft; ViZDoom, basado en Doom; y DeepMind Lab, basado en Quake III Arena. Estos motores pueden ser programados para crear rápidamente nuevos entornos, y como muchos fueron escritos para hardware más antiguo, pueden ejecutarse extremadamente rápido en hardware moderno, eliminando el entorno como un cuello de botella de rendimiento.

Pero estos motores de juegos carecen de algunas características importantes. Por ejemplo, DeepMind Lab es excelente para aprender navegación, pero no es adecuado para aprender conceptos de sentido común, como cómo se mueven los objetos e interactúan entre sí.

Unity

En DeepMind utilizamos Unity, un motor de juegos flexible y rico en características. La simulación realista de la física de Unity permite que los agentes experimenten un entorno más cercano al mundo real. La tubería de renderización moderna proporciona pistas visuales más sutiles, como iluminación y sombras realistas. Los scripts de Unity se escriben en C#, que es fácil de leer y, a diferencia de los motores personalizados, proporciona acceso a todas las características del motor de juegos. El soporte multiplataforma nos permite ejecutar entornos en casa en nuestras computadoras portátiles o a escala en los centros de datos de Google. Por último, a medida que el motor de Unity continúa evolucionando, podemos asegurar nuestro futuro sin gastar una gran cantidad de nuestro propio tiempo de ingeniería.

Unity incluye un conjunto de herramientas de aprendizaje automático listo para usar llamado ML-Agents, que se centra en simplificar el proceso de hacer que un juego existente esté disponible como un entorno de aprendizaje. DeepMind se centra en construir una amplia variedad de entornos heterogéneos que se ejecutan a gran escala, por lo que en su lugar utilizamos dm_env_rpc (ver más abajo).

Capturas de pantalla de entornos de Unity creados en DeepMind

Diferencias con los juegos convencionales

Los videojuegos tradicionales se representan en tiempo real: un segundo en pantalla es igual a un segundo en una simulación. Pero para los investigadores de IA, un juego es solo una secuencia de datos. Los juegos a menudo se pueden procesar mucho más rápido que en tiempo real, y no hay problema si la velocidad del juego varía drásticamente de un momento a otro.

Además, muchos algoritmos de aprendizaje por refuerzo se escalan con múltiples instancias. Es decir, una IA puede jugar miles de juegos simultáneamente y aprender de todos ellos a la vez.

Debido a esto, optimizamos el rendimiento en lugar de la latencia. Es decir, actualizamos nuestros juegos tantas veces como sea posible y no nos preocupamos por generar esas actualizaciones a una velocidad constante. Ejecutamos varios juegos en una sola computadora, con un juego por núcleo del procesador. Los bloqueos causados por características como la recolección de basura, una molestia común para los creadores de juegos tradicionales, no nos preocupan siempre y cuando el juego se ejecute rápidamente en general.

Contenedorización y dm_env_rpc

Los juegos producen imágenes, texto y sonido para que el jugador vea y escuche, y también reciben comandos de entrada de algún tipo de controlador de juegos. La estructura de estos datos es importante para los investigadores de IA. Por ejemplo, el texto normalmente se presenta por separado en lugar de dibujarse en la pantalla. Como la flexibilidad en este formato de datos es tan importante, creamos una nueva biblioteca de código abierto llamada dm_env_rpc, que funciona como la interfaz entre entornos y agentes.

Al utilizar dm_env_rpc, podemos contenerizar nuestros entornos y liberarlos públicamente. La contenerización implica el uso de tecnología como Docker para empaquetar binarios de entornos precompilados. La contenerización permite que nuestra investigación sea verificada de manera independiente. Es una forma más confiable y conveniente de reproducir experimentos que la divulgación de código abierto, que puede verse afectada por diferencias en el compilador o el sistema operativo. Para obtener más detalles sobre cómo contenerizar un entorno, consulte nuestro trabajo en dm_memorytasks.