knowledge: learning kernel — model the estimator bias, not just sampling
Revisiting Layer 1 against Layer 1.5 (and Riis 2026, arXiv:2604.08554):
neutral Wright-Fisher is a null that BOTH neural architectures deviate
from, in opposite directions. Add a learning kernel to the refit step,
p_{t+1} = T_theta(counts/n), with two population-genetics knobs -- reset u
(mutation toward a prior = smoothing) and temperature tau (sharpening =
mode-competition) -- both identity by default, so the histogram bridge and
all 68 scientific-validation/correctness tests are unchanged.
Result: neutral drift fails both neural models, oppositely.
- VAE regime (n=6000, K=30): neutral drift is inert (no collapse), yet the
real VAE collapsed to one mode. Sharpening tau=0.8 reproduces it -- the
estimator ADDS collapse pressure.
- RNN regime (n=200, K=256): neutral drives H->0, but the real RNN only
partially collapses. Mutation u=0.006 reproduces the H-floor -- the
estimator REMOVES collapse pressure. Honest caveat: uniform-mutation
overshoots the RNN's forward-KL, evidence its smoothing prior is
truth-like, not uniform (future refinement).
This mechanistically explains the architecture-generality result and the
softened neural g*, and develops the estimator axis Riis names as future
work. New: knowledge/kernel.py, configs/layer1/kernel_{sharpen,smooth}.yaml,
figures/plot_kernel.py (overlays analytic arms vs committed neural
endpoints), READMEs, tests/test_kernel.py (+6, 105 total green). Strategic
Riis positioning recorded in CLAUDE.md: concede "collapse=drift" as prior
art; lead with recombination, the kernel axis, and the Lamarckian society.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
79bbc45f41
commit
871bc39ec6
21 changed files with 660 additions and 3 deletions
42
results/kernel_sharpen/README.md
Normal file
42
results/kernel_sharpen/README.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# kernel — the learning kernel: why real learners deviate from neutral drift
|
||||
|
||||
*(This legend covers both `results/kernel_sharpen/` and `results/kernel_smooth/`; the figure
|
||||
`kernel.png` is written into both.)*
|
||||
|
||||
**Claim tested.** Neutral Wright–Fisher drift (the histogram bridge, and the baseline of Riis
|
||||
2026) is the *null* model of collapse. But Layer 1.5 showed real trained models deviate from it —
|
||||
and in **opposite directions**. Can a single extension of Layer 1 — a parameterized *learning
|
||||
kernel* on the refit step, `p_{t+1} = T_θ(counts/n)` — reproduce both deviations, and does neutral
|
||||
drift genuinely fail without it?
|
||||
|
||||
**Setup.** The kernel (`knowledge/kernel.py`) has two population-genetics knobs, both reducing to
|
||||
neutral drift at their defaults (so the histogram and every scientific-validation test are
|
||||
unchanged): **reset `u`** — mutation toward a prior (`p ← (1−u)p + u·π`), i.e. smoothing; and
|
||||
**temperature `τ`** — sharpening (`p ∝ p^{1/τ}`, `τ<1` concentrates), i.e. mode-competition. Two
|
||||
matched-to-neural regimes, 24 replicates each.
|
||||
|
||||
### The four panels (`kernel.png`; blue = neutral, red = kernel-on, green dashed = the real neural model)
|
||||
**Top row — VAE regime (`n=6000`, `K=30`), pro-collapse:**
|
||||
1. **Heterozygosity.** Neutral drift is **inert** — at `n=6000` it barely moves (`H` stays at
|
||||
`H*`). Yet the real VAE (green) collapsed to `H≈0`. **Sharpening (`τ=0.8`) reproduces the
|
||||
collapse.** Neutral drift is *falsified*; the estimator's mode-competition is required.
|
||||
2. **Support.** Neutral holds ~all 30 modes; sharpening → 1 mode, matching the VAE.
|
||||
|
||||
**Bottom row — RNN regime (`n=200`, `K=256`), anti-collapse:**
|
||||
3. **Heterozygosity.** Neutral drift drives `H → 0`, but the real RNN (green) only *partially*
|
||||
collapses (`H` floors at ~0.68). **Mutation `u=0.006` reproduces the floor.** The estimator here
|
||||
*removes* collapse pressure.
|
||||
4. **Forward-KL.** Neutral diverges; smoothing plateaus. Honest caveat: uniform-mutation plateaus
|
||||
*above* the RNN's KL (~5 vs ~2) — evidence the RNN's smoothing target is **truth-like, not
|
||||
uniform** (a refinement for future work). The *sign* is unambiguous.
|
||||
|
||||
### Takeaway
|
||||
Model collapse in real learners = **neutral drift ⊕ an architecture-specific estimator-bias
|
||||
operator that can point either way.** The histogram sits at the neutral null (`u=0, τ=1`); the VAE
|
||||
**sharpens** (adds collapse); the RNN/MLP **smooth** (add a diversity floor). This mechanistically
|
||||
explains the Layer-1.5 architecture-generality result and the softened neural `g*`, and develops
|
||||
the exact axis Riis (2026) names as future work ("different smoothing schemes… each induce their
|
||||
own fixed-point geometry… a natural direction for further work"). `u`/`τ` are calibrated from a
|
||||
single neural diagnostic and pinned in the configs. **Falsifier (not triggered):** if neutral drift
|
||||
had already reproduced the neural curves, the estimator axis would be superfluous — instead it fails
|
||||
in *both* regimes, oppositely.
|
||||
BIN
results/kernel_sharpen/kernel.pdf
Normal file
BIN
results/kernel_sharpen/kernel.pdf
Normal file
Binary file not shown.
BIN
results/kernel_sharpen/kernel.png
Normal file
BIN
results/kernel_sharpen/kernel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 270 KiB |
14
results/kernel_sharpen/manifest.json
Normal file
14
results/kernel_sharpen/manifest.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"experiment": "kernel_sharpen",
|
||||
"master_seed": 20260705,
|
||||
"git_commit": "79bbc45f41822757e60d7f1994a82c5171a9e554",
|
||||
"python": "3.14.5",
|
||||
"libraries": {
|
||||
"numpy": "2.5.0",
|
||||
"scipy": "1.18.0",
|
||||
"pandas": "3.0.3",
|
||||
"pyarrow": "24.0.0"
|
||||
},
|
||||
"rows": 768,
|
||||
"results_sha256": "d5651a841d58f12abed1339476b1839fb03fe02329e38d675d0602ccb5691e52"
|
||||
}
|
||||
82
results/kernel_sharpen/resolved_config.yaml
Normal file
82
results/kernel_sharpen/resolved_config.yaml
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
experiment: kernel_sharpen
|
||||
seed: 20260705
|
||||
n_replicates: 24
|
||||
source_config:
|
||||
experiment: kernel_sharpen
|
||||
kind: lineage
|
||||
seed: 20260705
|
||||
n_replicates: 24
|
||||
truth:
|
||||
K: 30
|
||||
R: 1
|
||||
tail: zipf
|
||||
zipf_s: 1.5
|
||||
tail_threshold: 0.01
|
||||
init: truth
|
||||
dynamics:
|
||||
n: 6000
|
||||
grounding:
|
||||
m: 0
|
||||
policy: proportional
|
||||
kernel:
|
||||
reset: 0.0
|
||||
temperature: 1.0
|
||||
floor: 0.0
|
||||
generations: 15
|
||||
metrics:
|
||||
kl_floor: 1.0e-09
|
||||
support_eps: 1.0e-09
|
||||
sweep:
|
||||
- param: dynamics.kernel.temperature
|
||||
values:
|
||||
- 1.0
|
||||
- 0.8
|
||||
output:
|
||||
dir: results/kernel_sharpen
|
||||
grid:
|
||||
- label:
|
||||
temperature: 1.0
|
||||
lineage_cfg:
|
||||
truth:
|
||||
K: 30
|
||||
R: 1
|
||||
tail: zipf
|
||||
zipf_s: 1.5
|
||||
tail_threshold: 0.01
|
||||
init: truth
|
||||
dynamics:
|
||||
n: 6000
|
||||
grounding:
|
||||
m: 0
|
||||
policy: proportional
|
||||
kernel:
|
||||
reset: 0.0
|
||||
temperature: 1.0
|
||||
floor: 0.0
|
||||
generations: 15
|
||||
metrics:
|
||||
kl_floor: 1.0e-09
|
||||
support_eps: 1.0e-09
|
||||
- label:
|
||||
temperature: 0.8
|
||||
lineage_cfg:
|
||||
truth:
|
||||
K: 30
|
||||
R: 1
|
||||
tail: zipf
|
||||
zipf_s: 1.5
|
||||
tail_threshold: 0.01
|
||||
init: truth
|
||||
dynamics:
|
||||
n: 6000
|
||||
grounding:
|
||||
m: 0
|
||||
policy: proportional
|
||||
kernel:
|
||||
reset: 0.0
|
||||
temperature: 0.8
|
||||
floor: 0.0
|
||||
generations: 15
|
||||
metrics:
|
||||
kl_floor: 1.0e-09
|
||||
support_eps: 1.0e-09
|
||||
Loading…
Add table
Add a link
Reference in a new issue