← Blog
2026-10-23

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.
Top-1, top-3 and log loss for Maia-3 23M and 79M and DSC 23M, 79M and 150M on held-out classical games. DSC-150M reaches 62.74% top-1 and 89.63% top-3, with 1.038 log loss.
Figure 1. Download SVG

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.

Standard DSC models and their FEN counterparts compared on top-1, top-3 and log loss. At each size, standard models perform slightly better; DSC-150M-FEN reaches 61.84% top-1 and 89.19% top-3, with 1.063 log loss.
Figure 2. Download SVG

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 same info ... 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 cp is win minus loss in permille, not an engine evaluation or the move’s probability.
  • likelihood: move probabilities as info string <move> (P: ...%), context and summary lines, and score-free multipv lines; one network evaluation.
  • probability-as-score: also writes probability × 10000 as score 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:

HIARCS Chess Explorer running DSC-150M after 14.a3 in Carlsen–Giri. The score column shows move probabilities: 91.32% for Na6 and 6.05% for the played cxd5.
Figure 3. Open full-size screenshot

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:

Full move and rating-aware result models before and after adding DSC-150M. Move top-1 rises from 62.19% to 66.13%, top-3 from 88.56% to 91.45%, and log loss falls from 1.077 to 0.938. Result normalized entropy falls from 0.70274 to 0.69769.
Figure 4. Download SVG

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.