Le résultat du jeu de
notre bot montre que jouer avec soi-même [self-play] peut sérieusement augmenter la qualité des systèmes d'apprentissage automatique, et la faire passer d'un état bien inférieur au niveau d'une personne au niveau d'un surhomme, s'il y a une puissance de calcul appropriée. En un mois, notre système est passé d'un état qui ne correspond guère au niveau d'un bon joueur à un état dans lequel il bat les meilleurs professionnels, et n'a cessé de s'améliorer depuis lors. La qualité d'un système d'apprentissage approfondi supervisé est déterminée par l'ensemble des données d'entraînement, mais pour les systèmes jouant avec eux-mêmes, l'ensemble des données disponibles est automatiquement amélioré.
Changement de la note TrueSkill (similaire à la note Elo pour les échecs) de notre bot au fil du temps, calculé en simulant des parties entre les bots.Le projet s'est développé comme suit. La note de 15% des joueurs est inférieure à la barre des 1,5K sur l'échelle
MMR ; 58% des joueurs l'ont en dessous de 3K; 99,99% des joueurs ont moins de 7,5K.
• 1er mai: la première
formation de renforcement se traduit par un environnement Dota simple où le Drow Ranger apprend à combattre le Earthshaker codé en dur.
• 8 mai: un testeur avec un
MMR de 1,5K dit que ses résultats s'améliorent plus vite que le bot.
• Début juin: beat tester avec MMR 1,5K
• 30 juin: j'ai gagné la plupart des matchs avec un testeur avec MMR 3000.
• 8 juillet: pour la première fois par une petite marge, j'ai
battu un testeur semi-professionnel avec un MMR de 7,5K.
• 7 août:
Blitz (6,2 K, ancien professionnel) a gagné 3-0,
Pajkatt (8,5 K, professionnel) 2-1 et
CC&C (8,9 K, professionnel) 3-0. Ils ont tous convenu que SumaiL trouverait comment le battre.
• 9 août: Arteezy bat (10K, professionnel, l'un des meilleurs joueurs) 10-0. Il a dit que SumaiL serait capable de gérer ce bot.
• 10 août: SumaiL a gagné (8.3K, professionnel, meilleur joueur 1 contre 1) 6-0. Le joueur a déclaré que le bot ne peut pas être vaincu. Il a joué avec la version bot le 9 août, a gagné 2-1.
• 11 août: Dendi bat (7,3 K, professionnel, ancien champion du monde) 2-0. 60% de victoires de plus que la version du 10 août.
Le match contre SumaiLDéfi
Dans la version complète du jeu, les joueurs jouent 5 contre 5, mais dans
certains tournois
il y a aussi des jeux 1 contre 1. Notre bot a joué selon les règles du tournoi standard - nous n'avons pas ajouté de simplifications spéciales pour l'IA.
Le bot a fonctionné avec les interfaces suivantes:
• Observation: API conçues pour avoir les mêmes capacités que les joueurs en direct concernant les héros, les autres personnages du jeu et la surface à côté du héros. Le jeu est partiellement observable.
• Actions: accessibles via l'API, avec une fréquence comparable à l'homme, y compris le mouvement vers un certain endroit, l'attaque et l'utilisation d'objets.
• Feedback: le bot reçoit des récompenses pour la victoire, ainsi que des paramètres simples, tels que la santé et les
lastits .
Nous avons sélectionné des dizaines d'articles disponibles pour le bot et en avons sélectionné un pour étude. Nous avons également entraîné séparément des glissements de blocage en utilisant des techniques traditionnelles d'entraînement par renforcement, car cela se produit avant l'apparition d'un adversaire.
Bot joue contre ArteezyLe tournoi international
Notre approche, combinant le jeu avec nous-mêmes et l'apprentissage de l'extérieur, nous a permis de renforcer significativement le jeu de notre bot du lundi au jeudi, pendant le tournoi. Lundi soir, Pajkatt a gagné grâce à une collection d'objets inhabituels. Nous avons ajouté cet assemblage à la liste des articles disponibles.
Mercredi, vers 13 heures, nous avons testé la dernière version du bot. Le bot a perdu beaucoup de santé après la première vague. Nous avons décidé que nous devions revenir en arrière, mais nous avons ensuite remarqué que le jeu suivant était incroyable et que le comportement de la première vague n'était qu'un leurre pour les autres bots. Les jeux suivants avec lui-même ont résolu le problème lorsque le bot a appris à résister à la stratégie avec des appâts. Et nous avons combiné cela avec le bot du lundi uniquement pour la première vague, et avons terminé seulement 20 minutes avant qu'Arteezy n'apparaisse.
Après les matchs avec Arteezy, nous avons mis à jour le modèle de blocage du fluage, ce qui a augmenté TrueSkill d'une unité. Les séances d'entraînement ultérieures avant le match avec SumaiL jeudi ont augmenté TrueSkill de deux points. SumaiL a souligné que le bot a appris à lancer des sorts destructeurs [raze] en dehors du champ de vision de l'ennemi. Cela s'est produit grâce à la mécanique, que nous ne connaissions pas: lancer hors du champ de vision de l'ennemi ne lui permet pas de charger la merveille.
Arteezy a joué un match avec notre testeur 7,5K. Arteezy a gagné le match, mais notre testeur a réussi à le surprendre à l'aide d'une stratégie espionnée par le bot. Arteezy a noté plus tard que Paparazi avait utilisé une fois cette stratégie contre lui et qu'ils y recouraient rarement.
Paykatt remporte le bot de lundi. Il attire le bot, puis utilise la régénération.Vulnérabilités des bots
Bien que SumaiL ait qualifié le bot d '«invincible», il peut toujours se confondre dans des situations trop différentes de ce qu'il a vu. Nous l'avons lancé lors de l'un des événements du tournoi, où les joueurs ont joué plus de 1000 matchs afin de vaincre le bot de toutes les manières possibles.
Les vulnérabilités réussies se répartissaient en trois catégories:
• Tir à la corde. Vous pouvez constamment faire des creeps à partir de la ligne de poursuite juste après leur apparition. En conséquence, plusieurs dizaines de creeps vous suivront sur la carte, et les creeps ennemis détruiront la tour du bot.
• Orbe de venin + dentelle du vent: vous donne un avantage dans la vitesse de déplacement sur le bot au premier niveau et vous permet de provoquer rapidement des dégâts.
• Raze au premier niveau: il nécessite des compétences, mais plusieurs joueurs de classe 6-7K ont réussi à tuer le bot au premier niveau, réussissant avec succès 3-5 sorts en peu de temps.
La résolution des problèmes pour les matchs en tête-à-tête sera similaire à la correction d'un bogue avec Pajkatt. Mais pour les matchs 5v5, ces problèmes ne sont pas des vulnérabilités, et nous aurons besoin d'un système capable de faire face à des situations étranges qu'il n'avait jamais vues auparavant.
L'infrastructure
Nous ne sommes pas encore prêts à discuter des caractéristiques internes du bot - l'équipe travaille sur une solution au problème avec un jeu 5 contre 5.
La première étape du projet a été de comprendre comment exécuter Dota 2 dans le cloud sur un GPU physique. Le jeu a donné une erreur incompréhensible dans de tels cas. Mais lors du lancement sur le GPU sur le bureau de Greg (pendant le spectacle, ce bureau a été mis en scène), nous avons remarqué que Dota démarre avec un moniteur connecté et qu'il affiche le même message sans moniteur. Par conséquent, nous avons configuré nos machines virtuelles pour faire comme si un moniteur physique leur était connecté.
A cette époque, Dota ne supportait pas les serveurs dédiés, c'est-à-dire que le lancement avec scaling et sans GPU n'était possible que dans la version avec un rendu logiciel très lent. Ensuite, nous avons créé un stub pour la plupart des appels OpenGL, à l'exception de ceux qui étaient nécessaires au chargement.
Dans le même temps, nous avons écrit des bots dans des scripts - comme référence pour la comparaison (en particulier, parce que les bots intégrés ne fonctionnent pas bien en mode 1 sur 1) et pour comprendre la sémantique de l'
API pour les bots . Le bot de script atteint 70 lasthits en 10 minutes sur un chemin vide, mais perd toujours aux personnes qui jouent assez bien. Notre meilleur bot jouant 1 contre 1 atteint le niveau d'environ 97 (il détruit la tour plus tôt, de sorte que nous ne pouvons qu'extrapoler), et le maximum théorique est de 101.
Le bot joue contre SirActionSlacks. La stratégie de détournement de bots n'a pas fonctionné avec une foule de courriersCinq à cinq
Jouer 1 contre 1 est une tâche difficile, mais 5 contre 5 est un océan de complexité. Nous devrons étendre les capacités de l'IA afin qu'elle puisse y faire face.
De la manière habituelle, nous commençons par copier le comportement. Dota héberge environ un million de jeux publics par jour. Les enregistrements des matchs sont stockés sur les serveurs Valve pendant deux semaines. Nous téléchargeons chaque entrée de jeu au niveau expert depuis novembre dernier et avons collecté un ensemble de données de 5,8 millions de jeux (chaque jeu dure environ 45 minutes avec 10 joueurs). Nous utilisons
OpenDota pour rechercher des enregistrements et leur avons transféré 12 000 $ (dix fois plus que ce qu'ils voulaient collecter en un an) pour soutenir le projet.
Nous avons encore beaucoup d'idées et nous
embauchons des programmeurs (intéressés par l'apprentissage automatique, mais pas nécessairement des experts) et des chercheurs pour nous aider. Nous remercions Microsoft Azure et Valve pour leur soutien dans notre travail.