¿Por qué Fishtesting prueba Stockfish contra sí mismo, no con otros motores?


11

Según entiendo el llamado Fishtesting , las personas escriben parches y luego prueban los parches con la versión actual de Stockfish. Si la nueva versión funciona mejor, se promociona para ser la versión principal; de lo contrario es rechazado.

Pregunta: ¿por qué probar contra la versión actual de Stockfish? Funcionó en el pasado, y el Stockfish actual es mucho más fuerte que el Stockfish de dos años. Sin embargo, también podemos ver limitaciones a este enfoque. Aunque Stockfish ahora es capaz de destruir completamente otros motores tradicionales, también perdió recientemente la superfinal TCEC S15 contra Leela. Por lo tanto, ¿por qué no probar cada nueva versión contra Leela?

La respuesta obvia es que los recursos de Fishtesting provienen de las CPU y Leela es horrible con la CPU. Sin embargo, eso no debería ser fatal: uno podría darle a Leela más tiempo, por ejemplo, con Stockfish ejecutándose en 10 segundos por juego, darle 100 segundos a Leela por juego o las probabilidades de tiempo necesarias para obtener la relación de Leela en la superfinal. Esto ciertamente disminuirá la velocidad de Fishtesting, pero si conduce a un motor que pueda vencer a Leela en un partido, aún podría valer la pena.

Respuestas:


4

En primer lugar, lo que no queda claro a partir de otras respuestas es que, por supuesto, en principio puede usar cualquier oponente (con una fuerza de juego constante) para comparar la fuerza de juego de dos versiones de un programa.

Sin embargo, hay varias buenas razones para probar las versiones directamente entre sí, independientemente de si está desarrollando Stockfish o cualquier otro motor:

  • La comparación de la fuerza de juego de las entidades de ajedrez generalmente no cumple la transitividad, es decir, si A> B y B> C, A <C todavía es posible. Por lo tanto, siempre que una comparación contra un gran grupo de oponentes (para promediar el problema de transitividad) no sea factible, una comparación directa debería ser la medición más confiable, aunque, por supuesto, puede tener el mismo problema para tres versiones de un programa único
  • Al hacer una comparación directa, reduce el número requerido de juegos en las pruebas, porque solo necesita ejecutar un partido en lugar de dos, y al mismo tiempo obtiene barras de error más pequeñas para la diferencia de fuerza de juego.
  • La prueba contra un oponente de (casi) igual fuerza maximiza la sensibilidad estadística de un solo resultado del juego, por lo que nuevamente ahorra costos de hardware. Si la diferencia en la fuerza de juego es muy alta, la información / entropía de un solo juego es muy baja.

Además, en el caso de fishtest / Stockfish hay varias razones concretas por las que elegir una comparación directa fue la opción más basada en principios:

  • En el momento en que se desarrolló inicialmente fishtest, Leela no estaba disponible.
  • El uso de motores comerciales como Komodo y Houdini era / no es una opción debido a problemas de licencia.
  • El uso de otros programas puede presentar riesgos de seguridad, así como dependencias de software adicionales o requisitos de hardware que desea evitar en un entorno informático distribuido.
  • Antes de Leela, básicamente no había un motor de código abierto que fuera lo suficientemente fuerte como para obtener resultados estadísticamente significativos cuando se compara con Stockfish.

¿Estás seguro de que probar contra un tercer motor aumenta la cantidad de juegos necesarios? Parece que solo lo hace la primera vez. Por ejemplo, digamos que el tercer motor es E, y las versiones de Stockfish que se están probando son A, B y C. Jugamos A y B 20k contra E y obtenemos un puntaje. Lo que sea mejor se conserva y el más débil se rechaza. Digamos que A se mantiene. Cuando se trata de probar la versión C, ya tenemos los resultados de AE, por lo que solo necesitamos obtener resultados de CE, y lo mismo se aplica a todas las versiones futuras.
Allure

2
Incluso si siempre prueba con la misma versión de su motor de referencia (lo que lo hace muy propenso al sobreajuste), la incertidumbre estadística sobre la diferencia Elo resultante seguirá siendo mayor, porque al combinar los resultados de dos ejecuciones (por ejemplo, EloC - EloB ) también debe combinar las incertidumbres estadísticas , que generalmente aumentan la incertidumbre en un factor de sqrt (2). Para compensar eso, necesitarás ejecutar más juegos.
Fabian Fichter

7

El objetivo de la prueba de peces es probar si una nueva versión de Stockfish se ha fortalecido . La definición de más fuerte es que supera a su versión anterior.

No estoy seguro de cómo ayudaría probar cada nueva versión contra un motor como Leela. Su idea podría ser solo aceptar una nueva versión de Stockfish si funciona mejor contra Leela que la versión anterior de Stockfish. Así que ahora se garantiza que cada versión de Stockfish jugará mejor contra Leela, pero no se garantiza que sea un mejor jugador de ajedrez en general. La razón es que Stockfish podría confiar en ciertas características en el juego de Leela para ganar más juegos.

EDITAR: pensé en un ejemplo que podría ayudar aquí. Supongamos que obtuviste 1500 hace unos años, y ahora tienes 1800. Si jugaste tu mismo pasado en un partido, está claro que ganarías. Pero en aras de la discusión, es posible que su 1500-self funcione mejor contra Kasparov que su 1800 self actual. Quizás el 1500-self fue menos conservador y tomó muchos más riesgos. Esto se las arregla para vencer a Kasparov en un juego raro, mientras que tu 1800 actual perderá cada vez (sin embargo, los juegos estarían un poco más cerca en promedio).


Y al final, "Ligeramente más cerca" sería difícil de cuantificar. El juego personal es lo mejor.
Brandon_J

1
Parece semántica, pero ¿qué te hace decir que "más fuerte" se define como vencer a la versión anterior? Uno podría argumentar igualmente que "más fuerte" es el tipo que venció a Kasparov, gana el torneo y obtiene toda la gloria, no el que gana el enfrentamiento.
Allure

1
@Allure, creo que cara a cara es la medida más objetiva de "fuerza". Si A vence a B, A jugó mejor que B, ergo A es más fuerte que B. Pero si A hace un poco menos peor contra C que B contra C, ¿eso necesariamente significa A> B? ¿Qué pasa si B se desempeñó mejor contra D, E, F, G ... que A?
Ignorancia inercial

1
Pero tienes un punto. El sistema de Candidatos para el Campeonato Mundial es un gran torneo, pero solía haber partidos individuales entre jugadores. Para un gran torneo, A podría perder ante B pero aún así ganar el torneo y ser declarado "más fuerte". Sin embargo, esto se debe a que A venció a una variedad de jugadores diferentes, no solo a un jugador C. Por lo tanto, tal vez la prueba del motor podría usarse donde la versión más nueva juega con una variedad de motores diferentes, pero es más rápido y más simple probar con la versión anterior.
Ignorancia inercial

3

Estoy de acuerdo en general con @inertialignorance pero me gustaría aclarar un poco la posición.

Cuando los humanos juegan humanos, el resultado de un juego es relativamente insignificante, dada la extrema variabilidad del juego humano. (Usaré Kasparov v Deep Blue como un ejemplo de esa variabilidad; en un buen día , probablemente podría haber derrotado a Kasparov en el juego que cometió un error contra DB). Así que ignoremos a la humanidad en esto y concentrémonos en la máquina.

Las máquinas juegan a un nivel de habilidad mucho más consistente que los humanos. Por lo tanto, un solo juego significa más y una serie de juegos significa mucho. Por lo tanto, tiene sentido probar la mejora propuesta de Stockfish contra una máquina. ¿Pero por qué Stockfish?

Simplemente porque no hay forma de cuantificar "funciona mejor contra Leela" de manera significativa. Podría hacerlo mejor y aún perder. Pero, ¿cuál es el estándar para mejorar, en ese caso? ¿Cómo demuestras que jugó mejor? No puedo ver un estándar viable.

Es mucho más simple demostrar que Stockfish prime es una mejora con respecto a Stockfish original simplemente jugando un conjunto de juegos y contando los resultados.

Edward Deming sostuvo que era de suma importancia elegir la métrica correcta, porque solo sabe que mejora debido a lo que mide. Entonces haga la pregunta: ¿Cuál es el propósito del proceso? ¿Por qué propone un parche para Stockfish?

¿Es realmente el objetivo final del parche para vencer a Leela? ¿O es más bien para hacer que Stockfish juegue mejor ajedrez? Yo diría que es lo último. Vencer a Leela vendrá por sí solo si solo Stockfish continúa mejorando lo suficiente.

Sí, un camino de mejora incremental para Stockfish podría llegar a una meseta. Aun así, el único camino verificable fuera de esa meseta consistirá en hacer cambios que lo mejoren. Si un enfoque "golpea un muro", entonces una búsqueda continua de mejoras dictará otro camino. Si una ruta alternativa propuesta no puede superar la ruta actual, ¿por qué elegirla?


¿Cómo demuestras que jugó mejor? debería ser bastante sencillo, ¿no? Simplemente juegue la versión anterior 20k veces contra Leela, y la nueva versión 20k veces también, luego compare los resultados.
Allure

@Allure Pero hipotéticamente, ¿qué pasaría si Stockfish Prime venciera al viejo Stockfish, pero al viejo Stockfish le fue mejor contra Leela (y como Arlen mencionó, ¿cómo se compara qué Stockfish "mejoró" contra Leela)? ¿No te quedarías con Stockfish prime entonces? Este proceso de verificación parece defectuoso.
Ignorancia inercial

@InertialIgnorance Igualmente, ¿qué pasaría si Stockfish Prime fuera mejor contra Leela, pero no lograra vencer al viejo Stockfish, entonces no mantendría Stockfish Prime? Todo se reduce a cómo uno define "más fuerte", y no está claro para mí que "más fuerte" esté ganando el enfrentamiento.
Allure

@Allure Admito que todavía hay una razón para estar en conflicto allí, pero en ese caso parece más claro preferir Stockfish Prime. Cuando desea comparar qué dos cosas son mejores (sean políticos, atletas, etc.), lo más frecuente es que compitan entre sí de alguna manera. No ver quién lo hizo mejor contra un compañero seleccionado arbitrariamente.
Ignorancia inercial

@InertialIgnorance aún, si Karjakin hubiera ganado el Campeonato Mundial de 2016, es difícil para mí imaginar que la mayoría de la gente lo considerará el jugador más fuerte del mundo. Sí, habría vencido a Carlsen en el enfrentamiento directo, pero las victorias en torneos de Carlsen indicarían lo contrario. Del mismo modo, cuando Kasparov no era campeón mundial, la mayoría de la gente todavía lo consideraba el más fuerte.
Allure

3

Parece que hay una razón de hardware para no hacer este cambio.

El principal problema con el uso de Leela como un oponente de combate es que Leela funciona mejor en GPU. Es posible ejecutar Leela en la CPU, pero el rendimiento de Leela sufre mucho. El OP sugiere dar a Leela tiempo para compensar, pero el tiempo no funciona muy bien: el rendimiento de Leela se debilita tanto que el tiempo requerido es muy largo.

Para tener una idea de qué tan débil es Leela en la CPU, podemos mirar a Leela en la temporada 12 de TCEC, cuando no tenía soporte para GPU y se ejecutaba en la CPU. Aquí hay un juego de ejemplo jugado por Leela entonces . Si uno mira las velocidades que estaba logrando, se trata de 1-3kn / s, o 1000-3000 posiciones por segundo. Comparativamente, en la última temporada 15, cuando Leela se estaba ejecutando en GPU potentes, alcanzaría aproximadamente 50kn / s ( juego de ejemplo ). Por lo tanto, para poder probar Stockfish contra Leela en igualdad de condiciones, es necesario darle a Leela unas 25 veces más probabilidades. Si Stockfish tiene un minuto, Leela necesita 25 minutos.

Al momento de escribir este artículo, las pruebas de Fishtesting en dos controles de tiempo: 10s + 0.1s / move, y 60s + 0.6s / move (los parches que pasan la primera prueba de control de corto tiempo se promueven al más largo y se prueban nuevamente. pasar el segundo y luego convertirse en la "nueva" versión). Con una probabilidad de 25 veces, Leela necesita 250 s + 2.5 s / movimiento en el primer control de tiempo y 1500 s + 15 s / movimiento en el segundo control de tiempo. La desaceleración es tremenda; efectivamente tendríamos a Leela jugando con controles rápidos de tiempo y no con balas. El número de juegos que se pueden completar en unidades de tiempo también se reduciría en aproximadamente 25x. Fishtesting regularmente necesita decenas de miles de juegos para probar cada parche; Tardar 25 veces más en terminar cada prueba suena inaceptablemente lento.

Para agregar combustible al fuego, hasta donde yo sé, Leela tenía una red más pequeña en la temporada 12: el rendimiento de las últimas redes podría ser aún más lento en la CPU ahora.

Es posible que algún día, si Fishtesting obtiene los recursos de la GPU para probar con Leela, podría cambiar; Sin embargo, todavía no estamos en ese punto.

Editar : Lc0-CPU está jugando actualmente en TCEC. Obtiene alrededor de 5knps. Sin embargo, según algunas personas en el chat, Lc0-CPU se modifica para jugar en la CPU; sin modificaciones, es aproximadamente 80 veces más lento que en la GPU. Por lo tanto, hay un costo real de hardware para usar Lc0-CPU como oponente de prueba.


Dudo que esto suceda. Casi todos los autores de motores están probando principalmente su motor contra sí mismo y no contra otros motores (posiblemente más fuertes). Además, podría ser valioso realizar comprobaciones cruzadas mediante pruebas con otros motores, pero esta no debería ser la parte principal de las pruebas, ya que es menos eficiente.
Fabian Fichter

@FabianFichter ¿por qué es menos eficiente realizar pruebas contra otros motores?
Allure

Como describí en mi respuesta ( chess.stackexchange.com/a/24714/15415 ) es menos eficiente porque necesita más juegos (es decir, más hardware o tiempo) para alcanzar la misma precisión estadística para su medición Elo.
Fabian Fichter

0

La inercia es correcta. También debería agregar que no había un motor de código abierto fuerte antes de LC0. Tanto Komodo como Houdini tenían restricciones de licencia.


"no hay un motor fuerte de código abierto" Supongo que te refieres además de stockfish?
Brandon_J

@Brandon_J sí, eso fue lo que quise decir
SmallChess
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.