Modelos de difusão são um motor de jogo em tempo real
(gamengen.github.io)- GameNGen gera as transições de tela do jogo clássico DOOM usando apenas um modelo de rede neural, permitindo interação em tempo real sem um motor tradicional separado
- Funciona a mais de 20 fps em uma única TPU e busca manter a qualidade visual e a responsividade mesmo em trajetórias longas de gameplay
- A previsão do próximo frame registrou PSNR 29,4, e avaliadores humanos só conseguiram distinguir clipes curtos entre jogo real e simulação em um nível apenas um pouco melhor que o acaso
- O treinamento é baseado em registros de ações e observações gerados por um agente de RL, com um modelo de difusão produzindo o próximo frame a partir de frames passados e da sequência de ações
- Para reduzir o drift autorregressivo acumulado durante a inferência, ruído gaussiano é adicionado aos frames de contexto no treinamento, desempenhando um papel importante na estabilidade visual ao longo do tempo
Simulação de DOOM executada apenas com rede neural
- GameNGen é um motor de jogo baseado em modelo de rede neural que permite interação em tempo real ao longo de trajetórias longas em ambientes complexos
- A demo é o resultado de simular, apenas com o modelo de rede neural GameNGen, uma gravação em tempo real de pessoas jogando DOOM
- O foco de desempenho e qualidade está em reduzir a capacidade de distinguir a simulação do gameplay real
- Simula DOOM de forma interativa a mais de 20 fps em uma única TPU
- A previsão do próximo frame alcançou PSNR 29,4
- Esse PSNR é comparável ao de compressão JPEG com perdas
- Avaliadores humanos só conseguiram distinguir clipes curtos do jogo e da simulação em um nível ligeiramente melhor que o acaso
- Materiais relacionados podem ser vistos em Paper e Arxiv
Dados de treinamento e configuração do modelo generativo
- A coleta de dados foi feita treinando um agente de RL automatizado, em vez de reunir gameplay humano em larga escala
- As ações e observações dos episódios de treinamento do agente são armazenadas
- Esses registros armazenados de ações e observações se tornam os dados de treinamento do modelo generativo
- O modelo generativo reutiliza o pequeno modelo de difusão Stable Diffusion v1.4
- Ele gera o próximo frame condicionado à sequência de ações anteriores e frames de observação
- Para reduzir o drift que surge na inferência autorregressiva, ruído gaussiano é adicionado aos frames de contexto codificados durante o treinamento
- Essa injeção de ruído faz o modelo corrigir as informações amostradas dos frames anteriores, o que é importante para manter a estabilidade visual por longos períodos
- O autoencoder pré-treinado do Stable Diffusion v1.4 comprime patches de 8x8 pixels em 4 canais latentes
- Na previsão de frames do jogo, surgem artefatos visíveis em pequenos detalhes e especialmente na barra de HUD inferior
- Para melhorar a qualidade da imagem, apenas o decodificador do autoencoder latente é treinado com perda MSE sobre os pixels do frame-alvo
1 comentários
Opiniões no Hacker News
Fiquei surpreso por parecer haver mais causa, efeito e sequencialidade nos modelos de difusão do que eu imaginava
O fato de o Google ter usado SD 1.4 como núcleo do modelo de difusão também é um bom lembrete de que modelos abertos são úteis até para gigantes monopolistas da nuvem
O que me chamou a atenção no resumo foi: 1) eles fizeram um agente jogar Doom e, na prática, obtiveram dados de treinamento infinitos; 2) adicionaram ruído gaussiano aos frames originais e recompensaram a “correção” dos frames seguintes, e isso foi essencial para uma “renderização” estável no longo prazo
Esse último ponto, em especial, é interessante como intuição de que se ensina ao modelo correção de erros e estabilidade
Fico curioso se seria fácil encarar esse modelo como um “modelo baseado em Doom” e fazer fine-tuning para estilos fotorrealistas ou com ray tracing, obtendo uma renderização mais bonita
O jogador quase nunca volta, mas, quando o personagem de fato se vira para ver a mesma coisa de novo, muita coisa mudou. A sala com paredes cinzas e uma placa triangular chama especialmente a atenção
Isso combina com o comportamento esperado de modelos de difusão. Treinado com bilhões de frames de gameplay, ele cria bem um frame “seguinte” plausível com base nos poucos frames anteriores, mas não entende profundamente restrições lógicas do jogo, como lembrar a estrutura da fase
Pode até haver alguns conceitos como causa e efeito codificados nos pesos, mas o modelo renderiza apenas um frame por vez. Para começo de conversa, é um modelo texto-para-imagem, não texto-para-vídeo
Em vez de texto, o estado e os frames anteriores entram como entrada para prever o próximo frame
O ruído é adicionado ao frame anterior antes de ser passado ao modelo SD; não foi o agente de aprendizado por reforço que “corrigiu” isso
O objetivo de remoção de ruído é amplamente usado em aprendizado de máquina e, intuitivamente, força o modelo preditivo a usar contexto, como frames ou palavras vizinhas
Aqui, ele ajuda a impedir que pequenos erros causados pela aleatoriedade do modelo de difusão generativa se acumulem e gerem deriva autorregressiva. A Figura 4 mostra essa deriva quando o jogador fica parado
É algo como “consigo imaginar o que teria acontecido em seguida”
Eu chamaria de a compressão de vídeo mais ineficiente do mundo
O que eu realmente gostaria de ver é capacidade preditiva real, ou seja, imaginação. Isso não ficou claro no resumo
O modelo foi treinado com um conjunto de mapas clássicos; o que ele faria se recebesse alguns frames de gameplay de um mapa desconhecido? Quão bem conseguiria imaginar o que vem depois?
Este artigo foi escrito por quatro coautores. Eles provavelmente receberam bastante recurso, mas ainda assim devem ter precisado dividi-lo dentro do pool de recursos alocado ao departamento de pesquisa
Até o Google tem apenas algumas versões do Gemini
O simples fato de isso funcionar já é absurdamente surpreendente, e chegar a renderização a 20 fps também é impressionante
Como era preciso codificar o frame anterior e a ação e inseri-los no modelo a cada etapa, parece uma mistura de modelo de difusão com rede neural recorrente
Em termos abstratos, é como se o modelo sonhasse com um jogo que jogou muito, e a entrada em tempo real alterasse o estado desse sonho
Fico me perguntando se os humanos também não são máquinas de previsão do instante seguinte, só que com um pouco mais de memória incorporada
Invertendo a lógica, se considerarmos o próximo frame como uma hipótese esperada a partir do frame atual, comparar essa “hipótese” com as sensações reais torna mais fácil processar as diferenças do que processar toda a entrada sensorial
Como Richard Dawkins disse em um podcast recente[1], os genes são excelentes máquinas de previsão, já que a sobrevivência depende de previsão. Considerando a quantidade de recursos usada para a visão, a capacidade de gerar previsões visuais se encaixa bem
Então o que a afantasia nos diz?
[1] https://podcasts.apple.com/dk/podcast/into-the-impossible-wi...
Vale ouvir o podcast de Lex Fridman “Counterintuitive Ideas About How the Brain Works”[2]. Ela explica, entre outras coisas, que é mais eficiente o cérebro funcionar por previsões contínuas do que por reações
Ela também é uma ótima comunicadora científica, então dá vontade de continuar ouvindo
[1] https://en.wikipedia.org/wiki/Lisa_Feldman_Barrett
[2] https://www.youtube.com/watch?v=NbdRIVCBqNI&t=1443s
Não está claro como ela se compara a uma GPU topo de linha de consumo, como a 3090, mas os TFLOPS em INT8 parecem semelhantes. A TPU tem menos memória (16 GB contra 24 GB), e não sei bem as outras especificações
Ainda assim, algo não fecha. Normalmente o SD leva pelo menos alguns segundos para gerar um resultado de alta qualidade mesmo em uma 3090, mas aqui ele é quase uma ordem de grandeza mais rápido. Parece indicar que, para essa tarefa, a TPU supera a GPU de longe
Parece gerar imagens em baixa resolução (320x240), mas ainda assim parece rápido demais
Dá a impressão de partir da IA e subir de volta, encaixando toda cognição no molde de “previsor da próxima coisa”
No fim, é uma repetição do debate sobre papagaios estocásticos
Depois de ver esta thread, acho que vale apontar que este artigo não descreve um sistema que recebe entradas do usuário em tempo real e as reflete na saída
Mas senti que a formulação do resumo sugere fortemente que isso acontece
Ele é treinado com um grande volume de dados de um agente jogando DOOM e fornece amostras de vídeo para avaliação por usuários, mas não funciona de modo que o usuário insira comandos na simulação em tempo real e “jogue DOOM” a cerca de 20 FPS
No artigo há pistas como “permanecem questões centrais, como criar o jogo de forma eficaz no início e como aproveitar melhor a entrada humana” e “o objetivo final é permitir que jogadores humanos interajam com a simulação”
Acima de tudo, falta uma seção que descreva gameplay de usuário em tempo real
O vídeo no topo de https://gamengen.github.io/ também começa com “estas são gravações em tempo real de pessoas jogando o jogo”
A julgar por essas afirmações, parece que no fim do projeto eles criaram um sistema jogável que podia ser colocado diante de humanos. Mas talvez isso ainda não fosse o caso quando o rascunho foi enviado ao arXiv
Ele diz que “A é um conjunto de pressionamentos de teclas e movimentos do mouse…” e que “…aprendemos um embedding A_emb para cada ação, a fim de condicionar as ações”
Ou seja, o processo de difusão deste modelo é condicionado não por palavras, mas por um embedding de ações A vindo das ações do usuário
Depois, ele codifica um frame inicial com ruído em uma representação latente e a concatena como segunda condição à representação latente ruidosa
No fim, é um modelo de difusão treinado apenas com imagens de Doom, condicionado ao frame atual de Doom e às ações do usuário para gerar o frame seguinte
Portanto, o usuário está de fato jogando
Mas não é surpreendente que isso seja possível. É basicamente uma gravação neural do jogo, mas é uma demonstração técnica bacana
Ela diz: “Ao jogar o modelo manualmente, algumas áreas são muito fáceis para ambos, algumas áreas são muito difíceis para ambos, e em algumas áreas o agente se sai muito melhor”
Talvez me falte imaginação, mas não consigo pensar em outra interpretação razoável para “jogar o modelo manualmente”
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.”
A frase do resumo é ambígua, e daí surgiu muita confusão aqui, mas o artigo é claro nesse ponto
É bem decepcionante ver esse tipo de desinformação recebendo tantos votos em um fórum com tantos especialistas técnicos
A busca por rodar Doom em tudo continua
Tecnicamente falando, isso não seria o maior anti-Doom possível, ou seja, o Doom com os maiores requisitos de hardware?
É engraçado que, se colocarmos as especificações de hardware em um eixo linear, Doom agora esteja nas duas pontas
Ou seja, não é portar e rodar Doom sem o ambiente original de hardware e software, mas sim rodar Doom sem o próprio Doom
A próxima etapa do anti-Doom seria um modelo que gera um modelo que gera a saída de Doom
Requisitos de sistema do Doom:
4 MB de RAM, 12 MB de espaço em disco
O Stable Diffusion v1 tem um UNet de 860M e CLIP ViT-L/14 (540M), tamanho do checkpoint de 4,27 GB, EMA completo de 7,7 GB
Roda em TPU-v5e; o desempenho máximo por chip é bf16 197 TFLOPs, Int8 393 TFLOPs, a capacidade e a largura de banda da HBM2 são 16 GB e 819 GBps, e a largura de banda de interconexão entre chips é 1600 Gbps
Considerando a velocidade, é bem impressionante, mas há um espaço enorme para melhorias. Em termos de capacidade, ele deveria conseguir memorizar isso centenas de vezes, mas parece que não memorizou completamente o jogo
Portanto, certamente há muita margem para métodos de otimização. Só que aqui o objetivo é memorização, então não sei que impacto essas técnicas teriam sobre tecnologias existentes
O interessante é que isso significa que, se “jogar” o bastante, automatizar e usar muito mais armazenamento e computação, dá para extrair o jogo
Fico curioso para comparar custo e tempo com contratar um engenheiro para fazer engenharia reversa do Doom. Também é ambíguo quanto conhecimento prévio permitir. Considerando o modelo pré-treinado e o ambiente ViZDoom, também fico curioso se o código-fonte do Doom estava no T5 e qual checkpoint de ViT foi usado
Quero muito ver esse checkpoint do modelo. Acho que as pessoas encontrariam coisas realmente interessantes ao desmontá-lo
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
Comparado ao jogo original, o custo computacional é absurdo, e também é verdade que faltam elementos básicos como pré-computação ou armazenamento
Mas dá para ver essas coisas como algo que pode ser resolvido ao redor dessa descoberta, melhorar naturalmente com o tempo ou se tornar menos importante como gargalo
O verdadeiro avanço é conseguir modelar essa sequência de frames com consciência de contexto sem codificá-la explicitamente. Isso vale tanto do ponto de vista de jogos puros quanto do ponto de vista de simulação em geral
O significado maior é que dá para gerar jogos a partir de vídeos da realidade
Se você quiser um simulador de voo perfeito, basta colocar uma GoPro em todas as cabines de aviões comerciais por um ano
É sempre divertido ler comentários mortos em posts assim. Gosto de ver as pessoas apontarem o quanto algo é sem sentido
Algumas pessoas precisam aprender a criar coisas simplesmente pela diversão de criá-las
Isso é útil? Na verdade, nem tanto. É interessante? Com certeza
Nem tudo precisa ser criado por lucro. Também não precisa ser criado para tornar o mundo melhor
Às vezes, o objetivo pode ser aprender, encarar um desafio e ver o que é possível
Tempo passado se divertindo nunca é desperdício. No leito de morte, algumas pessoas provavelmente vão se arrepender de não terem se divertido mais
Quando se diz “isso é realmente incrível”, há a implicação de que, em um futuro próximo, todos os softwares poderão ser substituídos por modelos de IA para criar qualquer experiência de videogame imaginável
Na prática, é a forma mais ineficiente e menos confiável de Doom já feita. Ela usa literalmente milhões de vezes mais computação do que os primeiros PCs x86, que já conseguiam renderizar e rodar Doom em tempo real
Claro, é um truque divertido
Em parte, é inevitável. O custo de vida continua subindo e, com a romantização dos empreendedores como rockstars, isso leva a essa mentalidade de hustle
Mas me lembro da época em que surgiam textos sobre a possibilidade de “rádio pela internet”. Em vez de, como antes, lançar ondas de transmissão pelo ar para milhares de rádios sintonizarem, algum servidor enviaria uma quantidade enorme de pacotes por fios de cobre absurdamente longos para milhares de endpoints
O fato de os endpoints ainda enviarem pacotes ACK de volta para o pobre servidor para manter a conexão parecia um desperdício de computação, fios e energia
E agora estamos maratonando filmes da Netflix por esses fios de cobre
Não estou dizendo que jogos serão substituídos por modelos de difusão que sonham a próxima imagem com base na entrada do usuário, mas uma variação disso pode se tornar criação de arte interativa ou uma nova forma de entretenimento
É impressionante, mas é difícil concordar. Modelos de difusão não são motores de jogo
Um motor de jogo é um componente que impulsiona o jogo ao longo do eixo do tempo. Por isso ele se parece com o motor de um carro, e é daí que vem o nome
Para um motor fazer seu trabalho, ele não precisa de um carro completo nem de uma estrada onde rodar
O que foi descrito acima está mais perto de uma reprodução interativa dinâmica do que acontece quando se coloca um carro em uma determinada estrada, e precisa ser testado um milhão de vezes com um veículo funcional
Se fosse um motor, deveria funcionar também fora da estrada
Em vez de dizer, no presente, “para fazer a tarefa é preciso um carro funcional na estrada”, o correto seria, no passado, “foi preciso isso para treiná-lo a fazer a tarefa”
Também não fica claro por que um motor de jogo que usa conceitos obtidos a partir de como outros motores funcionam deixaria de ser um motor de jogo
Considerando modelos de difusão em geral, assim como modelos de difusão normalmente não geram apenas coisas exatamente iguais às imagens de treinamento, mas conseguem interpolar ou aplicar conceitos individuais para criar novas saídas, não parece haver motivo para presumir que essa abordagem não possa funcionar fora das “pistas de teste” em que foi treinada
Em certo sentido, é um motor de jogo simulado treinado com dados de um motor de jogo real
Mas, se um motor de jogo simulado e funcional consegue “impulsionar um jogo”, eu diria que ele próprio passa a ser um motor de jogo. Como isso é alcançado não importa
De um lado, humanos criaram o conteúdo; do outro, ele imita conteúdo de jogos existentes, mas o jogador não se importa
Dá para imaginar esse tipo de “motor de jogo generativo” também saindo da estrada. Ele extrapolaria o que aconteceria ao chegar a lugares que nunca viu
Na verdade, a capacidade de extrapolação desse tipo de modelo pode ser melhor que a de motores de jogo tradicionais. Em um motor de jogo comum, se você atravessa uma parede por acidente, a tela fica vazia; esse modelo pode ir inventando conforme avança
Como a condição textual foi removida do modelo SD, ela não entra aqui, mas dá para imaginar que, em um futuro próximo, será possível criar jogos novos e interessantes só com prompts de texto
Foi preciso usar aprendizado por reforço para aprender como DOOM se parece e como funciona, mas isso não significa necessariamente um problema do ovo e da galinha
É parecido com o fato de um LLM conseguir escrever novas histórias mesmo tendo sido treinado apenas com textos existentes
Um dos maiores desafios dessa abordagem provavelmente serão jogos de mundo aberto, em que o número de estados possíveis é praticamente infinito
O artigo também diz que eles tiveram dificuldade em fazer o agente de aprendizado por reforço explorar completamente todos os cantos de DOOM
Factorio ou Dwarf Fortress não devem ser simulados tão cedo. Provavelmente
Talvez até menor que o próprio código-fonte. Alguém da área talvez possa corrigir isso
Nesse ponto, na prática você estaria “renderizando” o jogo interpolando o código-fonte no espaço latente. Seria como ter um computador inteiro no espaço latente, com motor, assets, texturas e renderizador de software
Com um computador suficientemente poderoso, também dá para imaginar interpolações no espaço latente entre jogos como Factorio e TF2. E seria possível ajustar esse espaço latente condicionando-o aos aspectos de gameplay desejados
Esse futuro chegará muito rapidamente em partes do pipeline, como a etapa final de renderização. Por exemplo, o DLSS já é comercial
Talvez um dia a receita da Nvidia volte para jogos quando todo mundo estiver parafusado a um metaverso de redes neurais
Acho ótimo terem escolhido DOOM
Seria uma forma de concentrar todo o esforço nas mecânicas de jogo, e não na qualidade visual
Espero que esse método seja melhor para reduzir inconsistências visuais, como um monstro vermelho virar um aliado azul depois de você virar a cabeça e olhar de novo
Pode começar por um jogo de plataforma relativamente simples, como Mario
Quando tiver escrito umas 300 páginas e ainda tiver explicado só mais ou menos metade, você vai entender por que isso é pensamento esperançoso
Talvez uma pessoa consiga conversar com um modelo e criar algo no nível dos títulos AAA atuais
Pense no boom de jogos 2D side-scrolling no Steam, mas imagine jogos 3D imersivos e fotorrealistas, com física super-realista, como fluxo de água, fogo se espalhando e tornados, além de total capacidade de deformação e construção
O modelo seria pré-treinado com vídeos do mundo real, e o jogo seria apenas um “estilo” que ajusta um pouco a distribuição prévia sobre aparência, ambientação e história
Se já é preciso ter criado o jogo, então o modelo de difusão é um motor de jogo? O treinamento do modelo precisa do jogo. Não é um problema do ovo e da galinha?
Dá para criar uma versão não em tempo real do motor de jogo e usar a rede neural como uma aproximação em tempo real
Também daria para editar vídeos filmados no mundo real para inserir coisas como HUD, e treinar a rede neural para simular a realidade, não Doom
Este artigo usou 900 milhões de frames, o que a 30 fps parece ser cerca de um ano de vídeo. Melhorias nos algoritmos podem reduzir os requisitos de treinamento
Um ano de vídeo, na prática, também não é tanta coisa assim. Por exemplo, se você recrutar 500 pessoas, colocar GoPros, acelerômetros e giroscópios na cabeça delas e em armas de paintball, e fazê-las jogar paintball por um fim de semana, talvez consiga um ano de vídeo
Em cima dele, outros modelos fariam apenas o ajuste fino dos detalhes para personalizar o jogo
Modelos de difusão não podem ser motores de jogo. Porque um motor de jogo precisa ser capaz de criar novos jogos e alterar em tempo real as regras de jogos existentes
Ele precisa até ser capaz de alterar regras que não aparecem na tela
Essas ferramentas são interessantes, mas, como todo hype de IA, precisam de um aviso de isenção
Essa ferramenta não criou um jogo; ela apenas amostrou um jogo feito por humanos e gerou a aparência dos frames e das mecânicas de jogo
“Apenas” gerou? Entendo que, mecanicamente, possa ser simples, mas o fato de ter comprimido uma distribuição condicional tão rica não parece nada simples
Se treinarem com vários jogos e embutirem muito mais informações sobre cada um, talvez seja possível especificar um prompt descrevendo o jogo e jogá-lo
Assim, daria para obter benefícios práticos enquanto se corrige o problema de consistência