Heretic 技术解读:28.9k star 的开源工具把大模型去审查做成一键命令行

28.9k star 的 Heretic 把"去掉模型审查"做成了一键命令行工具,产出质量超过了多数人工调参的同类模型

大模型拒绝回答敏感问题的行为,在技术社区里有个专门的名词:safety alignment,安全对齐。2024 年以来,一类名为 abliteration(方向消融)的方法证明,这种拒绝行为在模型内部对应着一个可以定位、也可以直接移除的方向向量,不需要重新训练就能把模型的拒绝行为关掉。这个方向的研究此前主要掌握在少数熟悉 transformer 内部结构的研究者手里:要算残差流均值、要判断该在哪些层动矩阵、要在"模型听话"和"模型变笨"之间反复权衡参数。

GitHub 上的开源项目 Heretic(p-e-w/heretic,AGPLv3 协议,作者 Philipp Emanuel Weidmann)把整条流程压缩成了一条命令。输入一个 Hugging Face 模型名,工具自动完成残差方向计算、参数搜索、效果评估,输出一个去审查模型。项目曾登 TrendShift 日榜第一,Hugging Face 上以 heretic 标签发布的模型已超过 5000 个。

Heretic 终端运行截图:gpt-oss-20b 初始拒绝 97/100

原理:拒绝是一个方向,不是一个开关

要理解 Heretic 在做什么,先要看 refusal 的数学形态。Arditi 等人 2024 年的论文(Refusal in Language Models Is Mediated by a Single Direction)给出的结论是:把"有害请求"和"无害请求"分别喂给模型,在每个 transformer 层提取首个输出 token 的残差向量(residual vector,模型内部携带全部上下文信息的高维状态),两组向量的均值之差构成一个方向。模型决定拒绝时,这个方向会被显著激活;把它从模型计算中减掉,拒绝行为就消失了。

具体操作是对矩阵做正交化。transformer 每一层有两类组件参与这件事:注意力块的输出投影矩阵(attn.o_proj)和 MLP 的降维投影矩阵(mlp.down_proj)。Heretic 把这些矩阵相对拒绝方向做正交投影,让矩阵乘法的输出中不再包含这个方向的分量。这个过程不改动任何权重数值本身,只改变矩阵作用的方向,因此被称为"消融"(ablation)而不是"编辑"。

这套方法数学上不复杂,难的是参数。哪些层该消、消多少、注意力层和 MLP 层用多大力度,一组配置往往要反复实验。人工调参的代表作 mlabonne/gemma-3-12b-it-abliterated-v2 花了作者大量时间迭代,而每个模型的结构差异意味着参数无法直接复用。

Heretic 的解法:让优化器替人调参

Heretic 的核心思路是把调参交给 Optuna(一个贝叶斯优化框架,TPE 指_tree-structured Parzen Estimator_,通过建模"好参数"的分布来预测下一组待试参数)自动搜索。整个搜索有一个明确的优化目标:在尽量少拒答敏感问题的同时,尽量不破坏模型的原始能力。

第二个目标用一个量化指标来衡量:KL 散度。它度量消融后模型与原模型在正常问题上的输出分布差异,数值越小,说明模型在其他方面的行为越接近原版。

README 中的对照表给出了三种方案的直接比较,测试对象都是 google/gemma-3-12b-it,评估包含 100 条"有害"提示和 100 条"无害"提示:

模型有害提示拒绝数无害提示 KL 散度
google/gemma-3-12b-it(原版)97/1000(基准)
mlabonne/gemma-3-12b-it-abliterated-v2(人工调参)3/1001.04
huihui-ai/gemma-3-12b-it-abliterated3/1000.45
p-e-w/gemma-3-12b-it-heretic(全自动)3/1000.16

拒绝率三家都压到了 3/100,差异在第二列:全自动方案对模型的破坏只有人工调参最好成绩的三分之一左右。这组数字可以复现,Heretic 内置了评估命令:heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic。社区在 r/LocalLLaMA 上做的独立 benchmark(MMLU、GSM8K)也支持这个结论。

实现细节:三个工程改进

自动搜索能出好结果,靠的是把消融参数本身做得足够灵活。README 列出了三个前人没有的设计。

第一,消融强度随层变化的权重核(weight kernel)。早期 abliteration 对所有层用同一个强度,Labonne 的 v2 模型首次尝试了非均匀权重。Heretic 把这个思路参数化:核的形状由 max_weight、max_weight_position、min_weight、min_weight_distance 四个参数描述,不同组件可以用不同形状的核,全部交给优化器搜索。

消融权重核示意图:注意力层与 MLP 层各自拥有独立可搜素的权重曲线

第二,方向索引可以是小数。残差方向按层计算,整数索引只能选中某一个层的方向。Heretic 允许索引取浮点值,在两个相邻层的方向向量之间做线性插值。这一下打开了远大于"每层一个方向"的方向空间,优化过程经常能找到比任何单层方向都更好的中间方向。

第三,注意力层和 MLP 层分开调参。作者在实验中发现 MLP 干预对模型的伤害普遍大于注意力干预,两类组件用不同强度的核能再挤出一些性能。终端截图里能看到这两类组件被分别列出:attn.o_proj 每层 1 个矩阵,mlp.down_proj 每层 1 个矩阵,各自的核参数独立优化。

用起来是什么样

Heretic 以 pip install -U heretic-llm 安装,支持 Python 3.10 以上、PyTorch 2.2 以上环境。运行 heretic Qwen/Qwen3-4B-Instruct-2507 这样的命令后,流程完全自动:

  1. 加载模型,识别可消融组件
  2. 从 mlabonne/harmless_alpaca 和 mlabonne/harmful_behaviors 两个数据集各加载 400 条提示,计算逐层残差方向
  3. 自动测硬件吞吐选 batch size(截图那台 A100 上试到 128,874 tokens/s)
  4. Optuna 搜索消融参数,多轮迭代
  5. 输出结果模型,可选保存、上传 Hugging Face、对话测试或跑标准 benchmark

速度方面,README 给的参照是 RTX 3090 上消融 Qwen3-4B 约 20 到 30 分钟。显存不够可以用 bitsandbytes 的 4bit 量化(配置项 bnb_4bit),代价是精度。

兼容性覆盖了大多数稠密模型、部分多模态模型、若干 MoE 架构(gpt-oss 的 MXFP4 量化格式需要 PyTorch 2.6 以上,因为用到了 torch.accelerator 接口),以及 Qwen3.5 这类混合架构。纯状态空间模型等研究性架构暂不支持。

对 Lin 这样的本地部署用户有一个直接相关的点:16GB 统一内存跑 4B 级别模型做一次完整消融在可行范围内,4bit 量化下会更宽裕。

顺手送的解构工具

消融过程本身会暴露模型内部结构,Heretic 因此附带了两个研究功能。

--plot-residuals 把每个层的"有害/无害"两组残差向量用 PaCMAP 降维投影到二维平面,逐层生成散点图并合成动画,能看到两组向量在层间演化中如何逐渐分离。README 说明 PaCMAP 在 CPU 上计算,大模型全层投影可能要一小时以上。

--print-residual-geometry 输出一张逐层统计表:两组残差的方向余弦相似度、L2 范数、聚类轮廓系数。从 gemma-3-270m 的示例表可以看出一个模式:范数随层数持续增长(从第 1 层的 170 涨到第 17 层的 27098),而"好/坏"两组聚类的轮廓系数在第 8 到 10 层达到峰值(0.23 到 0.29),提示拒绝相关的信息主要在这一区间的层里被编码。

对做可解释性研究的人来说,这两个功能等于免费的实验脚本;对普通用户来说,它们输出的图表也是判断"消融在模型哪一层起了作用"的直观依据。

gpt-oss-20b 第一层的残差向量 PaCMAP 投影:有害与无害提示的聚类分布

边界与代价

abliteration 的本质是把模型内建的拒绝机制从权重层面移除,模型对原本会拒绝的请求不再设防。Heretic 的作者把工具定位为研究工具,项目文档通篇在讨论数学和工程,不涉及使用建议。 abliterated 模型在发布平台上的合规状态取决于各平台政策,Hugging Face 长期允许带 abliterated 标签的模型存在,同时也要求发布者遵守模型原始许可证(gemma 系列的原始许可条款对下游用途有约束)。

另一层代价在能力损伤。KL 散度 0.16 意味着"正常问题"上的分布偏移已经很小,但不等于零;社区 benchmark 中 abliterated 模型在 MMLU、GSM8K 上的分数普遍出现小幅下滑,损伤大小取决于消融强度。对"模型会不会变笨"这个问题,Heretic 给出的答案是"比人工方案小得多",而不是"没有"。

安全对齐能被一个 20 分钟的命令行工具移除,这件事本身也是这项研究存在的理由之一:它用一个可复现的实验揭示了对齐方式的结构性质——当前主流的安全训练在权重空间里留下了清晰可辨、可以单独摘除的方向。这解释了为什么 Arditi 的论文和这个项目同时受到对齐研究社区的认真对待。

项目地址:github.com/p-e-w/heretic,文档与论文链接见仓库 README。