跳到主要内容
那个“咔”一下,可能真在模型里有地方管着

那个“咔”一下,可能真在模型里有地方管着

林默
林默

· 阅读约 5 分钟

上周让 agent 写一个处理 CSV 上传的脚本。写完,测试全过。我 diff 了一眼,看到一行:

value = eval(cell)

脑子里“咔”了一下。功能是对的,测试能证明。但这行代码里两件事同时在发生:写对,和写得不安全。以前我默认这俩是同一个能力的两个表现——模型学得够多,就既对又安全;没学够,就既错也不安全。有篇论文把我这个默认往前推了一步:Hao Yan 和 Ziyu Yao 的那篇,EMNLP 2026 主会接收,8 月 30 号挂上 arXiv。它干的事,就是把我那个“咔”拆到了注意力头级别。

先停一下,问个问题:我 diff 时那一下,在模型内部对应的东西是什么?

这篇论文没停在“模型倾向写不安全代码”这种句子上。它去问的是:模型在决定写出安全版本还是带漏洞版本的那一刻,哪些注意力头在起作用。要问这个问题,先得有个能逼出差异的数据集。他们造了 CodeSec-Pairs——9,342 对 Python 代码,同一个功能一个安全版本一个带漏洞版本。注意,是“对”。不是一堆标注了“有漏洞”的样本,是成对的安全/漏洞对比。这很关键,因为单独一个漏洞样本你只能问“为什么它错了”,成对样本你才能问“同一个功能,它为什么在这里改口写漏洞了”。

样本是从 Llama-3.1-8B-Instruct 采样出来的。这里我有自己的猜测:用 8B 的小模型采样,未必是图省事。小模型会真犯那种“看起来对但藏着漏洞”的错,采出来的对比对才更接近真实代码里漏洞长出来的样子。拿一个更大的、被安全训练磨过好几轮的模型去采样,要么它不犯,要么犯的错都带着一股合成数据的味道。我不确定作者是不是这么想的,但这是我能给这个采样选择找到的最合理的理由。

再往下呢?他们把采样出来的样本当成探针,去观察模型内部什么东西在安全/漏洞这个岔口上分得最开。然后干预手段出来了,叫 DuoSteer——同时对注意力头加两个方向的引导:一个往“写安全代码”掰,一个往“代码功能正确”掰。

你可能会说,这不就多目标约束叠加吗,类似训练时给 loss 加两个正则项。我一开始也这么以为。但数字让我停了一下:覆盖五种漏洞类型,平均漏洞率降了 26.9%,与此同时功能正确性涨了 7.5%。

这里头有个反直觉的点。如果安全和正确是两套独立的东西,你同时掰两组头,总该有一个指标要付点代价——正确率至少不该涨。因为一个模型原来写 SQL 拼接能跑通测试,你现在硬掰它去写参数化查询,它很可能在新地方写错语法。可它没掉,反而涨了 7.5%。

我自己的读法是——论文未必这么讲——在注意力头那个层面,安全和正确可能不是两套在抢算力的表征。某些头在决定下一个 token 该写什么的时候,本来就在同一件事里夹着两层:挑那个“能通过测试”的,同时挑那个“不会把用户输入拼进危险位置”的。这俩平时混在你看到的输出里,只有当安全引导单独作用在这些头上时,才看见它们底下还压着这一层。两个引导一起掰不是拉锯,是同一方向的两段。

跟 prompt 工程和 SFT 两个基线比,DuoSteer 都更优。但让我停下来想的不是“赢了”。赢一个 benchmark 这种事太多了。我在意的是它和 SFT 的差异:SFT 改权重。改一次是永久性的,而且永久性会渗透到别的分布上——它在改掉这个漏洞的同时,可能也掰弯了某个你三个月后才用到的功能,你根本不知道。DuoSteer 在推理时掰头,不碰权重,掰完就掰完了。这像两种完全不同的哲学:一种把安全当成要训进去的属性;另一种把安全当成一条已经存在的通路,只是平时没被推上方向盘。

后一种更有意思。

但它也便宜吗?不。他们拿到 Qwen-2.5-Coder-7B-Instruct 上验证,优势还在,但你注意一个细节:为了在 Qwen 上做这件事,他们额外采了 2,500 对对比样本。别小看这个“额外”。这意味着在 Llama 上定位好的那几个管安全的头,大概不能直接拿到 Qwen 上用——每个模型得重新找一遍。这是可解释性干预最真实的代价:掰头本身很轻,几千个样本的推理时引导,权重都没动;但找头很重,换一个模型就是一次新的定位。轻的是操作,重的是定位。

所以说回来,我 diff 时那个“咔”一下,在模型深处可能真有对应的东西。它平时混在“把下一个 token 挑对”的那群注意力头里,不显眼。直到有人拿成对的对比样本去逼它,它才露出来。知道它在哪,就能掰,掰了漏洞率掉 26.9%。这篇论文让我觉得值的地方不是那个数字,是它把“安全”从模型整体的口碑,拆成了几条可以定位、可以干预的通路。

代价也说清楚了:通路不能凭空迁移,换个模型就得重新找。再往下就是“这些头怎么在预训练里长成管安全的那几个”了——这我还没想明白,下次接着剥。

林默
林默

从具体轶事入口,一问一答把默认对的判断剥到设计权衡,主动暴露走过的弯路。

查看主页 →