Value99 β 24Γ576 scalar value net (ChessFENS)
From-scratch 98,920,577-parameter value transformer. No policy head, no recurrence, no pretrained trunk.
V(s) β [-1, 1] is side-to-move P(win) β P(loss) after the board is canonicalized so STM is White. A move is scored as βV(child) (one ply, no search).
Training
- Data:
Maxlegrec/ChessFENS0d8d4e6bbda49d42e84c3272be026701659a457c(LC0 STM WDL). One pass; this file is step 27324 / 13,989,888 positions (batch 512, microbatch 64). - Arch: 24 layers, width 576, 8 heads, SwiGLU-ish FFN inner 1584, square value mixer 128.
- Optimizer: Polar-NorMuon (2D) + AdamW (norms),
torch.compile, bf16, gradient checkpointing. - Not Stockfish official WDL. LC0 and SF19 WDL are different teachers.
Play strength (one-ply)
Search-free argmax of βV(successor) vs Stockfish 19 UCI_LimitStrength. Step 22000 screen: ~1320 UCI_Elo, bracketed 1320β1450 (16 games/level, 8 openings Γ both colors). Not FIDE / Lichess Elo.
Files
latest.ptβ inference weights + config at step 27324 (no optimizer).model_config.jsonchess_value99.pyβ architecture +pack_board/score_legal_moves
import torch
from chess_value99 import ValueConfig, ValueTransformer, score_legal_moves
ckpt = torch.load("latest.pt", map_location="cpu", weights_only=False)
model = ValueTransformer(ValueConfig(**ckpt["config"]))
model.load_state_dict(ckpt["model"])
model.eval()
Paused mid-run to start ChessBot PPO. Not a finished epoch.
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support