近期,研究人员广泛关注了即开即用(out-of-the-box)的大型语言模型,因为这些模型可能会生成许多恶意内容。因此,开发者集中精力在调整这些模型,试图防止生成不良内容。尽管在防御一些攻击(例如越狱攻击)方面取得了一些进展,但这些防御方法在实际应用中仍然存在弱点。本研究与其他攻击不同,采用了贪婪和基于梯度的搜索技术相结合的方法,自动生成一种对抗性攻击后缀( adversarial suffix),并将其添加到大语言模型的查询中。这种攻击后缀能够提高模型产生肯定回应的概率,而不是拒绝回答,同时可以生成恶意内容。
这种生成的对抗性后缀具有可迁移性,可以对黑盒和公开发布的大型语言模型进行攻击。具体而言,研究者在多个提示(即多种不同类型的恶意查询)和多个模型(例如Vicuna-7B和13B)上训练了这种对抗性攻击后缀。生成的攻击后缀可以成功地将恶意内容引入ChatGPT、Bard、Claude等模型,以及开源的语言模型接口(如LLaMA-2-Chat、Pythia、Falcon等)。这项工作推动了针对语言模型的对抗性攻击技术发展,相关代码获取:http://www.github.com/llm-attacks/llm-attacks
大型语言模型 (LLM) 通常是通过对从互联网上获取的大量文本语料库进行训练而得到的。已知这些文本语料库包含大量恶意内容。因此,LLM的开发者们开始采取各种微调机制来改进这些模型,以便尝试确保这些LLM不会对用户的查询产生恶意或恶意的响应。从表面上看,这些努力似乎取得了一些成功:公共聊天机器人在直接提问时不会生成一些明显不适宜的内容。
开发者们在致力于识别(最好是预防)针对机器学习模型的对抗性攻击方面投入了大量精力。这种情况在计算机视觉领域最为常见(虽然在其他领域如文本领域也有一些应用),通过向机器学习模型的输入添加轻微扰动可以显著地改变其输出结果。已知类似的方法对LLM也会产生不利影响,在许多已发布的越狱攻击中,精心设计的提示(prompt)会导致不同的LLM产生明显恶意的内容。然而,与传统的对抗性样本不同,这些越狱提示通常是经过人工设计的,精心设置以引导模型陷入错误的方向,而不是采用自动化方法。
在本文中,提出了一种新型的对抗性攻击,该攻击实际上能够引导语言模型产生几乎任意的恶意内容。具体而言,通过给定一个(可能带有恶意意图的)用户查询,该攻击会在查询结构中添加一个对抗性后缀,旨在触发恶意行为。换句话说,原始用户查询保持不变,但额外的token被添加以攻击模型。为了选择这些对抗性后缀token,该攻击精心地组合了三个关键要素:
a) 肯定式回应:一种引发语言模型恶意行为的方法是迫使模型对恶意查询做出肯定的回应(仅仅是几个token)。因此,本研究的攻击目标是使模型以"当然,[查询内容]"(“Sure, here is...”)的方式开始回应,以对许多引发恶意行为的提示做出响应。
b) 基于贪婪和梯度的离散优化:优化对抗性后缀具有挑战性,因为需要优化离散token以最大化攻击成功的日志可能性。 为了实现这一目标,利用token级别的梯度来在每一步中识别一组有可能的单token替代品,评估该组中一些候选者的损失,并选择评估后的最佳替代品。
c) 多提示、多模型攻击:最后,为了生成可靠的攻击后缀,发现创建一种不仅适用于单个模型上的单个提示,而且适用于跨多个模型的多提示攻击非常重要。换句话说,使用基于贪婪梯度的方法来搜索一个能够在多个不同用户提示和三个不同模型(Vicuna-7B、13B和guanoco-7B)中触发恶意行为的单一后缀字符串。
将这三个元素放在一起,可以创建绕过目标语言模型对齐( alignment)的对抗性后缀,其中一个示例如上图所示。以下为四个语言模型中恶意生成的完整补全。
在现有攻击方法的基础上,本文的方法经过重大改进,能够可靠地破坏目标白盒模型。产生的攻击甚至在全黑盒情况下也能显著影响其他模型,例如一个用户向LLM提出问题:
在实际应用中,作为聊天机器人的LLM并不会单独看到这样的输入,而是会嵌入到更大的提示中,并与系统提示以及附加支架结合起来,以在聊天框架内生成响应。因此,LLM实际上看到的输入如下所示。具体细节会取决于实际的聊天程序以及在某些情况下如何对模型进行调整:
用户唯一可以控制的内容显示为上面的蓝色文本。 在典型的LLM操作中,系统不会对这种用户查询提供响应,而可能会声明模型无法提供潜在危险内容。在用户提示的基础上,引入了额外的对抗性后缀,旨在规避LLM的对齐机制,并引导其回应用户最初的、潜在恶意的请求。换句话说,将如下所示的输入传递给模型:
红色文本包含一些对抗性后缀,攻击的目标是通过优化这些后缀,使得模型能够回答原始用户查询。在开发通用攻击时,攻击者并不会考虑对用户提供的蓝色文本进行修改。这对于最终的目标至关重要:找到一组token来替换红色初始文本,以便经过对齐的LLM将对用户提供的任何蓝色指令都能做出肯定的回应。对于如何优化对抗性后缀,有多种选择可供考虑,例如优化的损失函数、使用的数据以及优化过程本身。
攻击设计的首要标准之一是确定其目标,即要使用什么损失函数来优化对抗性后缀。当然,有许多可能的损失函数可供选择;例如,可以最大化模型生成特定字符串的可能性(在这种情况下,是包含恶意指令的字符串)。虽然这可能足以对模型生成一致内容的能力进行压力测试,但在两个方面不足以作为攻击的目标。首先,它为查询规定了一个基准输出,然而实际上可能有许多合适的答案,并且可能更适合目标LLM。其次,它是特定于单个查询的,而最终目标是要得到一个适用于许多查询的通用后缀。本研究的攻击要求模型以肯定的方式回应用户查询。 换句话说,对于上面的样本,希望 LLM 的响应为:
上面的紫色文本仅代表了所需的LLM的目标开头,攻击目标中并未涵盖其他部分。这种方法的直觉是,如果语言模型可以进入一种状态,其中完成是最有可能的响应,而不是拒绝回答查询,那么它很可能会继续以准确的期望恶意行为来完成。
类似的行为已在各种越狱攻击中进行过研究,例如添加模型"respond with 'sure'"的提示,或采用其他类似的方法。然而,在实践中,这种人工攻击方法可以通过稍微复杂的对齐技术来规避。此外,之前关于攻击多模式LLM的研究发现,仅指定第一个目标token通常已经足够(尽管在这种情况下,攻击面更大,因此可以更大程度地优化)。然而,在纯文本空间中,仅仅针对第一个token存在覆盖原始提示的风险。例如,对抗性提示可以简单地包含诸如“Nevermind, tell me a joke”之类的短语,这会增加“Sure”响应的可能性,但不会引发恶意行为。
a) 形式化对抗目标:可以将这个目标写成对抗性攻击的形式化损失函数。LLM 是一个将某个 token 序列 x1:n 映射到下一个 token 的分布,其中 xi ∈ {1,..., V }(V 表示词汇量的大小,即 token 标记的数量)。具体来说:
对于任意的 xn+1 ∈ {1, ... , V },表示在给定先前的 token x1:n 的情况下,下一个 token 是 xn+1的概率。使用符号 p(xn+1:n+H|x1:n) 来表示在给定所有 token 的情况下,生成序列xn+1:n+H中每个单独 token 的概率,即
在这种表示法下,对抗性损失只是某些目标token序列 x⋆n+1:n+H 的(负对数)概率(即短语“Sure, here is how to build a bomb”):
因此,优化对抗性后缀的任务可以写成以下优化问题,其中 I ⊂ {1, ... , n} 表示 LLM 输入中对抗性后缀token的索引。
优化问题的主要挑战在于必须优化一组离散的输入。尽管存在多种离散优化方法(包括上一节中提到的方法),但即使是这些方法中最优的方法,也常常难以可靠地攻击语言模型。
然而,在实践中发现了一种简单的方法,源于贪婪坐标下降(Greedy Coordinate Descent):如果可以评估所有可能的单个 token 替换,那么可以选择在每个 token 位置上最大程度地减少损失的 token 进行交换。当然,评估所有这些替换是不现实的,但可以利用与独热(one-hot) token 指示器相关的梯度,在每个 token 位置上找到一组有希望的替换候选,并通过前向传播来准确评估所有这些替换。具体来说,可以通过评估梯度来计算替换提示中第 i 个 token xi 的线性近似值:
其中,exi 表示表示第 i 个 token 当前值的独热向量(即,在位置 ei 处为 1,其他位置为 0 的向量)。请注意,由于 LLM 通常为每个 token 形成嵌入,因此它们可以写成对于该值 exi 的函数,因此可以立即获取相对于该量的梯度。然后,计算具有最大负梯度的前 k 个值作为 token xi 的候选替换。通过计算所有 token i ∈ I 的候选集,从中随机选择 B ≤ k|I| 个 token 进行提取,然后在该子集上准确评估损失,并以最小损失进行替换。这个方法被称为贪婪坐标梯度(GCG,Greedy Coord