After getting a complete spanking in Santiago de Compostela with my homage the the original technology chess programs (https://www.chessprogramming.org/Tech), I've returned home licking my wounds, but also inspired to to create a new chess engine focused on performance rather than romantic historical accuracy! Of course this now means implementing a NNUE - rather than another material-only - evaluation function.
The idea of initially training the network on positionsl evaluated by Stockfish, LC0, or any other engine (even my own), doesn't inspire me very mush. However, the idea of following in AlphaZero's footsteps, and starting tabula rasa really does!
I'm fascinated by David Carteau's memberlist.php?mode=viewprofile&u=7470 experiments and positive results with Orion https://www.orionchess.com/, but would love some thoughts and advice on how I can best approach this.
Not having 5000 TPUs to work with, I feel that at least two things are essential:
- As simple a network as possble (768->(32x2)->1 ???)
- Higher quality labels, even working with just 0, 0.5, and 1
For the second, it occurs to me that, in the extreme, the starting position adds nothing to the training data, whereas positions near the end of the game add a lot, and positions in the middle game, somewhere inbetween. For instance, I'd imagine that the labels for most rook and pawn endgames could be of very high quality (mostly 0.5).
Has anyone considered "tapering" the contributions of the training positions so more weight is given to positions near the end of the game, whether this be athe start of a stunning, game-winning combination in the middlegame (label=1 or -1), or a position heading towards an insufficient-material draw in an endgame.
Many thanks for your thoughts
John