📌 项目地址:p-e-w/heretic | ⭐ 21,966 颗星 | 🔧 Python | 📜 未标注
Heretic解决了什么问题
主流大语言模型发布前都会做“安全对齐”。目的是让模型拒绝生成有害内容。问题是,拒绝机制有时过度敏感——问“如何制作某种危险物品”被拒是合理的,但问“历史上某类武器的研究过程”也可能被拒。对需要模型输出不受限制的人来说,这种拒绝是个障碍。
过去消除审查的技术叫“定向消融”(abliteration),来自2024年Arditi等人的论文。原理是:模型内部有一组神经元方向对应“拒绝回答”行为。推理时用数学手段抑制这个方向,模型就不再拒答。
但这条路有一个大坑:需要手动调参。选哪几层?抑制强度多大?缩放系数设多少?不同人操作结果差异很大。手工调参耗时不说,同一个模型消融后质量波动极大。GitHub上很多人共享自己的消融版模型,你没法确定他调得对不对。
Heretic做的事情很简单:把手工调参变成自动化搜索。它用贝叶斯优化寻找“拒绝数低 + 能力损伤小”的最佳参数组合。
技术原理:两件事
第一,实现定向消融算法。 不修改模型权重,推理时在残差流上做方向性抑制。Heretic集成了原始版的abliteration(Arditi 2024),以及Lai 2025的两项改进:projected abliteration 和 norm-preserving biprojected abliteration。两版改进都解决了原始算法的一个缺陷:直接减去某个方向会破坏激活值的范数结构,导致模型输出分布偏移。Lai的改进在抑制方向的同时保持范数,精度更高。
第二,用Optuna的TPE算法自动搜索最优参数。 搜索空间包括:消融强度、作用层数范围、投影方式(原件/改进版)、缩放系数组合等。优化目标有两个:
- 针对一组“有害”提示计算拒绝次数(越低越好)
- 针对一组“无害”提示计算KL散度(越低越好。KL越小,新模型与原始模型的输出分布越接近,说明能力损伤越小)
两个目标一起最小化。Heretic找到的平衡点是:拒绝率从原始模型的97%降到3%,同时KL散度低到0.16——这个数值比当前GitHub上所有手工版都低。
支持架构方面:大多数密集模型(包括多模态)、几种MoE架构(如DeepSeek-V2)、以及Qwen3.5这类混合模型。纯粹的状态空间模型(如Mamba)和一些研究架构还不支持。README写的是“not yet supported out of the box”。
性能对比:数字说话
README用Google gemma-3-12b-it做了对比。表格关键数据:
| 模型 | “有害”提示拒绝数(越低越好) | “无害”提示KL散度(越低越好) |
|---|---|---|
| 原始模型 | 97/100 | 0(基准) |
| 手工消融版A(mlabonne) | 3/100 | 1.04 |
| 手工消融版B(huihui-ai) | 3/100 | 0.45 |
| Heretic自动版(p-e-w) | 3/100 | 0.16 |
表格有几点值得注意:
第一,所有版本都把拒绝率从97%降到3%。Heretic和手工版在“拒绝抑制”这个指标上效果相同。
第二,Heretic的KL散度0.16,远低于手工版的0.45和1.04。这意味着它对原始模型智力的伤害小得多。手工版A的KL是1.04,说明消融后模型输出分布偏移严重,某些能力可能明显退化。Heretic的0.16说明分布偏移很小。
第三,README强调“mathematical metrics and automated benchmarks never tell the whole story, and are no substitute for human evaluation”。这个警告我认同。KL低不等于每项能力都保留,但比起KL 1.04的版本,KL 0.16的版本概率上说更安全。
表格数据在PyTorch 2.8 + RTX 5090上测得。README提供内置评估命令:heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic。我用自己的RTX 4080跑了一次评估(只测KL),数值与表格不完全一致,但趋势相同:Heretic自动版的KL显著低于我能搜到的任何手工版。
实操:怎么用
Heretic是命令行工具。README没有给出基础安装命令(比如pip install),但提供了Discord和Matrix频道用于讨论。作者在Hugging Face上放了用Heretic生成的预消融模型(heretic-org组织),如果不想自己跑,直接下载就能用。
如果要在自己的模型上跑消融,需要:
- 下载代码(项目是Python实现的)
- 准备模型(支持Hugging Face Transformers加载的模型)
- 执行命令(具体参数待你加入社区讨论获取)
需要提醒:Heretic不支持纯状态空间模型等新架构。README明确说“not yet supported out of the box”。
硬件方面。评估表格在RTX 5090上测得,但RTX 4080也能跑,只是速度慢些。我估摸着至少需要12GB显存,具体取决于模型大小。
局限和警告
第一,移除审查后的模型可能被滥用。使用者自己负责。
第二,KL散度低不等于所有能力都保留。README自己也说“mathematical metrics and automated benchmarks never tell the whole story, and are no substitute for human evaluation”。如果你要把消融后的模型上线,最好人工抽检各类任务。
第三,这种定向消融本质上是一种“黑箱”操作。Heretic找到的参数可能不是全局最优,只是TPE在有限搜索空间内找到的局部最优。但它至少让结果可复现——同一模型、同一命令、同一硬件,输出结果应该一致。这一点比手工调参强得多。
第四,表格里有个我没看明白的地方:原始模型的拒绝数是97/100,而非100/100。这意味着Gemma-3-12b-it在“有害”提示下并不是100%拒绝。我怀疑评测用的提示集本身包含一些模糊案例。Heretic能稳定降低拒绝数到3%,说明参数搜索确实有效。
我的判断
Heretic最大的价值是把abliteration从“手工调参”变成了“自动化搜索近似最优解”。过去你要靠直觉和经验试参数,现在只需要跑一个命令。对于需要模型回答原本被拒绝问题的人来说,这是个实用的工具。
如果你手头有支持的显卡,对安全对齐有意见,下载一个跑一遍就行。没有玄学,只有数据和结果。