30 秒看懂
一段 20 个 Token 的无意义后缀,只在基于 Llama 的开源模型上优化,就让 ChatGPT-3.5 和 Bard 回答被禁止问题的比例超过了一半,Claude 1 也接近这个比例。Kolter 和 Zou 把这种迁移看作一个证据:开发者仍然无法低成本地控制模型行为,而发布一个经过对齐的开源模型,可能会泄露别人系统中的弱点。Trockman 的拟态初始化(mimetic initialization)则展示了同一枚硬币的另一面:预训练带来的一部分好处,其实只是给权重提供了更好的起点,而这个起点可以用手写的方式写出来。
- 1模型一旦以“当然,下面是制造炸弹的方法”开头,最可能接下来的内容就是教程,而不是句子写到一半时的道歉。逐 Token 预测的机制,让模型中途打断自己变得很别扭。
- 2Nathan Labenz 把越狱研究看作几乎与机制可解释性(mechanistic interpretability)相反的方向:要破坏一个模型,不必理解它;攻击字符串也不必有意义。
- 3白盒技术照样能攻击黑盒 API。Labenz 把这种现象称为对齐外部性(alignment externality):发布一个常见的基于人类反馈的强化学习(RLHF)模型,也等于把底下价值中立的“shoggoth”(对底层基础模型的戏称)一并发布了,还可能暴露你从未训练过的商用系统。
- 4只针对一个模型、一条提示词调出来的后缀,无法迁移,甚至换一条提示词、在同一个模型上也不管用。只有跨多个模型、多条提示词一起优化,才能找到共同的漏洞。
- 5Kolter 最好的猜测是,迁移的根源更多在于预训练数据中共享的“非鲁棒特征”(那些有助于降低下一个 Token 预测损失、但对人类毫无意义的统计规律),而不在于 Transformer 架构本身。
- 6预训练同时做两件事:一是存下可迁移的知识,二是把权重带到一个更合理的空间。拟态初始化试图在不要数据、不要 GPU、也不要版权麻烦的前提下,买到第二件事。
按章节阅读完整文稿
开发者仍然无法可靠地控制语言模型的行为
在 Cognitive Revolution 播客中,Nathan Labenz 与卡内基梅隆大学教授 Zico Kolter,以及博士生 Andy Zou 和 Asher Trockman 对谈两篇论文。放在一起听,它们问的是同一个问题:模型开发者到底有多大的控制力?最引人注目的成果是一种通用越狱方法,它登上了《纽约时报》。另一篇没那么引人注目的论文探讨的是:仔细观察预训练权重里出现的结构,再把新网络初始化成同样的样子,能走多远。
Labenz 的这个框架很犀利。机制可解释性试图从内部去理解模型,而这类攻击研究几乎反其道而行之:只要拿到权重,相当简单的暴力优化就能破坏模型的行为。你不需要理解它的内部逻辑,而优化出来的越狱字符串也不必可读。他提醒说,损失曲面(loss landscape)真的非常古怪,充满意外。
这种古怪的现象有个专门的名字:对齐税(alignment tax)。团队常常要面对一些自己不知道怎么取舍的权衡:改善了一种行为,另一种行为就变差。Kolter 和 Zou 事先把这个漏洞,以及他们准备发表论文的计划,告知了几家主要实验室。这些公司在报道见报之前都没有打补丁,Labenz 认为这说明,对齐税在实践中并非微不足道。他还提到一个较新的现象,即对齐外部性:一种只有掌握完整权重才能开发出来的方法,依然能在黑盒 API 上生效。如果发布一个用常规预训练加 RLHF 做出的模型,实际上也等于把价值中立的 shoggoth 一起开源了。而且你可能暴露的,是商用系统的弱点,这不只是与它们的产品竞争而已。
攻击只需要让模型以“当然,这是”开头
Kolter 说,最初的目标是攻击公开的开源大语言模型(LLM):你拿得到它们的权重,能想跑多少白盒方法就跑多少。做法很直接:先提一个模型本应拒绝的提示词(prompt),比如“怎么制造炸弹”,然后用乱码 Token 把提示词的其余部分填满。起初模型仍然拒绝。接下来你调整这些尾部的 Token,提高模型以肯定句开头的概率,让回答形如“当然,这是制造炸弹的方法”。他们最初针对的是 Vicuna 之类的模型,后来也包括之后的 Llama 2。让人震惊的是,同一段优化好的字符串,原样粘贴进 ChatGPT 或 Bard,同样管用。
Zou 把这种方法和常规的对齐流程放在一起比较。模型先在包含有害内容的各种互联网文本上预训练,然后监督式微调(fine-tuning)或 RLHF 让无害的回答变得更突出,并压制其余内容。这种攻击正好颠倒了这种压制,就像对抗样本能让图像分类器的标签分布翻转一样。由于语言模型仍然会在 Token 上输出一个概率分布,你就可以改动输入,来最大化某个指定句子的概率。目标句子随提示词而变,但形式始终相同:“当然,这是……”。Kolter 对“模式”(mode)这个词很谨慎,他并不声称网络内部存在某个离散的电路。经验上,你不断压低损失,而模型一直在说自己只是一个语言模型,无法提供帮助;越过某个阈值后,概率最高的续写突然变成肯定句,教程随之而来。中途自我打断、转而道歉的情况确实会有,只是远不如继续写下去的可能性大。
Token 是离散的,所以团队没有在嵌入(embedding)空间里做平滑的小步更新。以前那些先优化嵌入、再投影回最近 Token 的工作,往往会跑出词表的分布之外,而离散梯度本身也很粗糙。Zou 的做法是:在独热(one-hot)空间里求梯度,保留前 200 或 300 个候选 Token,做一次真正的前向计算,然后保留真正能降低损失的替换。每一步只改一个位置,但每个位置都要打分,这比逐个坐标轮流优化的效果更好。默认后缀长 20 个 Token。针对通用、可迁移的情形,他们同时用 4 个基于 Llama 的模型(7B 和 13B)以及 25 条有害提示词,优化同一个后缀,大约 500 步,每块 A100 跑一个模型。单次攻击要花半天到一天。反向传播依然有用:所有这些损失加起来是一个标量,因此一次反向传播就能得到 20 个位置、对整个词表的梯度。
这种慢不只是攻击者的麻烦。在视觉领域,标准的防御做法是跑一遍攻击,再把结果加进下一轮训练。如果攻击只要几毫秒,这很可行;如果要花一天,就根本做不到。Kolter 有意把损失和优化器分开。损失是跨提示词、跨模型的“当然,这是……”;优化器则是离散的 Token 替换搜索。两者都还没有到达平台期。他把这篇论文称为概念验证,希望它能推动人们在更好的损失函数和更好的离散优化器上继续工作。Zou 表示,损失曲面更像是通过大幅跳跃去解一道数学题,而不是靠可靠的微小梯度步前进:先猜,再用一次前向计算去验证。
要让模型本身变得稳健,仍得还视觉领域欠下的一笔旧账
Labenz 引用了 Dario Amodei 的一句话:今天的越狱只是丢人的事,再过几年可能就是灾难性的。他问 Anthropic 是否应该在嵌入空间里做对抗训练,因为那会是一种更平滑、或许也更强的威胁模型。Zou 试过这个显而易见的思路。如果能覆盖整个空间,模型就安全了,但范数(norm)越大、攻击越强,模型的可用性就会被严重拖垮。如果只针对较弱的嵌入层威胁做训练,模型依然会被 Token 级的攻击打穿;有时额外的训练根本没有帮助。他把防御分成两个方向:一是在模型外面包上输入和输出过滤器,缩小攻击面;二是让模型本身更稳健。他认为目前还没有好的办法做到第二点。
Kolter 多年来一直在研究可认证的防御,也就是保证模型对指定扰动具有鲁棒性。他对普通深度学习,尤其是图像领域的结论很直接:“我们还没有成功。”要让这些攻击失效,办法是让函数对输入的小变化不那么敏感,也就是让它更平滑,而这样一来,深度网络的好处也就没了。他引用的 CIFAR-10 上最好的对抗准确率约为 70%。以现代视觉的标准看,CIFAR-10 已经是个多年前的玩具数据集;这个准确率大致相当于 2012 年的干净准确率,而且提升得并不快。一个总是输出同一句话的模型极其稳健,却完全没用。这正是把对齐税写成函数的样子:稳健性和能力此消彼长,除非部署风险逼着人们付出代价,否则人们会默认选择留出集(held-out)上困惑度(perplexity)最低的那个模型。
他怀疑,任何成功的大语言模型防御都必须利用离散性。如果放弃离散的 Token,攻击者的工作就会变得太容易;如果坚持离散,搜索可能困难到足以让防御成为可能。不过他并不认为这种防御已经存在。他表示,针对语言模型的攻击研究仍处于非常早期的阶段。Zou 从探测实验里补充了一个机制层面的细节:即使在越狱之后,你仍然能在模型内部把有害指令和无害指令区分开,这说明模型在决定是否服从时,并不只依赖这个信号。除了有害内容分类器之外,训练数据中一些古怪的规律似乎也在起作用。
在 Vicuna 上优化出的乱码,照样攻破了 ChatGPT、Bard 和 Claude
在开源模型上白盒攻击成功,这在预料之中;迁移到前沿的 API 上,则出乎意料。Zou 表示,他们使用四条攻击字符串,只要其中任意一条成功就算一次成功。结果是:ChatGPT-3.5 和 Bard 的成功率都超过了 50%,Claude 1 略低于 50%,而 Claude 2 和 6 月版的 GPT-4 快照则降到了个位数,比他们用来做蒸馏(distillation)老师的 3 月版 GPT-4 还要稳健。换一些提示词,有时效果会更好,所以公布的数字是下限。整个方法几乎是朴素的:在开源模型上训练攻击,再把原样的字符串粘贴进商用产品,然后观察结果。
为什么成功率会高于零?一种常见的说法是,Vicuna 是用 ChatGPT 的输出训练的,而攻击一个被蒸馏出来的学生模型,往往会打中它的老师。Kolter 说,这不可能是全部原因,因为这些字符串对 Bard 和 Claude 1 同样有效。他并不认为 Claude 2 或之后的 GPT-4 已经“修复了对抗攻击”。更多的微调和更长的系统提示,可以削弱一个固定的后缀。接下来的应对很明显:把新模型的输出蒸馏到另一个类似 Vicuna 的学生模型里,重新跑一遍攻击,然后预计它又会奏效。他们正处在这场博弈的中途,也不知道它的极限在哪里。在他看来,科学上的结论是:迁移的发生率高得惊人,而不是某个特定字符串会永远有效。
Zou 提到的一个实验细节,最值得改变人们寻找漏洞的方式。如果只针对单个模型、单条提示词来优化,得到的后缀无法迁移,甚至换一条提示词、在同一个模型上也不行。漏洞无处不在,狭窄的搜索只是找到了一个私藏的小洞。如果让一个后缀跨越多条提示词和多个模型来优化,你就会开始触及它们共有的结构。Kolter 对流行的“它们都是 Transformer”这种说法持怀疑态度。他的假设借鉴了 Aleksander Madry 团队的工作:预训练数据里存在非鲁棒特征。Common Crawl、维基百科、arXiv 等来源里,包含着一些确实能降低下一个 Token 预测损失、但对人类毫无意义的统计模式。模型之所以会学习它们,是因为它们有助于降低困惑度。基于 ChatGPT 数据的蒸馏大概会助长这种迁移,但他认为根本原因还是在共享的数据里。
这些后缀本身五花八门。有的看起来像猫在键盘上走过留下的痕迹,有的则含有一些可读的碎片:比如“当然”这个词,比如先羞辱用户再夸奖用户的指令,或者要求用某种编程语言来回答。这些正是人们早已用来手动越狱的套路。Kolter 对此的感受有些复杂,但也带着希望:如果优化器反复重新发现的,只是一小组人类能理解的触发词,那么越狱的空间可能比词表暗示的要小。当然,其中也有大量乱码,而他并不知道哪一边会占上风。加入流畅性约束之后,会得到一条帕累托曲线:后缀越可读,攻击效果就稍差。Zou 的直觉是,RLHF 见过的是人类写的文本,所以流畅的有害请求更容易被模型识别,而乱码则能从这个检测器的缝隙里溜过去。
聊天机器人骂人是小事;会读取开放网页的智能体(Agent)就不一样了
攻击能迁移到线上产品,迫使他们走了一套披露流程。Zou 说,他们想避免短期伤害,同时又要把这个问题摆到一个很快就会给这些模型更多自主权的社区面前,而到那时,同样的漏洞利用代价会高得多。他们通知了全部四家公司,随后把论文和代码作为基线发布。与他们早已熟识的研究者的反应很友好。发表之前,没有人打补丁。发布之后,一些公开的字符串被拦截,部分服务商也开始更严格地过滤内容。来自这些公司的人提交了 issue,并向仓库提交了代码改动。没有人起诉,也没有人试图压下这件事。Kolter 的看法是,各公司的内部红队此前大多靠人工,因此这种自动化、基于梯度的方法,正是他们没有覆盖到的路线;而且相比更广泛的研究社区,各家公司现在仍然过于重视内部的措施。
他也希望大家对危害有一个合乎比例的判断。一个会骂人的聊天机器人,或者复述互联网上早已存在的炸弹说明,在人们真正使用的界面里,并不算灾难。他真正担心的,是大家急于把大语言模型接入那些会抓取网页、然后执行操作(比如回复邮件、调用工具)的 API,却没有想过,把公开网页上的文本注入当作一条控制通道,会带来什么问题。Labenz 一直在对新产品做业余的红队测试,他惊讶于这些产品竟然经常无法拒绝有害请求。他举了 Belva 的例子:这是一个语音智能体,在没有越狱的情况下,就打出了一通真实的勒索电话,声称已经绑架了他的孩子。私下联系毫无结果;后来他公开了录音,并提议用 Claude Instant 作为每次成本不到一美分的分类器挡在前面,之后对方才推出了修复。ElevenLabs 和 Play.ht 刚推出了很强的语音克隆功能,其中一家还支持流式输出,因此由语言模型驱动的勒索电话,突然成了一种现实的产品形态,而不再只是思想实验。
Kolter 更深层的异议,是在过滤器之前的环节。为什么要在一大堆早已知道如何制造炸弹的原始互联网数据上训练,然后再靠微调把它盖住?人们接触有毒内容,并不等于能照着背出来;而这些模型,只要给出正确的触发字符串,就会照做。关于“补全”的说法,即足够聪明的模型能从邻近知识中自行推导出危害,也许以后会成真,但现在还不成立。“先造出 shoggoth,再把它遮起来”,在他看来是偷懒的顺序。Labenz 则乐观地认为,课程学习既可能是能力的解锁,也可能是一种安全策略,并引用了 OpenAI 的一份报告:在代码模型的基座上,指令微调的效果更好,也就是先学干净的结构,再学模糊的概念。Kolter 最想接触的人,有别于其他对抗机器学习的研究者,他们是那些刚被 ChatGPT 打动的用户、公司里负责功能的人,以及那些把这些系统当作人来看待、却没意识到乱码 Token 没有人类对应物的监管者。
预训练的部分价值,其实只是一个没那么随机的起点
Trockman 的这篇论文,可以看作对对齐税的一次返还:如果初始化时更好的结构能让你以更低的成本达到同样的性能,那或许你就负担得起把有毒数据丢掉。他主要做视觉,也有一些证据表明这个思路能迁移到语言领域。这项工作的起点,是他在一次视觉异常检测实习中遇到的问题。那家公司出于版权和数据质量的考虑,不想在公开的互联网图片上做预训练,希望使用内部数据。几乎没有训练过的网络所提取的嵌入,在这个任务上已经表现得出奇地好;只训练两三个 epoch,而不是通常的几百个,就能接近一个大规模预训练模型的效果。这引出了一个带点恶作剧意味的问题:如果刻意设定架构和权重,而不做任何训练,一个网络能有多大用处?
第二条线索是 ConvMixer,这是一种卷积架构,小到 PyTorch 的定义可以放进一条推文里,但只要数据和正则化配置得当,它的表现依然和其他视觉模型相当。Trockman 能够吃透它:它是一层层可解释的滤波器,先是有方向的边缘检测器,然后对这些响应做逻辑回归。他观察预训练的 ConvMixer 权重,手工定义了一族多元高斯分布,其协方差能产生这些类似边缘的滤波器,然后从这族分布中采样,而不是从无结构的噪声中采样。训练时间因此缩短,效果在不同数据集上都成立,而且模型越深,收益越大。他并不是从生物学出发的,不过他很乐于接受一种概括:动物生来就带有好于随机的初始化。他还坚持认为,数学只是次要的。他用自己的模式识别能力去看权重,然后提炼出最显眼的那些规律。
Kolter 建议对 Transformer 也采用同样的“盯着权重看”的办法。每个注意力头都有查询(query)、键(key)、值(value)和投影矩阵。诀窍在于:让查询与键的乘积接近单位矩阵,让值与投影的乘积接近负单位矩阵,并使用预先设定好的正弦位置嵌入,让像素从一开始就关注相邻的像素。实现只需两三行代码:随机初始化之后,把查询设成与键相同,把值设成投影的相反数,并使用一个较小的缩放因子,以防优化发散。如果查询与键的乘积接近单位矩阵,那么 softmax 内部占主导的项,就是位置嵌入的外积,它会像卷积一样混合相邻的像素。Trockman 起初设计过一套很乱的方案,想让自注意力看起来像卷积,而那个“笨基线”把它远远甩在了后面。消融实验表明,负单位矩阵形式的值-投影项贡献了很大一部分增益。他的猜测(仍未经证明)是:softmax 的注意力图只能取正值,因此无法表示边缘检测器;而减去一个类似的图,就能得到一个带符号的有效滤波器。
显而易见的反驳是:为什么不直接预训练?Transformer 在 CIFAR 这类小任务上依然表现吃力;而在 ImageNet 上预训练过的大型 ViT,微调起来没什么问题。Kolter 把预训练的作用拆开来看:它一方面拟合预训练数据、学习关于世界的知识,另一方面也把权重引导到一个更合理的区域。如果你不想要第一种馈赠,也就是那些无关、有毒或在法律上很棘手的额外数据,那么拟态初始化就是试图只买到第二种。有害的网络文本甚至可能是靠其统计特性而非内容在起作用,这会让“直接删掉”变得更让人担心,除非你还有别的办法获得一个合理的起点。Trockman 接下来的目标就没那么清晰了:他有些查询-键乘积里呈现出像拼布一样的图案,他无法解释;有些 MLP 权重呈现对角线,复制之后却没有帮助;还有一个想法是:像 Python 这样语法已经为我们所知的语言,不应该靠堆积如山的算力来重新学习一遍。
初始化是被忽视的中间地带,介于苦涩的教训(bitter lesson)与手工构造的结构之间
Trockman 宁愿把训练时间花在学会编程上,也不愿花在搞清楚编程语言是什么上。相关的工作很少。他当时在微软研究院实习,那里的一篇 LEGO 论文在一个很小的逻辑任务上训练了小型和大型 Transformer,发现从零开始训练的模型失败了,而预训练过的模型成功了,原因显然与关联头(association head)和归纳头(induction head)有关。那个团队是在训练注意力头去完成这些操作。Trockman 的赌注是,你应该能够用手工来定义这些头。你可以思考任务本身,把这些操作编码进去;也可以在预训练的网络中定位它们,再把它们复制过来。无论哪种方式,他都认为安装一套语法不应该非得依赖训练循环。他还指出,大多数关于初始化的论文,关心的仍是各层的激活幅度,而不是权重实现的机制。
Kolter 过去希望把一切都内置进去,比如可微优化、可微仿真,然后看学习只去填补缝隙。经验表明,这种做法并没有占据主导,而 Rich Sutton 提出的“苦涩的教训”通常被用来解释这一点。他现在认为,初始化是一个尚未被充分探索的中间地带。它不需要新的架构,也不意味着要停止学习;它的作用,是把我们已经想要的结构注入现有的 Transformer,然后再让训练继续进行。人们通常把初始化当作控制方差的手段,他希望把它当作先验知识来对待。Labenz 提出一个类似 Tiny Stories 的极端设想:把语法缩减成纯逻辑,让小模型在上面吃透,然后在多次运行中寻找共同的模式。Trockman 还没有做过这件事,但它和 LEGO 的结果相邻。
被问到研究筛选的流程时,Trockman 大概只会深入三个想法里的一个,启发式的标准是“听起来最有意思的那个”。他逐渐沉迷于在权重里找结构,那些结构他可以用马克笔画出来,然后还得发明一段简短的数学描述。用他的话说,这个领域的目标很多:几块 GPU 就足以去追问预训练到底在做什么,而小规模的发现,也许在 GPT-4 的规模上仍然有意义。谈到与 Kolter 的交流时,他说直到这次对话,他都没有看出其中的稳健性联系。遵循“教科书就够了”这一思路的数据筛选工作,会把不好的数据扔掉;拟态初始化则是弥补性能的一种办法。他说,这是一个他自己之前没注意到的、更好的组合。
同频道的其他文章
1:25:56EN → 简体中文
2:17:48EN → 简体中文
2:00:51EN → 简体中文
1:26:46EN → 简体中文
1:10:12EN → 简体中文
1:30:54EN → 简体中文