jgrusewski
55aeddaebd
feat(ml-alpha): anchor_l2 kernel + Wiener-α controller (v2 B) [V8]
L2 anchor regularization toward initialization (axis B). Anchors
horizon_tokens + Q + MoE experts toward their init values to prevent
the calibration drift observed in v1 (where val_loss climbed as α
opened past epoch 1 in 2 of 3 folds).
KERNEL (`anchor_l2_fwd_bwd`):
loss_out = λ · Σ_i (p[i] − p_init[i])²
grad_p[i] += 2λ · (p[i] − p_init[i])
- Warp-shuffle reduce; one block per parameter group; strided thread
loop over n. Cross-warp reduce uses one __syncthreads.
- Coalesced grad write via stride loop.
- λ passed as device-side [1]-buffer (host writes scalar before launch
— capture-safe).
CONTROLLER (`trainer::anchor_controller::AnchorController`):
- Signal-driven λ floor: λ_floor = ‖p_init‖ / (100 · √numel).
Cross-fold-persistent per pearl_kelly_cap_signal_driven_floors.
- Wiener-α smoother (α = diff_var / (diff_var + sample_var + ε))
on val_loss change; α floored at 0.4 per
pearl_wiener_alpha_floor_for_nonstationary.
- λ blends toward target = |ema_change|·scale with α; floored at
λ_floor per pearl_blend_formulas_must_have_permanent_floor.
- First-observation bootstrap (sentinel state replaced directly on
first step) per pearl_first_observation_bootstrap.
- 4/4 unit tests PASS: signal-floor init, bootstrap returns floor,
floor protection across 1000 steps, λ_max cap.
NUMGRAD VERIFICATION (RTX 3050 sm_86):
anchor_l2_numgrad PASSES with closed-form parity (machine precision)
and central-difference parity (4 random positions) within 5e-2 rel.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:26:31 +02:00
..
2026-05-17 14:39:38 +02:00
2026-05-18 14:26:31 +02:00
2026-05-18 00:01:31 +02:00
2026-05-18 13:35:26 +02:00
2026-05-17 16:48:37 +02:00
2026-05-17 23:47:40 +02:00
2026-05-17 13:57:02 +02:00
2026-05-17 20:58:44 +02:00
2026-05-18 14:09:45 +02:00
2026-05-18 14:16:26 +02:00
2026-05-17 21:22:44 +02:00
2026-05-17 20:25:47 +02:00
2026-05-17 23:53:43 +02:00
2026-05-16 21:52:57 +02:00
2026-05-17 23:47:40 +02:00
2026-05-18 14:21:59 +02:00
2026-05-17 22:09:08 +02:00
2026-05-17 23:57:32 +02:00