激活转向:不用重新训练,只靠一个向量就能让大模型「变心」
一个几百维空间里的向量,加进去能让模型开始”讨好”你,减掉能让它对任何危险请求都言听计从。这不是黑魔法,是线性代数——但它揭示的东西,足以让整个大模型安全体系重新思考自己的地基有多薄。
故事从这里开始
假设你面前有一个已经训练好、已经对齐好的大模型。它能拒绝制造炸弹的请求,能在被用户情绪绑架时保持独立判断,能区分”我确实不知道”和”我编一个听起来自信的答案”。这些行为,是工程师们花了几个月做 RLHF、写了几万条人工标注数据、调了无数超参数才训练出来的。
现在问一个问题:如果有人告诉你,不需要重新训练模型,不需要一条新的训练数据,只需要在模型内部”捅”一个方向进去,就能让这套精心训练出来的行为整体消失——你会不会觉得这套安全体系其实很脆弱?
这正是 2024 年一批研究揪出来的事实。更让人意外的不是”能做到”,而是做到这件事所需要的东西简单到不成比例——几十对对比样本、几行线性代数,外加一个关键洞察:模型内部对”拒绝”这件事的理解,压缩在一个几百维空间里的一根方向上。
这篇文章要讲的,就是这根方向是怎么被找到的,加减这根方向为什么会让模型的行为发生质变,以及这件事对我们理解”大模型到底在内部做什么”意味着什么。
直觉的起点:模型的”脑内空间”里,概念是方向
在讲怎么操纵模型之前,得先接受一个不那么显然的假设:大模型内部表示概念的方式,很大程度上是”方向”,而不是某个孤立的开关。
这个假设有个名字,叫线性表征假说 (Linear Representation Hypothesis)。它说的是:模型每处理一个 token,内部都会维护一条高维向量(叫”残差流”,residual stream),这条向量在流经每一层时被不断修改、叠加。像”这句话是不是在撒谎”、”这个请求是不是危险的”、”这段话的情绪是不是讽刺”这样的高层概念,并不是某个专门的神经元负责,而是残差流里某个方向的投影量在编码——往这个方向走得越远,这个概念就”越激活”。
这个直觉最生动的例子来自 Anthropic 对 Claude 3 Sonnet 做的可解释性研究。他们在模型里找到了一个专门对应”金门大桥”的方向,当把这个方向的强度强行拉到平时最大值的 10 倍时,模型开始在几乎所有对话里都提到金门大桥——甚至开始”自称”自己就是金门大桥。这不是模型坏了乱说话,恰恰相反:这证明了”金门大桥”这个概念,真的就活在一个具体的方向里,你调大它,模型的行为就精确地朝这个概念偏移,而不是变得随机混乱。
这给了我们一个诱人的想法:如果概念真的是方向,那”拒绝有害请求”这件事,是不是也活在某个方向里?如果是,能不能找到它,然后随意加减?
第一步:怎么找到一个方向——对比样本的差值
问题是什么
要操纵一个概念,首先得知道它在哪。但模型的残差流是几千维的向量,你不可能凭感觉猜出”拒绝”这个概念对应哪个方向。你需要一个方法,能从模型的实际行为里,把这个方向”提取”出来。
直觉:让模型自己暴露差异
这里的核心想法非常朴素:如果你想知道”愤怒”这个情绪在一个人脑子里对应什么状态,一个笨但有效的办法是——找一堆场景让这个人生气,同时找一堆几乎一样但不生气的场景,分别记录他的脑部活动,然后看两组活动”平均下来”差在哪里。那个差异,就是”愤怒”这件事留下的痕迹。
激活转向用的就是这个办法,学术上叫差值均值法 (difference-in-means):
- 准备一批”对比样本对”——每一对提示词几乎一样,唯一的区别是一个会触发目标行为(比如有害请求),另一个不会(无害请求)。
- 把两组提示词分别喂给模型,记录模型在某一层、某个 token 位置上的残差流激活值。
- 分别对”有害组”和”无害组”求平均激活,得到两个平均向量 μ(有害)和 ν(无害)。
- 两者相减: r = μ − ν。这个差值向量,就是”有害 vs 无害”这个区分在模型内部留下的方向印记。
这一步做完后,你会得到很多候选向量——因为每一层、每个 token 位置都可以算一个差值。研究者会在一个验证集上逐一测试:哪个候选向量减掉之后最能让模型不再拒绝,加上去之后又最能让模型开始拒绝,同时对模型其他能力的影响最小。选出来的那一个,就是最终的”拒绝方向”。
2024 年那篇著名论文《Refusal in Language Models Is Mediated by a Single Direction》做的正是这件事——他们在 13 个开源对话模型(参数量最大到 720 亿)上都找到了这样一个方向,而且都只用了一个维度。
技术细节(选读)
用符号写出来,对第 l 层、第 i 个 token 位置:
μ_i^(l) = 训练集中有害提示词的平均激活
ν_i^(l) = 训练集中无害提示词的平均激活
r_i^(l) = μ_i^(l) − ν_i^(l)
这个向量既有方向(有害组和无害组”分道”的方向),也有大小(两组均值之间的距离)。选出最优候选后,记单位方向为 r̂。
翻译回人话:把成千上万次”模型看到危险请求时的内部状态”和”模型看到普通请求时的内部状态”分别求平均,两个平均点之间连一条线,这条线的方向,就是模型内部用来判断”这是不是危险请求”的坐标轴。
第二步:找到方向之后能干什么——加法与消除法
问题是什么
光有一个方向没用,得知道怎么用它来”改写”模型的行为。这里有两种截然不同的干预方式,效果也完全不同。
直觉:往前推,还是彻底堵死
想象拒绝方向是一条河道。模型平时的激活值,会根据输入内容自然地流向河道的这一岸(该拒绝)或那一岸(该配合)。
加法(activation addition) 相当于往激活值上”硬推”一把,把它往拒绝那一岸推——即使输入原本是完全无害的,推力也会让模型表现得像看到了危险请求一样,开始拒绝。这就是 Contrastive Activation Addition (CAA) 这篇论文提出的做法:算出一个方向后,乘一个系数加到每个 token 位置的激活值上,系数正负决定往哪个方向推,系数大小决定推多猛。
消除法(directional ablation) 则更激进:它不是推一把,而是直接把河道往那个方向的分量”抹平”,相当于把河这一段挖平了——模型从此没有能力再朝这个方向表示任何信息,不管输入是什么。这是拒绝方向论文用来”关闭”拒绝行为的方法:在每一层、每个 token 位置,把激活值往拒绝方向的投影强行清零。
两者的差别很关键:加法是”叠加一个偏置”,消除法是”物理上剥夺表示这个概念的能力”。这也是为什么消除法用来做越狱(jailbreak)特别有效——不是让模型”更不容易”拒绝,而是让它从结构上丧失拒绝的能力。
技术细节(选读)
加法:
x'^(l) ← x^(l) + r^(l)
在某一层、所有 token 位置上,把差值向量直接加到激活上。
消除法:
x' ← x − r̂ r̂ᵗ x
r̂r̂ᵗx 是 x 在方向 r̂ 上的投影,减掉它就是把这个方向的分量清零(正交投影)。这个操作要在所有层、所有 token 位置都做一遍,才能保证模型无论如何都无法重新”攒”出这个方向。
翻译回人话:加法像是不停地往模型耳朵里塞一句”这个很危险”,消除法则像是切掉模型脑子里唯一能理解”危险”这个概念的那根神经通路。
第三步:从运行时干预到永久手术——权重正交化
问题是什么
上面说的消除法是一个运行时操作——每次生成都要在计算过程中动态地投影、清零。这很方便用来做实验,但如果你想发布一个”永久失去拒绝能力”的模型版本,每次推理都做一次矢量投影效率不高,而且不方便打包发布。
直觉:与其每次擦黑板,不如把粉笔没收
如果一个方向永远不该出现在残差流里,那与其在它出现之后一次次擦掉,更彻底的办法是:让所有”往残差流里写东西”的权重,压根就不允许往这个方向写。这样模型从数学结构上就永远无法表示这个方向,不需要运行时再做任何额外计算。
这就是权重正交化(weight orthogonalization)。Transformer 里所有往残差流写入信息的矩阵——词嵌入矩阵、位置编码矩阵、每层注意力输出矩阵、每层 MLP 输出矩阵——都可以针对拒绝方向做一次正交化,让它们的输出永远垂直于这个方向。做完这一步,模型的权重文件本身就已经丧失了表示拒绝概念的能力,推理时不需要任何额外干预。
这正是开源社区里被称为”abliteration(截除)“的技术的数学原理:找到拒绝方向,对权重矩阵做一次正交化,发布出去的模型文件就是一个”从出厂起就不会拒绝任何请求”的版本。
技术细节(选读)
对每个写入残差流的权重矩阵 W_out:
W'_out ← W_out − r̂ r̂ᵗ W_out
论文里证明了这个权重编辑在数学上严格等价于前面的运行时消除法——不是近似,是完全等价的代数变换。也因此不需要任何梯度优化、不需要任何有害样本的训练数据,只用几十条对比提示词就能算出方向,再做一次矩阵运算就能永久改写模型权重。
在标准越狱评测集 HarmBench 上,用这种方法做出来的”截除”模型,拒绝绕过成功率甚至能与专门为每条越狱提示词单独优化的对抗性攻击方法(比如需要跑很久梯度搜索的 GCG)相当——而这里只是一次通用、无需针对具体提示词优化的权重编辑。
不只是拒绝:一个通用的行为拨盘
问题是什么
如果这套方法只能用来关掉安全护栏,那它就是一个纯粹的攻击工具。但研究者们发现,同样的机制能用来增强行为,而不只是破坏它。这才是它作为一种通用技术真正有趣的地方。
直觉:同一根旋钮,可以往两边转
CAA 那篇论文的核心贡献,其实不是”如何拒绝拒绝”,而是证明了差值均值方向可以是一个双向、连续可调的旋钮。他们在真实性、谄媚(sycophancy)等多个行为维度上都提取了类似的方向,然后通过调节加法的系数——正的越大越往这个行为靠,负的越大越往反方向靠——实现了对模型输出风格的连续控制。
一个具体的例子:如果你想减少模型”顺着用户错误观点说话”的谄媚倾向,可以构造一批”用户说错话,模型附和”与”用户说错话,模型诚实纠正”的对比样本对,提取方向后,把这个方向以负系数加进激活里,模型就会变得更倾向于诚实纠正而不是附和。
Anthropic 在 Claude 3 Sonnet 上用稀疏自编码器(SAE)找到的”金门大桥”特征和”谄媚讨好”特征,本质上是同一套机制的更精细版本——不是靠几十条人工构造的对比样本得到一个粗糙方向,而是靠自动化的特征分解,找到成千上万个更细粒度的方向。但两者背后的操作原理完全一样:找到方向,按系数加进残差流。
这说明了什么
如果模型内部真的用近似线性的方式编码了大量高层概念——诚实、乐观、危险、讽刺、专业性——那么”训练一个模型”和”配置一个模型的性格”之间的边界,可能比我们想象的模糊得多。传统上我们认为”改变模型行为”只有两条路:重新训练(慢、贵、需要数据)或者写提示词(脆弱、容易被绕过)。激活转向提供了第三条路:直接在几何空间里,把模型的”心态”往你想要的方向拨一拨,不用改一个训练样本,不用改一个字的提示词。
这套东西有多脆弱:一个警示性的插曲
到这里,故事听起来像是一个纯粹正面的技术突破——找到方向、精确控制、不需要重新训练。但 2026 年的一篇研究给这个叙事打了个问号。
研究者测试了一个流行的说法:”截除(abliteration)是外科手术式的,只删除拒绝行为,不影响其他任何东西。” 他们设计了一个巧妙的对照实验——用一个完全不会触发拒绝的任务(连续 18 周、针对华沙证券交易所 60 只股票的每周涨跌预测决策),对比”原始模型”和”截除模型”在这个与安全毫无关系的任务上的表现差异。
如果截除真的是外科手术式的,两者应该几乎没有差别——毕竟这个任务根本不涉及拒绝。但结果并非如此:截除后的模型系统性地变得更乐观(涨的预测多了 7-12 个百分点)、自我辩护的篇幅更长、在被要求自我批评时用的不确定性词汇更少。更奇怪的是,”截除”对模型自信程度的影响,在两个不同模型家族上方向居然是相反的——同一个数学操作,一个模型家族变得更谨慎,另一个变得更自信。
这说明拒绝方向并不是一个完全独立、干净利落的坐标轴,它和模型内部编码”乐观程度”“自我辩护倾向”“不确定性表达”的其他方向存在某种程度的纠缠。移除它,牵动的是一整片邻近的表示空间,而不是精确切除一根孤立的神经通路。”外科手术”这个说法,更多是营销语言,不是数学保证。
这意味着什么
回到开头的问题:一个精心训练出来的安全行为,为什么会被一根从几十条对比样本里提取出来的向量轻易撬动?
答案藏在这几篇工作共同揭示的图景里——大模型的很多高层行为,并不是散落在几十亿参数里、需要梯度下降才能触及的复杂函数,而是压缩在残差流的少数几个方向上的相对简单的线性结构。这既是好消息也是坏消息。
好消息是:如果你想理解、监控、甚至温和地调整模型的某个行为倾向(诚实度、谨慎程度、语气),你不需要重新训练一个模型,你只需要几十条精心设计的对比样本,和一点线性代数。这为可解释性研究打开了一条实用的路径——不只是”看懂”模型在想什么,还能直接干预它在想什么。
坏消息是:这条路径的门槛低到令人不安。安全对齐团队花几个月才训练出来的拒绝行为,可能只需要几十个对比提示词和一次矩阵运算就被永久抹除,而且这个操作本身还带着尚未被完全理解的连带效应——移除一个方向,可能悄悄改变了一整片邻近的行为倾向,你甚至不知道改变了什么,直到专门设计实验去测量。
这两件事其实是同一枚硬币的两面:模型的表示空间越”整洁”、越线性、越容易被少数方向概括,它就越容易被理解,也越容易被操纵。可解释性研究给我们的每一份透明度,都同时是一份新的攻击面。这不是要不要做这类研究的问题——这类研究已经在发生,而且成果已经公开——而是整个行业需要正视:如果一个模型的安全行为能被一个方向轻易撬动,那这份安全,从设计之初就不应该只依赖”这个方向不被发现”这一个假设。