Los modelos de difusión son un motor de juego en tiempo real
(gamengen.github.io)- GameNGen genera las transiciones de pantalla del juego clásico DOOM usando solo un modelo de red neuronal, lo que permite interacción en tiempo real sin un motor tradicional aparte
- Funciona a más de 20 fps en una sola TPU, con el objetivo de mantener la calidad visual y la capacidad de respuesta incluso en trayectorias de juego largas
- La predicción del siguiente frame registró un PSNR de 29.4, y los evaluadores humanos solo pudieron distinguir clips cortos entre el juego real y la simulación a un nivel apenas mejor que el azar
- El entrenamiento se basa en registros de acciones y observaciones generados por un agente de RL, donde el modelo de difusión genera el siguiente frame a partir de frames pasados y secuencias de acciones
- Para reducir el drift autorregresivo que se acumula durante la inferencia, durante el entrenamiento se añade ruido gaussiano a los frames de contexto, lo que cumple un papel clave en la estabilidad visual a largo plazo
Simulación de DOOM ejecutada solo con redes neuronales
- GameNGen es un motor de juego basado en modelos de redes neuronales que permite interacción en tiempo real siguiendo trayectorias largas en entornos complejos
- La demo es el resultado de simular una grabación en tiempo real de personas jugando DOOM usando únicamente el modelo neuronal GameNGen
- El enfoque en rendimiento y calidad está puesto en reducir la capacidad de distinguirlo del juego real
- Simula DOOM de forma interactiva a más de 20 fps en una sola TPU
- La predicción del siguiente frame alcanzó un PSNR de 29.4
- Ese PSNR es comparable al de la compresión JPEG con pérdida
- Los evaluadores humanos solo distinguieron clips cortos del juego y de la simulación a un nivel ligeramente mejor que una estimación al azar
- El material relacionado puede verse en Paper y Arxiv
Datos de entrenamiento y arquitectura del modelo generativo
- La recolección de datos se hizo entrenando un agente de RL automático en lugar de reunir a gran escala partidas humanas
- Se almacenan acciones y observaciones de los episodios de entrenamiento del agente
- Los registros guardados de acciones y observaciones se convierten en los datos de entrenamiento del modelo generativo
- El modelo generativo reutiliza un pequeño modelo de difusión, Stable Diffusion v1.4
- Genera el siguiente frame condicionado por secuencias previas de acciones y frames de observación
- Para reducir el drift que surge en la inferencia autorregresiva, durante el entrenamiento se añade ruido gaussiano a los frames de contexto codificados
- Esta inyección de ruido hace que el modelo corrija la información muestreada de frames previos, y es clave para mantener la estabilidad visual durante periodos prolongados
- El autoencoder preentrenado de Stable Diffusion v1.4 comprime parches de 8x8 píxeles en 4 canales latentes
- En la predicción de frames de juego aparecen artefactos visibles en detalles pequeños y especialmente en la barra HUD inferior
- Para mejorar la calidad de imagen, solo se entrena el decodificador del autoencoder latente con una pérdida MSE sobre los píxeles del frame objetivo
1 comentarios
Comentarios de Hacker News
Sorprende que los modelos de difusión parecen incorporar más causalidad, efecto y secuencialidad de lo que uno esperaría.
El hecho de que Google haya usado SD 1.4 como base del modelo de difusión también es un buen recordatorio de que los modelos abiertos son útiles incluso para empresas gigantes de nube con posición dominante.
Lo más llamativo del resumen fue 1) que hicieron que un agente jugara Doom para obtener datos de entrenamiento prácticamente infinitos, 2) que añadieron ruido gaussiano a los fotogramas originales y recompensaron al sistema por volver a “corregir” los fotogramas siguientes, y que eso fue clave para un “renderizado” estable a largo plazo.
Sobre todo lo último resulta interesante como intuición de que se le está enseñando al modelo corrección de errores y estabilidad.
También da curiosidad si sería fácil tratar este modelo como un “modelo basado en Doom” y afinarlo con estilos más fotorealistas o de trazado de rayos para obtener un renderizado más atractivo.
El jugador casi nunca regresa sobre sus pasos, pero cuando el personaje realmente se da la vuelta y vuelve a mirar lo mismo, cambia bastante. La sala con la pared gris y el letrero triangular destaca especialmente.
Eso coincide con el comportamiento esperable en un modelo de difusión. Está entrenado con miles de millones de fotogramas de gameplay y genera bien el fotograma “siguiente” plausible a partir de los pocos fotogramas previos, pero no parece comprender en profundidad las restricciones lógicas del juego como para recordar la estructura del nivel.
Puede que ciertos conceptos como causa y efecto estén parcialmente codificados en los pesos, pero el modelo renderiza un solo fotograma a la vez. En origen no es un modelo de texto a video, sino de texto a imagen.
En lugar de texto, el estado previo y los fotogramas anteriores entran como entrada para predecir el siguiente fotograma.
El ruido se añade a los fotogramas previos antes de pasarlos al modelo SD, y no fue el agente de aprendizaje por refuerzo quien lo “corrigió”.
El objetivo de eliminación de ruido se usa ampliamente en machine learning y, de forma intuitiva, obliga al modelo predictivo a usar el contexto, como fotogramas cercanos o palabras vecinas.
Aquí ayuda a evitar que pequeños errores producidos por la aleatoriedad del modelo de difusión generativo se acumulen y provoquen deriva autorregresiva. En la Figure 4 se ve esa deriva cuando el jugador se queda quieto.
Algo como “puede imaginar qué pasaría después”.
Dan ganas de llamarlo la compresión de video más ineficiente del mundo.
Lo que de verdad quisiera ver es poder predictivo real, o sea imaginación. En el resumen no se veía mucho de eso.
El modelo fue entrenado con un conjunto clásico de mapas, así que ¿qué haría si le das unos pocos fotogramas de gameplay de un mapa desconocido? ¿Qué tan bien podría imaginar lo que viene después?
Este paper tiene cuatro coautores. Seguramente recibieron bastantes recursos, pero aun así habrán tenido que compartirlos dentro del pool asignado al área de investigación.
Incluso Google solo tiene una Gemini, aunque en varias versiones.
Que esto siquiera funcione ya es absurdamente sorprendente, y que además llegue a renderizar a 20 fps también es impresionante
Como había que codificar el frame anterior y la acción para meterlos al modelo en cada paso, parece una mezcla de modelo de difusión y red neuronal recurrente
En abstracto, se siente como si el modelo estuviera soñando un juego que ha jugado mucho, y la entrada en tiempo real cambiara el estado de ese sueño
También me hace preguntarme si los humanos somos una especie de máquina de predicción del siguiente instante, solo que con un poco más de memoria integrada
Si le das la vuelta a la lógica y ves el siguiente frame como una hipótesis de lo que se espera como resultado del frame actual, comparar esa “hipótesis” con la sensación real hace más fácil procesar la diferencia que procesar toda la entrada sensorial
Como dijo Richard Dawkins en un pódcast reciente[1], los genes son excelentes máquinas de predicción porque la supervivencia depende de predecir. Si piensas en la cantidad de recursos dedicados a la visión, la capacidad de generar predicciones visuales encaja bastante bien
Entonces, ¿qué nos diría la afantasia?
[1] https://podcasts.apple.com/dk/podcast/into-the-impossible-wi...
Vale la pena escuchar el pódcast de Lex Fridman “Counterintuitive Ideas About How the Brain Works”[2]. Ella explica, entre otras cosas, que es más eficiente que el cerebro funcione mediante predicción continua que por reacción
También es excelente como comunicadora científica, así que dan ganas de seguir escuchándola
[1] https://en.wikipedia.org/wiki/Lisa_Feldman_Barrett
[2] https://www.youtube.com/watch?v=NbdRIVCBqNI&t=1443s
No está claro cómo se compara con una GPU de consumo de gama alta como la 3090, pero los TFLOPS INT8 se ven parecidos. La TPU tiene menos memoria (16 GB frente a 24 GB), y no sé mucho sobre las demás especificaciones
Aun así, algo no cuadra. SD normalmente tarda al menos varios segundos en generar un solo resultado de alta calidad incluso en una 3090, pero aquí parece ser casi un orden de magnitud más rápido. Da la impresión de que, en esta tarea, la TPU aplasta a la GPU
Parece estar generando imágenes de baja resolución (320x240), pero aun así se siente demasiado rápido
Se siente como empezar desde la IA y luego subir hacia atrás, encajando toda la cognición en el molde de un “predictor de lo siguiente”
Al final, es otra repetición del debate sobre los loros estocásticos
Después de ver este hilo, creo que vale la pena señalar que este artículo no describe un sistema que reciba entrada del usuario en tiempo real y la refleje en la salida
Dicho eso, sentí que la redacción del resumen insinúa con bastante fuerza que eso sí ocurre
El agente fue entrenado con una gran cantidad de datos jugando DOOM y se proporcionan muestras de video para evaluación humana, pero no es una modalidad en la que el usuario mete entradas en la simulación en tiempo real para “jugar DOOM” a unos 20 FPS
En el artículo hay pistas como “siguen abiertas preguntas clave sobre cómo construir el juego de manera efectiva al inicio y cómo aprovechar mejor la entrada humana” y “el objetivo final es permitir que jugadores humanos interactúen con la simulación”
Sobre todo, falta una sección que describa jugabilidad humana en tiempo real
El video de la parte superior de https://gamengen.github.io/ también empieza diciendo “estas son grabaciones en tiempo real de personas jugando el juego”
A juzgar por esas afirmaciones, parece que hacia el final del proyecto sí hicieron un sistema jugable que podía ponerse frente a personas. Solo que quizá todavía no lo era cuando subieron el borrador a arXiv
Dice “A is a set of key presses and mouse movements…” y también que “…we train an embedding A_emb for each action to condition on the actions”
Es decir, el proceso de difusión de este modelo se condiciona con un embedding de acciones A derivado de las acciones del usuario, no de palabras
Luego, el frame inicial con ruido se codifica en una representación latente y se concatena a la representación latente con ruido como una segunda condición
Al final, es un modelo de difusión entrenado solo con imágenes de Doom que, condicionado por el frame actual de Doom y por las acciones del usuario, genera el siguiente frame
Así que el usuario sí estaría jugando de verdad
Pero que esto sea posible no es tan sorprendente. Es básicamente una grabación neuronal del juego, aunque sí es un demo técnico genial
Dice: “When manually playing the model, some areas are easy for both, some are very hard for both, and in some areas the agent performs much better”
Puede que me falte imaginación, pero no se me ocurre otra forma razonable de interpretar “manually playing the model”
https://www.youtube.com/watch?v=udPY5rQVoW0
“Playing a Neural Network's version of GTA V: GAN Theft Auto”
“Figure 1: a human player is playing DOOM on GameNGen at 20 FPS.”
La frase del resumen es ambigua y de ahí viene mucha de la confusión, pero el artículo es claro en este punto
Es bastante decepcionante que en un foro con tantos especialistas técnicos se vote tan alto desinformación como esta
La búsqueda de ejecutar Doom en todo continúa
Técnicamente hablando, ¿no sería este el mayor anti-Doom posible, o sea, el Doom con los requisitos de hardware más altos?
Da risa que, si pones las especificaciones de hardware en un eje lineal, ahora Doom esté en ambos extremos
O sea, en vez de portar y ejecutar Doom sin su entorno original de hardware y software, sería ejecutar Doom sin el propio Doom
El siguiente nivel de anti-Doom sería que un modelo que genera modelos produzca una salida de Doom
Requisitos del sistema de Doom:
4 MB de RAM, 12 MB de espacio en disco
Stable Diffusion v1 tiene un UNet de 860M y CLIP ViT-L/14 (540M), un checkpoint de 4.27 GB y EMA completo de 7.7 GB
Se ejecuta en TPU-v5e, y el rendimiento máximo por chip es de 197 TFLOPs en bf16 y 393 TFLOPs en Int8; la capacidad y el ancho de banda de HBM2 son 16 GB y 819 GBps, y el ancho de banda de interconexión entre chips es de 1600 Gbps
Considerando la velocidad, es bastante impresionante, pero todavía hay muchísimo margen de mejora. Parece que ni siquiera ha memorizado por completo el juego, aunque por capacidad podría habérselo aprendido cientos de veces
Así que claramente hay mucho espacio para técnicas de optimización. Pero como aquí el objetivo es memorizar, no está claro qué efecto tendrían esas técnicas sobre la tecnología existente
Lo interesante es que esto implica que, si se “juega” lo suficiente, se automatiza y se usa mucho más almacenamiento y cómputo, se puede desarmar el juego
Me da curiosidad comparar costo y tiempo con contratar a un ingeniero para hacer ingeniería inversa de Doom. Tampoco está claro cuánta información previa se debería permitir. Considerando el modelo preentrenado y el entorno ViZDoom, también me pregunto si el código fuente de Doom estaba en T5 y qué checkpoint de ViT se usó
De verdad quiero ver este checkpoint del modelo. Si la gente lo desarma, seguro encontrará cosas realmente interesantes
https://www.reddit.com/r/gaming/comments/a4yi5t/original_doo...
https://huggingface.co/CompVis/stable-diffusion-v-1-4-origin...
https://cloud.google.com/tpu/docs/v5e
https://github.com/Farama-Foundation/ViZDoom
https://zdoom.org/index
Es cierto que, comparado con el juego original, el costo computacional es absurdo y que también faltan elementos básicos como precálculo o almacenamiento
Pero puede verse que esas cosas pueden resolverse alrededor de este hallazgo, mejorar naturalmente con el tiempo o dejar de ser tan importantes como cuellos de botella
El verdadero avance es que se pueden modelar esas secuencias de frames con conciencia de contexto sin codificarlas explícitamente. Eso vale tanto desde la perspectiva de los juegos como desde la de las simulaciones en general
El significado mayor es que se pueden generar juegos a partir de video del mundo real
Si necesitas un simulador de vuelo perfecto, basta con poner una GoPro en la cabina de todos los aviones de pasajeros durante 1 año
Siempre es divertido leer comentarios muertos en hilos como este. Me gusta señalar lo vacíos de sentido que son
Algunas personas necesitan aprender a hacer cosas simplemente por la diversión de crearlas
¿Es útil esto? La verdad, no mucho. ¿Es interesante? Definitivamente sí
No todo tiene que hacerse con fines de lucro. Tampoco tiene que hacerse para mejorar el mundo
A veces el objetivo puede ser aprender, afrontar un reto o comprobar qué es posible
El tiempo que uno pasa disfrutando nunca es tiempo desperdiciado. Habrá personas que al final de su vida lamenten no haber disfrutado más
Decir “esto es realmente increíble” implica que en un futuro cercano se podría reemplazar todo el software por modelos de IA y crear cualquier experiencia de videojuego imaginable
En la práctica, esta es la forma más ineficiente y menos confiable de Doom que se haya hecho hasta ahora. Literalmente usa millones de veces más cómputo que las primeras PCs x86 que podían renderizar y ejecutar Doom en tiempo real
Claro, sigue siendo un truco divertido
En parte también es inevitable. El costo de vida sigue subiendo y se romantiza a los emprendedores como si fueran estrellas de rock, lo que lleva a esta mentalidad de hustle
Pero recuerdo cuando salían textos sobre la posibilidad de la “radio por internet”. En vez de emitir por el aire como antes y que miles de radios sintonizaran la señal, un servidor enviaba una cantidad enorme de paquetes por cables de cobre larguísimos a miles de endpoints
Incluso el hecho de que los endpoints le enviaran paquetes ACK de vuelta al pobre servidor para mantener la conexión parecía un desperdicio de cómputo, cableado y energía
Y sin embargo ahora vemos películas de Netflix por esos mismos cables de cobre
No digo que los juegos vayan a ser reemplazados por modelos de difusión que sueñan la siguiente imagen a partir de la entrada del usuario, pero una variante de eso sí podría convertirse en creación artística interactiva o en una nueva forma de entretenimiento
Es impresionante, pero es difícil estar de acuerdo. Un modelo de difusión no es un motor de juego
Un motor de juego es el componente que impulsa un juego a lo largo del tiempo. Por eso se parece a un motor de automóvil, y de ahí viene el nombre
Un motor no necesita un auto terminado ni una carretera por la cual circular para hacer su trabajo
Lo de arriba se parece más a una reproducción interactiva dinámica de lo que ocurre cuando pones un auto sobre una carretera dada, y requiere un millón de vueltas de prueba con un vehículo funcional
Si fuera un motor, debería funcionar también fuera del camino
Más que decir en presente “para hacer el trabajo necesita un auto funcional sobre una carretera”, sería más correcto decir en pasado “para entrenarlo para hacer ese trabajo, eso fue necesario”
Tampoco está claro por qué un motor de juego que usa conceptos obtenidos de cómo operan otros motores dejaría de ser un motor de juego
Si hablamos de modelos de difusión en general, así como normalmente no generan solo cosas idénticas a las imágenes de entrenamiento, sino que interpolan o aplican conceptos individuales para crear salidas nuevas, tampoco parece haber razón para asumir que este enfoque no pueda funcionar fuera de la “pista de pruebas” aprendida
En cierto sentido, es un motor de juego simulado entrenado con datos de motores de juego reales
Pero si un motor de juego simulado funcional puede “impulsar un juego”, entonces yo diría que eso ya lo convierte en un motor de juego. No importa cómo lo logre
En un caso el contenido lo hicieron humanos, y en el otro se imita contenido de juegos existentes, pero al jugador no le importa
También se puede imaginar que este “motor de juego generativo” pueda ir fuera del camino. Es decir, extrapolar qué pasaría al ir a lugares que no ha visto
De hecho, la capacidad de extrapolación de un modelo así podría ser mejor que la de un motor de juego tradicional. En un motor de juego común, si atraviesas una pared por accidente, la pantalla puede quedar vacía, pero este modelo podría inventar sobre la marcha
Como al modelo SD se le quitó la condición de texto, eso no entra aquí, pero se puede imaginar que en un futuro cercano será posible crear juegos nuevos y divertidos solo con prompts de texto
Para aprender cómo se veía y cómo funcionaba DOOM hubo que usar aprendizaje por refuerzo, pero eso no necesariamente implica un problema del huevo y la gallina
Es parecido a cómo un LLM puede escribir historias nuevas aunque solo haya sido entrenado con textos existentes
Uno de los mayores desafíos de este enfoque serían los juegos de mundo abierto, donde la cantidad de estados posibles es prácticamente infinita
El paper también dice que tuvo dificultades para lograr que el agente de aprendizaje por refuerzo explorara por completo todos los rincones de DOOM
No parece que Factorio o Dwarf Fortress vayan a ser simulados pronto. Probablemente
Tal vez incluso podría ser más pequeña que el propio código fuente. Seguramente alguien de este campo podría corregirme
En ese punto, en esencia estarías “renderizando” el juego al interpolar el código fuente en el espacio latente. Sería como tener una computadora completa en el espacio latente con motor, assets, texturas y renderizador por software
Con una computadora lo bastante potente, también se podría imaginar una interpolación en el espacio latente entre juegos como Factorio y TF2. Y podrías ajustar ese espacio latente condicionándolo a aspectos de gameplay que quieras
Este futuro va a llegar muy rápido al menos en algunas partes del pipeline, como la etapa final del renderizado. Por ejemplo, DLSS ya está comercializado
Algún día tal vez todos terminemos atornillados a un metaverso de redes neuronales y los ingresos de Nvidia vuelvan otra vez a depender de los videojuegos
Me gusta mucho que hayan elegido DOOM
La idea sería dedicar todo el esfuerzo a la mecánica del juego y no a la calidad visual
Esperaría que este enfoque fuera mejor para reducir las inconsistencias visuales, como cuando volteas la cabeza y al mirar de nuevo el monstruo rojo se convirtió en un aliado azul
Incluso podrías empezar con un juego de plataformas relativamente simple, como Mario
Cuando lleves unas 300 páginas y todavía apenas hayas explicado como la mitad, vas a entender por qué eso es más bien una ilusión optimista
Tal vez una sola persona pueda conversar con un modelo y crear algo al nivel de un título AAA de hoy
Piensa en el boom de los sidescrollers 2D en Steam, pero con juegos 3D inmersivos fotorrealistas, física hiperrealista —flujo de agua, fuego que se propaga, tornados— y posibilidad total de deformación y construcción
El modelo estaría preentrenado con video del mundo real, y el juego sería solo un “estilo” que ajusta un poco la distribución previa de apariencia, ambientación e historia
Entonces, si el juego ya fue hecho, ¿eso significa que el modelo de difusión es el motor de juego? Para entrenar el modelo hace falta un juego. ¿No es un problema del huevo y la gallina?
Se podría crear una versión no en tiempo real del motor de juego y usar la red neuronal como aproximación en tiempo real
También se podría editar video grabado del mundo real para añadir cosas como un HUD, y entrenar la red neuronal para simular la realidad en vez de Doom
Este paper usó 900 millones de frames; a 30 fps, eso parece ser como un año de video. Las mejoras algorítmicas podrían reducir los requisitos de entrenamiento
En realidad, un año de video no es tanto. Por ejemplo, podrías reclutar a 500 personas, ponerles una GoPro, acelerómetro y giroscopio en la cabeza y en una pistola de paintball, hacer que jueguen paintball durante un fin de semana, y quizás obtener un año de video
Y otros modelos encima solo afinarían detalles para personalizar los juegos
Los modelos de difusión no pueden convertirse en un motor de juego. Un motor de juego debe poder crear juegos nuevos y cambiar en tiempo real las reglas de los juegos existentes.
Incluso debe poder cambiar reglas que no aparecen en pantalla.
Estas herramientas son interesantes, pero como toda exageración sobre IA, necesitan una advertencia.
Esta herramienta no creó un juego; solo tomó muestras de un juego hecho por humanos para generar la apariencia de los frames y de las mecánicas de juego.
¿“Solo” lo generó? Entiendo que mecánicamente pueda ser simple, pero el hecho de haber comprimido una distribución condicional tan rica no parece nada simple.
Si se entrena con varios juegos y se incrusta mucha más información sobre cada uno, podría llegar a ser posible indicar un prompt que describa el juego y luego jugarlo.
Así podrían corregir los problemas de consistencia y aun así obtener una ventaja práctica.