Una amplia gama de entornos
En la búsqueda de la inteligencia artificial general (AGI), buscamos crear agentes que puedan alcanzar objetivos en una amplia gama de entornos. A medida que nuestros agentes dominan los entornos que creamos, debemos crear continuamente nuevos entornos que exploren capacidades cognitivas aún no probadas.
Los juegos siempre han supuesto un desafío para la investigación de la inteligencia artificial (IA), sobre todo los juegos de mesa como el backgammon, el ajedrez y el Go. Los videojuegos como Space Invaders, Quake III Arena, Dota 2 y StarCraft II también se han vuelto populares últimamente para la investigación de la IA. Los juegos son ideales porque tienen una medida clara de éxito, lo que permite revisar empíricamente el progreso y compararlo directamente con los humanos.
A medida que avanza la investigación de AGI, también avanza el interés de la comunidad investigadora en juegos más complejos. Al mismo tiempo, los esfuerzos de ingeniería necesarios para transformar videojuegos individuales en entornos de investigación se vuelven difíciles de gestionar. Cada vez más, los motores de juegos de uso general se convierten en la forma más escalable de crear una amplia gama de entornos interactivos.
Motores de juegos de uso general
Ya se han realizado muchas investigaciones sobre AGI en motores de juegos como Proyecto Malmöbasado en Minecraft; ViZDoom, basado en Doom; y Laboratorio DeepMind, basado en Quake III Arena. Estos motores pueden programarse para crear rápidamente nuevos entornos y, dado que muchos fueron escritos para hardware más antiguo, pueden ejecutarse extremadamente rápido en hardware moderno, eliminando el entorno como un cuello de botella en el rendimiento.
Pero a estos motores de juegos les faltan algunas características importantes. DeepMind Lab, por ejemplo, es excelente para aprender a navegar, pero pobre para aprender nociones de sentido común, como cómo los objetos se mueven e interactúan entre sí.
Unidad
En DeepMind utilizamos Unity, un motor de juegos flexible y rico en funciones. La simulación física realista de Unity permite a los agentes experimentar un entorno más estrechamente basado en el mundo real. El proceso de renderizado moderno proporciona pistas visuales más sutiles, como luces y sombras realistas. Los scripts de Unity están escritos en C#, que es fácil de leer y, a diferencia de los motores personalizados, proporciona acceso a todas las funciones del motor del juego. El soporte multiplataforma nos permite ejecutar entornos en casa en nuestras computadoras portátiles o a escala en los centros de datos de Google. Finalmente, a medida que el motor de Unity continúa evolucionando, podemos prepararnos para el 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 Agentes de ML que se centra en simplificar el proceso de hacer que un juego existente esté disponible como entorno de aprendizaje. DeepMind se centra en construir una amplia variedad de entornos heterogéneos que se ejecutan a escala y, como tal, utilizamos dm_env_rpc (ver más abajo).
Diferencias con los juegos convencionales.
Los videojuegos tradicionales se renderizan en tiempo real: un segundo en pantalla equivale a un segundo en una simulación. Pero para los investigadores de IA, un juego es sólo un flujo 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 mucho 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 podemos y no nos preocupamos por generar esas actualizaciones a un ritmo constante. Ejecutamos varios juegos en una sola computadora, con un juego por núcleo de procesador. Los bloqueos causados por funciones como la recolección de basura (un dolor de cabeza común para los creadores de juegos tradicionales) no son una preocupación para nosotros siempre y cuando el juego generalmente se ejecute rápidamente.
Contenedorización y dm_env_rpc
Los juegos generan imágenes, texto y sonido para que el jugador los vea y escuche, y también reciben comandos de entrada desde un controlador de juego de algún tipo. 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. Dado que la flexibilidad en este formato de datos es tan importante, creamos una nueva biblioteca de código abierto llamada dm_env_rpcque funciona como límite entre entornos y agentes.
Al usar dm_env_rpc, podemos contener nuestros entornos y publicarlos. La contenedorización significa utilizar tecnología como Estibador para empaquetar binarios de entorno precompilados. La contenedorización permite que nuestra investigación se verifique de forma independiente. Es una forma más confiable y conveniente de reproducir experimentos que el código abierto, que puede confundirse por diferencias en el compilador o el sistema operativo. Para obtener más detalles sobre cómo convertimos un entorno en contenedores, consulte nuestro trabajo en dm_memorytasks.