1 points par GN⁺ 2024-10-14 | 1 commentaires | Partager sur WhatsApp
  • DIAMOND est une approche qui, au lieu de compresser l’environnement Atari en jetons latents discrets, le simule avec un modèle du monde par diffusion, puis y entraîne un agent d’apprentissage par renforcement
  • L’image suivante est générée à partir de l’action de l’agent et des images précédentes comme conditions, et la répétition de ce processus construit un modèle du monde jouable
  • Avec un faible nombre d’étapes de débruitage, DDPM était instable, mais EDM produisait des trajectoires stables même en une seule étape, et DIAMOND utilise n=3 pour assurer la cohérence
  • Sur Atari 100k, le système atteint un score humain normalisé moyen de 1,46, établissant un nouveau meilleur résultat pour un agent entraîné à l’intérieur d’un modèle du monde dans la condition 100k images
  • Pour l’application à CS:GO, 87 heures de données de jeu humain, un pipeline en deux étapes avec prédiction basse résolution puis suréchantillonnage, et un modèle de 381M paramètres ont été utilisés, avec un jeu possible à environ 10 FPS sur RTX 3090

Le problème de modélisation du monde que DIAMOND cherche à résoudre

  • Un modèle du monde est une approche visant à entraîner des agents d’apprentissage par renforcement de manière plus sûre et avec une meilleure efficacité d’échantillonnage
  • Les modèles du monde récents modélisent principalement la dynamique de l’environnement comme des séquences de variables latentes discrètes
  • Ce type de représentation compressée peut manquer des détails visuels importants pour l’apprentissage par renforcement
  • DIAMOND applique à la modélisation du monde les modèles de diffusion, qui ont montré de solides performances en génération d’images
  • Le nom complet de DIAMOND est DIffusion As a Model Of eNvironment Dreams

Fonctionnement d’un modèle du monde par diffusion

  • Le modèle de diffusion est entraîné à prédire l’image suivante du jeu
  • Les entrées incluent les actions de l’agent et les images précédentes
  • Si l’agent fournit de nouvelles actions de manière répétée, le modèle de diffusion met à jour l’état du jeu
  • Grâce à ce processus de génération autorégressif, le modèle de diffusion joue le rôle d’un modèle du monde dans lequel l’agent peut apprendre et jouer

Conception du débruitage pour une exécution rapide

  • Pour construire un modèle du monde rapide, il faut réduire le nombre d’étapes de débruitage
  • DDPM devient instable avec peu d’étapes de débruitage, car les erreurs autorégressives s’accumulent
  • EDM génère des trajectoires stables même avec un débruitage en une seule étape
  • Dans l’environnement Boxing, le débruitage en une étape interpole entre des résultats possibles, ce qui produit un joueur noir flou, difficile à prédire
  • Un plus grand nombre d’étapes de débruitage permet de mieux sélectionner un mode particulier parmi plusieurs modes de transition possibles, ce qui améliore la cohérence dans le temps
  • Le modèle du monde par diffusion de DIAMOND utilise n=3 étapes de débruitage
  • Le mouvement du joueur blanc est contrôlé par la politique, et comme cette action est fournie au modèle du monde, il est correctement prédit quel que soit le nombre d’étapes de débruitage

Performances sur Atari 100k

  • DIAMOND modélise mieux les détails visuels importants que IRIS, basé sur des jetons discrets
  • En entraînant un agent d’apprentissage par renforcement à l’intérieur du modèle du monde par diffusion, le système atteint un score humain normalisé moyen de 1,46 sur Atari 100k
  • Ce score correspond à un niveau supérieur de 46 % à celui de l’humain
  • Il s’agit d’un nouveau meilleur résultat parmi les agents entraînés uniquement à l’intérieur d’un modèle du monde dans la condition 100k images

Extension à CS:GO

  • Le modèle du monde par diffusion de DIAMOND s’applique aussi à la simulation d’environnements 3D comme Counter-Strike: Global Offensive
  • La version CS:GO utilise un jeu de données fixe constitué de 87 heures de jeu humain au lieu de données collectées par un agent d’apprentissage par renforcement
  • Pour réduire le coût d’entraînement, un pipeline en deux étapes est utilisé
    • D’abord, la dynamique est prédite en basse résolution
    • Ensuite, un second modèle effectue le suréchantillonnage
  • La taille du modèle passe de 4,4M paramètres pour Atari à 381M paramètres pour CS:GO
    • Parmi eux, 51M paramètres correspondent au suréchantillonneur additionnel
  • Le suréchantillonneur utilise un échantillonnage stochastique pour améliorer la qualité de génération visuelle
  • Le modèle de dynamique n’a pas besoin d’échantillonnage stochastique
  • Le modèle CS:GO a été entraîné pendant 12 jours sur RTX 4090, et il est jouable à environ 10 FPS sur RTX 3090

Exécution directe et ressources publiques

  • Le code, les agents et le modèle du monde jouable sont publiés dans le dépôt GitHub
  • L’exemple d’installation utilise les commandes suivantes
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
  • Exécuter le modèle du monde Atari :
python src/play.py --pretrained
  • Exécuter le modèle du monde CS:GO :
git checkout csgo
python src/play.py
  • Plus de détails sont disponibles dans l’article

Modes d’échec restants et limites du passage à l’échelle

  • Le modèle du monde par diffusion de DIAMOND présente encore plusieurs modes d’échec
  • En augmentant davantage les données et la puissance de calcul, de nombreux aspects devraient s’améliorer
  • Cependant, certaines limites ne peuvent pas être résolues uniquement par le passage à l’échelle, comme les problèmes issus de la mémoire limitée du modèle
  • Une limite intéressante est que le modèle autorise des sauts consécutifs
    • Le modèle généralise l’effet du saut sur la géométrie de la scène
    • Comme les sauts consécutifs n’apparaissent pas assez souvent dans les données d’entraînement, il n’a pas appris qu’ils devraient être impossibles

1 commentaires

 
GN⁺ 2024-10-14
Avis sur Hacker News
  • Cette vidéo https://x.com/Sentdex/status/1845146540555243615 ressemble beaucoup à mes rêves
    Parfois, quand j’essaie de sauter haut dans un rêve, je suis transporté vers un autre endroit exactement comme ça, et les objets changent sans cesse de la même manière
    C’est étonnant de voir à quel point c’est proche d’une véritable expérience de rêve

    • Quand j’ai fait un rêve lucide, toutes les lettres semblaient corrompues
      Quand les modèles de diffusion ont commencé à attirer l’attention, j’ai fait le lien avec le texte corrompu dans les images générées
      C’est peut-être un indice qu’une partie de l’inconscient humain fonctionne d’une manière assez proche des principes des modèles de diffusion
    • En observant de près, même à l’état de veille, l’esprit semble souvent faire la même chose
      C’est moins visible dans le champ visuel, mais cela se manifeste davantage dans l’attention et la pensée elles-mêmes
    • Il est intéressant de voir à quel point les rêves varient d’une personne à l’autre
      Mes rêves sont visuellement très cohérents, au point que j’ai déjà utilisé Google Maps dans un rêve ; la géographie était fausse, mais cohérente en interne
      Cela dit, je n’ai jamais fait de rêve lucide dans un rêve, donc cette différence pourrait jouer
    • C’est donc prometteur, mais de manière limitée
      Dans l’état de rêve, quelque chose est déconnecté, et il y a clairement ici une rupture similaire
      Ce modèle semble manquer d’un modèle du monde, comme le fort raisonnement spatial et les attentes de continuité que possèdent les animaux
      Bien sûr, cela aussi s’apprend probablement
    • Ça ressemble énormément à ce que j’ai vécu quand j’ai pris du DMT-5 autrefois
  • C’est un modèle à 300 millions de paramètres, soit 1/1300 de la taille d’un grand llama-3, entraîné sur 5 millions de frames pendant 12 jours sur une GTX4090
    C’était le genre de travail que faisaient les grandes entreprises tech en 2015
    Si l’on faisait la même chose à l’échelle industrielle, comme pour les grands modèles de langage, ce serait vraiment énorme

    • Quel avantage exact cela apporte-t-il ?
      Counter Strike tourne déjà de façon bien plus fluide que ça, sans gaspiller énormément de calcul
    • Si 12 jours sur une RTX4090 suffisent, alors bientôt n’importe qui sur Internet va commencer à entraîner son propre modèle
    • J’étais venu dire presque la même chose, puis j’ai vu ce commentaire
      Le rythme des progrès est vraiment stupéfiant
      Nous vivons une époque bien intéressante
    • Deux 4090, mais oui, dans l’ensemble c’est ça
  • C’est un résultat assez enthousiasmant
    On dirait qu’on peut déjà l’utiliser dans des moteurs de jeu pour générer des approximations physiques réalistes
    On pourrait créer beaucoup de fragments de gameplay avec un moteur physique plus lourd et plus réaliste, voire en CGI, puis entraîner le modèle à approximer la physique, ce qui donnerait un moteur physique léger
    On pourrait aussi avoir plusieurs modèles spécialisés, par exemple pour la dynamique de la fumée ou les explosions
    Même s’il y a des hallucinations, je ne pense pas que ce soit pire que les bugs de physique courants dans les jeux

    • Je ne suis pas sûr que “même s’il y a des hallucinations, ce ne soit pas pire que les bugs de physique courants dans les jeux”
      Les bugs de physique sont fréquents, mais on peut prioriser et corriger d’abord les plus graves, ceux qui bloquent la progression
      Avec un modèle boîte noire, ce serait beaucoup plus difficile
    • Je me demande sur quoi repose l’idée que l’inférence d’un réseau de neurones serait moins coûteuse
      La physique newtonienne est déjà très bien connue et assez efficace à calculer
      En quoi calculer la physique newtonienne avec une approximation de fonction à des milliards de paramètres pourrait-il être moins cher ?
      Ça semble plus coûteux et moins précis qu’une vraie simulation physique
    • Vous pensez que l’inférence d’un réseau de neurones à 13 millions de paramètres est plus légère que de faire tourner un moteur physique traditionnel ?
    • Les bugs de physique sont des problèmes cohérents que l’on peut corriger
      Un modèle de machine learning n’offre aucune garantie de ce genre
      Cette approche ne sera probablement acceptable que dans le contexte de jeux volontairement bricolés
    • Est-ce que ça fonctionnerait aussi en multijoueur ?
      Si ce ne sont que des effets visuels, ça va, mais si cela influence le gameplay, les résultats ne risquent-ils pas de différer d’un joueur à l’autre ?
  • J’aimerais avoir l’avis de quelqu’un qui l’a vraiment essayé
    Pendant le traitement, est-ce que le système respecte ou construit une sorte de carte de jeu, ou bien est-ce plutôt une promenade psychédélique de rêve où l’on ne peut jamais revenir deux fois au même endroit et où les dimensions spatiales sont étranges ?
    La carte du jeu est-elle finie ?

    • Rien qu’en regardant la première vidéo, on voit un passage où une structure apparaît soudainement devant le joueur
      Il ne semble construire aucune carte, ni avoir une compréhension significative de quelque chose qui ressemblerait à un état de jeu
      C’est similaire aux RPG basés sur des LLM
      On ramasse une épée, on la met dans un sac vide, puis on peut soudainement en sortir une miche de pain et la manger
    • J’ai parcouru l’article en diagonale, mais je pense que si l’on se retourne à 180 degrés et qu’on marche dans la direction opposée, ce sera une expérience onirique qui ne correspondra pas à l’endroit d’où l’on vient
      Ça ressemble davantage à une carte infinie
    • Je l’ai essayé moi-même, et non
      Il n’y a aucune forme de conscience de carte
      C’est plus proche d’une IA de rappel/relecture, qui restitue assez précisément ce qui se trouve dans le jeu de données d’entraînement ; mais si l’on fait quelque chose qui n’y figure pas, comme marcher dans un mur, tout s’effondre complètement et elle débite n’importe quoi
      Du n’importe quoi plausible, mais du n’importe quoi quand même
  • C’est un travail que le groupe de Schmidhuber avait fait en 2018
    https://worldmodels.github.io/
    Je tenais à le signaler

    • Clairement en avance sur son temps
      Ici, le terme rêve est exact, et les scènes de conduite ressemblent aussi à la sensation de conduire dans un rêve
    • C’est cité dans la première référence de l’article et crédité comme il se doit ; on peut donc considérer que le lien est fourni par commodité pour ceux qui ne consultent pas les références
    • J’ai essayé d’y jouer, c’était amusant, et si l’on survit trop longtemps, ça devient extrêmement instable
  • Je pense avoir à peu près compris le principe de base de Stable Diffusion, à savoir générer des images réalistes en inversant le processus de débruitage
    Mais, à ma connaissance, cela se fait toujours au niveau des pixels
    Existe-t-il des recherches qui tentent de faire cela au niveau des assets 3D ?
    L’idée serait d’insérer des assets de moteur de jeu avec une position et une orientation, puis de les ajuster jusqu’à reconstruire une scène crédible
    Si c’était possible, on pourrait « rêver » de vraies cartes et d’une vraie physique, et peut-être éviter les sorties un peu brouillonnes qu’on voit dans ce genre de démos ?

    • À mon avis, ce qui s’en rapproche le plus aujourd’hui est le 3D Gaussian Splatting
      Jusqu’ici, il a surtout servi à apprendre une scène à partir de photos prises sous plusieurs angles, puis à ajuster la densité d’un nuage de points pour la reconstruire en volume
      Mais il pourrait aussi être possible d’entraîner un modèle sur plusieurs scènes différentes, puis d’appliquer une diffusion à un nuage de points aléatoire pour générer de nouvelles scènes
      Le rendu en temps réel de nuages de points est aussi très efficace, ce qui permettrait de créer des mondes de jeu extrêmement réalistes au lieu d’utiliser de la géométrie polygonale
      Quelqu’un semble déjà y avoir pensé : https://ar5iv.labs.arxiv.org/html/2311.11221
    • Les modèles d’image ne débruitent pas au niveau des pixels
      La diffusion se produit dans l’espace latent, et c’est l’une des grandes percées qui ont permis à tout cela de bien fonctionner
      Il existe un modèle qui encode/décode entre les pixels et l’espace latent
      L’espace latent peut encoder les concepts nécessaires dans les dimensions nécessaires, et il a généralement moins de dimensions que l’espace des pixels
      On obtient donc un espace latent bruité, on le débruite avec le modèle de diffusion, puis on le décode vers l’espace des pixels avec un autre modèle, un autoencodeur variationnel
    • Ce ne sont pas exactement des assets 3D, mais les modèles de diffusion sont utilisés pour la génération de trafic destinée à évaluer des algorithmes de conduite autonome, par exemple pour générer des trajectoires de véhicules
      Ces véhicules entrent assez souvent en collision
      Exemple : https://github.com/NVlabs/CTG
    • Je pense que générer cela au niveau des pixels est la prochaine étape
      L’approche par rétro-ingénierie que tu décris est séduisante parce qu’elle est facile à comprendre
      Mais je pense tout de même que se concentrer sur la génération au niveau des pixels est la bonne approche
      Les sorties un peu brouillonnes vont probablement s’améliorer rapidement
      Doom (https://gamengen.github.io/) et ce travail ont prouvé que c’était possible, donc il y a sans doute déjà beaucoup plus de recherches en cours pour trouver la bonne architecture afin de passer à la HD avec un minimum d’hallucinations
      Comme cela s’est déjà produit pour la vidéo, on devrait voir bientôt une percée du même ordre
    • En général, cela ne se fait pas au niveau des pixels, mais au niveau de l’espace latent d’un modèle comme un VAE
      La génération d’images se fait dans cet espace, qui comporte moins de sorties que les pixels de l’image finale, puis elle est convertie en pixels via le VAE
  • Je continue de ne pas comprendre comment les gens ne remarquent pas le bruit infernal dans les images et vidéos de réseaux neuronaux
    Pour moi, il a toujours été reconnaissable dès le début, et il me met mal à l’aise

    • Je me demande ce que tu entends précisément par bruit infernal
      Je ressens aussi que les images sont presque toujours étranges d’une manière ou d’une autre, mais on ne parle peut-être pas de la même chose
      Tu peux détailler l’expérience dont tu parles ?
    • Si tu parles d’une sorte de bourdonnement subtil mais anxiogène, d’agitation, de dissonance, je crois voir à peu près ce que tu veux dire
    • Les yeux aussi ont beaucoup de bruit
  • Je viens de vérifier rapidement, et ça fonctionne très bien avec les cartes AMD et ROCM PyTorch
    Sur de courtes exécutions, ça a l’air plutôt correct
    Avec le temps, les détails disparaissent assez vite, et l’arme a tendance à se transformer en déchet multicolore
    Je veux aussi souligner qu’aucune des vidéos ne montre ce qui se passe quand on marche dans un mur
    Ce cas n’est pas géré de façon très élégante

  • Là où cela devient vraiment intéressant, c’est si on l’entraîne avec les GTA récents et des vidéos réelles associées, puis qu’on l’utilise pour améliorer en temps réel les visuels d’un vieux jeu comme Vice City
    Cela donnera encore une impression de rêve à cause du manque de cohérence temporelle, mais comme la base est cohérente, je ne pense pas que ce soit un gros problème, et le résultat serait incroyable à regarder

    • Redessiner les images produites par un moteur de jeu existant fonctionne, et donne des résultats impressionnants
      Comme tu l’as signalé, la cohérence temporelle n’est pas bonne
      Les pixels verts en basse résolution d’une montagne lointaine peuvent être interprétés comme un arbre fruitier sur une frame, puis comme un pin sur la suivante
      Il y a eu une démo similaire en 2021 :
      https://www.youtube.com/watch?v=3rYosbwXm1w
    • Un jeu comme GTA a tellement de fonctionnalités et de branches complexes que j’ai du mal à imaginer que ça marche
      Se contenter de conduire sans but dans la ville serait possible, et ce serait déjà très cool
    • Je ne comprends pas pourquoi on se focalise uniquement sur l’usage dans les jeux vidéo
      Le point clé n’est pas de pouvoir recréer un monde de jeu vidéo, mais de pouvoir simuler le monde réel
      On utilise des vidéos de jeux pour l’entraînement simplement parce qu’on peut synthétiser les données nécessaires facilement et à faible coût
      Ce système ne sait pas qu’il simule un jeu
      Si on lui donne des milliers à des millions d’heures de vidéos du monde réel et des entrées d’agents, on obtient une simulation du monde réel
    • En plus d’exemples plus anciens, il y a aussi un travail récent fait avec GTA
      https://www.reddit.com/r/aivideo/comments/1fx6zdr/gta_iv_wit...
    • Comme amélioration visuelle, cela semble assez proche de ce que fait DLSS, donc c’est plausible
  • Ça devient de plus en plus délirant
    Avec une boucle forte ancien frame et entrée → nouvelle frame, je me demande ce qui se passerait si on commençait avec une image qui n’est pas Counter-Strike
    Ou si on lui donnait une carte que le modèle n’a jamais vue : la suivrait-il, ou reviendrait-il à une carte Counter-Strike connue ?

    • Vu que tous les « rêves » ne montrent que cette carte, on dirait qu’il ne connaît que Dust 2
      En voyant ça, j’ai envie d’appeler cela un « rêve », parce qu’on a l’impression qu’il rêve de Dust 2