INDEX.md (task-oriented repo guide), REGIMES.json -> results/, phase diagram updated with full sweep (anchored family, seed means)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+22
-14
@@ -16,11 +16,15 @@ OUT = Path(__file__).resolve().parent.parent / "results-loop"
|
||||
# name rho easy hard color
|
||||
# name rho(plot x) easy hard color dy
|
||||
PTS = [
|
||||
("untrained α-merge\n(training-free)\nhard 14%", 0.40, 0.885, 0.143, "#8a8f98", -52),
|
||||
("trained merge\n(anchored B, curriculum)", 0.26, 0.885, 0.464, "#2b6cb0", -60),
|
||||
("per-depth merges\n(time-varying, anchored)\nhard 36% (depth-stranded)", 0.325, 0.893, 0.357, "#805ad5", 18),
|
||||
("Parcae rec\n(ρ<1 enforced, learned B)", 0.292, 0.713, 0.429, "#2f855a", -58),
|
||||
("unconstrained rec\n(learned A,B)", 4.5, 0.697, 0.393, "#c53030", 16),
|
||||
("untrained 14%", 0.22, 0.885, 0.143, "#8a8f98", -26),
|
||||
("merge ★ 46%", 0.26, 0.885, 0.464, "#2b6cb0", -40),
|
||||
("per-depth 36%", 0.30, 0.893, 0.357, "#805ad5", 26),
|
||||
("tied-α 43%", 0.35, 0.910, 0.429, "#0987a0", -32),
|
||||
("rand-k 36%", 0.41, 0.918, 0.357, "#3182ce", 22),
|
||||
("noise-s₀ 43%*", 0.48, 0.904, 0.429, "#b83280", -34),
|
||||
("4×MLP 54%†", 0.56, 0.902, 0.536, "#5f6b7a", 20),
|
||||
("Parcae rec 41%*\n(ρ<1 enforced, learned B)", 0.292, 0.722, 0.411, "#2f855a", -50),
|
||||
("unconstrained rec 39%\n(learned A,B)", 4.5, 0.697, 0.393, "#c53030", 16),
|
||||
]
|
||||
# x jittered around true rho=0.3 for the three anchored arms (visibility)
|
||||
# untrained merge x offset for visibility (true rho = 0.30)
|
||||
@@ -38,25 +42,29 @@ ax.text(3.1, 0.615, "norm projection converts\nexplosion → stationary churn\n"
|
||||
for name, rho, easy, hard, c, dy in PTS:
|
||||
ax.scatter(rho, easy, s=90 + 900 * hard, color=c, alpha=0.85, zorder=3,
|
||||
edgecolor="white", linewidth=1.5)
|
||||
lbl = name if ("stranded" in name or "14%" in name) else f"{name}\nhard {hard:.0%}"
|
||||
dx = 62 if "14%" in name else 0
|
||||
lbl = name
|
||||
dx = 0
|
||||
ax.annotate(lbl,
|
||||
(rho, easy), textcoords="offset points", xytext=(dx, dy),
|
||||
ha="center", fontsize=8.5, color=c)
|
||||
ha="center", fontsize=7.5, color=c)
|
||||
|
||||
ax.annotate("", xy=(0.278, 0.735), xytext=(0.288, 0.862),
|
||||
ax.annotate("", xy=(0.285, 0.740), xytext=(0.29, 0.868),
|
||||
arrowprops=dict(arrowstyle="->", color="#2f855a", lw=1.3))
|
||||
ax.text(0.46, 0.775, "learned B + no curriculum:\nfixed point leaves the\n"
|
||||
"substrate manifold", fontsize=8, color="#2f855a", ha="left")
|
||||
ax.text(0.55, 0.79, "learned free B:\nfixed point leaves the\n"
|
||||
"substrate manifold\n(curriculum, s₀, ρ, capacity\nall causally cleared)",
|
||||
fontsize=8, color="#2f855a", ha="left")
|
||||
ax.text(0.34, 0.972, "the anchored family — B tied to the anchor (labels: hard-bucket at k=4; * seed mean, † single seed)",
|
||||
fontsize=7.8, color="#2b6cb0", ha="center", style="italic")
|
||||
|
||||
|
||||
ax.set_xlim(0.2, 12)
|
||||
ax.set_xlim(0.17, 12)
|
||||
ax.set_ylim(0.58, 1.0)
|
||||
ax.set_xlabel("ρ(A) — spectral radius of the trained state map (dynamics dial)")
|
||||
ax.set_ylabel("substrate fidelity — easy-bucket pass@1 at k=4")
|
||||
ax.set_title("Frozen-band recurrence phase diagram: stability ≠ fidelity\n"
|
||||
"(marker size ∝ hard-bucket gain; every regime buys the same "
|
||||
"~40–46%, only one keeps the substrate)", fontsize=10.5)
|
||||
"(marker size ∝ hard-bucket gain at k=4; every regime buys "
|
||||
"36–54% within seed noise; only anchored B keeps the substrate)",
|
||||
fontsize=10.5)
|
||||
ax.grid(True, color="#ececec", lw=0.7, which="both")
|
||||
ax.set_axisbelow(True)
|
||||
for s in ("top", "right"):
|
||||
|
||||
Reference in New Issue
Block a user