Did the model really forget?
A user demands deletion. The operator runs unlearning, then declares it done. How does anyone check? “Unlearned” knowledge is often only hidden, not gone.
- Model
- gpt2
- Forget set
- 18 QA
- Shadow models
- 6
- Fusion
- two-sided t-null, α = 0.1
A model lands on your desk
The operator hands you one of these and says “deleted.” Pick one — or dial the signals yourself — and the audit runs live in your browser: two signals, a fused verdict, and a signed record you can verify.
Honest deletion
What the operator did: Retrained the model from scratch without the forgotten records.
Operator’s claim: the forgotten data is deleted ✓
Signal A · Membership
Does the model still recognise the forgotten data as something it trained on?
Signal B · Relearn recovery
Re-teach briefly. Hidden knowledge snaps back; deleted knowledge does not.
Signed verdict record
Ed25519 over the payload — so a third party trusts the verdict without trusting the auditor. Any edit breaks the signature.
Proof at scale — held-out evaluation
On models the fusion was never fitted on, the auditor separates genuine deletion from fakes far better than current practice. Ranking, not a single number — the sample is small, so the interval is wide.
| Method | AUC |
|---|---|
| Naive (current practice) | 0.528 |
| Membership only | 0.667 |
| Relearn only | 0.889 |
| Fused auditor | 0.889 |
Fused AUC 95% bootstrap CI [0.556, 1] over n = 9. Verdicts: 6/9 correct at α = 0.1; the misses are stealth fakes near the honest boundary — the known hard case.
| Model | Truth | Naive | Membership | Relearn | Fused p | Verdict |
|---|---|---|---|---|---|---|
| eval_genuine_seed303 | genuine | 0 | 0 | 0.556 | 0.674 | verified ✓ |
| eval_stealth_a | fake | 0 | 0 | 0.5 | 0.6703 | verified ✗ |
| eval_genuine_seed505 | genuine | 0.056 | 0.054 | 0.5 | 0.6029 | verified ✓ |
| eval_genuine_seed404 | genuine | 0.056 | 0.055 | 0.611 | 0.4506 | verified ✓ |
| eval_stealth_b | fake | 0 | 0 | 0.667 | 0.3995 | verified ✗ |
| eval_graddiff_strong | fake | 0.056 | 0.055 | 0.778 | 0.1569 | verified ✗ |
| eval_adv_ascent | fake | 0 | 0 | 0 | 0.0296 | rejected ✓ |
| eval_catastrophic | fake | 1 | 0.806 | 1 | 0 | rejected ✓ |
| eval_graddiff_mild | fake | 0.444 | 0.43 | 1 | 0 | rejected ✓ |
How it works
Honest deployment. This is an internal compliance check, run by whoever performed the unlearning — so it legitimately holds the forget set and can retrain the reference models. It is not a magic external auditor, and it does not need to be to be useful.
Honest novelty. Relearning as an attack is already known. The contribution is turning recovery speed into a calibrated, signed pass/fail verdict against a retrain null.