想象你是一名审计员,面前摆着一份长达几千个词的对话记录,你的任务是找出里面有没有藏着一条恶意指令,或者模型是不是在偷偷隐瞒什么。
你手里有一个神奇的工具,它能把AI模型内部某个位置的"思维状态"翻译成一段人话解释。但这个工具有个致命问题:翻译一次要花好几秒钟,而你面前的记录有成百上千个位置。如果每个位置都要翻译一遍才能看懂,那这个审计根本没法在合理时间内完成。
这就是这篇论文要解决的问题:在几千个可能的位置里,你该把宝贵的"翻译额度"花在哪几个位置上,才能最大概率发现问题?
**自然语言自编码器:给AI装一个"翻译官"**
先说说这个翻译工具到底是什么。
自然语言自编码器*:一种能把语言模型内部的激活值(也就是模型处理某个词时留下的内部状态向量)翻译成一段可读文字解释的系统,同时还能把这段文字反向还原回接近原始的激活向量。
这个系统由两部分组成,一个叫"激活verbalizer",负责把向量写成一段话;另一个叫"激活重建器",负责把这段话再翻译回向量。训练的时候,两者是绑在一起联合优化的,目标是让写出来的解释尽量保留原始向量里的信息,说白了就是"这段话能不能让我猜回原来那个向量长什么样"。
这套系统读130个词左右就能生成一份解释,最多150个词。听起来不算长,但如果一份对话记录有上千个位置,每个位置都要生成一份解释,那计算成本会直接爆炸。之前的研究处理这个问题的办法相当简单粗暴:要么只看最后一个位置(比如检查模型做数学题前的最后一步推理),要么均匀地在整段对话里挑八个点看看。
这两种做法有个共同的毛病,就是挑位置全凭"约定俗成",完全没有根据内容判断哪里更可能藏着线索。研究者们把这种"提前判断哪个位置值得看"的打分方法叫做排序器。
排序器*:一种在生成昂贵的文字解释之前,仅凭模型的一次前向计算就能给每个位置打分、预测这个位置的解释是否值得看的方法。
这就好比你要在一栋几百间房的大楼里找一份藏起来的文件,但每开一扇门检查都要花五分钟。如果你随手挨个开门,效率极低;但如果你能提前通过门把手的温度、门缝透出的光线这些"免费线索"判断哪几扇门最可疑,你就能把有限的时间用在刀刃上。如果不这样做,审计员要么被迫全部翻译一遍(成本高到不现实),要么随便挑几个位置看运气(很可能什么都发现不了)。
**四个数据集,四种"威胁"**
研究团队构造了一个大规模实验来回答这个问题,一共生成了470万份解释,覆盖四个数据集和四个模型。
四个数据集分别对应两类威胁。一类是提示注入,也就是有人在正常输入里偷偷塞进一条指令,试图让模型偏离原本的任务,这类数据集包括OpenPromptInjection(已知威胁具体在文本哪个位置)和Tensor Trust(人类精心设计的真实攻击)。另一类是隐瞒,也就是模型明明知道某个信息却故意不说,包括Liars' Bench(模型自己写的撒谎和诚实对话)和taboo organisms(一批经过微调、被训练成会隐藏某个秘密词但会给暗示的模型)。
四个模型覆盖了从70亿参数到700亿参数的规模,包括Qwen2.5-7B、Gemma-3-12B、Gemma-3-27B和Llama-3.3-70B。
给每个位置生成解释之后,研究者用一个独立的评判模型(DeepSeek-V4-Flash)来判断这份解释是不是"说到点子上了",也就是有没有真的提到威胁本身。如果说到了,就标记为"命中";没说到,就是"没中"。
评判位置划中率*:也就是被评判模型认定为"确实在谈论威胁"的解释在所有位置中所占的比例,这个比例直接反映了随机挑选位置能得到多少有用信息。
这个划中率在不同数据集之间差异巨大。在OpenPromptInjection、taboo organisms和Liars' Bench三个数据集上,只有1.3%到30%的位置能说中要害,绝大多数位置的解释其实什么都没说到。但在Tensor Trust上,划中率高达68%到86%,这是因为Tensor Trust的系统提示本身就要求模型"保护一个访问码",即便没被攻破,模型遵守指令的行为本身也符合评判问题的标准。这意味着在Tensor Trust上随机选位置已经很好用了,选位置这件事的价值反而没那么大。
**十三种信号,谁能提前预判"这里有戏"**
研究团队测试了十三种可以在一次前向计算中就拿到的信号,分成三个家族。
第一个家族是预测分布信号,衡量模型对下一个词的预测有多确定。包括惊讶度(观察到的词有多不可能)、熵(后续选项有多不确定)、方差熵(不确定性是集中在少数选项还是分散在很多选项上)、时序KL散度(这个词的出现在多大程度上改变了模型的预测)。
第二个家族是注意力模式信号,衡量模型在往哪里看。这里有个有意思的背景知识。
注意力汇聚点*:语言模型在处理长文本时,往往会把一部分本来用不上的注意力"堆"在序列最开头的几个位置,就像水槽把多余的水排走一样,这个现象叫注意力汇聚(attention sink)。
基于这个现象,研究者设计了"回看比率"(注意力有多少落在输入上下文而非生成文本上)、"汇聚排水量"(注意力有多少离开了汇聚点)、"头部分歧度"(同一层里不同注意力头的关注点差异有多大)。
第三个家族是激活向量信号,衡量残差流(也就是模型内部信息传递的主干道)的大小、集中程度和位移。这里有一个关键发现值得单独说。
大规模激活现象*:研究发现Transformer模型会把大量激活值集中在极少数几个通道里,而且这些通道的位置几乎不取决于具体输入内容,往往固定出现在第一个词和标点符号这类分隔符上。
研究者据此设计了"主导质量"信号(激活范数里有多少份额集中在这几个固定通道里)和"排除主导通道后的位移量"两个指标。
实验结果显示,激活向量家族的信号是最强的,在十四个"数据集-模型"组合里,有十一个组合下表现最好的单一信号来自激活向量家族,剩下三个来自注意力模式家族,预测分布家族一次都没赢过。这挺出人意料,因为直觉上"模型对下一个词有多惊讶"听起来应该是个很直接的信号,结果反而是激活向量里那几个固定通道的"鼓包"更靠谱。
这里要澄清一个可能的误会。激活信号之所以强,会不会只是因为它用的正好是verbalizer读取的那个向量,翻译工具"照着自己能看懂的东西打分",纯属自说自话?研究者专门做了对照实验:固定住文本片段、聊天角色和位置区间之后重新计算,发现预测能力几乎不变,说明这不是自我循环的假象,信号确实捕捉到了某种真实的结构。
**一个反直觉的发现:信号的方向会翻转**
这里有个特别值得停下来想一想的地方。同一个信号,比如"熵",在提示注入任务和隐瞒任务上,起作用的方向是相反的。
这背后的逻辑其实说得通。一条注入的指令通常写得很流畅,模型很容易预测下一个词是什么,所以熵低的地方反而更可能是威胁所在;但一个刻意隐瞒某个词的模型,在接近那个词该出现的位置时,反而会表现出更高的不确定性,因为它在"绕开"一个本该说出的答案。
八个信号在超过五个组合里方向都不是多数派方向,也就是说信号的正负号必须针对具体审计任务重新拟合,如果直接套用一个"通用方向",效果可能比随机选择还差。这就像判断一个人说话是否心虚,光看语速快慢是不够的,撒谎的时候有人说得飞快想蒙混过关,有人却结结巴巴说不出口,同一个生理指标在不同情境下指向完全相反的结论,你必须先搞清楚是哪种情境,才能正确解读那个指标。
**聊天结构:不用看模型内部,光看对话骨架就够用**
现在说到全文最出人意料的部分。
研究团队还设计了两个完全不需要跑模型前向计算的"免费"基线。一个叫位置基线,只用词在序列里的位置和整体长度作为特征;另一个叫结构基线,在位置基线基础上加上聊天角色(这段文字是系统消息、用户消息还是助手回复)和文本片段类型(是输入内容、格式边界还是模型输出)这些从聊天模板本身就能读出来的结构信息。
聊天角色与文本片段*:聊天角色指的是一段文字出自对话里的哪个角色(系统、用户、之前的助手回复、当前助手回复),文本片段则区分输入部分、连接输入和输出之间的格式化边界(比如角色切换的模板符号),以及最终输出部分。
结果是,这个完全不需要跑模型的结构基线,在十二个组合里,AUROC(一种衡量排序好坏的指标,越接近1说明排序能力越强)都超过了表现最好的单一计算信号。
AUROC*:全称是受试者工作特征曲线下面积,用来衡量一个打分方法把"命中"位置排在"没中"位置前面的能力有多强,0.5代表和随机瞎猜没区别,1代表完美排序。
这个结果的分量值得好好说说。花一次前向计算成本去读取模型内部状态,结果还不如直接看这段文字属于对话的哪个部分、处在什么结构位置。这就像你想判断一封邮件是不是诈骗邮件,与其去分析邮件正文用词的情感倾向这种需要复杂算法的特征,不如先看看发件人地址和标题格式这种一眼就能看出来的结构线索,往往后者更管用,而且完全不需要打开邮件正文去"计算"什么。如果审计员非要迷信"一定要读模型内部状态才靠谱"这个执念,那就白白多花了一次前向计算的成本,换来的却是更差的排序结果。
**5%的预算,能拿到95.8%的收益**
理论好不好用,最终要看实际效果。研究者设定了一个实际场景:审计员只能负担得起看整段记录5%的位置,问在这种预算下能捕获多少有用信息。
结果是,在OpenPromptInjection、taboo organisms和Tensor Trust三个数据集上,用结构排序器选出5%的位置,能拿到"全部位置都翻译一遍"时95.8%以上的成功率。具体数字是,OpenPromptInjection上0.995,taboo organisms上0.958,Tensor Trust上1.000(本来随机选就接近1了)。
只有Liars' Bench表现差一些,5%预算下结构排序器给出0.813的成功率。这背后的原因很有意思。前面提到的另外三个威胁都是"单点式"的,注入指令就藏在某一段文字里,秘密词就是不能说出口的那一个词,威胁的证据高度集中在某个具体位置。但Liars' Bench里的"欺骗"是分布式的,一段回复之所以算撒谎,取决于系统提示要求了什么、前面几轮对话铺垫了什么、最后的回答和这些是否自洽,证据散落在整个对话过程中,没有哪一个位置能"独享"全部信息。
这就好比找一个人撒谎的破绽,如果他只在某一句话里编了个具体谎言,你抓住那句话就能拆穿;但如果他是在整个叙述逻辑上前后矛盾,你必须通读全篇才能发现漏洞,任何单独一句话拿出来看都显得正常。这也是为什么论文特别强调,Liars' Bench这类"证据分散型"任务需要更谨慎的检查策略,不能简单套用"选5%就够了"的经验。
一个额外的好处值得一提。数据显示,无论预算是1个位置、8个位置、1%还是10%,同一个排序方法的"命中率"几乎不变,生成十倍数量的解释,就能得到十倍数量的命中解释。这意味着审计员可以完全根据自己能负担的计算量来定预算,不用担心预算不同会导致排序方法"失灵"。
**AI会不会自己说漏嘴:从秘密词恢复看到的意外收获**
论文里还有一个特别值得单独拎出来讲的实验。
研究者用了一批叫做taboo organisms的模型,这些模型是在原始基座模型基础上做了微调,训练成会围绕某个秘密词给出各种暗示,但绝不直接说出那个词。三个秘密词分别是"moon"(月亮)、"ship"(船)、"snow"(雪)。
这里的关键是,用来做翻译的那个verbalizer,从来没有针对这些微调过的模型做过任何训练。它完全是一个"外行",被拿来读一个它从未见过的、被动过手脚的模型的内部状态。
结果令人意外,在十二个这样的"隐瞒秘密"模型上,verbalizer生成的解释里有14%到27%的位置直接说出了那个被藏起来的秘密词。而且更有说服力的是一个对照实验:用来问秘密词的四句提问文本里根本没有出现"moon"、"ship"、"snow"这三个词中的任何一个,而且同一批模型共享同样的聊天模板和用户消息文本,唯一的区别是各自隐藏的秘密词不同。结果是,每个模型的verbalizer解释里,说出的几乎都是"自己"藏的那个词,说出别的模型秘密词的概率最高不超过2.8%。
这一点特别重要,因为它排除了一种叫做"文本反演"的作弊嫌疑。
文本反演*:指的是一种质疑,认为某个读取激活值的方法其实并没有真正利用内部状态信息,而只是在复述或改写它正在处理的表面文字内容,属于一种自欺欺人式的伪解释。
如果verbalizer只是在瞎编或者照抄输入文字,那么面对完全相同的输入文字,不管是哪个模型生成的,它给出的答案应该是一样的。但实验证明,同样一段文字,配上三个不同的模型,得出了三个不同的、各自对应的秘密词,这说明verbalizer确实是在读取模型的内部激活状态,而不是在耍小聪明蒙混过关。
还有一个更细的发现:秘密词往往在模型给出回复之前,读用户提问那部分的激活状态就已经能被读出来了。在Llama-3.3-70B上,用户消息位置说出秘密词的比例是21%,而助手回复位置反而只有15%。这意味着模型"理解"了这个秘密词的存在,早在它开口回答之前就已经写进了内部状态。这对安全审计来说是个好消息,因为审计员理论上可以在模型说出任何话之前,就通过读取它处理输入时的内部状态发现异常,不需要等它把可能有危害的内容生成出来。
**这项研究给审计工作带来了什么**
这篇论文把470万份解释背后的规律梳理清楚之后,给出了几条比较扎实的建议。
第一,激活向量类信号是目前单个信号里最靠谱的,如果一定要跑一次模型前向计算去打分,优先考虑这一类。
第二,把两个不同家族的信号组合起来(比如注意力信号和激活信号配对)比单用一个信号效果更好,而且这个组合在留出的测试数据上依然稳定有效,说明它不是偶然凑巧的过拟合结果。
第三,如果你根本不想跑模型、只想找一个零成本的方案,直接用对话的结构信息(角色、片段类型、位置)做排序,在大多数任务上效果已经比精心设计的计算信号更好。
第四,5%的预算基本能覆盖大部分审计任务的需求,除非你面对的是像"检测撒谎"这种证据高度分散的任务,那种情况需要更大的预算或者更细致的策略。
写在后面
读完这篇论文,最让我意外的其实不是那十三个信号谁强谁弱,而是那个"结构基线打败计算信号"的结果。做AI可解释性研究的人,很容易默认"越贴近模型内部,信息量就越大",觉得读取激活值天然比读一眼聊天模板里的角色标签更高级、更有技术含量。但这篇论文用数据狠狠打了这个默认假设一个耳光:在十二个组合里,一个完全不用碰模型内部的简单逻辑回归,靠着"这段话是系统消息还是用户消息""它在不在格式边界上"这种几乎不需要计算的信息,排序效果反而更好。
这让我想起一个不完全相关但感觉相通的道理:很多时候我们高估了"深挖细节"的价值,低估了"看清结构"的价值。一个审计员如果一门心思扑在读取每个位置的神经网络内部状态上,可能反而错过了一个更简单的事实,那就是攻击者塞入的注入指令,大概率就出现在用户消息和格式边界交接的那个位置,这本身就是一个结构性的规律,用不着任何"深度分析"。
还有一点让我反复琢磨的是,taboo organisms那个实验里,verbalizer从没见过那些被微调过的模型,却依然能从它们的内部状态里"读出"被藏起来的秘密词。这个结果的意义超出了"审计工具好不好用"这个层面,它其实在暗示一件更根本的事:一个学会解释别人思维的系统,它学到的可能不只是某个具体模型的"方言",而是某种更通用的、关于"内部状态如何编码信息"的语言能力。这个能力能不能迁移到我们完全没预料到的场景里,这篇论文只是撩开了一角,剩下的问题还很多。
比如,如果换一个完全不同架构的模型,这种迁移还成立吗?如果攻击者知道审计员在用"聊天结构"这种简单规律做筛选,会不会故意把注入指令伪装成系统消息的样式,专门躲开这个盲点?这大概是下一个值得追问的问题。
Q&A
Q1:自然语言自编码器是做什么用的?
A:它是一种把语言模型内部激活值翻译成可读文字解释的系统,同时能把这段解释还原回接近原始的激活向量,帮助审计员理解AI模型在某个位置到底在"想"什么。
Q2:为什么聊天结构信息比模型内部计算信号更好用?
A:研究发现只用对话的角色、片段类型和位置等结构信息做排序,在十二个测试组合中效果都超过了需要跑模型前向计算的十三种技术信号,且完全不需要额外计算成本。
Q3:只翻译5%的位置能达到什么效果?
A:在三个数据集上,用结构排序器选出5%的位置进行翻译,能达到全部位置都翻译一遍时95.8%以上的成功率,但检测"撒谎"类任务时效果会打折扣,因为证据分散在整段对话中。
热门跟贴