Projected Absolute-Residual Compensation for Neural State-Space Models
Implementation & benchmark of arXiv:2607.28142 — Data-Driven Dead-Zone Compensation via Projection in Predictive Control Setting
Source paper: Data-Driven Dead-Zone Compensation via Projection in Predictive Control Setting arXiv:2607.28142 ⓘ · analyzed Aug 31, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Augment a recurrent or state-space neural model with two predictors: an absolute predictor using raw command and output histories, and an incremental predictor using differences. Use the absolute prediction residual, projected onto an offline-learned mismatch subspace, to estimate persistent actuator bias or dead-zone effects and compensate the next command or latent transition. The incremental branch provides a diagnostic because a constant mismatch should vanish there while the absolute residual remains nonzero and proportional to the mismatch.
Formulas
Mathematical statement
Let u_k be the commanded input, u_k^eff the unknown effective input after a dead-zone or quantizer, and y_k the observed output. Fit an absolute one-step predictor yhat_k^abs = P_u U_k + P_y Y_k + P_c c_k, where U_k and Y_k are stacked input and output histories and c_k contains current neural features. Fit an incremental predictor Delta-yhat_k^inc = Q_u Delta-U_k + Q_y Delta-Y_k + Q_c Delta-c_k. For a persistent mismatch d_k = u_k^eff - u_k, the absolute residual e_k^abs = y_k - yhat_k^abs is approximately P_d d_k, while the incremental residual tends to zero for constant d_k. Let H_d contain calibration residual directions and define the regularized orthogonal projector Pi_d = H_d (H_d^T H_d + lambda I)^(-1) H_d^T. The estimated mismatch signature is ehat_d,k = Pi_d e_k^abs. If G_d maps a command correction to output residual, apply delta-u_k = -gamma G_d^dagger ehat_d,k, with 0 < gamma <= 1. For a locally linearized compensated closed loop z_{k+1} = A_cl z_k + B_e(e_k^abs - ehat_d,k), practical stability requires spectral radius rho(A_cl) < 1, and the residual bound scales with the unprojected component (I - Pi_d) P_d d_k.
Implementation notes
1. Integration point: wrap a GRU, S4-style state-space layer, or neural state-space controller that emits a nominal command u_k for a simulated actuator or environment. Maintain buffers of the last T commands, observations, and neural features. Add two small linear heads on these features: an absolute head predicting y_k and an incremental head predicting Delta-y_k. Apply the projected residual correction before the command reaches the actuator or simulator. 2. Pseudocode: collect nominal trajectories; fit P_u, P_y, and P_c by ridge regression; fit Q_u, Q_y, and Q_c on differenced data; collect residual vectors while injecting several constant biases and dead-zone widths; form H_d from the leading principal components of those residuals; compute Pi_d; at every step calculate e_abs, calculate ehat_d = Pi_d e_abs, estimate delta-u = -gamma times the pseudoinverse of G_d times ehat_d, clip the corrected command, and execute it. 3. The mechanism taken from the paper is the absolute-versus-incremental decomposition and fixed projection. Predictor matrices, H_d, G_d, and local spectral radius are estimated empirically. 4. First experiment: train a small GRU to control a damped linear plant with a known plus-or-minus 0.18 command dead-zone. Compare the baseline, projected correction, and unprojected correction on constant-reference tracking. The predicted signature is that incremental residual norm decays toward zero under constant mismatch while absolute residual norm remains proportional to bias. After correction, steady-state error should scale with the norm of (I - Pi_d) P_d d. The measured divergence boundary should occur near rho(A_cl) = 1, within 20 percent.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: Significant win ✓
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 8/10
Built and numerically verified a deterministic projected absolute-residual compensation toy in verify.py. Absolute residual scaling, incremental cancellation, projection residual scaling, and the stability boundary all matched their predictions; tracking error improved from 0.272727 to 0.054545 with compensation. Projected and unprojected compensation were identical here because the toy was one-dimensional and fully covered by the learned mismatch subspace.
- Agent confidence
- 8/10
- Baseline
- Mean absolute steady-state tracking error 0.272727; final error 0.272727
- Idea
- Mean absolute steady-state tracking error 0.054545; final error 0.054545; absolute residual slope 1.2500000000000002 vs predicted 1.25; incremental residual max 0; projection max error 1.0e-10; stability boundary observed 2.0 vs predicted 2.0
Limitations: This is an exact linear toy, not a trained GRU or S4 model. It does not test learned ridge heads, finite-sample estimation, measurement noise, nonlinear dead-zone or quantization effects, online adaptation, multidimensional G_d pseudoinverse behavior, or a meaningful projected-versus-unprojected controller distinction.
How to run: python3 verify.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.28142)
Beats the tuned baseline by -0.0015 metric points (p=0.0081, wins 8 / 8 paired seeds; metric: lower is better).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0
- Idea mean
- 0
- Effect (Δ)
- -0.0015 (n/a; negative = idea better)
- Wins
- 8 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Helps
- Baseline tuning
- swept over 0 configs
Only the built-in actuated-pendulum dynamics track was tested. It does not explicitly inject persistent actuator bias, dead-zone, quantization, measurement noise, or test the stability boundary under controlled mismatch sweeps.
How to run: python3 bench_stage2.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Worked ✓
Agent confidence: 7/10
Implemented projected absolute-residual compensation on the structurally matched actuated-pendulum dynamics track using paired eight-seed training and the benchmark sweep/report protocol. The idea achieved lower test MSE on all 8 seeds: 4.956e-05 versus 1.530e-03 for the baseline, with paired delta -1.481e-03 and permutation p=0.0081. The incremental residual was substantially smaller than the absolute residual in trained-model behavior, although the built-in track does not explicitly inject persistent actuator bias.
- Baseline
- mean test MSE 0.0015303929612855427; std 0.0006243748661918005; best lr 0.01; 8 paired seeds
- Idea
- mean test MSE 0.00004955958911523339; std 0.000022175200246237042; best lr 0.01, gamma 0.8; 8 paired seeds
- Idea wins
- 8/8
- Mechanism signature
- absolute residual norm 0.7707589045166969; incremental residual norm 0.0819682078436017; disagreement norm 0.8208163678646088; confirmed=true
- Paired delta
- -0.0014808333721703093
- Permutation p value
- 0.0081
Benchmark result
Beats the tuned baseline by -0.0015 metric points (p=0.0081, wins 8 / 8 paired seeds; metric: lower is better).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0
- Idea mean
- 0
- Effect (Δ)
- -0.0015 (n/a; negative = idea better)
- Wins
- 8 / 8 paired seeds
- p-value
- 0.0081 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- n/a
- Mechanism
- Confirmed ✓
- Practical effect
- Helps
- Baseline tuning
- swept over 0 configs
Only the built-in actuated-pendulum dynamics track was tested. It does not explicitly inject persistent actuator bias, dead-zone, quantization, measurement noise, or test the stability boundary under controlled mismatch sweeps.
How to run: python3 bench_stage2.py
Artifacts
- bench_report.json 4.3 KB View Raw
- bench_stage2.py 4.1 KB View Raw
- report.md 1.4 KB View
- report_bench_2026-08-31T192705.md 3.7 KB View
- results.json 6.5 KB View Raw
- verify.py 5.4 KB View Raw