Perché Fishtest mette alla prova lo stoccafisso contro se stesso, non con altri motori?


11

Quando capisco il cosiddetto Fishtesting , le persone scrivono patch, quindi provano le patch con la versione corrente di Stockfish. Se la nuova versione funziona meglio, viene promossa come la versione principale; altrimenti viene rifiutato.

Domanda: perché testare con l'attuale versione di Stoccafisso? Ha funzionato in passato e lo stoccafisso attuale è molto più forte dello stoccafisso di due anni. Tuttavia, possiamo anche vedere limiti a questo approccio. Sebbene lo stoccafisso sia ora in grado di distruggere completamente altri motori tradizionali, recentemente ha perso anche la superfinale TCEC S15 contro Leela. Pertanto, perché non testare ogni nuova versione contro Leela?

La risposta ovvia è che le risorse di Fishtesting provengono dalle CPU e Leela è terribile nella CPU. Tuttavia, ciò non dovrebbe essere fatale: si potrebbe semplicemente dare a Leela più tempo, ad esempio con Stockfish in esecuzione su 10s per partita, dare a Leela 100s per partita o qualunque sia il tempo necessario per ottenere il rapporto Leela con il rapporto nella superfinale. Questo rallenterà sicuramente Fishtesting, ma se porta a un motore in grado di battere Leela in una partita, potrebbe comunque valerne la pena.

Risposte:


4

Prima di tutto, ciò che non risulta dalle altre risposte è che, in linea di principio, puoi usare qualsiasi avversario (con una forza di gioco costante) per confrontare la forza di gioco di due versioni di un programma.

Tuttavia, ci sono diversi buoni motivi per testare le versioni direttamente l'una contro l'altra, indipendentemente dal fatto che tu stia sviluppando Stoccafisso o qualsiasi altro motore:

  • Il confronto della forza di gioco delle entità che giocano a scacchi di solito non soddisfa la transitività, cioè se A> B e B> C, A <C è ancora possibile. Pertanto, fintanto che un confronto con un ampio gruppo di avversari (al fine di calcolare la media del problema della transitività) non è fattibile, un confronto diretto dovrebbe essere la misura più affidabile, anche se ovviamente puoi avere lo stesso problema per tre versioni di un programma unico.
  • Effettuando un confronto diretto, riduci il numero richiesto di giochi nei test, perché devi solo eseguire una partita anziché due e allo stesso tempo ottieni barre di errore più piccole per la differenza di forza di gioco.
  • Testare contro un avversario di (quasi) uguale forza massimizza la sensibilità statistica di un singolo risultato di gioco, risparmiando di nuovo i costi hardware. Se la differenza nella forza di gioco è molto alta, l'informazione / entropia di una singola partita è molto bassa.

Inoltre, nel caso del fishtest / stoccafisso ci sono diversi motivi concreti per cui la scelta di un confronto diretto è stata la scelta di principio:

  • All'epoca in cui inizialmente era stato sviluppato il fishtest, Leela non era disponibile.
  • L'uso di motori commerciali come Komodo e Houdini non era / non è un'opzione a causa di problemi di licenza.
  • L'uso di altri programmi può comportare rischi per la sicurezza, nonché dipendenze software aggiuntive o requisiti hardware che si desidera evitare in un ambiente di elaborazione distribuito.
  • Prima di Leela, praticamente non esisteva un motore open source sufficientemente potente da ottenere risultati statisticamente significativi quando si combinava con lo stoccafisso.

Sei sicuro che il test contro un terzo motore aumenta il numero di giochi richiesti? Sembra che lo faccia solo la prima volta. Ad esempio, supponiamo che il terzo motore sia E, e le versioni di Stoccafisso che vengono provate sono A, B e C. Giochiamo A e B 20k volte contro E e otteniamo un punteggio. Qualunque cosa faccia meglio viene mantenuta e quella più debole respinta. Di 'che A è tenuto. Quando si tratta di testare la versione C, abbiamo già i risultati AE, quindi abbiamo solo bisogno di ottenere risultati CE, e lo stesso vale per tutte le versioni future.
Allure il

2
Anche se testerai sempre contro la stessa versione del tuo motore di riferimento (il che lo rende molto incline al overfitting), l'incertezza statistica sulla risultante differenza di Elo sarà ancora maggiore, perché combinando i risultati di due corse (ad esempio, EloC - EloB ) è inoltre necessario combinare le incertezze statistiche , che di solito aumentano l'incertezza di un fattore di sqrt (2). Per compensare ciò, è necessario eseguire più giochi.
Fabian Fichter,

7

Il punto del test dei pesci è verificare se una versione più recente di Stoccafisso è diventata più forte . La definizione di più forte è che sta battendo la sua versione precedente.

Non sono sicuro di come sarebbe utile testare ogni nuova versione su un motore come Leela. La tua idea potrebbe essere quella di accettare una nuova versione di Stoccafisso solo se funziona meglio contro Leela rispetto alla precedente versione di Stoccafisso. Quindi ora ogni versione di Stockfish è garantita per giocare meglio contro Leela, ma non è garantita per essere una migliore giocatrice di scacchi in generale. Il motivo è che lo stoccafisso potrebbe fare affidamento su alcune caratteristiche del gioco di Leela per vincere più partite.

EDIT - Ho pensato a un esempio che potrebbe aiutare qui. Supponiamo che tu sia stato valutato 1500 qualche anno fa, e ora hai 1800 anni. Se hai giocato a te stesso in una partita, è chiaro che vinceresti. Ma per amor di discussione è possibile che il tuo sé del 1500 si comportasse meglio contro Kasparov del tuo attuale sé del 1800. Forse il sé del 1500 era meno conservatore e correva molti più rischi. Questo riesce a battere Kasparov in un gioco raro, mentre il tuo sé del 1800 attuale perderebbe ogni volta (eppure i giochi sarebbero leggermente più vicini in media).


E alla fine, "Leggermente più vicino" sarebbe difficile da quantificare. L'auto-gioco è il migliore.
Brandon_J,

1
Sembra semantica, ma cosa ti fa dire "più forte" è definito come battere la versione precedente? Si potrebbe anche sostenere che "più forte" è il ragazzo che ha battuto Kasparov, vince il torneo e ottiene tutta la gloria, non quello che vince il testa a testa.
Allure

1
@Allure Penso che testa a testa sia solo la misura più obiettiva di "forza". Se A batte B, A gioca meglio di B, ergo A è più forte di B. Ma se A fa leggermente meno peggio contro C che B ha fatto contro C, significa necessariamente A> B? E se B avesse ottenuto risultati migliori contro D, E, F, G ... rispetto ad A?
Inertial Ignorance

1
Ma hai ragione. Il sistema dei candidati per il Campionato mondiale è un grande torneo, ma c'erano partite individuali tra giocatori. Per un grande torneo A potrebbe perdere contro B ma vincere comunque il torneo ed essere dichiarato "più forte". Tuttavia, questo è dovuto al fatto che A ha battuto una varietà di giocatori diversi, non solo un giocatore C. Quindi forse il test del motore potrebbe essere usato laddove la versione più recente riproduce una varietà di motori diversi, ma è più veloce e più semplice testare solo con la versione precedente.
Inertial Ignorance

3

Concordo principalmente con @inertialignorance ma vorrei chiarire un po 'la posizione.

Quando umano gioca umano, il risultato di un gioco è relativamente insignificante, data l'estrema variabilità del gioco umano. (Userò Kasparov v Deep Blue come esempio di quella variabilità - in una buona giornata probabilmente avrei potuto battere Kasparov nel gioco in cui si è sbagliato contro DB.) Quindi ignoriamo l'umanità in questo e concentriamoci sulla macchina.

Le macchine giocano a un livello di abilità molto più coerente rispetto agli umani. Quindi un singolo gioco significa di più e una serie di giochi significa molto. Quindi ha senso testare il miglioramento proposto dello stoccafisso su una macchina. Ma perché stoccafisso?

Semplicemente perché non c'è modo di quantificare "fa meglio contro Leela" in modo significativo. Potrebbe fare di meglio e perdere ancora. Ma qual è lo standard per il meglio, in quel caso? Come si dimostra che ha giocato meglio? Non riesco a vedere uno standard praticabile.

È molto più semplice provare che Stockfish prime è un miglioramento rispetto all'originale di Stockfish semplicemente giocando una serie di giochi e contando i risultati.

Edward Deming ha affermato che era di primaria importanza scegliere la metrica corretta, perché sai solo di migliorare grazie a ciò che misuri. Quindi fai la domanda: qual è lo scopo del processo? Perché stai proponendo una patch per stoccafisso?

È davvero l'obiettivo finale della patch battere Leela? O è piuttosto quello di far giocare gli scacchi allo stoccafisso? Direi che è quest'ultimo. Battere Leela arriverà da solo se solo lo stoccafisso continuerà a migliorare abbastanza.

Sì, un percorso di miglioramento incrementale per lo stoccafisso potrebbe arrivare a un altopiano. Anche così, l'unico percorso verificabile fuori da quell'altopiano risiederà nel apportare modifiche ad esso che lo rendono migliore. Se un approccio "colpisce un muro", allora una continua ricerca di miglioramenti detterà un altro percorso. Se un percorso alternativo proposto non può battere il percorso corrente, perché sceglierlo?


Come si dimostra che ha giocato meglio? dovrebbe essere piuttosto semplice, no? Basta giocare la versione precedente 20k volte contro Leela e anche la nuova versione 20k volte, quindi confrontare i risultati.
Allure l'

@Allure Ma ipoteticamente, se lo Stockfish Prime battesse il vecchio stoccafisso, ma il vecchio stoccafisso facesse meglio contro Leela (e, come ha detto Arlen, come si fa a confrontare quale stoccafisso "ha fatto meglio" contro Leela). Allora non manterresti lo stoccafisso? Questo processo di verifica sembra imperfetto.
Ignoranza inerziale

@InertialIgnorance Allo stesso modo, cosa succederebbe se Stockfish Prime facesse meglio contro Leela, ma non riuscisse a battere il vecchio stoccafisso, allora non manterresti Stockfish Prime? Dipende da come si definisce "più forte", e non è chiaro per me che "più forte" sta vincendo il testa a testa.
Allure il

@Allure Devo ammettere che c'è ancora un motivo per essere in conflitto lì, ma in quel caso sembra più chiaro preferire Stockfish Prime. Quando vuoi confrontare quali sono le due cose migliori (siano essi politici, atleti, ecc.), Molto spesso le fai competere l'una contro l'altra in qualche modo. Non vedere chi ha fatto meglio contro un pari arbitrariamente selezionato.
Ignoranza inerziale

@InertialIgnorance ancora, se Karjakin avesse vinto i Mondiali 2016, è difficile per me immaginare che la maggior parte delle persone lo considererà il giocatore più forte del mondo. Sì, avrebbe battuto Carlsen nella partita testa a testa, ma le vittorie nei tornei di Carlsen avrebbero indicato il contrario. Allo stesso modo, quando Kasparov non era campione del mondo, la maggior parte delle persone lo considerava ancora il più forte.
Allure il

3

Sembra esserci un motivo hardware per non apportare questa modifica.

Il problema principale nell'uso di Leela come avversario sparring è che Leela funziona meglio con la GPU. È possibile eseguire Leela su CPU, ma le prestazioni di Leela ne soffrono molto. L'OP suggerisce di dare a Leela le probabilità di tempo per compensare, ma le probabilità di tempo non funzionano molto bene: le prestazioni di Leela si indeboliscono così tanto che le probabilità di tempo richieste sono oppressivamente lunghe.

Per avere un'idea di quanto Leela sia più debole sulla CPU, possiamo guardare Leela nella stagione 12 di TCEC, quando non aveva il supporto GPU e funzionava su CPU. Ecco un esempio di gioco giocato da Leela allora . Se si guarda alle velocità che stava raggiungendo, è di circa 1-3kn / s, o 1000-3000 posizioni al secondo. Comparativamente, nell'ultima stagione 15, quando Leela era in esecuzione su potenti GPU, avrebbe raggiunto circa 50kn / s ( esempio di gioco ). Pertanto, per poter testare lo stoccafisso contro Leela a parità di condizioni, è necessario assegnare a Leela circa 25 volte la probabilità. Se lo stoccafisso ha un minuto, Leela ha bisogno di 25 minuti.

Al momento della stesura, i test di Fishtest su due controlli temporali: 10 secondi + 0,1 secondi / mossa e 60 secondi + 0,6 secondi / mossa (le patch che superano il primo test di controllo a breve termine vengono promosse a quella più lunga e testate di nuovo. passare il secondo quindi diventare la "nuova" versione). Con una probabilità di 25 volte, Leela ha bisogno di 250 secondi + 2,5 secondi / movimento nel primo controllo del tempo e 1500 secondi + 15 secondi / movimento nel secondo controllo del tempo. Il rallentamento è enorme; avremmo effettivamente fatto giocare Leela a rapidi controlli di tempo e non a proiettile. Anche il numero di giochi che possono essere completati in unità di tempo diminuirà di circa 25 volte. Fishtesting ha bisogno regolarmente di decine di migliaia di giochi per testare ogni patch; impiegando 25 volte il tempo necessario per terminare ogni test risulta inaccettabilmente lento.

Per aggiungere carburante al fuoco, per quanto ne so, Leela aveva una rete più piccola nella stagione 12 - le prestazioni delle ultime reti potrebbero essere ancora più lente sulla CPU ora.

È possibile che un giorno, se Fishtesting ottiene le risorse della GPU per testare con Leela, potrebbe cambiare; tuttavia non siamo ancora a quel punto.

Modifica : Lc0-CPU sta giocando al TCEC. Ottiene circa 5knps. Secondo alcune persone nella chat, Lc0-CPU viene modificata per giocare su CPU; non modificato, è circa 80 volte più lento rispetto alla GPU. Pertanto, l'utilizzo di CPU Lc0 come test avversario comporta un costo hardware reale.


Dubito che ciò accadrà. Quasi tutti gli autori di motori stanno principalmente testando il proprio motore contro se stesso e non contro altri (forse più potenti) motori. Inoltre, potrebbe essere utile effettuare controlli incrociati eseguendo test su altri motori, ma questa non dovrebbe essere la parte principale dei test, poiché è meno efficiente.
Fabian Fichter,

@FabianFichter perché è meno efficiente testare con altri motori?
Allure

Come ho descritto nella mia risposta ( chess.stackexchange.com/a/24714/15415 ) è meno efficiente perché hai bisogno di più giochi (cioè più hardware o tempo) per raggiungere la stessa precisione statistica per la tua misurazione Elo.
Fabian Fichter,

0

Inerziale è corretto Vorrei anche aggiungere che non esisteva un potente motore open source prima di LC0. Sia Komodo che Houdini avevano restrizioni di licenza.


"nessun potente motore open source" suppongo che intendi oltre allo stoccafisso?
Brandon_J,

@Brandon_J sì, era quello che volevo dire
SmallChess l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.