Si je comprends bien le soi-disant Fishtesting , les gens écrivent des correctifs, puis essaient les correctifs contre la version actuelle de Stockfish. Si la nouvelle version fonctionne mieux, elle est promue comme la version principale; sinon, il est rejeté.
Question: pourquoi tester par rapport à la version actuelle de Stockfish? Cela a fonctionné dans le passé, et le stockfish actuel est beaucoup plus fort que le stockfish de deux ans. Cependant, nous pouvons également voir les limites de cette approche. Bien que Stockfish soit maintenant capable de détruire complètement d'autres moteurs traditionnels, il a également récemment perdu la superfinale TCEC S15 contre Leela. Par conséquent, pourquoi ne pas tester chaque nouvelle version contre Leela?
La réponse évidente est que les ressources de Fishtesting proviennent des CPU, et Leela est horrible sur CPU. Cependant, cela ne devrait pas être fatal: on pourrait simplement donner plus de temps à Leela, par exemple avec Stockfish fonctionnant sur 10s par match, donner 100 Leela par match ou toute autre cote de temps nécessaire pour obtenir le rapport Leela au rapport en superfinale. Cela ralentira certainement Fishtesting, mais si cela conduit à un moteur qui peut battre Leela dans un match, cela pourrait en valoir la peine.
Le point du fishtesting est de tester si une nouvelle version de Stockfish est devenue plus forte . La définition de plus fort est qu'il bat sa version précédente.
Je ne sais pas comment tester chaque nouvelle version sur un moteur comme Leela pourrait aider. Votre idée pourrait n'accepter une nouvelle version de Stockfish que si elle fonctionne mieux contre Leela que la version précédente de Stockfish. Alors maintenant, chaque version de Stockfish est garantie de mieux jouer contre Leela, mais pas garantie d'être un meilleur joueur d'échecs dans l'ensemble. La raison en est que Stockfish pourrait s'appuyer sur certaines caractéristiques du jeu de Leela pour gagner plus de matchs.
EDIT - J'ai pensé à un exemple qui pourrait aider ici. Supposons que vous étiez classé 1500 il y a quelques années, et maintenant vous êtes 1800. Si vous avez joué votre propre passé dans un match, il est clair que vous gagneriez. Mais pour les besoins de l'argument, il est possible que votre auto 1500 soit plus performant contre Kasparov que votre auto 1800 actuel. Peut-être que le 1500-self était moins conservateur et prenait beaucoup plus de risques. Cela réussit à battre Kasparov dans un jeu rare, tandis que votre 1800 actuel perdrait à chaque fois (mais les jeux seraient légèrement plus proches en moyenne).
la source
Je suis d'accord dans l'ensemble avec @inertialignorance mais je voudrais clarifier un peu la position.
Lorsque l'homme joue à l'homme, le résultat d'un jeu est relativement dénué de sens, étant donné l'extrême variabilité du jeu humain. (J'utiliserai Kasparov v Deep Blue comme exemple de cette variabilité - un bon jour, j'aurais probablement pu battre Kasparov dans le jeu qu'il a bafoué contre DB.) Alors, ignorons l'humanité et concentrons-nous sur la machine.
Les machines jouent à un niveau de compétence beaucoup plus constant que les humains. Par conséquent, un seul jeu signifie plus et une série de jeux signifie beaucoup. Il est donc logique de tester l'amélioration proposée de Stockfish par rapport à une machine. Mais pourquoi Stockfish?
Tout simplement parce qu'il n'y a aucun moyen de quantifier "fait mieux contre Leela" de manière significative. Il pourrait faire mieux et tout de même perdre. Mais quelle est la norme pour mieux, dans ce cas? Comment prouvez-vous qu'il a mieux joué? Je ne vois pas de norme viable.
Il est beaucoup plus simple de prouver que Stockfish prime est une amélioration par rapport à Stockfish original en jouant simplement à un ensemble de jeux et en comptant les résultats.
Edward Deming a soutenu qu'il était primordial de choisir la métrique correcte, car vous savez seulement que vous vous améliorez grâce à ce que vous mesurez. Alors posez la question: quel est le but du processus? Pourquoi proposez-vous un patch pour Stockfish?
Est-ce vraiment l'objectif ultime du patch de battre Leela? Ou est-ce plutôt pour que Stockfish joue mieux aux échecs? Je dirais que c'est le dernier. Battre Leela viendra de lui-même si seulement Stockfish continue de s'améliorer suffisamment.
Oui, une voie d'amélioration progressive pour Stockfish pourrait arriver à un plateau. Même ainsi, la seule voie vérifiable hors de ce plateau consistera à y apporter des modifications qui le rendront meilleur. Si une approche «frappe un mur», alors une recherche continue d'améliorations dictera un autre chemin. Si un autre chemin proposé ne peut pas battre le chemin actuel, pourquoi le choisir?
la source
Il semble y avoir une raison matérielle pour ne pas effectuer cette modification.
Le principal problème avec l'utilisation de Leela comme adversaire est que Leela fonctionne mieux sur GPU. Il est possible d'exécuter Leela sur CPU, mais les performances de Leela en souffrent beaucoup. L'OP suggère de donner à Leela des cotes de temps pour compenser, mais les cotes de temps ne fonctionnent pas très bien: les performances de Leela s'affaiblissent tellement que les cotes de temps requises sont oppressivement longues.
Pour avoir une idée de la faiblesse de Leela sur le CPU, nous pouvons regarder Leela dans la saison 12 de TCEC, quand il n'avait pas de support GPU et fonctionnait sur CPU. Voici un exemple de jeu joué par Leela alors . Si l'on regarde les vitesses qu'il atteignait, c'est environ 1-3kn / s, ou 1000-3000 positions par seconde. Comparativement, dans la dernière saison 15 lorsque Leela fonctionnait sur des GPU puissants, il atteindrait environ 50kn / s ( exemple de jeu ). Par conséquent, pour pouvoir tester Stockfish contre Leela sur un pied d'égalité, il faut donner à Leela environ 25 fois la cote de temps. Si Stockfish a une minute, Leela a besoin de 25 minutes.
Au moment de la rédaction, Fishtesting teste deux contrôles temporels: 10 s + 0,1 s / mouvement et 60 s + 0,6 s / mouvement (les patchs qui réussissent le premier test de contrôle de temps court sont promus au plus long et testés à nouveau. passer la seconde puis devenir la "nouvelle" version). À 25 fois la cote, Leela a besoin de 250 s + 2,5 s / mouvement dans le premier contrôle temporel et de 1500 s + 15 s / mouvement dans le second contrôle temporel. Le ralentissement est énorme; nous aurions effectivement Leela jouer à des contrôles de temps rapides et non balle. Le nombre de parties pouvant être terminées en temps unitaire diminuerait également d'environ 25 fois. Fishtesting a régulièrement besoin de dizaines de milliers de jeux pour tester chaque patch; prendre 25 fois plus de temps pour terminer chaque test semble trop lent.
Pour ajouter du carburant au feu, pour autant que je sache, Leela avait un réseau plus petit dans la saison 12 - les performances des derniers filets pourraient être encore plus lentes sur le CPU maintenant.
Il est possible qu'un jour, si Fishtesting obtient les ressources GPU pour tester avec Leela, il puisse basculer; mais nous n'en sommes pas encore là.
Edit : Lc0-CPU joue actuellement à TCEC. Il obtient environ 5 nœuds. Cependant, selon certaines personnes dans le chat, Lc0-CPU est modifié pour jouer sur le CPU; non modifié, il est environ 80 fois plus lent que sur le GPU. Il y a donc un réel coût matériel à utiliser Lc0-CPU comme adversaire de test.
la source
L'inertie est correcte. Je devrais également ajouter qu'il n'y avait pas de moteur open source puissant avant LC0. Komodo et Houdini avaient tous deux des restrictions de licence.
la source