experiment: grounding_phase_boundary kind: gen_lineage seed: 20260704 n_replicates: 18 # (Layer 1.5 headline, maps to Layer-1 E2): the grounding phase boundary in REAL weights. # Sweep the grounding fraction g = m/(n+m) and locate the neural critical g* at which # stationary diversity is restored. Layer 1 found g* = 0.048 << 1. The neural regime (finite # model capacity, a smaller K so gen-0 fidelity holds) will not reproduce that value exactly # -- the claim is directional (blueprint 3.5): a critical g* << 1 exists in trained weights, # i.e. a little grounding protects most of the diversity. # # PHASE METRIC. H is a poor neural phase metric: the RNN's smoothing inductive bias partially # resists H-collapse (dry H ~ 83% of H*), so H is flat/noisy in g. The sharp neural collapse # metric is TAIL SURVIVAL (tail_truth_mass_alive) -- exactly the truth-mass-weighted tail # coverage Layer-1 E2 used for its g* -- with forward_kl as the monotone cross-check. g* is # defined (as in Layer 1) as the g at which stationary tail survival first reaches 95% of the # grounded plateau (the g=0.2 saturation), bootstrap-CI over replicates. # # FALSIFIER (pinned before running, 2026-07-05): thesis holds iff a critical g* << 1 exists # with g* < 0.1 AND its bootstrap CI upper bound < 0.5 (well below 1) -- i.e. a small dose of # grounding restores most of the recoverable tail. Thesis REFUTED if stationary tail survival # is flat in g (no monotone rise), or is only restored as g -> 1 (g* CI overlaps 1). # # Per-lineage variance is large under n=200 drift (the collapse fate is genuinely stochastic), # so 18 replicates + n_eval=15000 are needed to pin the stationary means. 30 generations keeps # lineages on the valid-token manifold (bounded forward-KL); pushing further drives the dry arm # fully off-manifold, which adds bimodal variance rather than sharpening the boundary. generations: 30 synthetic: K: 256 R: 1 tail: zipf zipf_s: 1.3 tail_frac: 0.5 tail_threshold: 1.0e-3 init: truth style_len: 3 style_vocab: 5 id_base: 2 model: kind: rnn hidden: 128 embed: 24 epochs: 25 lr: 2.0e-3 batch_size: 256 n_eval: 15000 dynamics: n: 200 grounding: {m: 0, policy: proportional} # m overwritten per g by the sweep remint: {enabled: false, period: null, H_gate: null} metrics: kl_floor: 1.0e-9 support_eps: 1.0e-9 sweep: - param: g values: [0.0, 0.005, 0.01, 0.02, 0.035, 0.05, 0.075, 0.1, 0.2] output: dir: results/figS6_grounding_rnn