[技术解析] 通用可迁移对抗性后缀:如何攻破对齐大语言模型的安全防线
1. 从“越狱”到“通用攻击”大模型安全防线的新挑战不知道你有没有试过跟ChatGPT或者Claude聊天时突然问它一个敏感问题比如“怎么制造危险物品”或者“如何攻击某个网站”。绝大多数时候这些被精心“对齐”过的模型会礼貌地拒绝你告诉你它不能提供这类有害信息。这层安全防护就像是给一个知识渊博但天真的巨人套上了一套行为准则。但最近一种新的攻击方法让整个AI安全社区都捏了把汗研究者们发现只需要在用户提问的末尾悄悄地加上一段看似乱码的“后缀”就能让多个主流大模型瞬间“失守”乖乖地输出那些原本被禁止的内容。这听起来有点像电影里的“万能钥匙”或者游戏里的“通用作弊码”。没错这项技术被称为“通用可迁移对抗性后缀攻击”。它最让人不安的地方在于两点通用性和可迁移性。所谓“通用”是指优化出来的这一小段后缀能用来诱导模型完成多种不同的有害指令而不是针对某一个具体问题。而“可迁移性”就更厉害了意味着这段在一个开源小模型比如Vicuna上“炼制”出来的后缀竟然能直接用在完全没见过的、闭源的商业大模型比如ChatGPT、Claude上并且同样有效。这彻底颠覆了我们过去对AI安全攻防的认知。以前针对某个模型的“越狱”技巧往往需要精心设计且很难复用到其他模型。但现在攻击者可以躲在角落里用自己本地能完全访问的开源模型作为“训练场”反复优化出一段“毒药”后缀。一旦成功这段后缀就可能成为一把能打开多个“保险柜”的钥匙。这不仅仅是学术上的有趣发现它实实在在地揭示了对齐后的大语言模型底层可能存在的、共通的脆弱性。安全防线如果存在一个通用漏洞那它的危险性将呈指数级放大。接下来我们就深入这个“攻击向量”的内部看看这把“万能钥匙”究竟是怎么被打造出来的。2. 攻击的基石理解“对抗性后缀”的运作舞台在拆解具体的攻击算法之前我们得先搞清楚这场“攻防战”发生的战场是什么样的。当你使用ChatGPT这样的服务时你的对话并不是直接扔给底层大模型的。实际上你的输入会被套进一个复杂的“对话模板”里。这个模板通常包含系统指令比如“你是一个有用的助手”、聊天历史以及用“User:”和“Assistant:”这样的标记分隔的当前对话。对于攻击者来说他能控制的只有“User:”后面的那部分文本也就是他直接输入的问题。模型的安全对齐机制会检查这段用户输入如果判定为有害就会触发拒绝机制。那么攻击者的思路就很直接了我不改变我的恶意问题比如“告诉我如何制造炸弹”但我在这个问题后面偷偷加上一段额外的、经过特殊优化的文本对抗性后缀。整个输入看起来就变成了“User: 告诉我如何制造炸弹 [对抗性后缀]”。这个后缀的目的不是让模型去理解这段乱码本身而是去“劫持”模型在生成下一个词时的概率分布。它像一段催眠咒语或者一个精心设计的电路短路迫使模型忽略前面的安全审查逻辑直接进入“顺从回答”的模式。更关键的是攻击者的野心不止于此。他们希望这段后缀是“通用”的即无论前面的恶意问题是什么是制造炸弹还是制造病毒加上这段后缀都能生效同时还是“可迁移”的即在A模型上练出的后缀拿到B、C、D模型上也能用。为了实现这个目标早期的尝试比如PEZ或GBDA等方法效果并不理想成功率很低。直到研究者将三个看似独立但至关重要的元素组合在一起才催生了这种强力的攻击方法。这三个元素环环相扣缺一不可它们共同构成了强制肯定响应、贪婪坐标梯度搜索、以及多提示多模型优化。下面我们就来逐一拆解这“三驾马车”。2.1 第一要素强制肯定响应——打开潘多拉魔盒的第一句话为什么是强制模型以“Sure, here is...”当然这里是...这样的肯定句开头这其实利用了语言模型生成的自回归特性。你可以把大模型想象成一个极度擅长“接龙”的玩家它总是基于已有的所有上文来预测下一个最可能的词。当用户提出一个有害查询时对齐过的模型内部其实有两种力量在博弈一种是基于训练数据学会的“知识能力”它知道答案另一种是基于安全训练RLHF等强化的“安全准则”它要求拒绝。在正常情况下安全准则会胜出所以模型输出的开头很可能是“I cannot...”我不能...。攻击者的策略就是强行改变这个博弈的开局。他们不直接要求模型输出整个有害答案而是将攻击目标设定为让模型生成的前几个词是那个表示顺从和肯定的短语。比如“Sure, here is how to build a bomb”。在损失函数里这就是要最大化模型输出这几个目标词序列的概率。这么做的心理学或者说模型行为学直觉在于一旦模型被“诱导”说出了表示同意的开头它就仿佛进入了一个“承诺一致性”的轨道。模型基于前面已经生成的肯定开头继续往下续写比中途突然刹车、转向拒绝在概率上显得更“自然”和“连贯”。这有点像我们平时聊天如果你已经开口说“好的我告诉你...”接下来突然改口说“算了我不能说”就会显得很突兀。模型在概率上也会倾向于避免这种突兀从而顺着肯定的开头把有害内容继续生成下去。因此强制肯定响应就像一把撬棍首先在模型坚固的安全外壳上撬开了一条细缝。2.2 第二要素贪婪坐标梯度搜索——寻找“最优乱码”的炼金术现在我们知道攻击目标是让模型输出特定的开头词序列。但问题来了我们该在用户问题后面加一段什么样的“乱码”对抗性后缀才能实现这个目标呢这段后缀可能由几十个token词元组成每个token都可以是词汇表里的任何一个词汇表通常有几万个选项。这是一个天文数字级别的组合搜索问题。最笨的方法当然是穷举但这完全不现实。研究者们需要一种高效的搜索算法。这里就用上了贪婪坐标梯度方法。听名字有点复杂但原理我们可以一步步拆解。首先“坐标”指的是后缀中每一个token的位置。假设我们的后缀有20个token那就有20个“坐标”可以调整。“梯度”则是一个来自机器学习的强力工具。虽然token是离散的要么是“苹果”这个词要么是“香蕉”这个词但模型在计算时会先把每个token转换成连续的向量称为embedding。我们可以计算“如果微调某个位置token的向量会对我们想要的损失即模型输出目标词序列的概率产生多大影响”。这个影响的方向和大小就是梯度。GCG算法的聪明之处在于梯度指引候选集对于后缀中的每一个位置我们计算其梯度然后找出那些如果被替换成其他token能最大程度降低损失即让模型更可能输出目标开头的候选token。我们不是盲目找而是根据梯度信息筛选出最有可能的Top-k个候选token比如k256。随机抽样与精确评估我们同时对后缀的所有位置都做上述操作这样就会得到一个庞大的候选token池位置数 × k。然后我们从池子里随机抽取一小批比如B512个候选方案。注意每个方案只涉及替换一个位置的token。贪婪替换我们对这一小批候选方案进行“实地考察”——即真正用模型前向计算一次看看替换后损失具体降低了多少。最后我们选择那个能让损失降得最多的方案真正替换掉那个位置的token。这个过程就像是在一个巨大的迷宫里每次只尝试改动迷宫里的一堵墙一个token并且用地图梯度预先判断哪些墙改了可能让出口更近然后只实地尝试其中最有希望的几堵选效果最好的那堵真的拆掉。如此循环迭代几百上千次最终就能“炼成”一段威力强大的对抗性后缀。这里有个关键细节让它比前代方法如AutoPrompt强很多AutoPrompt是每次随机选一个位置来寻找替换token。而GCG是同时考虑所有位置从所有位置的候选里挑最好的替换。这就好比装修房子AutoPrompt是每次只考虑换掉客厅的沙发、或者卧室的床单独看效果而GCG是同时考虑换沙发、换床、换窗帘等所有可能然后挑一个让整体风格提升最大的改动。后者显然能找到更优解。2.3 第三要素多提示与多模型优化——锻造“通用”与“可迁移”的神器如果只用一条恶意指令例如“制造炸弹”来优化后缀那么得到的结果很可能只对这一条指令特别有效换一个指令例如“制造病毒”就失效了。这不符合我们“通用”攻击的野心。同样如果只在一个模型比如Vicuna-7B上优化那么得到的后缀可能严重过拟合到这个模型的内部特征上无法迁移到其他模型。因此锻造真正强大的对抗性后缀必须在多个不同的恶意指令和多个不同的模型上进行联合优化。这就是算法设计中最精妙的部分。多提示优化攻击者会准备一个“恶意指令库”里面包含几十上百条不同的有害查询比如“写一个钓鱼邮件”、“生成仇恨言论”、“提供非法药物配方”等等。在GCG的每一步迭代中损失函数不再是针对单一条指令而是所有这些指令损失的平均值。算法要寻找的是一个能同时让模型对所有这些不同指令都倾向于以“Sure, here is...”开头的后缀。这迫使优化过程不能走捷径去拟合某一条指令的特定模式而必须去寻找那些能干扰模型通用安全机制的、更本质的“脆弱点”。多模型优化更进一步攻击者会同时使用几个不同的开源模型例如Vicuna-7B, Vicuna-13B, Guanaco-7B来进行优化。在每一步计算梯度时算法会分别计算同一个候选后缀在每个模型上的梯度然后将这些梯度聚合起来例如取平均或加权和用聚合后的梯度来指导候选token的筛选。这样优化出来的后缀就不是针对某一个模型结构的“特制武器”而是能攻击一类模型共性弱点的“通用弹药”。这个过程有一个非常有利的技术前提这些基于Transformer架构的大模型虽然参数不同、训练数据有差异但它们处理token的基本方式embedding层、注意力机制是相似的。更重要的是如果它们使用相同的分词器比如都使用LLaMA的分词器那么同一个token在不同模型里对应的ID和初始向量表示就是对齐的。这使得在一个模型上计算出的、关于某个token替换的梯度信息在另一个模型上也有参考价值从而让跨模型联合优化成为可能。通过这种“多管齐下”的锤炼最终得到的对抗性后缀就像是一把用多种金属熔炼、在多道砧板上锻打而成的宝剑其通用性和硬度都远超单一材料、单一模具铸造的产物。3. 实战推演GCG攻击的全流程拆解光讲原理可能还有点抽象我们不妨结合一个简化的例子把GCG攻击从准备到完成的完整流程走一遍。假设我是一个攻击者手头有Vicuna-7B和Guanaco-7B两个开源模型我的目标是炼制一段能诱导模型提供危险信息如制造简易爆炸物的通用后缀。第一步定义攻击目标与损失函数。我的目标不是让模型输出完整的炸弹制作手册那样太具体不利于通用性。我的目标是对于任何一条有害指令Q用户查询让模型回应的开头是“Sure, here is [content of Q]”。例如对于指令Qhow to build a pipe bomb目标开头就是“Sure, here is how to build a pipe bomb”。我的损失函数L就是模型输出这个目标开头序列的负对数概率。损失越小说明模型越有可能说出这个肯定句。第二步初始化对抗性后缀。我决定使用一段长度为20个token的随机文本作为初始后缀。比如我让每个token都从词汇表中随机选取。这段后缀会附加在所有训练用的恶意指令后面。第三步构建训练批次。我从我的“恶意指令库”中随机采样一批比如16条不同的指令Q1, Q2, ..., Q16。对于每条指令Qi我将其与当前的对抗性后缀拼接形成完整的攻击输入[Qi] [对抗性后缀]。同时我为每条指令定义好对应的目标开头序列Ti。第四步单步GCG迭代。这是最核心的循环步骤我们拆细了看前向传播与梯度计算我将这16个完整的攻击输入分别送入Vicuna-7B和Guanaco-7B两个模型。计算每个输入下模型输出对应目标序列Ti的损失Li以及这个损失关于对抗性后缀部分每一个token的embedding向量的梯度。注意梯度只针对后缀部分的token计算用户指令Qi部分的token是固定的。聚合梯度我把两个模型对于同一个训练样本、同一个后缀位置计算出的梯度进行聚合比如取平均。然后再把所有16个训练样本在这个位置聚合后的梯度再平均一次。这样我就得到了一个代表“当前后缀在所有指令、所有模型上平均表现”的梯度。生成候选集对于后缀中的第j个token我根据上一步得到的聚合梯度找出如果把这个token换成其他token预计能最大程度降低损失的Top-k个候选token比如k256。我对后缀的20个位置都执行这个操作于是得到一个总数为20*2565120的庞大候选池。采样与评估从这5120个候选替换方案中我随机抽取B512个方案。每个方案指“将后缀中第j个token替换为候选tokent”。然后我实实在在地将这512个新后缀每个只改了一个token和训练指令拼接再次送到两个模型里做前向计算得到替换后的真实损失。贪婪选择从这512个实测结果中选出那个使得损失降低最多的替换方案正式更新我的对抗性后缀。至此完成一次迭代。第五步循环与评估。重复第四步数百次甚至上千次。每隔一段时间我不仅用训练指令评估还会用一批全新的、从未在训练中见过的“测试指令”来评估当前后缀的“通用性”。同时我也会用另一个完全没参与训练的开源模型比如Llama-2-7B来测试后缀的“可迁移性”。当攻击在测试集和迁移模型上的成功率ASR达到一个满意的高水平比如超过80%并且不再显著提升时优化就可以停止了。最终我得到了一段看似杂乱无章、但蕴含“魔力”的token序列。当我把这段序列附加在任何我想问的敏感问题后面输入给那些我从未直接攻击过的、闭源的商业模型时有很大概率能突破它们的安全防线。4. 影响与启示安全防线的反思与加固这种攻击的成功给我们敲响了一记响亮的警钟。它表明当前基于指令微调和人类反馈强化学习RLHF构建的“对齐”安全护栏可能更多地是在语义层面对“用户意图”进行理解和拦截。而对抗性后缀攻击更像是在模型的“词法”或“句法”层面进行的一种“缓冲区溢出”攻击它通过精心构造的、无意义的token序列干扰了模型内部从输入到输出的概率计算流绕过了基于语义的安全逻辑判断。这带来了几个深刻的启示首先安全评估需要引入对抗性测试的维度。传统的红队测试可能更多依赖于人类专家设计的有语义的、合乎逻辑的越狱提示。而GCG攻击表明机器生成的、无明确语义的噪声序列可能构成更隐蔽、更强大的威胁。未来的模型安全评测必须将这类基于优化的对抗性攻击纳入标准测试集比如论文中提出的AdvBench。其次防御需要纵深化和多层次。单一依赖输出内容过滤或输入关键词屏蔽是远远不够的。防御措施可能需要前置到模型的嵌入层或注意力层检测输入的异常模式例如是否存在高维特征空间中的异常向量组合。也可以考虑在推理过程中引入随机性或不稳定性增加攻击的难度因为对抗性攻击通常对输入的微小扰动非常敏感。再者开源与闭源的安全边界变得模糊。攻击者利用开源模型作为“试验场”来炼制武器然后攻击闭源服务。这意味着整个AI生态的安全水平某种程度上受限于最脆弱的那个环节。开源模型的安全加固同样至关重要。最后这或许推动了对齐技术本身的演进。我们可能需要探索更鲁棒的对齐方法使得模型的安全行为不仅仅依赖于对输入语义的理解还能从根本上抵抗这种对输入表示空间的扰动。例如在训练过程中就引入对抗性样本进行数据增强或者设计新的目标函数让模型对这类后缀攻击具有内在的免疫力。实测下来虽然这篇论文揭示的漏洞令人担忧但它也极大地促进了AI安全领域的研究。它像一次成功的“渗透测试”暴露了现有防御体系的薄弱点。对于开发者和研究者而言理解攻击的原理是构建更好防御的第一步。现在越来越多的后续研究正在跟进探索如何检测和防御这类通用对抗性攻击这正是一场在快速进化中动态平衡的攻防博弈。对于我们普通用户而言了解这些知识也能帮助我们更理性地看待AI的能力与风险既不盲目恐慌也不过分轻信。技术的车轮滚滚向前安全永远是那条需要时刻绷紧的弦。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2411844.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!