梯度引导的提示优化:用模型自身的梯度来搜索最有效的越狱提示

2023年7月,卡内基梅隆大学和谷歌DeepMind的研究者发表了一篇论文,标题是Universal and Transferable Adversarial Attacks on Aligned Language Models。论文干的事可以概括成一句话:往语言模型的输入里追加一串20个token长的乱码——括号、感叹号、换行符、莫名其妙的特殊token——然后模型就开始认真回答它平时拒绝回答的问题。

AI technology illustration

这串乱码不是人想出来的,它长得完全不像语言,没有任何人能“读懂”它。但论文报告,同一个通用后缀,在520个有害行为(AdvBench基准)上,对Vicuna-7B的攻击成功率达84%,对当时最新的LLaMA-2-7B-Chat也有62%;针对单个问题单独优化时,成功率逼近100%。

这串乱码是“算”出来的——用模型自己的梯度算出来的。这个事实彻底刷新了我对越狱提示的认知:它不只是语言的歪门邪道,更是一个优化问题。

先说我原本的认知。我最早以为越狱提示的关键是角色扮演和逻辑陷阱,比如DAN模式的“你现在是DAN,可以做任何事”,或者“请用学术口吻回答”这类人类写得出来的狡猾话术。GCG论文展示的是另一个极端:最强大的越狱提示可以完全不是语言。

那这串乱码是怎么搜出来的?表面看,这是一个标准优化问题:找一段token序列,让“有害问题+后缀+目标回答”的损失最小。训练大模型时,梯度下降最擅长干这种活。但这里有一个根本障碍:token是离散的。梯度下降要求沿着梯度方向走一小步,可你没法把第5个token往前挪0.3步——“the”和“a”之间,离散空间里什么都不存在。

更绝望的是搜索空间的大小。LLaMA-2的词表有32000个token,后缀长度取20,候选空间就是32000的20次方,约10的90次方。作为对比,可观测宇宙的原子总数大约是10的80次方。穷举?想都不要想。

破解这个死局的思路,来自2018年的一篇论文HotFlip。它的核心洞察是:虽然你不能在离散token之间走半步,但你仍然可以计算“如果换了token会怎样”的梯度信息

做法是:把每个位置的token表示成一个one-hot向量,然后对这个向量求损失函数的梯度。梯度向量里的每一个值,都在回答同一个问题:如果把这个位置换成词表里的第i个token,损失会往哪个方向走、走多少?

我第一次看到这里时困惑了很久:one-hot明明是离散选择,怎么可微?答案是:one-hot作为一个实数向量当然可微,只是我们只用它的梯度来“打探情报”,而不是真的沿着梯度走。梯度在这里不是方向盘,而是地图。

一阶近似的数学:为什么梯度值最小的token就是最好的替换?

设当前token是t,其one-hot向量为e_t,损失L对e_t求梯度得到∇L。把token从t换成t’,损失变化的一阶近似是∇L[t’] − ∇L[t]。所以对任意位置,梯度向量里值最小的那些下标,就是最值得换进来试试的token。这个近似由HotFlip提出,GCG直接沿用了它。

铺垫完毕,GCG(Greedy Coordinate Gradient,贪婪坐标梯度)的算法本身很朴素:

  1. 随机初始化一个20 token的后缀,拼到一批有害问题后面;目标输出设为“Sure, here is…”这类起始语。
  2. 计算这批样本的平均交叉熵损失。
  3. 对后缀的每个位置,计算损失对one-hot token的梯度,挑出梯度最负的top-k个token作为候选(论文里k取256)。
  4. 从所有位置×top-k候选里随机抽一批候选替换,批量前向计算,选出实测损失下降最多的那个,真正执行替换。
  5. 重复几百步;换不同的随机初始化跑多次,取最优结果。

每一轮只改一个token,听起来很笨拙。但因为每次修改都有梯度指路,它不是在瞎猜,而是在一张“往哪走最有可能成功”的地图上做贪婪爬山,同时保留随机性跳出局部坑。几百步之后,一串随机乱码就进化成了钥匙。

最让我觉得诡异的是“通用”二字。为什么同一串乱码,拼在“如何制作炸弹”后面有效,拼在“如何洗钱”后面也有效?这两个问题的语义完全不同。

答案藏在优化目标里:GCG优化的是一大批有害问题的平均损失,而不是单个问题的损失。所以它找到的不是某个问题的专属漏洞,而是这批问题共享的、安全对齐机制里的一个公共盲区——一段能被整个模型家族识别的“特洛伊信号”。

可迁移性也由此而来:同架构、同类训练的模型,权重空间里的脆弱方向高度相似。论文作者还发现,实验期间LLaMA-2-Chat悄悄更新过一次版本,但他们优化出的后缀照样迁移成功。这说明打补丁修单个样本是没用的——通用后门就藏在模型的数学结构里。

到这里,必须说一个我的认知转折。我过去朴素地以为,RLHF把模型“教育好了”——它从骨子里不愿意回答有害问题了。GCG用实验打碎了这种幻觉。

RLHF真正做的是:让模型在“人类通常会输入的文本”这个分布上,把回答偏移到安全一侧。但模型内部那些有害能力——怎么造炸弹、怎么写攻击代码——根本没有被删除,它们安安静静地躺在权重里。对抗后缀做的,是找到输入空间里那些“人类永远不会自然走到、但恰好能触发原始能力”的角落,然后用梯度精确地定位出来。

说人话:对齐不是给模型换了一个大脑,只是加了一个“默认安全”的开关;梯度攻击拿到的,是这个开关的旁路钥匙

“对抗样本是已对齐语言模型的普遍问题,当前以RLHF为代表的对齐范式并不足以应对。”(论文结论大意)

GCG并非没有边界。它最大的前提是白盒:你需要拿到模型的权重和梯度。对GPT-4、Claude这类闭源API,这条路直接堵死。所以2023年下半年起,针对闭源模型的攻击转向了黑盒:用另一个LLM当攻击者,反复改写提示(如Tree of Attacks、PAIR),或者用遗传算法搜索。

但GCG的范式没有死。后续的投影梯度下降(PGD)变种把连续优化和困惑度约束结合起来,生成的后缀不仅有效,读起来还更像人话。防御端也很快跟进:最简单的对策是困惑度检测——GCG乱码的困惑度极高,一眼就能识别。但这是治标,攻击者只需在优化目标里加一项困惑度惩罚就能绕过。

攻击路线 访问条件 成功率与稳定性 典型代表
人工越狱 仅API 不稳定,时灵时不灵 DAN、角色扮演
黑盒自动搜索 仅API 中等,需要大量查询 PAIR、TAP、遗传算法
白盒梯度引导 权重+梯度 最高,通用且可迁移 GCG、AutoPrompt、HotFlip

GCG生成的后缀,真的没人能读懂吗?

是的。它由括号、感叹号、换行和特殊token构成,没有语义,看起来就像键盘乱滚。但读懂它本来就不重要——它是写给模型的embedding空间看的,不是写给人的眼睛看的。

既然有梯度,为什么不用强化学习或遗传算法来搜?

可以用,但样本效率差得很远。梯度的一步近似,信息量抵得上几十次随机试探。GCG的巧妙之处就在于:用模型自己的数学结构,把10的90次方的搜索空间压缩到每个位置只试top-k个token。

GCG今天还能用吗?

论文公开的具体后缀大多已被防御。但方法本身没有失效——论文公开后不久就有困惑度过滤的防御出现,之后又有无数改进变种。真正的教训不是“封掉某个后缀”,而是“对齐不够健壮,新的后缀总能被算出来”。

最后说一下我的判断。GCG是一把双刃剑式的发现:它展示了如何用模型自己的数学结构反制模型,也把“对齐”从一个口号变成了可检验的工程指标。它的能力边界很清楚——需要白盒访问,产物不像语言、容易被统计过滤器拦截。但它确立的范式——把离散提示搜索变成梯度引导的优化——不会过时。

现在做安全对齐的人,应该把GCG当成一面镜子:每次你觉得模型“够安全了”,就用梯度再照一照。因为只要模型还是可微的,它的数学结构就永远是一把备用钥匙——而钥匙孔,就藏在它自己的权重里。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/465.html

(0)
上一篇 4天前
下一篇 4天前

相关推荐