Lanzamiento de ML-Agents v2.0: Ahora permite entrenar comportamientos cooperativos complejos

Hace aproximadamente un año, anunciamos el lanzamiento del paquete ML-Agents v1.0 Unity, que se verificó para la versión 2020.2 del Editor. Hoy nos complace anunciar la versión v2.0 del paquete ML-Agents Unity, actualmente en vías de verificación para la versión 2021.2 del Editor. A lo largo de este último año, hemos realizado más de quince actualizaciones clave en el proyecto GitHub de ML-Agents, incluidas mejoras en el flujo de trabajo del usuario, nuevos algoritmos y funciones de formación, y un aumento significativo del rendimiento. En esta entrada destacaremos tres novedades fundamentales: La capacidad de entrenar comportamientos cooperativos, permitir a los agentes observar diversas entidades de su entorno y aprovechar la parametrización de tareas para apoyar el entrenamiento de múltiples tareas. La combinación de estos avances acerca a los agentes ML a la plena compatibilidad con entornos cooperativos complejos.
En nuestra entrada del blog de fin de año de 2020, ofrecimos un breve resumen de todos los progresos que habíamos realizado desde nuestro lanzamiento de la v1.0 en mayo de 2020 hasta diciembre de ese mismo año. También desgranamos las tres principales mejoras algorítmicas en las que teníamos previsto centrarnos durante el primer semestre de 2021: Comportamiento multiagente cooperativo, capacidad de un agente para observar un número variable de entidades y establecimiento de un único modelo para resolver varias tareas. Ahora podemos decir con orgullo que las tres mejoras principales están disponibles en ML-Agents.
Además de estas tres funciones, hemos introducido los siguientes cambios en el paquete principal de ML-Agents:
Se han añadido una serie de funciones que antes formaban parte de nuestras extensiones Paquete Unity: componente Grid Sensors y tableros de juego Match-3.
Asignación de memoria mejorada durante la inferencia. En algunas de nuestras escenas de demostración, observamos hasta un 98% de reducción.
Se han eliminado las API obsoletas y se ha reducido la huella de API. Estos ajustes que rompen la API hicieron necesaria la actualización de nuestra versión de 1.x a 2.0. Consulte nuestras Notas de la versión y la Guía de migración para obtener más información sobre cómo actualizar con facilidad.
En el resto de esta entrada de blog, ampliaremos las funciones de los comportamientos cooperativos, la observación de longitud variable y la parametrización de tareas, junto con dos mejoras incrementales: Promoción de funciones del paquete de extensiones y rendimiento general. También ofreceremos información actualizada sobre nuestra oferta de ML-Agents Cloud y compartiremos un avance de nuestro nuevo y emocionante entorno de juego que pondrá de relieve comportamientos cooperativos complejos, antes de su lanzamiento en unas pocas semanas.
En muchos entornos, como los juegos multijugador como Among Us, los jugadores del juego deben colaborar para resolver las tareas que se les plantean. Aunque antes era posible entrenar ML-Agents con varios agentes en la escena, hasta la versión 15 (marzo de 2020) no se podían definir grupos específicos de agentes con objetivos mutuos. ML-Agents ahora soporta explícitamente el entrenamiento de comportamientos cooperativos. De este modo, grupos de agentes pueden trabajar por un objetivo común, con el éxito de cada individuo ligado al éxito de todo el grupo.
En tales escenarios, los agentes suelen recibir recompensas como grupo. Así, si un equipo de agentes gana un partido contra un equipo contrario, todos son recompensados, incluso los agentes que no contribuyeron directamente a esta victoria, lo que dificulta el aprendizaje independiente. Por eso hemos desarrollado un novedoso entrenador multiagente (denominado MA-POCA por Multi-Agent POsthumous Credit Assignment; el artículo completo en arXiv se publicará próximamente) para entrenar a un crítico centralizado, una red neuronal que actúa como "entrenador" de todo el grupo de agentes.
Con este añadido, podrá seguir recompensando al equipo en su conjunto, pero los agentes también aprenderán a contribuir mejor a su logro compartido. Los agentes pueden incluso recibir premios individuales, para que sigan motivados y se ayuden mutuamente a alcanzar sus objetivos. Durante un episodio, puedes añadir o eliminar agentes del grupo, como cuando aparecen o mueren agentes en una partida. Si los agentes son eliminados a mitad de episodio, aún podrán entender si sus acciones contribuyeron o no a que el equipo ganara más adelante. Esto les permite dar prioridad al grupo en sus acciones, incluso si acaban retirándose del juego mediante el autosacrificio u otras decisiones de juego. Combinando MA-POCA con el autojuego, también puede formar equipos de agentes para que jueguen unos contra otros.
Además, hemos desarrollado dos nuevos entornos de muestra: Bloque de empuje cooperativo y Escape de la mazmorra. El Bloque de Empuje Cooperativo muestra una tarea que requiere que varios agentes la completen. En el vídeo que aparece a continuación se exhibe Dungeon Escape, en el que un agente debe matar al dragón, haciendo que se retire a mitad del episodio, para que sus compañeros puedan recoger la llave y escapar de la mazmorra.
Lea nuestra documentación para saber cómo implantar agentes cooperativos en su proyecto.
Una de las funciones más solicitadas para el conjunto de herramientas ha sido la de permitir las reacciones de los personajes del juego ante un número variable de entidades. En los videojuegos, los personajes suelen aprender a enfrentarse a varios enemigos u objetos a la vez. Para responder a esta demanda, la versión 15 (marzo de 2020) permite ahora especificar una matriz de observaciones de longitud arbitraria denominada "memoria intermedia de observación". Los agentes pueden aprender a utilizar un búfer de tamaño arbitrario a través de un Módulo de Atención que codifica y procesa un número variable de observaciones.
El módulo de atención es una gran solución en situaciones en las que un personaje del juego debe aprender a esquivar proyectiles, por ejemplo, pero el número de proyectiles en la escena no es fijo. En este vídeo, cada proyectil está representado por cuatro valores: Dos para posicionamiento y dos para velocidad. Para cada proyectil de la escena, estos cuatro valores se añaden a un búfer de observaciones de proyectiles. De este modo, el agente puede aprender a ignorar los proyectiles que no están en trayectoria de colisión y, en su lugar, prestar más atención a los proyectiles más peligrosos.
Además, los agentes pueden aprender la importancia de las entidades basándose en sus relaciones con otras entidades de la escena. Por ejemplo, si los agentes deben aprender a ordenar las fichas en orden ascendente, podrán averiguar qué ficha es la siguiente correcta basándose en la información de todas las demás fichas. Este nuevo entorno, denominado Sorter, ya está disponible como parte de nuestros entornos de ejemplo que puede descargar y utilizar para empezar.
Consulte nuestra documentación para saber cómo implementar observaciones de longitud variable en su proyecto.
Los personajes de los videojuegos suelen enfrentarse a varias tareas en distintos modos de juego. Una forma de abordar este reto es entrenar varios comportamientos por separado y luego alternar entre ellos. Sin embargo, es preferible entrenar un único modelo que pueda realizar varias tareas a la vez. Al fin y al cabo, un único modelo reduce la huella de memoria en el juego final y, por extensión, acorta el tiempo total de entrenamiento, ya que el modelo puede reutilizar algunas partes de la red neuronal en múltiples tareas. Para ello, en nuestra últimaversión (versión 17) hemos añadido la posibilidad de que un único modelo codifique varios comportamientos mediante hiperredes.
En la práctica, utilizamos un nuevo tipo de observación llamada "señal de meta", así como una pequeña red neuronal llamada "hiperred", para generar algunos de los pesos de otra red neuronal más grande. Esta red más grande es la que informa el comportamiento del agente y permite que la red neuronal del comportamiento tenga diferentes pesos, dependiendo del objetivo del agente, manteniendo algunas piezas compartidas entre objetivos cuando sea necesario.
El siguiente vídeo muestra a un agente resolviendo dos tareas presentes en los ejemplos de ML-Agents(WallJump y PushBlock) al mismo tiempo. Si el color inferior es verde, el agente debe empujar el bloque hacia la zona verde. Pero si la casilla de arriba a la derecha es verde, el agente debe saltar por encima del muro hacia la casilla verde.
Consulte nuestra documentación para obtener información detallada sobre cómo implementar la parametrización de tareas mediante señales de objetivo en su proyecto.

En noviembre de 2020, escribimos sobre cómo Eidos desarrolló un nuevo tipo de sensor en ML-Agents llamado Grid Sensor. Esta implementación de Grid Sensor se añadió a nuestro paquete de extensiones en su momento, antes de que pasáramos a iterar sobre la implementación y la promoviéramos a esta última versión del paquete principal ML-Agents.
En la versión 10 (noviembre de 2020) de ML-Agents, introdujimos un nuevo entorno Match-3 y añadimos utilidades a nuestro paquete de extensiones para permitir el entrenamiento de juegos Match-3. Desde entonces, nos hemos asociado con Code Monkey para publicar un vídeo tutorial. Al igual que con Grid Sensors, en nuestra última versión hemos incluido nuestras utilidades para entrenar juegos de Match-3 en el paquete principal de ML-Agents.
Nuestro objetivo es seguir mejorando los ML-Agents. Tras escuchar sus comentarios sobre la cantidad de memoria asignada durante la inferencia, hemos reducido considerablemente la asignación de memoria. La siguiente tabla muestra una comparación de las métricas de recolección de basura (kilobytes por paso de Academia) en dos de nuestras escenas de ejemplo entre las versiones 1.0 (lanzada en mayo de 2020) y 2.0 (lanzada en abril de 2021). Estas métricas excluyen la memoria utilizada por Barracuda (el motor de inferencia de Unity en el que se basa ML-Agents para la inferencia entre plataformas):

En nuestra entrada de blog v1.0, compartimos por primera vez algunos detalles sobre ML-Agents Cloud. Nuestro servicio ML-Agents Cloud le permite poner en marcha varias sesiones de formación que se ejecutan en nuestra infraestructura en la nube en paralelo, para que pueda completar su experimentación en el momento oportuno. En la actualidad, la funcionalidad principal de ML-Agents Cloud le ofrece la posibilidad de:
Sube tus builds de juegos con ML-Agents implementados (C#).
Iniciar, pausar, reanudar y detener experimentos de entrenamiento. Puede lanzar varios experimentos al mismo tiempo y aprovechar las máquinas de gama alta para generar muchas instancias simultáneas de Unity para cada experimento de formación, todo ello con tiempos de finalización más rápidos.
Descargue los resultados de múltiples experimentos de entrenamiento.
Durante el resto de 2021, tenemos previsto acelerar el desarrollo de ML-Agents Cloud, basándonos en los comentarios de los clientes de Alpha. Las funcionalidades adicionales se centrarán en la capacidad de visualizar los resultados, gestionar los experimentos desde una interfaz web y aprovechar el ajuste de hiperparámetros. De hecho, todavía hoy estamos aceptando candidatos para el programa Alpha. Si está interesado en inscribirse, hágalo aquí.
En este post, esbozamos tres mejoras fundamentales que acercan a los ML-Agents al soporte de juegos cooperativos complejos. Demostramos cada una de estas tres mejoras de forma aislada, y también hablamos de los entornos de muestra añadidos recientemente al conjunto de herramientas. Lo que aún no hemos desvelado es otro próximo entorno de exhibición llamado Dodgeball. El balón prisionero es un juego de equipo contra equipo que pone de relieve la forma en que las tres características trabajan juntas. Los agentes deben razonar en entornos complejos para resolver múltiples modos, cooperar con sus compañeros de equipo y observar diversas entidades en una escena. Tenemos previsto publicar este entorno en las próximas semanas, junto con otra entrada dedicada en el blog. Hasta entonces, echa un vistazo a este adelanto de nuestros agentes entrenándose para jugar al balón prisionero.
En nombre de todo el equipo de Unity ML-Agents, queremos darles las gracias a todos por acompañarnos en este viaje con su apoyo constante a lo largo de los años.
Si quieres trabajar en esta apasionante intersección entre el aprendizaje automático y los juegos, estamos contratando para varios puestos y te animamos a presentar tu candidatura aquí.
Por último, ¡nos encantaría conocer su opinión! Para cualquier comentario sobre el conjunto de herramientas Unity ML-Agents, rellene la siguiente encuesta o envíenos un correo electrónico directamente a ml-agents@unity3d.com. Si tiene algún problema, no dude en ponerse en contacto con nosotros en la página de problemas de ML-Agents en GitHub. Para cualquier otro comentario o pregunta de carácter general, no dude en hacérnoslo saber en los foros de Unity ML-Agents.
