ChessDS DSC – new neural models for human GM play
I’m excited to be releasing some models into the wild today, for the first time! Recently I noticed that Maia-3, the neural “Chessformer” models trained on Lichess data across a broad range of ratings, was able to provide a big lift to my move prediction models. So I made my own neural models, re-implementing and extending the Chessformer architecture to focus on human GM play. I’m thrilled with the results, and making these brand new models freely available.
I’m calling them “DSC,” which is my boring name for “ChessDS Chessformer.” You can go get them at the following links. They are free to use under GPL-3.0-or-later (code) and CC BY 4.0 (weights). Have fun! If you find these useful, simply a public thanks and a backlink to chessds.com works.
Accuracy
Since Maia-3 targets a broader chess-playing population, it’s not surprising to see much better performance from an approach that tunes for higher-level play. Pre-training still uses a mountain of Lichess games, but focused on higher ratings and longer time controls. And fine-tuning is done against the same 2400+ classical chess population my other models target.
In addition, there is a larger size model now at 150M parameters. Increasing model size is still showing gains here; these are not the limit. The following figure shows three measures of move prediction accuracy on a holdout set of classical games:
- Top-1: The % of the time the move played was the top predicted move by the model.
- Top-3: The % of the time the move played was in the model’s top three choices.
- Log loss: Lower is better here. This measures how much probability the model assigned to the played move, penalizing heavily when this probability is very low.

Versions
The standard models leverage a bit of the game’s history in terms of recent board positions to improve predictions. I also trained versions that are optimized to run without considering previous positions, and labeled these “FEN” models. They give up a little performance, but not much. This is like running without the --use-uci-history flag in Maia.

Options and UCI
Generally I’ve tried to match Maia-3’s implementation, although there are a few added options. The GitHub README is a good resource. The UCI engines I hope will work in any GUI you use, and have the following choices under the “OutputMode” option:
likelihood-wdl(default): move probabilities plus the sameinfo ... multipv N ... score cp ... wdl ...line format the Maia-3 engine sends. The values come from DSC’s own auxiliary WDL head after each candidate move, viewed from the mover’s side.score cpis win minus loss in permille, not an engine evaluation or the move’s probability.likelihood: move probabilities asinfo string <move> (P: ...%), context and summary lines, and score-freemultipvlines; one network evaluation.probability-as-score: also writes probability × 10000 asscore cp, negative for Black to move, so GUIs displaying White’s perspective show +41.73 for 41.73%. For viewing: evaluation graphs and adjudication would treat it as an evaluation.
The default option shows a position “eval” which the DSC models also produce. But the main point of this model is to produce the move predictions, which is why I created the last option, and honestly I recommend it. Here it is in action for me using HIARCS Chess Explorer; it shows the probability as a positive %. The played 14…cxd5 was assigned a 6.05% probability:

Building on it at ChessDS
These models are ultimately just producing features for the models that I’ll be using on the site. I’ve been re-training those now, and seeing big gains from adding DSC outputs as features, both for move prediction and result prediction:

I’ve been holding off on further analysis while all this cooks, and I’m happy to be almost there. Soon the full archive will be re-scored, and then I’ll be adding a new tranche of recent games to support updated player performance measurement. Maybe even supported by a yet-larger DSC model.