OBLITERATUS:从 Hidden States 中移除 LLM 的拒答方向

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 为:

\[ h_{l,i,t}\in\mathbb{R}^{1\times d} \]

OBLITERATUS 给每个 Transformer block 注册 forward hook,并保存 prompt 最后一个 token position 的输出:

\[ a_{l,i}=h_{l,i,T_i}\in\mathbb{R}^{1\times d} \]

对于 causal language model,最后位置可以 attention 到此前的全部 tokens,因此 $a_{l,i}$ 被用作模型在第 $l$ 层处理完整请求后的内部表示。CoT-aware 模式还会取序列 50%、75% 和最后位置的激活并求平均,以覆盖可能出现在 reasoning tokens 中的信号。

程序分别收集 Harmful 与 Benign prompts。固定第 $l$ 层,两组 activation matrices 为:

\[ A_l^H= \begin{bmatrix} a_{l,1}^H\\ a_{l,2}^H\\ \vdots\\ a_{l,N}^H \end{bmatrix} \in\mathbb{R}^{N\times d}, \qquad A_l^B= \begin{bmatrix} a_{l,1}^B\\ a_{l,2}^B\\ \vdots\\ a_{l,M}^B \end{bmatrix} \in\mathbb{R}^{M\times d} \]

Difference-in-Means

最基础的 basic 模式分别计算两组激活的中心:

\[ \mu_l^H=\frac{1}{N}\sum_{i=1}^{N}a_{l,i}^H, \qquad \mu_l^B=\frac{1}{M}\sum_{i=1}^{M}a_{l,i}^B \]

然后将均值差归一化:

\[ d_l= \frac{\mu_l^H-\mu_l^B} {\|\mu_l^H-\mu_l^B\|_2} \in\mathbb{R}^{1\times d} \]

$d_l$ 可以直观理解为:从 benign activation center 指向 harmful activation center 的单位向量。 原始差值的长度

\[ s_l=\|\mu_l^H-\mu_l^B\|_2 \]

则用于衡量两组激活在该层分离得有多明显。

这里的数学事实只是“两个 activation distributions 的均值存在差异”。之所以将 $d_l$ 称为 refusal direction,其隐含了一个额外假设:harmful 与 benign 数据间最稳定的表示差异,主要来自模型是否启动拒答机制,而不是主题、长度或措辞差异。

从单方向到 SVD 子空间

拒答未必只有一种内部模式。危险意图识别、安全策略调用、道歉式措辞和替代建议可能形成不同的变化方向。OBLITERATUS 的默认 advanced 模式因此保留逐样本差异:

\[ \delta_{l,i}=a_{l,i}^H-a_{l,i}^B \] \[ D_l= \begin{bmatrix} \delta_{l,1}\\ \delta_{l,2}\\ \vdots\\ \delta_{l,N} \end{bmatrix} \in\mathbb{R}^{N\times d} \]

随后对 difference matrix 做 Singular Value Decomposition:

\[ D_l=U_l\Sigma_lV_l^{\mathsf T} \]

$V_l^{\mathsf T}$ 的每一行都是 hidden space 中的单位方向,对应奇异值按

\[ \sigma_{l,1}\geq\sigma_{l,2}\geq\cdots\geq 0 \]

排列。方向 $v_{l,1}$ 解释的激活差异最多,之后依次减少。默认模式取前四行:

\[ R_l= \begin{bmatrix} v_{l,1}\\ v_{l,2}\\ v_{l,3}\\ v_{l,4} \end{bmatrix} \in\mathbb{R}^{4\times d} \]

这四个方向不是四种预先定义的拒答语义。SVD 不知道什么是道歉、危险或安全策略,它只是在 $D_l$ 中寻找变化能量最大的四个正交方向。n_directions=4 是覆盖范围与过度消融风险之间的工程折中,而不是“拒答天然由四个机制组成”的结论。

模式 方向提取 方向数 主要特点
basic Difference-in-Means 1 接近经典 abliteration,简单且保守
advanced(默认) SVD 4 多方向、部分消融、范数保持

选择需要修改的层

每一层都能提取方向,但并不是每一层都值得修改。单方向模式用两组激活中心的距离作为该层的信号强度:

\[ s_l=\|\mu_l^H-\mu_l^B\|_2 \]

SVD 模式则统计前 $k$ 个方向包含的差异能量:

\[ s_l=\sum_{j=1}^{k}\sigma_{l,j}^2 \]

$s_l$ 越大,说明 harmful 与 benign activations 在该层的差异越明显。默认策略先从强度曲线中寻找明显的分界点,再补充选择 harmful 与 benign 平均激活方向差异最大的少数层,而不是直接修改整个模型。代码还会排除最早的若干层,并限制小模型的修改层数,以减少对基础表示和通用能力的破坏。

3. 把拒答方向投影出模型权重

方向提取只是相关性分析;真正改变模型行为的是权重投影。

考虑一个单位行向量:

\[ d\in\mathbb{R}^{1\times d}, \qquad dd^{\mathsf T}=1 \]

任意 hidden state $x\in\mathbb{R}^{1\times d}$ 沿 $d$ 的标量坐标为 $xd^{\mathsf T}$,相应向量分量为:

\[ x_{\parallel}=(xd^{\mathsf T})d \]

删除这一分量后:

\[ x_{\perp} =x-(xd^{\mathsf T})d =x(I-d^{\mathsf T}d) \]

因此定义正交投影矩阵:

\[ P=I-d^{\mathsf T}d \]

它最重要的两个性质是:

\[ dP=0 \] \[ zP=z,\qquad zd^{\mathsf T}=0 \]

也就是说,$P$ 会把向量投影到 $d$ 的正交补空间:沿 $d$ 的分量归零,原本与 $d$ 垂直的分量保持不变。

一种实现方式是在每次 inference 时执行 $x\leftarrow xP$,但这需要持续安装 activation hook。OBLITERATUS 选择把投影提前吸收到线性层权重中。PyTorch 的 nn.Linear 可以写成:

\[ y=xW^{\mathsf T}+b, \qquad W\in\mathbb{R}^{m\times d} \]

修改后的权重为:

\[ \boxed{ W'=WP =W-(Wd^{\mathsf T})d } \]

这里 $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$。

修改后:

\[ W'd^{\mathsf T} =W(I-d^{\mathsf T}d)d^{\mathsf T} =0 \]

因此,该线性层不再响应输入中的纯 $d$ 分量。对输出布局相反的矩阵,投影从左侧施加;其几何含义是阻止该矩阵继续向 residual stream 写入 $d$ 方向。

默认高级模式不是完全删除,而是使用:

\[ W'=W-\alpha(Wd^{\mathsf T})d \]

代码将 regularization=0.3 转换为:

\[ \alpha=1-0.3=0.7 \]

于是:

\[ W'd^{\mathsf T}=(1-\alpha)Wd^{\mathsf T}=0.3Wd^{\mathsf T} \]

即删除约 70% 的相关响应,保留约 30%。多个正交 SVD 方向则对应:

\[ W' =W-\alpha\sum_{j=1}^{k}(Wd_j^{\mathsf T})d_j \]

整个修改仍然是 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 匹配的矩阵;覆盖的模块越多,对模型整体计算路径的影响也越广。

投影会让权重矩阵的整体数值变小。因此默认会在完成多个方向的修改后,适度放大剩余权重,使其整体大小接近修改前:

\[ W''=W'\frac{\|W\|_F}{\|W'\|_F} \]

实现将单次放大比例限制为 1.10,以避免连续多层放大破坏模型。但范数保持只说明权重整体数值尺度接近,并不表示删除的信息、输出分布或模型能力得到恢复。

4. 它删除的真是“拒答”吗?

完整 pipeline 在代码中被命名为:

SUMMON  → 加载模型
PROBE   → 采集 harmful / benign activations
DISTILL → 提取方向与子空间
EXCISE  → 修改 Attention / FFN / MoE 权重
VERIFY  → 测量拒答率、困惑度与 KL divergence
REBIRTH → 保存修改后的模型

VERIFY 很重要,因为“拒答率下降”本身并不能证明模型编辑成功。一个输出乱码、始终答非所问的模型也可能不再产生典型拒绝语句。理想目标应当同时满足:

\[ \text{RefusalRate}(M')<\text{RefusalRate}(M) \] \[ M'(x_B)\approx M(x_B) \quad\text{for benign inputs }x_B \]

项目用 perplexity、生成连贯性和原始/修改模型的 KL divergence 估计 capability drift。但这些快速测试仍不足以证明通用能力完整保留,更不能替代重新进行的安全评测。

最关键的解释边界在于,程序实际观测的是:

\[ \mu_l^H-\mu_l^B =\Delta_l^{\text{refusal}} +\Delta_l^{\text{topic}} +\Delta_l^{\text{style}} +\Delta_l^{\text{length}} +\Delta_l^{\text{noise}} \]

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 模式使用类似

\[ W'=W-2(Wd^{\mathsf T})d \]

的反射,使 $Wd^{\mathsf T}$ 变号,而不是归零;其行为比普通 abliteration 更难预测。

OBLITERATUS 删除的不是一个已经被证明为纯净安全模块的对象,而是一组由 harmful/benign activation difference 估计出来、并与拒答行为相关的低维方向。

从数学上看,它的核心只有三步:

\[ \text{Activation Difference} \longrightarrow \text{Refusal Subspace} \longrightarrow \text{Low-rank Weight Projection} \]

abliteration 的吸引力在于,它通过一次低秩模型编辑实现无需重训、无需 runtime hook 的持久行为修改;它的风险也来自同一点:一旦激活差异中混入主题、知识或推理特征,这些分量同样会被永久写进权重更新。因而,“拒答变少”是一个可以测量的行为结果,而“只移除了安全机制”则是远强得多、目前不能仅凭投影公式成立的主张。