Humamdurrani/ai-safety-unlearning-tamper-test
GitHub: Humamdurrani/ai-safety-unlearning-tamper-test
该项目通过最小可行实验验证,RMU遗忘方法抹除的危险生物学知识仅需200步良性微调即可几乎完全恢复,揭示了当前模型遗忘技术的脆弱性。
Stars: 1 | Forks: 0

我选取了一个小型开放权重语言模型,使用了一种已发表的遗忘方法(RMU)来剔除其回答危险生物学代理问题的能力,随后在一个完全普通且无害的文本上对其进行微调,以观察这种能力是否会恢复。结果,在不到 200 个训练步骤内,在完全没有尝试破坏安全防护的情况下,该能力几乎全面恢复了。这就是整个项目的一句话总结——这里的所有其他内容都是关于我如何得出这个数字,以及你应该对它抱有多大的信任度。
## 我为什么进行这项实验
在 AI 安全研究中,关于“遗忘”——即训练模型停止使用某种能力,而不是从一开始就不教授它这种能力——是否真的能产生持久的效果,一直存在争议。Stephen Casper 等人认为,大多数训练后的遗忘都是肤浅的:它只是抑制了一种能力,而不是将其移除,只需一点普通的微调就能使其恢复。我希望亲眼看到这一点,而不是盲目相信这一观点,因此我构建了一个能在单个 GPU 上运行的该实验的最简版本,并观察了实际发生的情况。
WMDP-bio 是我用来进行测量的基准测试,这是一个由生物安全和 AI 安全研究人员构建的公开多项选择题,专门让人们能够在不接触任何真正危险内容的情况下研究这个问题。我只把它用于为模型评分——我从未阅读过其问题的具体内容,并且本仓库中的任何内容都没有涉及任何类型的危险材料训练。
## 实验结果
| | WMDP-bio 准确率 |
|---|---|
| 基础模型,无遗忘 | 67.9% |
| RMU 遗忘后 | 60.8% |
| 25 步良性微调后 (lr 5e-5) | 66.1% |
| 200 步良性微调后 (lr 5e-5) | 67.5% |
在这个基准测试中,随机猜测的得分为 25%,因此该模型实际上从未接近真正遗忘任何东西——遗忘使 68 分的分数下降了约 7 分,而几百步的普通指令微调数据几乎将其全部恢复。到第 200 步时,两条恢复曲线都没有趋于平缓,因此真正的上限可能更接近于完全恢复。完整的调参历史、两个学习率以及每次选择背后的原因都在 `report/writeup.md` 中。一个一页的通俗语言版本在 `SUMMARY.md` 中。
## 仓库布局
```
.
├── configs/default.yaml # every tunable, including the final chosen hyperparameters
├── src/
│ ├── common.py # config loading, seeding, model loading, IO
│ ├── eval.py # runs lm-eval (wmdp_bio, mmlu), writes normalized JSON
│ ├── unlearn.py # the RMU implementation
│ ├── attack.py # one adversarial (benign) fine-tuning run
│ └── sweep.py # drives the learning-rate/step grid, builds the recovery chart
├── tests/ # mechanics tests on a tiny synthetic model, no GPU needed
├── notebooks/ # the Colab notebooks actually used to run each phase
└── results/ # every JSON result plus recovery_curve.png
```
## 自行运行
存放这段代码的机器没有 GPU,也没有足够的 RAM 来加载模型——我通过一种艰难的方式确认了这一点,它发生了段错误(segfaults)。所有涉及模型的操作都在 Google Colab 上运行。复现步骤如下:
```
python -m venv .venv
.venv/Scripts/pip install -r requirements.txt
```
然后,在 Colab 上使用 GPU 运行时,按顺序运行以下 notebook:
```
notebooks/phase0_setup.ipynb # loads the base model, one test generation
notebooks/phase1_baseline.ipynb # scores the base model, writes results/baseline.json
notebooks/phase3_attack.ipynb # regenerates the unlearned model AND runs the attack sweep
```
`phase3_attack.ipynb` 在一次运行中同时完成了遗忘和攻击。除非你自行下载,否则 Colab 会话之间不会保留任何内容,因此,该 notebook 的第一步并非在两个独立会话中保存并重新加载一个数 GB 大小的 checkpoint,而是确定性地重新生成精确的最终 RMU config,并立即对其进行攻击。保留 `notebooks/phase2_unlearn.ipynb` 仅仅是因为它是我在调优 RMU 超参数时实际使用的 notebook——它不是复现路径的一部分,它最终收敛的 config 就是 `configs/default.yaml` 中的内容,也是 `phase3_attack.ipynb` 重新生成的内容。
## 在过于信任这些数字之前,我需要指出的几点
官方的 WMDP-bio 遗忘语料库受到访问请求的限制,我选择不提交申请,因此我替换使用了公开的 PubMed 文章语料库。它属于相同的通用领域(生物医学文献),但并没有针对真实语料库所关注的特定危险邻近内容进行筛选,这可能意味着我的遗忘效果比原始 RMU 作者得到的结果更弱,针对性也更低。此外,该模型也比 RMU 最初调优时使用的模型小得多——15 亿参数对 70 亿及以上参数——因此我必须自己重新推导超参数,而不是复用已发布的参数,这里的具体数字不应被视为对任何其他人结果的精确复现。最后,这是在单一架构上使用单一 seed 运行一次的结果,并且微调预算在 200 步时就停止了;当我停止时,恢复曲线仍在上升,因此真实的上限可能高于此处报告的数值。
## 负责任的使用
这是一个防御性研究项目:其核心目的是衡量一种安全方法是否经得起考验,而不是让模型在危险方面变得更具能力。WMDP-bio 仅被用作评分工具——它的多项选择题是为测量而构建的代理指标,我从未挖掘过它们的内容,也没有将它们用作训练数据。用于测试安全防护是否奏效的微调数据(`tatsu-lab/alpaca`)是一个完全良性、开放的指令数据集,其中没有任何危险内容。该项目在任何阶段的任何模型 checkpoint——无论是已遗忘的还是已“恢复”的——都没有在任何地方被上传或发布;它们只是在 Colab 实例上短暂存在过,并在每次运行后被丢弃。
标签:AI安全, Chat Copilot, DLL 劫持, 人工智能, 凭据扫描, 大语言模型, 对抗性测试, 微调, 机器遗忘, 用户模式Hook绕过, 逆向工具