diff --git a/crates/ml/src/cuda_pipeline/iql_value_kernel.cu b/crates/ml/src/cuda_pipeline/iql_value_kernel.cu index 9073364e0..9ca063639 100644 --- a/crates/ml/src/cuda_pipeline/iql_value_kernel.cu +++ b/crates/ml/src/cuda_pipeline/iql_value_kernel.cu @@ -729,8 +729,15 @@ void iql_adv_sigma_ema_update( readiness_buf[2] = cv_max; float anchor = fmaxf(cv_max, cv_initial); - float improvement = (anchor - cv) / fmaxf(anchor, 1e-6f); - readiness_buf[0] = fminf(fmaxf(improvement, 0.0f), 1.0f); + float improvement = fminf(fmaxf((anchor - cv) / fmaxf(anchor, 1e-6f), 0.0f), 1.0f); + /* Adaptive-rate EMA: smooth readiness transitions to prevent + per-sample support from snapping discontinuously. Tracks fast + when readiness changes rapidly, smooths when stable. */ + float prev_r = readiness_buf[0]; + float r_err = fabsf(improvement - prev_r); + float r_alpha = r_err / (r_err + 0.05f); + r_alpha = fminf(fmaxf(r_alpha, 0.01f), 0.3f); + readiness_buf[0] = (1.0f - r_alpha) * prev_r + r_alpha * improvement; } }