- DIAMOND é uma abordagem que simula ambientes Atari com um modelo de mundo por difusão, sem compactá-los em tokens latentes discretos, e depois treina agentes de aprendizado por reforço dentro desse ambiente
- O próximo frame é gerado com base na ação do agente e nos frames anteriores, e esse processo é repetido para compor um modelo de mundo jogável
- Em poucas etapas de denoising, o DDPM se mostrou instável, mas o EDM produziu trajetórias estáveis até com 1 etapa, e o DIAMOND usa n=3 para manter a consistência
- No Atari 100k, alcançou pontuação média normalizada por humanos de 1.46, estabelecendo um novo melhor resultado para agentes treinados dentro de um modelo de mundo sob a condição de 100k frames
- Na aplicação em CS:GO, foram usados 87 horas de dados de jogo humano, um pipeline em 2 etapas de predição em baixa resolução + upsampling, e um modelo de 381M parâmetros, capaz de rodar a cerca de 10 FPS em uma RTX 3090
O problema de modelagem de mundos que o DIAMOND busca resolver
- Modelos de mundo são uma abordagem para treinar agentes de aprendizado por reforço de forma mais segura e com maior eficiência amostral
- Modelos de mundo recentes costumam modelar a dinâmica do ambiente como sequências de variáveis latentes discretas
- Essas representações comprimidas podem perder detalhes visuais importantes para o aprendizado por reforço
- O DIAMOND aplica modelos de difusão, que tiveram forte desempenho em geração de imagens, à modelagem de mundos
- O nome completo de DIAMOND é DIffusion As a Model Of eNvironment Dreams
Como funciona o modelo de mundo por difusão
- O modelo de difusão é treinado para prever o próximo frame do jogo
- A entrada inclui as ações do agente e os frames anteriores
- Quando o agente fornece novas ações repetidamente, o modelo de difusão atualiza o estado do jogo
- Graças a esse processo de geração autorregressiva, o modelo de difusão passa a atuar como um modelo de mundo no qual o agente pode aprender e jogar
Projeto de denoising para execução rápida
- Para tornar o modelo de mundo rápido, é preciso reduzir o número de etapas de denoising
- O DDPM se torna instável com poucas etapas de denoising, pois erros autorregressivos se acumulam
- O EDM gera trajetórias estáveis até com 1 etapa de denoising
- No ambiente Boxing, o denoising em 1 etapa interpola entre resultados possíveis, gerando de forma borrada o jogador preto, que é difícil de prever
- Mais etapas de denoising ajudam a escolher melhor um modo específico entre várias transições possíveis, aumentando a consistência ao longo do tempo
- O modelo de mundo por difusão do DIAMOND usa n=3 etapas de denoising
- O movimento do jogador branco é controlado pela política e, como essa ação é fornecida ao modelo de mundo, ele é previsto corretamente independentemente do número de etapas de denoising
Desempenho no Atari 100k
- O DIAMOND modela detalhes visuais importantes melhor do que o IRIS, baseado em tokens discretos
- Ao treinar um agente de aprendizado por reforço dentro do modelo de mundo por difusão, alcançou pontuação média normalizada por humanos de 1.46 no Atari 100k
- Essa pontuação corresponde a um nível 46% superior ao humano
- É o novo melhor resultado entre agentes treinados apenas dentro de um modelo de mundo na condição de 100k frames
Como foi expandido para CS:GO
- O modelo de mundo por difusão do DIAMOND também foi aplicado à simulação de ambientes 3D como Counter-Strike: Global Offensive
- A versão para CS:GO usa um conjunto de dados fixo composto por 87 horas de jogo humano, em vez de dados coletados por um agente de aprendizado por reforço
- Para reduzir o custo de treinamento, foi aplicado um pipeline em 2 etapas
- Primeiro, a dinâmica é prevista em baixa resolução
- Depois, um segundo modelo faz o upsampling
- O tamanho do modelo cresce de 4.4M parâmetros no Atari para 381M parâmetros no CS:GO
- Desses, 51M parâmetros correspondem ao upsampler adicional
- O upsampler usa amostragem estocástica para melhorar a qualidade visual gerada
- O modelo de dinâmica não precisa de amostragem estocástica
- O modelo de CS:GO foi treinado por 12 dias em uma RTX 4090 e roda a cerca de 10 FPS em uma RTX 3090
Execução direta e materiais públicos
- O código, os agentes e o modelo de mundo jogável estão disponíveis no repositório no GitHub
- O exemplo de instalação usa os seguintes comandos
git clone https://github.com/eloialonso/diamond.git
cd diamond
conda create -n diamond python=3.10
conda activate diamond
pip install -r requirements.txt
- Executar o modelo de mundo Atari:
python src/play.py --pretrained
- Executar o modelo de mundo CS:GO:
git checkout csgo
python src/play.py
- Mais detalhes podem ser encontrados no artigo
Modos de falha restantes e limites de escalabilidade
- O modelo de mundo por difusão do DIAMOND ainda apresenta vários modos de falha
- Espera-se que ampliar dados e capacidade computacional melhore muitos aspectos
- No entanto, também há limites que não se resolvem apenas com escala, como problemas decorrentes da memória limitada do modelo
- Um limite interessante é que o modelo permite saltos contínuos
- O modelo generaliza o efeito do salto sobre a geometria da cena
- Como saltos contínuos não aparecem com frequência suficiente nos dados de treinamento, ele não aprende que eles deveriam ser impossíveis
1 comentários
Opiniões no Hacker News
Este vídeo https://x.com/Sentdex/status/1845146540555243615 parece muito com os meus sonhos
Às vezes, quando tento pular alto em um sonho, eu acabo sendo transportado para outro lugar exatamente desse jeito, e os objetos também continuam mudando assim
É impressionante ver o quanto isso se aproxima de uma experiência real de sonho
Quando os modelos de difusão começaram a chamar atenção, também me veio à mente essa ligação com o texto corrompido em imagens geradas
Talvez seja uma pista de que parte do inconsciente humano funcione de modo bem parecido com os princípios dos modelos de difusão
No campo visual isso é menos perceptível, mas fica mais evidente na atenção e nos próprios pensamentos
Meus sonhos tendem a ser totalmente coerentes visualmente, a ponto de eu já ter usado o Google Maps em um sonho; a geografia estava errada, mas era internamente consistente
Só que nunca tive um sonho lúcido dentro de um sonho, então essa diferença talvez influencie
No estado de sonho, há algo desconectado, e aqui também claramente existe uma desconexão semelhante
Este modelo parece não ter um modelo de mundo como o forte raciocínio espacial e a expectativa de continuidade que os animais têm
Claro que isso provavelmente também pode ser aprendido
Este é um modelo de 300 milhões de parâmetros, cerca de 1/1300 do tamanho de um llama-3 grande, treinado com 5 milhões de frames durante 12 dias em uma GTX4090
Era o nível de trabalho que grandes empresas de tecnologia faziam em 2015
Se fizerem a mesma coisa em escala industrial, como nos grandes modelos de linguagem, vai ser realmente incrível
Counter Strike já roda de forma muito mais fluida do que isso e não desperdiça uma quantidade enorme de computação
O ritmo de avanço é realmente impressionante
Vivemos em uma época bem interessante
É um resultado bem empolgante
Já parece algo que poderia ser usado em engines de jogos para gerar aproximações realistas de física
Se você criar muitos trechos de gameplay com uma engine de física mais pesada e realista, talvez até com CGI, e treinar um modelo para aproximar a física, obtém uma engine de física leve
Também poderia haver vários modelos especializados, como um para dinâmica de fumaça e outro para explosões
Mesmo com alucinações, acho que não seria pior do que os bugs de física comuns em jogos
Bugs de física são comuns, mas dá para priorizar e corrigir primeiro os bugs mais graves que impedem o progresso no jogo
Com um modelo caixa-preta, isso fica muito mais difícil
A física newtoniana já é muito bem conhecida e também bastante eficiente computacionalmente
Como calcular física newtoniana com uma aproximação de função de bilhões de parâmetros poderia ser mais barato?
Parece mais caro e menos preciso do que uma simulação física de verdade
Em modelos de machine learning não existe essa garantia
Essa abordagem provavelmente só faria sentido no contexto de jogos deliberadamente toscos
Se for apenas efeito visual, tudo bem, mas, se afetar a jogabilidade, os resultados não seriam diferentes para cada jogador?
Tenho curiosidade de ouvir alguém que realmente testou
Durante o processamento, ele respeita ou vai criando algum mapa do jogo, ou é como um passeio psicodélico em um sonho, em que não dá para voltar ao mesmo lugar duas vezes e as dimensões espaciais também são estranhas?
O mapa do jogo é finito?
Não parece criar mapa nenhum, nem ter qualquer percepção significativa de algo parecido com estado do jogo
É parecido com um RPG baseado em LLM
Você pega uma espada, coloca numa bolsa vazia e, de repente, consegue tirar um pão e comê-lo
Parece mais próximo de um mapa infinito
Não há nenhum tipo de reconhecimento de mapa
É mais próximo de uma IA de recordação/reprodução, que lembra com bastante precisão o que existe no conjunto de dados de treinamento; se você faz algo que não está nos dados, como andar contra uma parede, ela desmorona completamente e começa a cuspir bobagem
Bobagem plausível, mas ainda assim bobagem
Isso é um trabalho que o grupo de Schmidhuber fez em 2018
https://worldmodels.github.io/
Queria apontar isso
Aqui, a expressão sonho é precisa, e a cena de direção também se parece com dirigir em um sonho
Acho que entendi em linhas gerais a premissa básica do Stable Diffusion: gerar imagens realistas ao rodar o processo de remoção de ruído ao contrário
Mas, até onde sei, isso sempre acontece no nível dos pixels
Existe alguma pesquisa tentando fazer isso no nível de assets 3D?
Seria algo como encaixar assets de game engine com posição e orientação até reconstruir uma cena plausível
Se fosse possível, talvez desse para “sonhar” mapas reais e física real, evitando aquelas saídas meio sujas que aparecem nessas demos?
Até agora, ele tem sido usado para aprender uma cena a partir de fotos tiradas de vários ângulos e reconstruí-la volumetricamente ajustando a densidade de uma nuvem de pontos
Mas talvez também seja possível treinar um modelo com várias cenas diferentes e aplicar difusão a uma nuvem de pontos aleatória para gerar uma nova cena
Renderizar nuvens de pontos em tempo real também é muito eficiente, então isso poderia ser usado para criar mundos de jogos extremamente realistas em vez de geometria poligonal
Parece que alguém já pensou nisso: https://ar5iv.labs.arxiv.org/html/2311.11221
A difusão acontece no espaço latente, e esse foi um dos grandes avanços que fizeram tudo funcionar bem
Existe um modelo que codifica/decodifica entre pixels e espaço latente
O espaço latente consegue codificar os conceitos necessários nas dimensões necessárias e, em geral, tem dimensionalidade menor que o espaço de pixels
Então você obtém um espaço latente com ruído, remove esse ruído com o modelo de difusão e depois decodifica para o espaço de pixels usando outro modelo, um autoencoder variacional
Esses veículos colidem com bastante frequência
Exemplo: https://github.com/NVlabs/CTG
O método de engenharia reversa descrito é fácil de entender, então pode parecer atraente
Mesmo assim, acho que focar em geração no nível dos pixels é a abordagem correta
As saídas meio sujas provavelmente vão melhorar em pouco tempo
Como Doom(https://gamengen.github.io/) e este trabalho provaram que é possível, é bem provável que já haja mais pesquisa em andamento para encontrar a arquitetura certa para escalar isso para HD e com alucinações mínimas
Isso já aconteceu com vídeo, então acho que veremos em breve um avanço de nível parecido
A geração de imagens acontece nesse espaço, que tem menos saídas do que os pixels da imagem final, e depois é convertida em pixels por meio da VAE
Continuo sem entender como as pessoas não percebem o ruído infernal em imagens e vídeos de redes neurais
Para mim, ele sempre foi reconhecível desde o início e dava medo
Eu também sinto que a imagem quase sempre é grotesca de algum modo, mas talvez não estejamos falando da mesma coisa
Você consegue explicar melhor que experiência é essa?
Acabei de fazer um teste rápido, e funciona muito bem com placas AMD e ROCM PyTorch
Em execuções curtas, parece bem decente
Com o tempo, os detalhes somem bem rápido, e a arma tende a virar lixo colorido
Também quero observar que nenhum dos vídeos mostra o que acontece quando você anda contra uma parede
Essa situação não é tratada de forma muito elegante
O ponto em que isso fica realmente interessante é quando for treinado também com os GTAs mais recentes e vídeos reais relacionados, e então usado para atualizar em tempo real o visual de jogos antigos como Vice City
Ainda vai parecer um sonho por causa da falta de consistência temporal, mas como a base é consistente, acho que não será um problema tão grande, e visualmente será incrível
Como você apontou, a consistência temporal não é boa
Pixels verdes de baixa resolução de uma montanha distante podem ser interpretados em um frame como uma árvore frutífera e, no frame seguinte, como um pinheiro
Há uma demo de 2021 que fez algo parecido:
https://www.youtube.com/watch?v=3rYosbwXm1w
Se for só dirigir sem rumo pela cidade, seria possível, e isso por si só já seria muito legal
O ponto principal não é que ele consegue recriar mundos de videogame, mas que consegue simular o mundo real
Vídeos de jogos são usados no treinamento apenas porque os dados necessários podem ser sintetizados de forma barata e fácil
O sistema não sabe que está simulando um jogo
Se você fornecer de milhares a milhões de horas de vídeo do mundo real e entradas de agentes, obterá uma simulação do mundo real
https://www.reddit.com/r/aivideo/comments/1fx6zdr/gta_iv_wit...
Está ficando cada vez mais absurdo
Se existe um loop forte de frames antigos e entrada → novo frame, fico curioso para saber o que aconteceria se começasse com uma imagem que não fosse de Counter-Strike
Ou, se você colocasse um mapa que o modelo nunca viu, ele conseguiria acompanhar ou voltaria para um mapa conhecido de Counter-Strike?
Vendo coisas assim, dá a sensação de estar sonhando com Dust 2, então dá vontade de chamar de “sonho”