Skip to main content
All projects
RDTChess — preview

RDTChess

  • Chess
  • PyTorch
  • Policy Network
  • Value Network
  • ResNet
  • Recurrent Depth
  • Behavioral Cloning
  • From-Scratch

An 11.05M-parameter residual network (128 channels × 8 blocks, recurrent depth ×2, gated memory, Squeeze-and-Excitation) that plays chess in one forward pass — no search, no MCTS, no opening book. This is RDTChess2, the model currently live on the Lichess bot. Trained from scratch on a single GTX 1080 Ti by behavioral cloning on ≈10.99M Lichess games (both players ≥1800 Elo), seeing 801,295,726 positions. 61.5% first-move accuracy on 23,845 Lichess puzzles, but the network still executes tactics rather than initiating them: the quiet entry move remains the weak point, at 33.3% in hard positions versus ~90% on the final step of a forcing sequence.

Key figures

11,05M
Parameters
~11M
Training games
801,3M
Positions seen
61,5%
Puzzles (first move)

How it works

Canonical frame: always "White, moving forward"

When it's Black's turn, every square is mirrored (square ^ 56) and the piece colours swapped. Result: the value head always answers a well-posed question — "how good is this for the player to move" — and a position and its colour-reversed twin share one representation, so every game trains both colours at once.

One forward pass, zero search

No MCTS, no opening book, no endgame tablebase. The policy head emits raw logits (not a softmax), so illegal moves can be masked before normalising — softmaxing over all 4096 actions and zeroing ~99% of them would waste most of a network this size's capacity.

Recurrent depth ×2, a learned gate, and whole-board vision

The 128×8 residual tower is applied twice per move, sharing the same convolution weights both times (effective depth ×2 at no extra parameter cost). A learned gate decides how much of the previous state to keep versus overwrite (~88% kept by default). Squeeze-and-Excitation adds, in every block, a per-channel scale and bias computed from the whole board at once — long-range interaction (e.g. a1–h8) without extra convolutional depth.

Four yardsticks, three agree, one stays noisy

Compared to the same architecture without recurrence, gate or SE, same data, same seed: ahead on puzzles (8/8 slices), on Maia-1100/1500/1900 (23/24), and on the full round-robin (7/7, 27,300 games) — never inverted on these three instruments. Against a depth-2 minimax, which searches rather than imitates: 4/8, no stable direction. No absolute Elo is claimed.

It executes tactics, it doesn't initiate them

On the same 23,845 puzzles: 61.5% first-move accuracy, 42.5% on the entire line. Accuracy on the last move of a forcing sequence still sits around 90%, but the quiet (non-forcing) entry move drops to 33.3% in hard positions (2400+), versus 59.9% for a capture — nearly identical to the plain architecture's 32.8%. Recurrence, gating and SE improve accuracy everywhere; they don't change what kind of move stays hard to initiate.

One seed, one run

Every number comes from a single seed (123), extended sequentially across 8 data slices via --resume. The 1.38M-game starting point was confirmed on three independent seeds before this extension — the extension itself was not. The model has never played a rated pool, so no absolute Elo is claimed.

Other projects