From 96ff889ed214b68142daa0abf00456c733c879c6 Mon Sep 17 00:00:00 2001 From: Yuren Hao Date: Thu, 30 Jul 2026 17:48:35 -0500 Subject: =?UTF-8?q?RESULT=2078:=20read=5Flin=E6=A2=AF=E5=BA=A6=E7=BA=A7?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=3D=3Dfp64(fp32=E4=B8=8B=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E5=A1=8C=E9=9B=B6,=E8=AF=BB=E5=87=BA=E8=88=8D=E5=85=A5=3D?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E7=97=85=E5=9B=A0);=20=E9=99=84=E5=B1=9E?= =?UTF-8?q?=E8=B0=B1=E4=BB=AA:=E5=89=8D=E6=B2=BF=E9=9A=8F=E8=AE=AD?= =?UTF-8?q?=E7=BB=83=E4=B8=8B=E5=8E=8B+seed=E8=BD=B4=E8=AF=81'=E6=AF=94?= =?UTF-8?q?=E5=80=BC=E5=86=B3=E5=AE=9A=E9=9D=9E=E5=B1=82=E5=8F=B7'+?= =?UTF-8?q?=E9=98=88=E5=80=BC=E5=B8=A62-5e-7;=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=85=A5=E8=AE=AD=E7=BB=83=E8=B7=AF=E5=BE=84;=20CE=E7=BA=A7?= =?UTF-8?q?=E4=BB=AA=E5=99=A8=E7=BB=88=E5=AE=A1=E5=9C=A8=E9=A3=9E(?= =?UTF-8?q?=E9=A2=84=E6=B3=A8=E5=86=8C~+100%=E5=85=B3=E9=97=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014FAPDWQ49M5Ye3NpTndTpn --- ep_run/casc_eq_train.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'ep_run/casc_eq_train.py') diff --git a/ep_run/casc_eq_train.py b/ep_run/casc_eq_train.py index 3cb9494..ed164ce 100644 --- a/ep_run/casc_eq_train.py +++ b/ep_run/casc_eq_train.py @@ -699,7 +699,14 @@ def ep_step(x, y): gs = torch.autograd.grad(obj, all_params, allow_unused=True) elif EST == 'single': E = 0.0 - for z, o in zip(zp, last_outs): E = E + 0.5 * ((z.detach().float() - o.float()) ** 2).sum() # fp32 accumulation (bf16-safe; no-op in fp32) + if args.read_lin: + # FP-FLOOR FIX (RESULT 77/78): the read identity z - o = d holds algebraically but not in + # fp32 — (z - o) is a ROUNDED copy of d (components below eps·|o| are erased; the C768 + # top-half leak). The d tensors themselves are full-precision; the linear form - has + # the identical theta-derivative and bypasses the rounding. Probe-verified == fp64. + for dl, o in zip(GOV['_last_d'], last_outs): E = E - (dl.detach().float() * o.float()).sum() + else: + for z, o in zip(zp, last_outs): E = E + 0.5 * ((z.detach().float() - o.float()) ** 2).sum() # fp32 accumulation (bf16-safe; no-op in fp32) obj = E / (NBT * beta_t) + obj_loss(readout(zp[-1].detach()).reshape(-1, vocab), y.reshape(-1)) gs = torch.autograd.grad(obj, all_params, allow_unused=True) else: -- cgit v1.2.3