Skip to content

Release 0.95.2: a lesson teaches the fixed point the act is taken from - #279

Merged
muellerberndt merged 2 commits into
mainfrom
release-0.95.2
Nov 9, 2026
Merged

muellerberndt merged 2 commits into
mainfrom
release-0.95.2

Conversation

@muellerberndt

Copy link
Copy Markdown
Owner

Release 0.95.2: Brain.lesson starts its free phase from the stream's activity the act settles from, where it started from rest.

The defect

The act settles warm from the stream (_warm(drive, _activity())); Brain._teach settled the lesson's free phase from rest (_warm(drive, None)). In a deep reciprocal brain one observation can hold two stable states. The lesson judged and corrected the rest state, which often gave the shown answer, while the act kept answering from the warm one, so lessons never corrected play. A deep three-region brain continued for 4,000 moments on a game task read 0.016 with the lesson from rest and 0.422 with the warm free phase (diagnosis measurement).

The fix

One line in Brain._teach: warm=self._warm(drive, self._activity()), the warm start the act's own settle uses (learned code phase included). Rest after reset and for streams that have not acted, so lessons without a stream state are bit-identical to 0.95.1. Surprise judging restricts the warm state to the taught rows (existing path); replay, rehearsal and step(..., teacher=) teach from the state their act settles from; torch passes the state on the device.

Behaviour change, measured before/after on the CPU

Case 0.95.1 0.95.2
Deep two-region brain whose cue holds two fixed points (new test fixture), 10 lessons at the acted state act stays wrong act corrected
Stream teaching, recall=False, one region, 3 seeds: teacher-matching sampled acts over moments 200-299 .68 .61 .87 .78 .81 .94
Same, two regions .61 .62 .49 .74 .73 .65
Default composition (recall memory, deep point, surprise), one region acts/predictions same, efficacies within 2.4e-8
Default composition, two regions 1 of 3 seeds moves 0.043, predicts 10/12 cues vs 11/12; others within 2e-4
Recorded lives (CADENCE_FUSED=0 gate) that teach after an act 8 lives re-recorded: new checkpoint digests, efficacies moved at most 0.0021, 2 of 271 acts differ

Tests whose expected values changed: the 8 recorded lives above (tests/test_recall_memory.py stepped/taught, test_learned_code.py stepped/taught/region, test_observation_code.py image/stepped, test_reset_arousal.py stepped). The recall memory's moment-for-moment comparisons with the index-read instrument pass the instrument a new warm=True (default False keeps its recorded runs). The lesson-target twin tests compare copies (a lesson from an act's state reads the block products the state keeps; a deep copy leaves them out, a last-bit difference). Every other test and benchmark assertion holds unchanged.

Notes in the CHANGELOG (no code change)

  • Nudged phases near agreement at the founder/normalized points stop after 1-2 sweeps; on deep modules a gradient check read cosines 0.0-0.47 against 0.97-1.0 with nudged_fixed=True. teaching="deep" (the default with the recall memory) runs them their whole budget. Defaults unchanged.
  • Learner.synapse_rate of zero holds efficacies, not biases, and the optimizer moments keep reading the held synapse's contrast.

Checks (this Mac)

  • Full suite with benchmark paths: 3,857 passed, 241 skipped, 1 xfailed.
  • Recorded-lives gate (CADENCE_FUSED=0): 206 passed.
  • MLX suite: 4,021 passed, 93 skipped, 1 xfailed (a first run failed 6 tests on a full disk; rerun after freeing space).
  • ruff, mypy clean; documented examples of the CI pages run.

🤖 Generated with Claude Code

muellerberndt and others added 2 commits November 9, 2026 13:04
…tles from

`Brain._teach` settled the lesson's free phase from rest (`warm=self._warm(drive, None)`) while the
act settles warm from the stream (`self._warm(drive, self._activity())`). In a deep reciprocal
brain one observation can hold two stable states: the lesson judged and corrected the rest one,
which often gave the shown answer, while the act kept answering from the warm one, so lessons never
corrected play. The free phase starts where the act's settle starts: rest after `reset` and for
streams that have not acted, so lessons without a stream state teach as on 0.95.1, to the bit.

Tests (tests/test_lesson_warm_start.py): a deep brain whose cue holds two fixed points under one
drive, where ten lessons from rest leave the act wrong and ten from the stream correct it; the
lesson's warm start is the stream's state, inside `step` the state the step's act settles from, on
torch the state on the device, with a learned code its phase in it; after `reset` and before any
act the lesson equals the lesson from rest to the bit (default, recall=False, two regions,
qualified).

Re-recorded: the recorded lives that teach after an act (CADENCE_FUSED=0 gate) read new checkpoint
digests, efficacies moved by at most 0.0021, 2 of 271 acts differ. The index-read instrument takes
`warm=True` for the recall memory's moment-for-moment comparisons; its recorded runs keep the lesson
from rest. The lesson-target twins compare copies, since a lesson from the state an act left reads
the block products that state keeps, which a copy leaves out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.95.2 in pyproject.toml and cadence.__version__; install pins and released documentation
links name 0.95.2; CHANGELOG states the change with its measurements and notes the nudged phases
near agreement (`nudged_fixed`) and `Learner.synapse_rate` of zero.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@muellerberndt
muellerberndt merged commit ef81bae into main Nov 9, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant