Pourquoi Fishtesting teste-t-il Stockfish contre lui-même, pas avec d'autres moteurs?

11

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.

Séduire
la source

Réponses:

4

Tout d'abord, ce qui ne ressort pas clairement des autres réponses, c'est que vous pouvez bien sûr en principe utiliser n'importe quel adversaire (avec une force de jeu constante) pour comparer la force de jeu de deux versions d'un programme.

Cependant, il existe plusieurs bonnes raisons de tester les versions directement les unes contre les autres, que vous développiez Stockfish ou tout autre moteur:

  • La comparaison de la force de jeu des entités jouant aux échecs ne remplit généralement pas la transitivité, c'est-à-dire que si A> B et B> C, A <C est toujours possible. Donc, tant qu'une comparaison avec un large groupe d'adversaires (afin de faire la moyenne du problème de transitivité) n'est pas possible, une comparaison directe devrait être la mesure la plus fiable, bien que vous puissiez bien sûr avoir le même problème pour trois versions d'un programme unique.
  • En faisant une comparaison directe, vous réduisez le nombre de jeux requis dans les tests, car vous n'avez besoin d'exécuter qu'une seule correspondance au lieu de deux, et en même temps, vous obtenez des barres d'erreur plus petites pour la différence de force de jeu.
  • Les tests contre un adversaire de force (presque) égale maximisent la sensibilité statistique d'un résultat de jeu unique, vous permettant ainsi d'économiser à nouveau les coûts matériels. Si la différence de force de jeu est très élevée, l'information / l'entropie d'un seul jeu est très faible.

De plus, dans le cas du Fishtest / Stockfish, il y a plusieurs raisons concrètes pour lesquelles le choix d'une comparaison directe a été le choix de principe:

  • Au moment où le fishtest a été initialement développé, Leela n'était pas disponible.
  • L'utilisation de moteurs commerciaux tels que Komodo et Houdini n'était / n'est pas une option en raison de problèmes de licence.
  • L'utilisation d'autres programmes peut introduire des risques de sécurité ainsi que des dépendances logicielles supplémentaires ou des exigences matérielles que vous souhaitez éviter dans un environnement informatique distribué.
  • Avant Leela, il n'existait pas de moteur open source suffisamment puissant pour obtenir des résultats statistiquement significatifs lors de la comparaison avec Stockfish.
Fabian Fichter
la source
Êtes-vous sûr que les tests avec un troisième moteur augmentent le nombre de jeux requis? Il semble qu'il ne le fasse que la première fois. Par exemple, disons que le troisième moteur est E, et les versions de Stockfish essayées sont A, B et C. Nous jouons A et B 20k fois contre E et obtenons un score. Celui qui fait le mieux est conservé et le plus faible est rejeté. Dites que A est conservé. En ce qui concerne le test de la version C, nous avons déjà les résultats AE, nous n'avons donc besoin que des résultats CE, et la même chose s'applique à toutes les versions futures.
Allure
2
Même si vous testez toujours contre la même version de votre moteur de référence (ce qui le rend très sujet au sur-ajustement), l'incertitude statistique sur la différence Elo résultante sera toujours plus grande, car en combinant les résultats de deux exécutions (par exemple, EloC - EloB ), vous devez également combiner les incertitudes statistiques , ce qui augmente généralement l'incertitude d'un facteur sqrt (2). Afin de compenser cela, vous devrez exécuter plus de jeux.
Fabian Fichter
7

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).

Ignorance inertielle
la source
Et au final, "Un peu plus près" serait difficile à quantifier. Le jeu personnel est le meilleur.
Brandon_J
1
On dirait de la sémantique, mais qu'est-ce qui vous fait dire que "plus fort" est défini comme battant la version précédente? On pourrait également affirmer que "plus fort" est le gars qui a battu Kasparov, remporte le tournoi et obtient toute la gloire, pas celui qui remporte le face à face.
Allure
1
@Allure Je pense que le face à face n'est que la mesure la plus objective de la "force". Si A bat B, A joue mieux que B, l'ergo A est plus fort que B. Mais si A fait un peu moins pire contre C que B contre C, cela signifie-t-il nécessairement A> B? Et si B réussissait mieux contre D, E, F, G ... que A?
Ignorance inertielle le
1
Mais vous avez raison. Le système Candidats pour le Championnat du Monde est un grand tournoi, mais il y avait des matchs individuels entre les joueurs. Pour un grand tournoi, A pourrait perdre contre B mais toujours gagner le tournoi et être déclaré "le plus fort". Cependant, c'est parce que A a battu une variété de joueurs différents, pas seulement un joueur C. Donc, peut-être que les tests de moteur pourraient être utilisés lorsque la nouvelle version joue une variété de moteurs différents, mais il est plus rapide et plus simple de simplement tester par rapport à l'ancienne version.
Ignorance inertielle le
3

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?

Arlen
la source
Comment prouvez-vous qu'il a mieux joué? ça devrait être assez simple, non? Jouez simplement la version précédente 20k fois contre Leela, ainsi que la nouvelle version 20k fois, puis comparez les résultats.
Allure
@Allure Mais hypothétiquement, que se passerait-il si Stockfish Prime battait le vieux Stockfish, mais le vieux Stockfish faisait mieux contre Leela (et comme Arlen l'a mentionné, comment comparez-vous même quel Stockfish "a fait mieux" contre Leela). Ne garderiez-vous pas Stockfish prime alors? Ce processus de vérification semble défectueux.
Ignorance inertielle
@InertialIgnorance De même, que se passerait-il si Stockfish Prime faisait mieux contre Leela, mais échouait à battre l'ancien Stockfish, ne garderiez-vous pas Stockfish Prime alors? Cela se résume à la façon dont on définit «plus fort», et il n'est pas clair pour moi que «plus fort» gagne la tête à tête.
Allure
@Allure, je dois admettre qu'il y a encore une raison d'être en conflit, mais dans ce cas, il semble plus clair de préférer Stockfish Prime. Lorsque vous voulez comparer les deux choses qui sont les meilleures (qu'il s'agisse de politiciens, d'athlètes, etc.), vous les faites le plus souvent se faire concurrence d'une manière ou d'une autre. Ne pas voir qui a fait mieux contre un pair choisi arbitrairement.
Ignorance inertielle
@InertialIgnorance toujours, si Karjakin avait remporté les Championnats du monde 2016, il est difficile pour moi d'imaginer que la plupart des gens le considéreront comme le joueur le plus fort du monde. Oui, il aurait battu Carlsen lors du face à face, mais les victoires de Carlsen en tournoi indiqueraient l'inverse. De même, lorsque Kasparov n'était pas champion du monde, la plupart des gens le considéraient toujours comme le plus fort.
Allure
3

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.

Séduire
la source
Je doute que cela se produise. Presque tous les auteurs de moteurs testent principalement leur moteur contre lui-même et non contre d'autres moteurs (éventuellement plus puissants). Il peut être utile de procéder à des vérifications croisées en effectuant des tests avec d'autres moteurs, mais cela ne devrait pas être la partie principale des tests, car il est moins efficace.
Fabian Fichter
@FabianFichter pourquoi est-il moins efficace de tester avec d'autres moteurs?
Allure
Comme je l'ai décrit dans ma réponse ( chess.stackexchange.com/a/24714/15415 ), il est moins efficace car vous avez besoin de plus de jeux (c'est-à-dire plus de matériel ou de temps) pour atteindre la même précision statistique pour votre mesure Elo.
Fabian Fichter
0

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.

SmallChess
la source
"pas de moteur open source puissant" Je suppose que vous voulez dire en plus du stockfish?
Brandon_J
@Brandon_J oui c'est ce que je voulais dire
SmallChess