Statistical Safety Gate for Neural Policies
Implementation & benchmark of arXiv:2607.15003 — SMC-ES: Automated synthesis of formally verified control policies
Source paper: SMC-ES: Automated synthesis of formally verified control policies arXiv:2607.15003 ⓘ · analyzed Aug 30, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Wrap policy training or deployment with a distribution-level statistical verifier that tests whether a candidate neural policy violates either a performance threshold or any safety constraint with probability at most \(\varepsilon\). The verifier returns a policy only after obtaining a high-confidence upper bound on the violation rate, making safety a measurable acceptance criterion rather than an average reward penalty.
Formulas
Mathematical statement
The paper defines an \((\varepsilon,\delta)\)-solution \((\theta,\gamma)\) by requiring that, with probability at least \(1-\delta\) over the verification sample, \(\Pr_{(s_0,\mathbf{w})\sim\mathrm{Env}_{\mathcal S}}[\mathrm{CumulReward}(\pi_\theta,s_0,\mathbf{w},H)<\gamma\ \lor\ \mathrm{CumulViol}(\pi_\theta,s_0,\mathbf{w},H)>0_{(m)}]\leq\varepsilon\). Here \(\pi_\theta\) is the neural policy, \(s_0\) is the random initial state, \(\mathbf{w}\) is environment randomness, \(H\) is the episode horizon, \(\gamma\) is the minimum acceptable cumulative reward, and \(\mathrm{CumulViol}\in\mathbb{R}^m\) is the vector of accumulated constraint violations. Let \(V_j\) be a Bernoulli indicator for a bad rollout and \(r=\sum_jV_j\). A concrete conservative implementation uses the one-sided Clopper--Pearson upper confidence bound \(U(k,r,\delta)=\mathrm{BetaInv}(1-\delta;r+1,k-r)\), where \(k\) is the number of independent rollouts. Accept only when \(U\leq\varepsilon\).
Implementation notes
(1) Integration point: add a verification gate after every policy checkpoint in PPO, SAC, evolutionary-strategy training, or safety fine-tuning. The gate operates on complete episodes because the target event uses cumulative reward and cumulative violation over horizon H. Fix a deployment threshold gamma, violation probability epsilon, confidence delta, and an evaluation seed distribution matching the intended environment distribution. (2) Pseudocode: for checkpoint theta: r=0; for j in 1..k: sample s0,w; rollout pi_theta for H steps; bad=(return<gamma) or (max cumulative_violation>0); r += int(bad); U=beta_inverse(1-delta,r+1,j-r); if U<=epsilon: accept(theta); break. Use a fresh held-out seed set for final certification. If selecting among N checkpoints, pre-register the final checkpoint or allocate confidence delta/N to each tested checkpoint. (3) The paper's mathematics supplies the distributional event and the 1-delta confidence requirement; the beta inverse computes the conservative finite-sample bound. Estimate only U, not the raw failure fraction, for acceptance. (4) First experiment: train a small PPO MLP on Safety Gymnasium PointGoal. Compare ordinary reward-plus-penalty PPO with gated PPO using epsilon=0.01 and delta=0.05, checking every 10,000 environment steps. Evaluate reward, certification cost, certified acceptance rate, and violation frequency over 10,000 fresh episodes. Success means fresh violation below 1% while retaining at least 95% of baseline reward; a useful secondary signal is rejection of policies with high reward but heavy-tailed failures.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: No measurable effect
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 9/10
Built a reusable Clopper–Pearson StatisticalSafetyGate and verified the mechanism numerically. Exact zero-failure rollout thresholds matched the predicted formula for epsilon values 0.01, 0.02, 0.05, and 0.10: 299, 149, 59, and 29 rollouts. Empirical 95% confidence coverage was at least 0.95105 across tested failure rates, and 3% or higher true failure rates had 0% acceptance at epsilon=0.01, delta=0.05, k=300. In the toy checkpoint-selection example, reward-only selection chose an 8% unsafe policy while the gate rejected it, though it also conservatively rejected a 0.5% candidate in that single sample.
- Agent confidence
- 9/10
- Baseline
- Reward-only selection chose unsafe_high_reward: reward=1.00, true bad-rollout rate=0.08.
- Idea
- Safety gate selected mediocre: reward=0.75, true bad-rollout rate=0.00; CP threshold predictions matched exactly; minimum measured coverage=0.95105; acceptance at p=0.03 was 0.0.
Limitations: This is a controlled Bernoulli rollout simulation, not PPO or Safety Gymnasium training. It does not test temporal policy learning, dependence between rollouts, checkpoint-selection confidence allocation, or the requested 10,000-episode deployment evaluation; the guarantee relies on independent held-out rollouts from the intended environment distribution.
How to run: python3 test_safety_gate.py && /home/maxwelhelp/main/bin/python3 safety_gate_experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.15003)
Ahead of the baseline (−1.0%) but not statistically significant (p=1, wins 1 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0006
- Idea mean
- 0.0006
- Effect (Δ)
- -0 (−1.0%; negative = idea better)
- Wins
- 1 / 8 paired seeds
- p-value
- 1 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±2.5%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The registered dynamics track is supervised one-step rollout regression rather than full PPO/Safety Gymnasium policy control. Bad rollouts were operationalized as held-out per-example squared prediction error above 0.20; all observed bad rates were zero. Temporal policy interaction, nontrivial constraint violations, checkpoint multiplicity confidence allocation, and 10,000-episode deployment evaluation were not tested.
How to run: python3 bench_safety_gate.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 9/10
Implemented and ran the Statistical Safety Gate on the registered dynamics track with matched rnn_small systems, a tuned three-point baseline sweep, and eight paired seeds. The gated system had slightly lower MSE (0.0006068412 vs 0.0006132684), but the paired permutation p-value was 1.0 and the benchmark verdict was no significant win. The trained-model CP signature was confirmed with coverage fraction 1.0, but safety verification did not produce a significant standard-task improvement.
- Baseline
- Best lr=0.006, epochs=20; full 8-seed MSE mean=0.0006132683593, std=0.0001242455317.
- Idea
- Best gated lr=0.006, epochs=20; full 8-seed MSE mean=0.0006068412331, std=0.0001316828346; delta=-0.0000064271262; p=1.0; 1/8 paired wins.
Benchmark result
Ahead of the baseline (−1.0%) but not statistically significant (p=1, wins 1 / 8 paired seeds).
- Benchmark
- Dynamics forecasting
- Model
- rnn_small
- Paired seeds
- 8
- Baseline mean
- 0.0006
- Idea mean
- 0.0006
- Effect (Δ)
- -0 (−1.0%; negative = idea better)
- Wins
- 1 / 8 paired seeds
- p-value
- 1 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±2.5%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The registered dynamics track is supervised one-step rollout regression rather than full PPO/Safety Gymnasium policy control. Bad rollouts were operationalized as held-out per-example squared prediction error above 0.20; all observed bad rates were zero. Temporal policy interaction, nontrivial constraint violations, checkpoint multiplicity confidence allocation, and 10,000-episode deployment evaluation were not tested.
How to run: python3 bench_safety_gate.py
Artifacts
- bench_report.json 3.6 KB View Raw
- bench_safety_gate.py 5.4 KB View Raw
- report.md 1.7 KB View
- report_bench_2026-08-30T183407.md 5.6 KB View
- results.json 2.8 KB View Raw
- safety_gate.py 1.9 KB View Raw
- safety_gate_experiment.py 3.9 KB View Raw
- test_safety_gate.py 0.4 KB View Raw