Reports · 2026-09-19

A small-run belief network loses to the counting prior

Expectimax with belief-sampled worlds against prior-sampled worlds

Expectimax with belief-sampled worlds against prior-sampled worlds0.0016.1432.2948.4364.58expectimax+belief45.20 n=200expectimax54.80 n=200
Expectimax with belief-sampled worlds against prior-sampled worlds
RowValueLowHighn
expectimax+belief45.238.552.2200
expectimax54.847.861.5200
Both sides search 16 worlds at depth 2 under the training rules; the candidate draws its worlds from the belief network, the control from the counting prior, on seeds 0 to 99 from both seats; built by scripts/build_belief_assets.py.

The two measurements agree, and they say the same thing twice: the belief network did not learn a belief better than the exchangeable prior. On its own self-play positions it reached 1.62 nats per piece, so it fitted its own distribution, but that distribution came from a move network thirty iterations old (about 10,300 environment steps per second for 21 minutes) and setups drawn from a setup network that had not yet learned where the Flag belongs. What it learned does not transfer to games between random, greedy, expectimax and rollout, where the uniform posterior is exactly right whenever nothing has moved and everything hidden is exchangeable: the counting prior is hard to beat in the opening, and it stays ahead through the middlegame and the endgame here.

Negative log-likelihood of the true hidden types by game phase

Negative log-likelihood of the true hidden types by game phase0.000.621.241.862.49counting prior, opening, ply under 1002.20 n=155122belief network, opening, ply under 1002.37 n=155122counting prior, middlegame, ply 100 to 3001.98 n=99927belief network, middlegame, ply 100 to 3002.21 n=99927counting prior, late, ply over 3001.76 n=15174belief network, late, ply over 3002.05 n=15174
Negative log-likelihood of the true hidden types by game phase
RowValueLowHighn
counting prior, opening, ply under 1002.2032.2032.203155122
belief network, opening, ply under 1002.3682.3682.368155122
counting prior, middlegame, ply 100 to 3001.981.981.9899927
belief network, middlegame, ply 100 to 3002.2122.2122.21299927
counting prior, late, ply over 3001.7651.7651.76515174
belief network, late, ply over 3002.0542.0542.05415174
Mean negative log-likelihood of every hidden opponent piece's true type on the 64 replay-library games, counting prior against belief network, 64 sampled assignments per position and probabilities floored at 1/128; built by scripts/build_belief_assets.py.

Cost matters as much as the score. The belief side spent 52.9 ms per move against the control's 4.3 ms, because every candidate move sampled 16 assignments from the network on the GPU before searching them, both measured while other agents shared the machine. Ataraxos trains its belief on the final policy's trajectories for four days on four H100s before search uses it (57.1 million parameters); this study spent 102,400 positions from the self-play of a 2.8-million-parameter move network thirty iterations old, which is the honest scale of one GPU-hour. The negative result bounds that scale: a belief trained on a barely-super-random policy carries no information the exchangeable prior does not already have.

Why both outcomes are filed

The study's design separated two failures: if only the match had failed, the belief would fit the searcher's own style; if only the likelihood had failed, the search would ignore what the belief knows. Both failed, which points at the training scale, not the bridge: the sampler that hands the search its worlds is verified against the prior-sampling path bit for bit (a test in the server's search crate asserts the two entry points agree on the same worlds), and the match measured the belief, not a plumbing difference. The study closes the direction at this rung and hands the retest to the scaled run: when the T5 checkpoint has a policy that beats greedy, its self-play trajectories are the data on which a belief has something to learn that the prior does not know.

Run record

Reproduction

Registration experiments/d72d5305-0de2-4f4c-b8fd-f1f24c3ab4dd.toml. Commands, from the research root with PYTHONPATH=training:.armies-module (the shared venv module was repeatedly overwritten by other agents' builds, so this study ran against a private install of the same crate):

.venv/bin/python -m armies_train train --preset small --iterations 30 --seed 0 --out runs/belief-policy --registration d72d5305-0de2-4f4c-b8fd-f1f24c3ab4dd
.venv/bin/python -m armies_train belief --run runs/belief-policy --steps 400 --envs 256 --epochs 2
.venv/bin/python scripts/belief_eval.py --run runs/belief-policy --out runs/belief-policy/belief-eval.json
.venv/bin/python scripts/belief_match.py --run runs/belief-policy --games 200 --seed 0 --out runs/belief-policy/belief-match.json
python3 scripts/build_belief_assets.py --run runs/belief-policy

The training crashed at iteration 21 on a setup-network setup that immobilises the first mover; the pool refresh now filters such setups and the run resumed from the iteration-20 checkpoint. The belief-eval pass took 24 minutes of GPU, the match 12; the raw JSON files sit beside the record with their SHA-256 digests.