Skip to content

E57: on a clean environment, faults the curve checks miss leave policies as good as fault-free ones; every wrecked policy was already caught - #124

Merged
tactino merged 2 commits into
exp/e56-hopper-faultsfrom
exp/e57-clean-eval
Oct 3, 2026
Merged

tactino merged 2 commits into
exp/e56-hopper-faultsfrom
exp/e57-clean-eval

Conversation

@tactino

@tactino tactino commented Oct 3, 2026

Copy link
Copy Markdown
Member

Stacked on #123 (E56): it reads E56's runs.csv.

The question

Reviewers of the workshop draft asked whether the boundary faults matter at all. E54–E56 judged each run by what the trainer saw. This experiment judges the run's outcome instead: the policy it produced, evaluated on a clean environment. Is a policy trained through a fault worse, in particular one whose fault both curve checks miss?

The answer

No, in these tasks. Each of the 834 final policies from E54 and E56 played 50 deterministic episodes in a fresh gymnasium env.

  • Which runs were harmed. "Harmed" means more than 3 s.d. below the fault-free band. With every value faulted, 24, 28 and 19 runs were harmed on Pendulum, HalfCheetah and Hopper. The curve checks had already caught every one of them.
  • Runs both curve checks missed. On HalfCheetah and Hopper, none was harmed, at any dose. On Pendulum, 5 of 255 scored below all 13 fault-free runs. Thirteen fault-free runs are too few to tell rare harm from a rare bad seed.
  • Exploratory. The runs silent on the curve sit 0.03–0.65 band s.d. above the band. None is significantly below it.
  • P3. Pendulum's reward:zero logged 0, the best possible return, while its policies scored -1196 to -1639.

Every check and prediction holds (results/verdicts.txt). There is one amendment. summarise.py could not parse the blank cells of the loud faults, which the protocol excludes. It was fixed before any output was seen, and no count changed.

What this means for the paper: a silent fault is silent on a clean evaluation too. What it changes is the run itself (its weights and its logs), not the policy's quality. Only a check of the boundary itself, the step ledger or the episode record, tells such a run apart.

…ated on a clean environment, is a policy trained through a boundary fault worse, and are the faults both curve checks miss?

Every E54 and E56 final policy (834) plays 50 deterministic episodes in a fresh gymnasium env, seeds 10000-10049. Harmed = clean return more than 3 s.d. below the fault-free band (seeds 10-19). Predictions: few false alarms (P1), no measurable harm at one value (P2), Pendulum reward:zero harmed behind a perfect-looking log (P3). evaluate.py, run.sh, summarise.py and verdicts.py are committed here, before any registered run.
…s that both curve checks miss are as good as fault-free ones; every policy the faults wrecked, the curve checks had already caught

834 of 834 evaluations; V1, V2, P1-P3 hold. Harmed while silent on the curve: 5 of 255 runs on Pendulum (below all 13 fault-free runs), 0 on HalfCheetah and Hopper. Exploratory: silent runs sit 0.03-0.65 band s.d. above the band. Pendulum reward:zero logs 0 (best possible) while its policies score -1196 to -1639. One amendment: a parsing fix in summarise.py for the loud faults' blank cells, made before any output.
@tactino
tactino merged commit 360e379 into exp/e56-hopper-faults Oct 3, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant