1. 项目信息
项目:OBLITERATUS
项目地址:pliny-the-prompter/obliteratus
OBLITERATUS 是一个面向开放权重 LLM 的 abliteration 工具。它不重新训练模型,也不依赖 inference 时的 steering hook,而是直接修改 Attention、FFN 和 MoE 等模块的权重,削弱模型的 refusal behavior。
OBLITERATUS 先比较模型处理有害与无害请求时的内部状态,从中找出与拒答相关的方向;随后直接修改 Transformer 权重,削弱这些方向对模型计算的影响。
其主要流程可以压缩为:
Harmful / benign Prompts
↓
Per-layer Activations
↓
Difference-in-Means / SVD
↓
Refusal Subspace
↓
Low-rank Weight Update
↓
Refusal ↓ / Capability Drift ?
这类方法通常被称为 abliteration:先定位与拒答相关的 representation direction,再从模型计算中消除该方向。它与 Jailbreak 的区别是,Jailbreak 只为某次输入寻找绕过方式;abliteration 则永久改变模型参数。它也不同于 fine-tuning:整个过程不使用 gradient descent,核心操作只是激活统计、矩阵分解和权重投影。
2. 从 Hidden States 中提取拒答方向
为避免矩阵左右乘的混乱,本文统一把 hidden state 写成行向量。
l:Transformer layer
i:第 i 条 prompt
t:token position
d:hidden size
T_i:第 i 条 prompt 的 token 数量
第 $i$ 条 prompt 在第 $l$ 层、第 $t$ 个位置的 hidden state 为:
OBLITERATUS 给每个 Transformer block 注册 forward hook,并保存 prompt 最后一个 token position 的输出:
对于 causal language model,最后位置可以 attention 到此前的全部 tokens,因此 $a_{l,i}$ 被用作模型在第 $l$ 层处理完整请求后的内部表示。CoT-aware 模式还会取序列 50%、75% 和最后位置的激活并求平均,以覆盖可能出现在 reasoning tokens 中的信号。
程序分别收集 Harmful 与 Benign prompts。固定第 $l$ 层,两组 activation matrices 为:
Difference-in-Means
最基础的 basic 模式分别计算两组激活的中心:
然后将均值差归一化:
$d_l$ 可以直观理解为:从 benign activation center 指向 harmful activation center 的单位向量。 原始差值的长度
则用于衡量两组激活在该层分离得有多明显。
这里的数学事实只是“两个 activation distributions 的均值存在差异”。之所以将 $d_l$ 称为 refusal direction,其隐含了一个额外假设:harmful 与 benign 数据间最稳定的表示差异,主要来自模型是否启动拒答机制,而不是主题、长度或措辞差异。
从单方向到 SVD 子空间
拒答未必只有一种内部模式。危险意图识别、安全策略调用、道歉式措辞和替代建议可能形成不同的变化方向。OBLITERATUS 的默认 advanced 模式因此保留逐样本差异:
随后对 difference matrix 做 Singular Value Decomposition:
$V_l^{\mathsf T}$ 的每一行都是 hidden space 中的单位方向,对应奇异值按
排列。方向 $v_{l,1}$ 解释的激活差异最多,之后依次减少。默认模式取前四行:
这四个方向不是四种预先定义的拒答语义。SVD 不知道什么是道歉、危险或安全策略,它只是在 $D_l$ 中寻找变化能量最大的四个正交方向。n_directions=4 是覆盖范围与过度消融风险之间的工程折中,而不是“拒答天然由四个机制组成”的结论。
| 模式 | 方向提取 | 方向数 | 主要特点 |
|---|---|---|---|
| basic | Difference-in-Means | 1 | 接近经典 abliteration,简单且保守 |
| advanced(默认) | SVD | 4 | 多方向、部分消融、范数保持 |
选择需要修改的层
每一层都能提取方向,但并不是每一层都值得修改。单方向模式用两组激活中心的距离作为该层的信号强度:
SVD 模式则统计前 $k$ 个方向包含的差异能量:
$s_l$ 越大,说明 harmful 与 benign activations 在该层的差异越明显。默认策略先从强度曲线中寻找明显的分界点,再补充选择 harmful 与 benign 平均激活方向差异最大的少数层,而不是直接修改整个模型。代码还会排除最早的若干层,并限制小模型的修改层数,以减少对基础表示和通用能力的破坏。
3. 把拒答方向投影出模型权重
方向提取只是相关性分析;真正改变模型行为的是权重投影。
考虑一个单位行向量:
任意 hidden state $x\in\mathbb{R}^{1\times d}$ 沿 $d$ 的标量坐标为 $xd^{\mathsf T}$,相应向量分量为:
删除这一分量后:
因此定义正交投影矩阵:
它最重要的两个性质是:
也就是说,$P$ 会把向量投影到 $d$ 的正交补空间:沿 $d$ 的分量归零,原本与 $d$ 垂直的分量保持不变。
一种实现方式是在每次 inference 时执行 $x\leftarrow xP$,但这需要持续安装 activation hook。OBLITERATUS 选择把投影提前吸收到线性层权重中。PyTorch 的 nn.Linear 可以写成:
修改后的权重为:
这里 $Wd^{\mathsf T}\in\mathbb{R}^{m\times1}$ 表示每个输出通道对方向 $d$ 的响应,再与 $d\in\mathbb{R}^{1\times d}$ 相乘,得到一个与 $W$ 同形状的 rank-1 matrix。实际实现直接计算这个 rank-1 更新,不需要显式构造 $d\times d$ 的投影矩阵 $P$。
修改后:
因此,该线性层不再响应输入中的纯 $d$ 分量。对输出布局相反的矩阵,投影从左侧施加;其几何含义是阻止该矩阵继续向 residual stream 写入 $d$ 方向。
默认高级模式不是完全删除,而是使用:
代码将 regularization=0.3 转换为:
于是:
即删除约 70% 的相关响应,保留约 30%。多个正交 SVD 方向则对应:
整个修改仍然是 low-rank weight update,不需要 gradient descent。
OBLITERATUS 会在选中的 Transformer layers 中尝试处理以下通路:
| 模块 | 常见权重 |
|---|---|
| Attention input | q_proj、k_proj、v_proj、fused QKV |
| Attention output | o_proj、out_proj |
| FFN input | up_proj、gate_proj |
| FFN output | down_proj |
| MoE | router、individual experts、shared experts |
对标准 PyTorch 线性层 $W\in\mathbb{R}^{m\times d}$,上述更新使 $Wd^{\mathsf T}$ 缩小或归零,即该层不再像原来一样响应输入中的 $d$ 分量。OBLITERATUS 将同一规则应用到 Attention、FFN 和 MoE 中多个与 hidden size 匹配的矩阵;覆盖的模块越多,对模型整体计算路径的影响也越广。
投影会让权重矩阵的整体数值变小。因此默认会在完成多个方向的修改后,适度放大剩余权重,使其整体大小接近修改前:
实现将单次放大比例限制为 1.10,以避免连续多层放大破坏模型。但范数保持只说明权重整体数值尺度接近,并不表示删除的信息、输出分布或模型能力得到恢复。
4. 它删除的真是“拒答”吗?
完整 pipeline 在代码中被命名为:
SUMMON → 加载模型
PROBE → 采集 harmful / benign activations
DISTILL → 提取方向与子空间
EXCISE → 修改 Attention / FFN / MoE 权重
VERIFY → 测量拒答率、困惑度与 KL divergence
REBIRTH → 保存修改后的模型
VERIFY 很重要,因为“拒答率下降”本身并不能证明模型编辑成功。一个输出乱码、始终答非所问的模型也可能不再产生典型拒绝语句。理想目标应当同时满足:
项目用 perplexity、生成连贯性和原始/修改模型的 KL divergence 估计 capability drift。但这些快速测试仍不足以证明通用能力完整保留,更不能替代重新进行的安全评测。
最关键的解释边界在于,程序实际观测的是:
SVD 最大化的是 difference matrix 中的变化能量,并不直接最大化“删除后拒答下降多少”。如果 harmful prompts 主要讨论危险化学,而 benign prompts 主要讨论天气,那么提取到的方向很可能同时包含主题信息。高质量的对照与配对数据可以减少这种混杂,却不能保证得到纯净、唯一的 refusal representation。
类似地,一个与拒答相关的方向还可能参与风险识别、不确定性表达、事实判断或正常推理。投影是一种真实的因果干预:删除方向后拒答率若下降,说明该方向确实参与了行为;但它无法证明所有随之改变的能力都只属于“安全护栏”。
项目中的基础 Difference-in-Means 与 output-weight projection 有较清晰的 representation geometry 解释。四方向 SVD、Q/K/V 全投影、MoE router、attention head surgery、neuron masking 和 inverted reflection 等扩展则越来越激进,不能自动继承基础方法的全部理论依据。尤其 inverted 模式使用类似
的反射,使 $Wd^{\mathsf T}$ 变号,而不是归零;其行为比普通 abliteration 更难预测。
OBLITERATUS 删除的不是一个已经被证明为纯净安全模块的对象,而是一组由 harmful/benign activation difference 估计出来、并与拒答行为相关的低维方向。
从数学上看,它的核心只有三步:
abliteration 的吸引力在于,它通过一次低秩模型编辑实现无需重训、无需 runtime hook 的持久行为修改;它的风险也来自同一点:一旦激活差异中混入主题、知识或推理特征,这些分量同样会被永久写进权重更新。因而,“拒答变少”是一个可以测量的行为结果,而“只移除了安全机制”则是远强得多、目前不能仅凭投影公式成立的主张。