Ubisoft La Forge es una iniciativa abierta de investigación y desarrollo que reúne a académicos y expertos de Ubisoft con el objetivo de cerrar la brecha entre la investigación académica y las innovaciones de videojuegos. Experimentando con las últimas tecnologías y técnicas en la producción de videojuegos, están a la vanguardia del mundo académico, con equipos dedicados que investigan los usos de la última tecnología, como la inteligencia artificial, para hacer que los juegos sean más realistas, divertidos y eficientes de desarrollar.
El aprendizaje por refuerzo profundo es uno de esos usos potenciales: un tipo de aprendizaje automático que utiliza la IA para encontrar las soluciones más eficientes a una variedad de problemas. Para desentrañar algunos de sus misterios y descubrir cómo ayuda a crear NPC más realistas, ayudarlos a navegar por mundos de juegos complejos y crear reacciones más humanas, hablamos con Joshua Romoff, un científico de datos de Ubisoft La Forge y nativo de Montreal, quien tomó su amor por los videojuegos y lo convirtió en un doctorado en ciencia de datos. Ahora investigando las diferentes aplicaciones del aprendizaje automático en los juegos, recientemente dio una charla en la conferencia Inteligencia Artificial y Entretenimiento Digital Interactivo (AIIDE) 2021 para presentar el avance en el que él y su equipo han estado trabajando para mejorar la búsqueda y navegación de los NPC utilizando el aprendizaje automático.
¿Qué es el aprendizaje por refuerzo profundo y cómo funciona?
Joshua Romoff: Hay un par de términos para explicar: "agente" y "acción". Lo que llamamos un agente en IA es básicamente el personaje principal que interactúa con el mundo, y usamos bots en ese papel en nuestra investigación. Y luego para la acción, esa es la interacción que se realiza. Me gusta pensar en el jugador como una especie de extensión de un gamepad, y cada entrada que los jugadores ponen a través del gamepad resulta en una acción.
Centrémonos en la parte del aprendizaje por refuerzo: es la idea de que estás tratando de reforzar algún tipo de comportamiento, similar al clásico experimento de perros de Pavlov donde un investigador toca una campana a la hora de alimentar a los perros y los perros aprenden a asociar la campana con una recompensa. Estás tratando de alentar o desalentar ciertos tipos de resultados con recompensas y sanciones. Hacemos lo mismo con un agente de IA, dándole puntos por hacer algo que nos gusta, o quitando puntos por algo que no hacemos. Mi trabajo es diseñar las pruebas y definir cuándo damos o quitamos recompensas, y el objetivo de la IA es obtener la puntuación más alta posible con las acciones disponibles.
Para la parte profunda, esa es la forma en que el agente percibe el mundo en el que se encuentra; una red neuronal profunda, esencialmente. Una pantalla es algo complejo, con potencialmente cientos de miles de píxeles que se muestran a la vez. Entonces, ¿cómo procesas esa pantalla y toda esa entrada? Una red neuronal profunda toma la pantalla, la procesa en algo en una dimensión mucho más pequeña, analiza los datos y luego ingresa esa información en la parte de aprendizaje por refuerzo, que luego realiza acciones basadas en esos datos de entrada. Eso es lo que llamamos un sistema de extremo a extremo, porque todo está contenido, y los datos giran entre estos sistemas, de un extremo a otro y viceversa. Hacemos eso cada fotograma, asignando puntos en función de las acciones y el estado resultante del entorno, y realizamos muchas iteraciones para entrenar al agente a realizar las acciones que queremos.
¿Hay algún juego que te haya inspirado particularmente en tu estudio del aprendizaje por refuerzo profundo?
JR: Por supuesto. Siempre me han gustado los juegos de mundo abierto en los que puedes correr e interactuar con NPC, cosas como Far Cry, por ejemplo. Una cosa que siempre me llama la atención en ese tipo de juegos es cómo los jugadores interactúan con las IA de los NPC, y es un factor central de la experiencia para mí. Estás interactuando con el mundo, y los NPC son una gran parte de esa interacción. Siempre me gustó meterme con los NPC y tratar de eliminar la IA como una especie de desafío, viendo cómo puedo manipularlos. Entonces, si estoy en una batalla con un enemigo y decido escalar una montaña cercana, entonces solo veo al enemigo estrellarse contra la montaña frente a mí porque no puede escalar, o ver qué reacción tiene a diferentes eventos. Eso siempre ha sido algo que me ha impulsado en mi trabajo, imaginando cómo podemos mejorar eso y entrenar a una IA para que se comporte más como lo hacen los humanos.
Como científico de I + D, ¿cómo es su día a día?
JR: Día a día, podría estar realizando experimentos, ensuciándome las manos y entrenando lo que llamamos un "agente de IA" para realizar una determinada tarea en un juego. Una vez que se configura ese experimento, es mucha observación; viendo gráficos y gráficos, y ajustando las cosas para refinar los resultados. Otra gran parte de mi papel es trabajar con estudiantes de maestría y doctorado que están cursando sus títulos. A todos nuestros estudiantes se les paga, pero trabajo con ellos y sus profesores para definir proyectos para ellos, y generalmente tendremos un montón de proyectos de estudiantes al mismo tiempo, lo que ayuda a los estudiantes, pero también ayuda a impulsar lo que estamos haciendo. Quiero decir, no puedo codificar todo por mí mismo, ¿verdad? Una vez que tenemos un prototipo en funcionamiento, ponemos la tecnología dentro de un entorno sandbox, que es básicamente una versión simplificada de un motor de juego real, y podemos ver los resultados del trabajo que hemos estado haciendo. Si un proyecto funciona, es una oportunidad para que el trabajo de los estudiantes aparezca en los juegos que desarrollamos y para que obtengan algo de experiencia de lo que es trabajar en juegos, por lo que siempre tratamos de asegurarnos de que los proyectos en los que estamos trabajando resulten en algo que los equipos de juego puedan usar en sus producciones.
En tu charla de AIIDE, repasaste cómo hiciste algunas pruebas en juegos como Hyper Scape para crear bots más "parecidos a los jugadores". ¿Puedes hablarnos de ello?
JR: Hicimos algunas pruebas en Hyper Scape, aunque nada en servidores en vivo, el juego simplemente presentó una caja de arena interesante para las preguntas a las que queríamos respuestas. Lo que es realmente genial de Hyper Scape es que el entorno 3D es bastante complejo de navegar y tiene mucha verticalidad. Los jugadores también tienen muchas herramientas disponibles para ellos, cosas como almohadillas de salto que te impulsan directamente en el aire y saltos dobles, y puedes usarlas para navegar a las cimas de los edificios. También puedes combinar esas cosas, por lo que es realmente interesante para un desarrollador o probador de juegos saber que el mapa que han creado permite a los jugadores navegar por todo.
Tradicionalmente, los juegos usan lo que se llama navmesh, una especie de mapa 2D de todas las áreas transitables en un mundo, y esos datos permiten a los bots definir a dónde van y cómo llegan allí. Pero fue realmente difícil hacer pruebas con ese método, porque cuando tienes todas estas acciones locas como almohadillas de salto y saltos dobles, además de pisos verticales que no siempre están conectados por escaleras o rampas, las combinaciones hacen que las posibilidades exploten en número. El uso de RL profundo tenía sentido, porque podíamos lanzar al agente en un bucle de entrenamiento y aprendería a tomar medidas para llegar del punto A al B por sí mismo, sin usar un navmesh. Así que el caso de uso principal fue esencialmente enseñarle a un agente estos movimientos, y usarlo para probar el mapa y asegurarnos de que todo sea accesible.
Entendemos que viste algunos resultados interesantes en algunas de tus pruebas con otros juegos. ¿Puede hablarnos de ellos?
JR: Un ejemplo fue un bot que entrenamos en For Honor, en realidad. Queríamos que el agente defendiera más, así que le dimos una recompensa adicional por hacer eso. Lo que terminó sucediendo fue que el agente decidió no terminar nunca la pelea, y siguió defendiendo por los siglos de los siglos. Es realmente divertido, porque uno de los principales desafíos de entrenar a los agentes con este proceso es que, sea cual sea la configuración que le des y la acción que estés tratando de incentivar, en teoría aprenderá a hacerlo lo mejor posible. Si le das una recompensa por mantenerse vivo o defenderse, seguirá haciéndolo, porque lo estás recompensando por eso. No necesariamente quieres que el bot venza a todos los jugadores cada vez, ¿verdad? Eso no sería divertido, por lo que debe incentivar otros tipos de comportamientos, como defender, que agregan cierta variabilidad a sus acciones.
La otra razón por la que puedes dar estas pequeñas recompensas de bonificación es porque puede acelerar el proceso de entrenamiento, por lo que es fácil darle una pequeña bonificación aquí por defender y allí por atacar, pero no es obvio cómo se combinarán todas estas bonificaciones, y puedes terminar con estos comportamientos realmente divertidos. Otro ejemplo fue en Hyper Scape, con las pruebas de navegación. Estábamos entrenando al agente para que se pusiera entre dos puntos lo más rápido posible, pero aún no le habíamos dado la capacidad de correr, y en realidad descubrió que si se movía saltando y haciendo estos pequeños giros de cámara, en realidad era capaz de moverse un poco más rápido que solo caminar. Así que fue muy divertido verlo esencialmente aprender a bunnyhop. Ambos ejemplos están en mi charla en AIIDE.
¿Ese tipo de resultados siguen siendo valiosos en el proceso?
JR: Depende de cuál sea la aplicación. Si es para probar el juego, como lo fueron nuestros experimentos, estos resultados son muy útiles, porque verás cuál es el comportamiento óptimo en función de las recompensas que das. Es posible que note estas cosas que está aprendiendo y descubra que el comportamiento en realidad está ayudando al agente a lograr su objetivo, lo que podría apuntar a algo de lo que no estaba al tanto, lo que le permite depurar y saber si su código está funcionando como se esperaba.
¿La última generación de consolas de juegos y cosas como la nube y los servicios de transmisión han abierto nuevas posibilidades que antes no estaban disponibles para la IA en los juegos?
JR: Cien por cien, sí. Históricamente hablando, la investigación de aprendizaje profundo comenzó en los años 80 y 90, y los investigadores definitivamente estaban atascados por los recursos informáticos disponibles. Si está tratando de ejecutar un modelo de aprendizaje profundo en una consola de generación anterior, simplemente no sería posible hacerlo localmente, desde una perspectiva computacional, mataría la velocidad de fotogramas. La cantidad de poder computacional que las personas tienen en sus hogares ha aumentado drásticamente, y luego el hardware real en sí ha mejorado drásticamente, por lo que con la combinación de esas cosas y las grandes cantidades de investigación que se vierten en este campo, estamos en el punto en el que podríamos resolver estos problemas y tener cosas como bots que navegan por mapas realmente complicados en mundos 3D con todas estas habilidades locas. Ahora puede ejecutarse de manera bastante eficiente y actuar mucho más parecido a un ser humano que cualquier cosa que podamos codificar, y no es una locura pensar que puedes tener múltiples agentes corriendo en un juego haciendo todo este cálculo complejo. Ya no se trata de algo que podría suceder en 10 años; la investigación y el hardware están ahí, y se han estado construyendo hasta donde estamos hoy por un tiempo.
¿Para qué otras aplicaciones podrías imaginar el uso de estas técnicas?
JR: La aplicación más natural son los bots, y por eso nos estamos centrando en ello. Mi grupo en realidad se llama Smart Bots Group, por lo que somos muy grandes en bots. Estamos trabajando en bots utilizados para probar juegos, pero podrías imaginar fácilmente que si le enseñas a un bot a navegar por un entorno, podría ampliarse y ponerse frente a los jugadores como un enemigo de IA.
Además de los bots, el aprendizaje por refuerzo es un marco muy general con muchas aplicaciones. Así que podría imaginar, por ejemplo, usarlo para la administración de servidores. Cuando alojas servidores para un juego, es un problema si tienes demasiados servidores ejecutándose cuando no los necesitas, o al revés, cuando tienes muchos jugadores y no hay suficientes servidores desplegados. Teóricamente, podríamos entrenar a un agente para optimizar la toma de decisiones secuencial, por lo que lograr que mire el número de jugadores en ciertos momentos del día y luego aumentar o disminuir el número actual de servidores en línea en un momento dado en función de las necesidades.
¿Cuáles son sus objetivos para el futuro de esta tecnología?
JR: El objetivo es realmente seguir trabajando en formas en que podamos inyectar más realismo en los juegos, haciendo que cosas como npC y bots se sientan más humanos y resuelvan problemas que no han sido posibles hasta ahora. También queremos poner esta tecnología en manos de los diseñadores de juegos y crear herramientas orientadas al jugador con ella. Podría convertirse en otra herramienta en el repertorio disponible para los desarrolladores, por lo que darles la opción de personalizar estos bots y hacer lo que quieran con ellos es el siguiente gran paso, ya que todas las pruebas que he mencionado hasta ahora aún no han sido en entornos en vivo, o frente a los jugadores todavía. Creo que el paso más inmediato es poner esto frente a los probadores de juegos y usarlo para probar todo tipo de escenarios diferentes, desde problemas de rendimiento hasta mecanismos de juego y más.
¿Cuáles son algunas de las implicaciones de usar IA y Aprendizaje por refuerzo profundo o “Deep Reinforcement Learning” en los juegos?
JR: Si solo estamos usando esta tecnología para probar juegos, entonces estas cosas no van frente al jugador, y no hay razón para que nadie se preocupe por algunas de las especulaciones más negativas que la gente tiene sobre la IA. Algunos podrían estar preocupados de que esto signifique que habrá menos personas probando juegos, pero eso no es realmente cierto, porque los tipos de pruebas que vamos a ejecutar con estos bots son fundamentalmente diferentes de los tipos de cosas que queremos que los humanos reales prueben. La interacción humana real no va a ninguna parte, y la gente seguirá probando los elementos más interesantes de los juegos, como las misiones y otras partes divertidas reales de un juego.
En términos de poner bots de IA en los juegos, creo que es realmente importante para nosotros ser transparentes sobre lo que estamos haciendo. Creo que a algunas personas les preocupa que comiencen a ver bots en los juegos y no lo sepan, ¿es esto un humano o un bot? Es potencialmente bastante controvertido, por lo que creo que debemos ser totalmente transparentes y no tratar de engañar a los jugadores. Creo que la otra razón para adoptar la IA en los juegos es porque es inherentemente esta pequeña caja de arena perfecta; es un gran lugar para probar ciertas ideas y ver qué sucede, pero cualquier resultado imprevisto permanece dentro del juego y realmente no afecta la vida fuera de él. Así que la gente no tiene que temer que mi bot de defensa For Honor se apodere del mundo o algo así; simplemente vive en un juego, y es un poco divertido.
Puedes consultar la charla completa de Joshua en AIIDE 2021 para ver su trabajo en acción y aprender más sobre el aprendizaje por refuerzo profundo y la IA. Para conocer las últimas noticias y actualizaciones de los equipos de Ubisoft, mantente atento al centro de Noticias de Ubisoft.