VoxelShogi Transformer-S supervised baseline
An experimental supervised policy/value model for watching AI versus AI three-dimensional shogi. This first baseline reproduces shallow search teachers; playing strength must be judged from the fixed capped evaluation below. No wins were observed for the trained/converted models in these capped cohorts.
Training and provenance
Training and original baseline/Torch evaluations: https://github.com/ayutaz/voxelshogi/tree/874aed9ac28c9e50e178c2dda706941b2d3294da . Export and new FP32/FP16-weight/INT8 evaluations: https://github.com/ayutaz/voxelshogi/tree/5415899c445b95c5ce19d3a79c1ebb55f48bf642 . Manifest export_provenance binds these distinct immutable roles; original reports retain their actual source commits. Regenerated ONNX file hashes differ from the initial release, so every newly exported format was independently evaluated on the same3,589 test teachers and60 paired games; no old ONNX result was relabeled for new bytes. No retraining or relabeling of the selected checkpoint occurred. Rules: voxelshogi-standard-v1 (one king per side), features: 729 cells Γ43 float32 channels, Policy:1,067,985 canonical actions, Value: side-to-move scalar tanh. Architecture: six pre-norm full-attention Transformer blocks, width256,8 heads,FFN1024,tanh-approximate GELU,learned absolute positions,rank64 from/to policy with promotion and seven drop labels,mean-pooled Value MLP256β64β1. Parameters:5,021,064. Fixed seed314159; FP32 AdamW; batch4;3 epochs;learning rate0.0003;weight decay0.01;gradient clip1.0;deterministic algorithms;TF32 disabled. Python3.14.9, torch2.14.1+cu130, CUDA13.0. Actual hardware and dependency versions are pinned in manifest.json.
Data attribution: ayutaz and VoxelShogi contributors, VoxelShogi Synthetic v1, CC-BY-4.0, https://huggingface.co/datasets/voxelshogi/voxelshogi-synthetic-v1 . Input revision 6e7fb29d2469b56a895042fbb089d86e7b4d074f, production-64. Of 113,321 eligible positions,36,894 nonduplicate search teachers split into train29,884/val3,421/test3,589. The training target is the completed engine-legal best move and tanh(search score/1000), not observed game-winning probability. Teachers are depth2 except one depth1 teacher. Raw played/random moves and duplicate positions are not substituted for best-move labels. Only train updates weights; val selects the earliest lowest-loss epoch; test is used only for fixed final/conversion evaluation.
Selected progress: {'best_val_loss': 0.8743949341787136, 'epoch': 3, 'examples': 89652, 'next_batch': 0, 'step': 22413}. Validation loss 6.19951194 β 0.874394934. The same 2,048-example train probe loss changed 6.28968534 β 0.789803011; its ID-order SHA-256 is eadba8d6d93b6edaa4579e6ae9f1f36afef93cf4dfc72bb4605f919bb231810a. Training deliberately stopped at1,000 updates and resumed with new model/optimizer instances. Portable restart state is distributed separately at https://huggingface.co/voxelshogi/voxelshogi-transformer-s-training-state .
Evaluation
The fixed test has3,589 search teachers. Each model plays40 Random and20 M1-search games using paired8-ply openings and swapped colors. Seeds7000β7019/8000β8009;M1 depth2/nodes10,000/TT4096;no time-based search limit;canonical-action tie breaks;maximum256 plies. Cutoffs remain separate from draws/losses. Training/selection did not use these results. Paired95% bootstrap intervals use10,000 resamples,seed314159; a zero observed capped-win statistic is not a bound on unlimited-game win probability. The source evaluation contract and evaluation.json retain the exact protocol.
| Model | Test Policy Top-1 | Top-5 | Value MAE | Value MSE | Random40 | M1 search20 |
|---|---|---|---|---|---|---|
| eval-baseline | 1.950404% | 9.947060% | 0.380065 | 0.230918 | 0 W / 0 L / 0 D / 40 cutoff; paired 95% interval [0.0, 0.0] | 0 W / 0 L / 18 D / 2 cutoff; paired 95% interval [0.0, 0.0] |
| eval-torch | 75.592087% | 96.572862% | 0.113773 | 0.0337401 | 0 W / 0 L / 0 D / 40 cutoff; paired 95% interval [0.0, 0.0] | 0 W / 3 L / 9 D / 8 cutoff; paired 95% interval [0.0, 0.0] |
| eval-fp32 | 75.592087% | 96.572862% | 0.113773 | 0.0337401 | 0 W / 0 L / 0 D / 40 cutoff; paired 95% interval [0.0, 0.0] | 0 W / 3 L / 9 D / 8 cutoff; paired 95% interval [0.0, 0.0] |
| eval-fp16 | 75.592087% | 96.572862% | 0.113769 | 0.0337383 | 0 W / 0 L / 0 D / 40 cutoff; paired 95% interval [0.0, 0.0] | 0 W / 3 L / 9 D / 8 cutoff; paired 95% interval [0.0, 0.0] |
| eval-int8 | 75.536361% | 96.572862% | 0.113128 | 0.0336749 | 0 W / 0 L / 0 D / 40 cutoff; paired 95% interval [0.0, 0.0] | 0 W / 4 L / 9 D / 7 cutoff; paired 95% interval [0.0, 0.0] |
Legal action selection rates on the same fixed test: eval-baseline: raw=0.000000%, masked=100.000000%; eval-torch: raw=0.167177%, masked=100.000000%; eval-fp32: raw=0.167177%, masked=100.000000%; eval-fp16: raw=0.167177%, masked=100.000000%; eval-int8: raw=0.167177%, masked=100.000000%.
No playing-strength improvement is guaranteed by teacher accuracy. Synthetic games cover only64 plies, so long-game/endgame distribution is limited. Value estimates imitate shallow material/search scores, not calibrated outcome probabilities. The legal mask is mandatory; raw unconstrained argmax is usually illegal. This is a research baseline for AI observation and optional human versus AI; human versus human/multiplayer is outside scope.
| Format | Bytes | SHA-256 |
|---|---|---|
| fp32 | 20,461,391 | 8bd7bd91e38d7319f72b87495f63f0a86a85f3759d22913f787d963834b92e63 |
| fp16 | 10,463,104 | b22a7fd9a5e31a15cc6fb15cca76b945bed3cac6ce199b62294c885840f4dd0a |
| int8 | 5,467,835 | 12b225402ce32d483e44ba766d7c695e08698408d310e8f88197a8a2ef92deb9 |
| Format / input | Policy max absolute change from FP32 | Mean absolute change | Raw argmax equal | Value max absolute change |
|---|---|---|---|---|
| fp16 / initial-b | 0.00501441956 | 0.000416207115 | True | 1.81049109e-05 |
| fp16 / after-one-w | 0.00399589539 | 0.000353943913 | True | 4.93228436e-05 |
| fp16 / mate-in-one-b | 0.00443649292 | 0.000327776644 | True | 7.74860382e-06 |
| fp16 / material-b | 0.00295448303 | 0.000242651619 | True | 9.89437103e-05 |
| int8 / initial-b | 0.469005585 | 0.0505402148 | True | 0.000533208251 |
| int8 / after-one-w | 0.562758446 | 0.0329860745 | True | 0.00175781548 |
| int8 / mate-in-one-b | 0.259423256 | 0.0287731671 | True | 0.00207096338 |
| int8 / material-b | 0.153607905 | 0.0167771869 | True | 0.019259274 |
Inference
Acquire this complete folder after manual access approval, then select it in https://voxelshogi.yousan-apps.workers.dev using the trained-model loader. Choose the actual FP32,FP16,or INT8-weight variant for each AI and WASM/WebGPU execution. The app hashes files and validates all four same-format references in its dedicated Worker before allowing legal-masked choices. Unsupported devices/formats show a failure; there is no hidden substitute model. No HF credential is embedded in the app. Local files remain on the user's device and are not uploaded to the site.
FP16 here means FP16 weight storage with float32 activations and compute: rank>=2 finite weights are rounded to float16 and explicitly cast back to float32 for execution; biases remain float32. The app labels this as FP16οΌιγΏοΌ. It does not require shader-f16. The earlier mixed-compute FP16 artifact e8827283e8629983b7f25af5c89afc972904e99014ee0fa5cf2b84573214002d remains in historical revision 94278f11df547863b1f98283b4b19a4a5ff88998; that artifact failed strict browser numerical checks and is not the format selected by this release. Its original fixed Top-1 was75.5920869%, Value MSE0.0337415378, Random40cutoffs and M1 0W/2L/9D/9cutoffs. Original failure evidence and a normal-configuration physical NVIDIA portability probe are in docs/experiments/m6-fp16-portability-diagnosis.json; numerical thresholds were not widened. INT8 quantizes rank>=2 weights symmetrically per tensor, round-ties-to-even, zero point0, and dequantizes to float32; activations/compute are float32. ORT INT8 optimization is basic to avoid an extra approximate kernel. Weight compression does not guarantee faster compute or reduced execution memory. Converted-model changes are shown above and evaluated separately from same-format runtime errors.
The versioned trained numeric contract is voxelshogi-trained-numeric-v1: every finite output must satisfy abs(actual-reference)<=atol+rtol*abs(reference). FP32/INT8 Policy uses atol1e-4/rtol1e-4; Value uses1e-5/1e-4;FP16 uses1e-3/1e-2 for both. This follows a recorded FP64 diagnosis after an initial failed export, not a silent rewrite of that failure. The M3 untrained model retains its original limits. See https://github.com/ayutaz/voxelshogi/blob/5415899c445b95c5ce19d3a79c1ebb55f48bf642/docs/M6_MAIN.md .
Candidate-catalog measurements on the public application commit 47d27b32dbf5bf21a3ea5eb99d59529e7b5955c1, Chromium 156.0.8078.4, physical renderer ANGLE (NVIDIA, Vulkan 1.4.312 (NVIDIA NVIDIA GeForce RTX 5090 (0x00002B85)), NVIDIA). The exact ONNX hashes below were measured; candidate metadata interception was private and is not final public-catalog proof. Report SHA-256: 7199ff1d6a699dca26e6a8ffc4c8a550d07ce4bc50fd132ccb21100f069d2a2d. The final deployed-catalog verification is recorded separately in the project repository.
| 3D | Backend | Format | Fixed input | Median inference ms | P95 inference ms | Status |
|---|---|---|---|---|---|---|
| False | wasm | fp32 | initial-b | 253.6000 | 255.7000 | done |
| False | wasm | fp32 | after-one-w | 253.8000 | 256.0000 | done |
| False | wasm | fp32 | mate-in-one-b | 253.3500 | 253.9000 | done |
| False | wasm | fp32 | material-b | 255.1000 | 257.1000 | done |
| False | wasm | fp16 | initial-b | 253.5500 | 254.3000 | done |
| False | wasm | fp16 | after-one-w | 256.9000 | 259.0000 | done |
| False | wasm | fp16 | mate-in-one-b | 255.4500 | 257.2000 | done |
| False | wasm | fp16 | material-b | 258.3000 | 259.4000 | done |
| False | wasm | int8 | initial-b | 262.8000 | 272.1000 | done |
| False | wasm | int8 | after-one-w | 260.4000 | 268.9000 | done |
| False | wasm | int8 | mate-in-one-b | 259.4500 | 267.4000 | done |
| False | wasm | int8 | material-b | 260.9000 | 269.1000 | done |
| False | webgpu | fp32 | initial-b | 8.4000 | 11.0000 | done |
| False | webgpu | fp32 | after-one-w | 7.7500 | 15.7000 | done |
| False | webgpu | fp32 | mate-in-one-b | 8.7000 | 20.4000 | done |
| False | webgpu | fp32 | material-b | 7.9000 | 9.1000 | done |
| False | webgpu | fp16 | initial-b | 8.0500 | 12.8000 | done |
| False | webgpu | fp16 | after-one-w | 8.0500 | 9.7000 | done |
| False | webgpu | fp16 | mate-in-one-b | 7.7000 | 10.2000 | done |
| False | webgpu | fp16 | material-b | 8.4000 | 15.1000 | done |
| False | webgpu | int8 | initial-b | 7.9500 | 10.3000 | done |
| False | webgpu | int8 | after-one-w | 8.7000 | 11.7000 | done |
| False | webgpu | int8 | mate-in-one-b | 8.6500 | 16.1000 | done |
| False | webgpu | int8 | material-b | 8.4000 | 10.3000 | done |
| True | wasm | fp32 | initial-b | 254.2000 | 255.8000 | done |
| True | wasm | fp32 | after-one-w | 256.0000 | 258.1000 | done |
| True | wasm | fp32 | mate-in-one-b | 253.3000 | 257.5000 | done |
| True | wasm | fp32 | material-b | 255.5000 | 257.7000 | done |
| True | wasm | fp16 | initial-b | 253.9000 | 256.8000 | done |
| True | wasm | fp16 | after-one-w | 254.3000 | 257.8000 | done |
| True | wasm | fp16 | mate-in-one-b | 252.7500 | 254.9000 | done |
| True | wasm | fp16 | material-b | 255.4000 | 257.5000 | done |
| True | wasm | int8 | initial-b | 260.4500 | 268.3000 | done |
| True | wasm | int8 | after-one-w | 260.9000 | 268.9000 | done |
| True | wasm | int8 | mate-in-one-b | 260.7000 | 267.6000 | done |
| True | wasm | int8 | material-b | 262.1000 | 269.6000 | done |
| True | webgpu | fp32 | initial-b | 8.6000 | 16.6000 | done |
| True | webgpu | fp32 | after-one-w | 8.1000 | 10.6000 | done |
| True | webgpu | fp32 | mate-in-one-b | 9.3000 | 13.2000 | done |
| True | webgpu | fp32 | material-b | 8.8000 | 12.6000 | done |
| True | webgpu | fp16 | initial-b | 9.4000 | 13.6000 | done |
| True | webgpu | fp16 | after-one-w | 9.6500 | 13.8000 | done |
| True | webgpu | fp16 | mate-in-one-b | 9.3000 | 12.0000 | done |
| True | webgpu | fp16 | material-b | 8.9500 | 12.3000 | done |
| True | webgpu | int8 | initial-b | 9.3000 | 11.5000 | done |
| True | webgpu | int8 | after-one-w | 9.0000 | 11.6000 | done |
| True | webgpu | int8 | mate-in-one-b | 8.8500 | 11.5000 | done |
| True | webgpu | int8 | material-b | 9.9000 | 13.4000 | done |
Measurement driver commit: f279649cc95ab76ae88ab86371a5f53c3552b991 (its fixed Node24 CI and all required/related checks passed before acceptance). The prior candidate passed numerical outputs and format switches but failed the required WASM trusted-camera observation; that complete=false record is retained separately. The driver now starts interaction after real measured requests are pending; the acceptance criteria and model bytes are unchanged.
Cold context/Worker measurements, 10 warmups plus 30 measured same-session requests, both 20-format-switch groups, dedicated browser RSS and main JS heap are in the linked report. Shared RSS pages may be counted twice; main heap excludes Worker/GPU; native GPU allocation totals are unavailable. Observed samples do not guarantee peaks. Timing includes CPU output readback; OS/driver caches are uncontrolled.
Access and license
Public repository with manual gated downloads and Community disabled. Request and receive access on Hugging Face, then download the complete fixed revision; the public app catalog pins manifest/model/notices hashes. No Cloudflare mirror bypasses the acquisition gate. Apache-2.0 for this model, with LICENSE included; dataset attribution above remains CC-BY-4.0. No third-party game records, credentials, optimizer pickle, or training dataset are included. Reproducibility and intended-use limitations are stated above.