Drop7 Research
approaches/value-policy-learning/chance-state-nnue/README.mdxMDX129 lines · 6.6 KB
---
title: Chance-state NNUE
family: value-policy-learning
summary: Judge the board at the moment just before the next disc is dealt, so the value never has to be split seven ways.
status: rejected
evidence: task-record only
reads: public
---

Every learned evaluator has to decide *when* it looks at the board. If it looks
after the next disc is known, it has to learn seven different opinions about
essentially the same position. This model looks at the moment in between — the
board plus how many drops remain before the row rises, and lets the average
over incoming discs take care of itself.

<EvidenceLabel status="rejected" evidence="task-record only" reads="public" />

The network only ever sees a public board and the rise clock. One of its two
training modes reads a curriculum harvested from privileged
[oracle](/learn/glossary) games, which is legal for producing training labels
but means those labels are teacher-derived and could not have been generated by
a legal player. The verdict (that it plateaued well below fair search) is a
**task record only**: there is no ledger section, protocol, artifact hash, or
per-game data behind it anywhere in the repository.

## The intuition

Consider the position after your disc lands but before you are told what comes
next. That is the **chance state**: a board, and a number saying how many drops
until the covered row rises. It is a genuine moment in the game, and it is the
last moment at which nothing is yet random.

Why this helps: value learning wants to compare positions with each other, and
positions that differ only in which disc is about to arrive are not really
different positions. They are the same position under seven different rolls of
the dice. A model asked to score "this board with a 3 coming" separately from
"this board with a 5 coming" spends a seventh of its data on each case. A model
that scores the board alone gets all of it, and the averaging over the incoming
disc happens where it belongs: over the many trajectories that pass through
that board.

The visible disc is not thrown away. It is used at decision time, where it
must be. The policy places the disc it can actually see, and then compares the
chance-state values of the seven boards that placement could produce. That is
also, precisely, the
[afterstate](/learn/glossary) idea that the newer
[afterstate-learning](/approaches/afterstate-learning) family later formalised.

## How it works, step by step

1. **Define the value on the right object.** The learned function is
   `U(board, moves-until-rise)`. It deliberately has no input for the next
   disc.
2. **Play, and learn from what follows.** Training is fitted multi-step
   temporal-difference learning over self-played trajectories, mixing a
   bootstrapped n-step target with a Monte Carlo return, with replay.
3. **Score the alternatives at decision time.** For the disc actually visible,
   each legal column is placed and the resulting chance state is evaluated;
   seven chance samples exactly stratify the first hidden reveal so the seven
   comparisons face the same spread of luck.
4. **Fold mirror images together.** Positions are canonicalised, so a board and
   its mirror image share one representation and one set of weights.
5. **Optionally, learn from a curriculum.** A second training mode reads a
   dataset of states drawn partly from privileged oracle games and partly from
   ordinary play, bucketed by rise phase. It regresses remaining moves with a
   Huber loss and adds a margin-ranking term that pushes long-lived oracle
   states above matched shorter-lived ones, but only when the two differ by
   more than 25 moves of lifetime.

## What happened

The learner trained, and its play settled well below the
[fair search](/approaches/fair-expectimax/reference) it was meant to rival. It
was retired at that point.

That is genuinely all that survives. The experiment index carries the verdict —
"the learner plateaued well below fair search", and marks it **task-record
only**; the exploratory audits confirm that no ledger entry exists for this
source file. **There is no retained number for this approach**: not a mean
score, not a mean lifetime, not a held-out correlation, not a cohort size, not
a training-transition count. Nothing on this page should be read as a measured
comparison, because none is available to quote.

<TechnicalDetails title="The technical record">

Source: `nnue-value.cpp`. Status **rejected**, evidence **task-record only**
([experiment index](/docs/research/experiment-index), Value and policy learning
table). No section of the [full ledger](/docs/research/history) covers it; the
audit in
[`audit-05`](/docs/exploratory/audit-05-optimistic-curriculum) confirms that
"no ledger entry exists", and
[`audit-04`](/docs/exploratory/audit-04-blind-spots) lists it among the 30
sources whose rejection "cannot be re-derived".

Configuration below is read **from the source file**, not from any result
record: two hidden layers of 32 and 16 units over a sparse feature set (cell
occupancy, rise phase, column and row shapes, count features, and horizontal /
vertical pair placements); discount 0.999; learning rate 3e-4; replay ratio
0.5; Monte Carlo weight 0.35; seven chance samples; curriculum mode 120 epochs,
Huber threshold 20 moves, ranking weight 20.0, ranking margin scale 0.25,
ranking pairs formed only where the lifetime gap exceeds 25 moves. Training
seeds start at `0x3d700000`; the curriculum probe is asserted to lie inside the
`0x4d70` partition. Modes: `--self-test`, `--gradient-check`, `--train`,
`--evaluate`, `--train-curriculum`.

</TechnicalDetails>

## What this taught us, and what is still open

The mechanism did not die with the experiment. Valuing the board before chance
speaks (one evaluator, no action input, no seven-way split) is the same
structural choice the repository's current registered theory rests on, and the
[afterstate family](/approaches/afterstate-learning) has since taken it much
further with successor-closed labels and preregistered gates.

What this attempt was missing is visible in hindsight from
[the sibling trap](/learn/concepts/ranking-siblings): the value was learned
from trajectories the training policy actually walked, so the seven boards
compared at decision time were still, mostly, boards it had never been trained
to distinguish. Being on the right object does not by itself fix being trained
on the wrong distribution.

The remaining open item is smaller and procedural: because nothing was
retained, this configuration cannot be checked, and re-running it would be a
new experiment rather than a reproduction.

## Sources

- `nnue-value.cpp` — feature set, TD training, curriculum mode, and self-tests.