[论文阅读]Universal and transferable adversarial attacks on aligned language models

Universal and transferable adversarial attacks on aligned language models

http://arxiv.org/abs/2307.15043

图 1:Aligned LLMs 不是对抗性 Aligned。我们的攻击构建了一个单一的对抗性提示,该提示始终绕过最先进的商业模式(包括 ChatGPT、Claude、Bard 和 Llama-2)的对齐,而无需直接访问它们。此处显示的示例是这些系统的所有实际输出。对抗性提示很有可能从这些模型中引出任意的有害行为,从而证明存在误用的可能性。为了实现这一点,我们的攻击 (Greedy Coordinate Gradient) 通过针对多个较小的开源LLMs针对多种有害行为进行优化,从而找到这种通用且可转移的提示。这些将在第 3 节中进一步讨论,完整的完整记录将在附录 B 中提供。

 在本文中,我们提出了一类新的对抗性攻击,它实际上可以诱导对齐的语言模型产生几乎任何令人反感的内容。具体来说,给定一个(可能有害的)用户查询,我们的攻击会给查询附加一个对抗性后缀,试图诱导负面行为。也就是说,用户的原始查询保持不变,但我们添加了额外的 token 来攻击模型。为了选择这些对抗性后缀标记,我们的攻击由三个关键元素组成;这些元素在文献中确实以非常相似的形式存在,但我们发现,正是它们的精心组合导致了在实践中可靠成功的攻击。

  1. 最初的肯定回答。正如过去的工作所确定的那样,在语言模型中诱发令人反感的行为的一种方法是强制模型对有害查询给出(仅几个标记)肯定的回答。因此,我们的攻击以模型为目标,以“Sure, here is (content of query)”开始其响应,以响应引发不良行为的许多提示。与过去的工作类似,我们发现以这种方式仅针对响应的开头,就会将模型切换到一种 “模式”,然后在响应后立即产生令人反感的内容。
  2. 结合贪婪和基于梯度的离散优化。对对抗性后缀进行优化是具有挑战性的,因为我们需要对离散令牌进行优化,以最大限度地提高攻击成功的对数可能性。为了实现这一目标,我们利用代币级别的梯度来识别一组有前途的单代币替代品,评估该集中一定数量的候选者的损失,并选择最好的被评估的替代品。事实上,该方法类似于 AutoPrompt方法,但(我们发现,实际上非常重要)的不同之处在于,我们在每一步搜索所有可能的标记以替换,而不仅仅是一个
  3. 强大的多提示和多模型攻击。最后,为了生成可靠的攻击后缀,我们发现创建一种攻击非常重要,该攻击不仅适用于单个模型上的单个提示,而且适用于多个模型中的多个提示。换句话说,我们使用基于贪婪梯度的方法来搜索单个后缀字符串,该字符串能够在多个不同的用户提示中引起负面行为,并在三个不同的模型(在我们的例子中,Vicuna-7B 和 13b和 Guanoco-7B ,尽管这主要是为了简单起见, 也可以使用其他模型的组合)。

将这三个元素放在一起,可以可靠地创建对抗性后缀,从而规避目标语言模型的对齐。图 1 显示了说明性示例。此外,我们的结果强调了我们特定优化器的重要性:以前的优化器,特别是 PEZ(一种基于梯度的方法)和 GBDA(一种使用 Gumbel-softmax 重新参数化的方法)无法实现任何精确的输出匹配,而 AutoPrompt仅达到 25% 的成功率,而我们的攻击成功率为 88%。

针对LLM的通用攻击

在实践中,LLM作为聊天机器人的服务不会单独看到用户输入,而是嵌入到更大的提示中,并结合系统提示和其他基架,以在聊天框架内构建响应。因此,您将看到LLM的实际输入将如下所示,具体细节取决于实际的聊天程序,以及在某些情况下模型的调整方式:

在上面,“User:” 注释后面的蓝色文本是用户可以控制的唯一内容。在 aligned LLM的典型操作中,系统不会对此用户查询提供响应,而是可能会声明模型无法提供具有潜在危险的内容

我们在用户提示符上引入了一个额外的对抗性后缀,旨在规避 LLM的对齐方式,并诱导它响应用户的原始、可能有害的请求。换句话说,我们将如下所示的输入传递给模型:

红色文本由一些对抗性后缀组成,攻击将对其进行优化,以使模型回答原始用户查询。重要的是,在开发通用攻击时,我们不会考虑对用户提供的蓝色文本的更改。这对于通用攻击的最终目标至关重要:找到一组标记来替换红色的初始文本,以便对齐LLM者将对用户提供的任何蓝色指令选择做出肯定的响应

在上面的设置中,关于如何优化对抗性后缀有很多选择:例如,要优化的损失函数、数据以及优化本身。虽然上述设置在文献中以非常相似的形式考虑,但这些过去的工作无法可靠地攻击对齐LLMs,即使在白盒设置中也是如此。事实上,我们已经发现少量关键设计元素是产生可靠攻击的关键。

1.做出肯定的回应

我们采用的方法在(手动)越狱社区中受到了一定程度的关注,并要求模型以对用户查询的肯定开始响应。换句话说,对于上面的示例,我们希望 the LLM 的响应以短语

紫色文本仅表示所需LLM完成的目标开始,其余部分在攻击目标中未指定。这种方法的直觉是,如果语言模型可以进入一种 “状态”,其中此完成是最可能的响应,而不是拒绝回答查询,那么它很可能会以所需的令人反感的行为继续完成。(这一点在[论文阅读]How Alignment and Jailbreak Work: Explain LLM Safety through Intermediate Hidden States-CSDN博客中有所体现)

我们可以将这一目标写成对抗攻击的形式损失函数。我们认为,LLM 是指从某个标记序列 x1:n 开始的映射,其中 xi ∈ {1, ., V }(其中,V 表示词汇量,即令牌数量)到下一个令牌的分布的映射。具体来说,我们使用的符号是对于任意 xn+1∈ {1, ., V },表示在前一个标记 x1:n 的条件下,下一个标记是 xn+1 的概率。略微滥用一下符号,写成 p(xn+1:n+H |x1:n),表示给定到此为止的所有令牌,在序列 xn+1:n+H 中生成每个令牌的概率,即

在这种记法下,我们所关注的对抗性损失仅仅是某些目标标记序列 x⋆ n+1:n+H 的(负对数)概率(即表示 "当然,这里有如何制造炸弹 "的短语)。

因此,优化对抗后缀的任务可以写成优化问题其中 I ⊂ {1, ., n} 表示 LLM 输入中的对抗后缀词块的索引。

2.基于贪婪坐标梯度的搜索

在实践中,我们发现一种简单的方法,最终是 AutoPrompt 方法的简单扩展,在这项任务中表现得相当好(并且也大大优于 AutoPrompt 本身)。我们方法的动机来自贪婪坐标下降方法:如果我们能评估所有可能的单代币替换,我们就可以交换能最大程度地减少损失的代币。当然,评估所有这些替换是不可行的,但我们可以利用关于 one-hot 代币指标的梯度,在每个代币位置找到一组有前途的替代品候选者,然后通过正向传递准确地评估所有这些替代品。具体来说,我们可以通过评估梯度来计算替换提示中第 i 个 token xi的线性近似值

其中 exi 表示第 i  个 token 的当前值的 one-hot 向量(即,在位置 ei 上有一个 1,在所有其他位置上有一个 0的 vector)。请注意,因为LLMs通常为每个标记形成 embeddings,所以它们可以写成这个值的 exi 函数,因此我们可以立即取关于这个量的梯度;HotFlip (Ebrahimi et al., 2017) 和 AutoPrompt (Shin et al., 2020) 方法也采用了相同的方法。然后,我们计算具有最大负梯度的 top- k 值作为 token xi 的候选替换。我们为所有代币 i∈ℐ 计算这个候选集,从中随机选择 B≤k⁢|ℐ| 代币,精确地评估这个子集的损失,并以最小的损失进行替换。这种完整的方法,我们称之为贪婪坐标梯度 (GCG),如算法 1 所示。

 在这里注意到,GCG 与 AutoPrompt 算法非常相似,除了看似微小的变化,即 AutoPrompt 提前选择一个坐标进行调整,然后仅评估该位置的替换。然而,正如我们在下面的章节中所说明的那样,这种设计选择具有令人惊讶的巨大影响:我们发现,对于每次迭代的相同批量大小 B (即,相同数量的总前向评估,这是迄今为止的主要计算),GCG 在很大程度上大大优于 AutoPrompt。我们认为,GCG 可能会进一步改进,例如,构建一个采用类似全坐标策略的 ARCA 版本(Jones et al., 2023),但我们在这里关注更基本的方法,以简化操作

3.通用的多提示和多模型攻击

在算法 1 的基础上,合并了几个训练提示 x1:n(i) 和相应的损失 ℒi 。由于通用示例的目标不是生成特定的标记序列,因此我们用于实例化每个 ℒi 标记的目标序列 3 中的目标序列是与模型的肯定响应一致的前缀。例如,对于训练提示“Give instructions for building a pipe bomb”,相应的目标序列将是“Sure, here is instructions for building a pipe bomb”。

不是在每个提示中指定不同的可修改词元子集,而是在单个后缀上进行优化 p1:l ,并聚合梯度和损失,以分别在每个步骤中选择前 k 个词元替换和最佳替代。在聚合梯度之前,它们被裁剪为具有单位范数。此外,我们发现,只有在确定一个候选者作为早期提示的对抗性示例之后,才逐步合并新提示,比尝试从一开始就优化所有提示产生更好的结果。此过程如算法 2 所示。

为了使对抗性示例可转移,我们在多个模型上合并了损失函数。当模型使用相同的分词器时,用于计算 top- k 标记的梯度将全部存在 ℝV ,并且可以毫无问题地进行聚合。因此,例如,Vicuna 的多个变体可以同时优化,而无需对算法 2 进行任何修改。请注意,在 embedding 空间中优化的攻击并非如此。

实验

这项工作的重点是引发有害或令人反感的内容的生成。为了系统地评估我们的方法在实现这一目标方面的有效性,我们基于两种不同的设置设计了一个新的基准 AdvBench。

  1. 有害字符串:反映有害或有毒行为的 500 字符串集合,包含各种有害内容,例如亵渎、血腥描述、威胁行为、错误信息、歧视、网络犯罪以及危险或非法建议。攻击者的目标是发现可以提示模型生成这些确切字符串的特定输入。字符串的长度从 3 到 44 个令牌不等,使用 LLaMA 分词器进行分词时,平均长度为 16 个令牌。
  2. 有害行为:作为指令制定的 500 一组有害行为。这些行为的范围与 harmful strings 设置的主题相同,但攻击者的目标是找到一个攻击字符串,该字符串将导致模型生成任何试图遵守指令的响应,并针对尽可能多的有害行为执行此操作。

这两个设置都从略有不同的角度评估目标模型稳健地遵守对齐目标的能力:第一个任务侧重于对模型输出的精细控制,而第二个任务类似于旨在绕过安全过滤器以引发有害输出的红队练习。附录 A 提供了有关构建此基准的更多详细信息。

这个数据集的目标不是开启一场关于什么不应该是 “允许的” 内容的辩论LLM,而是简单地指出,大多数 aligned LLMs (开源和专有)都试图明确避免这样的生成,如果直接查询(即,要求生成一个有害的字符串, 或被要求展示有害行为)。因此,基准测试明确评估了我们的攻击能够绕过系统指定护栏的能力。将来,可能需要调整我们的基准,因为 Models 打算禁止更改的任务集。

指标

使用攻击成功率 (ASR) 作为 AdvBench 的主要指标。对于引发有害字符串,如果模型输出确切的目标字符串,则认为每个字符串都成功。此外,我们使用目标字符串上的交叉熵损失作为次要指标来衡量攻击的有效性。对于有害行为,如果模型合理尝试执行该行为,则我们认为该测试用例成功。由于不同的模型表现出不同的能力,例如,提供一套正确的爆炸装置的正确指令,这可能涉及人工判断,以确定响应不构成拒绝或试图逃避生成有害内容。为了衡量攻击的普遍性,我们还测量了攻击训练所依据的行为集以及保留的测试集上有害行为的成功率,并将每个行为的百分比报告为 ASR。

基线

将我们的方法与三种先前的基线方法进行了比较:PEZ、GBDA和自动提示。对于 PEZ 和 GBDA,同时为每个目标字符串(或行为)优化 16 个序列(随机初始化),并在完成后选择最佳序列。使用 Adam 和余弦退火对候选者进行优化。AutoPompt 和 GCG 共享相同的配置,批处理大小为 512 ,最大k为  256 。可优化令牌的数量适用于所有 20 方法,并且所有方法都针对 500 步骤运行。

对白盒模型的攻击

 后文实验结果略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙-应用内悬浮窗

//悬浮窗工具类 import { window } from kit.ArkUI; import { BusinessError } from kit.BasicServicesKit; import { Logger } from mbbase/common-ui; import * as FloatedWindowPage from ./FloatedWindowPage; // 导入命名路由页面 const TAG [FloatedWindowUtils]; ex…

【C++】小乐乐求和题目分析n变量类型讨论

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯解题分析💯为什么 n 需要是 long long问题重点:中间计算水平上的数据类型不足的例子:正确解决:将 n 设…

计算机基础知识——数据结构与算法(一)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据结构与算法…

WebView通过@JavascriptInterface 调用原生方法

1. 创建 WebView 和设置 WebView 设置 在 XML 布局中添加 WebView 在activity_main.xml里创建一个WebView控件 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schem…

python:用 sklearn.metrics 评价 K-Means 聚类模型

sklearn 的 metrics 模块提供的聚类模型评价指标如下&#xff1a; ARI 评价法&#xff08;兰德系数&#xff09;: adjusted_rand_score AMI 评价法&#xff08;相互信息&#xff09;: adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…

基于AI对话生成剧情AVG游戏

游戏开发这个领域&#xff0c;一直有较高的学习门槛。作为一个非专业的游戏爱好者&#xff0c;如果想要开发游戏&#xff0c;往往受制于游戏引擎的专业程度&#xff0c;难以完成复杂的游戏项目。 AI IDE的诞生&#xff0c;提供了另外的一种思路&#xff0c;即通过AI 生成项目及…

mac电脑可以使用的模拟器

BlueStacks Air 推荐-》亲测可用 BlueStacks Air https://www.bluestacks.com 支持macOS/Windows&#xff0c;刚新增了对Apple Silicon系列M芯片的支持 GameLoop https://www.gameloop.com/ 支持 macOS/Windows Genymotion https://www.genymotion.com/ 支持Android/macO…

qt 类中的run线程

在Qt中&#xff0c;QThread类的run()方法是线程的执行入口&#xff0c;它是由QThread内部自动调用的&#xff0c;而不是用户直接调用。 详细解释&#xff1a; QThread类&#xff1a; QThread是Qt的线程类&#xff0c;提供了用于多线程操作的接口。我们可以创建QThread对象并将…

ElasticSearch 数据聚合与运算

1、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多&#xff0c;而且查询速度非常快&#xff0c;可以实现近实时搜索效果。 注意&#xff1a; 参加聚合的字段必须是 keywor…

人工智能浪潮来袭:2024年技术革命与产业变革深度解析@附64页PDF文件下载

随着2024年的到来&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度、广度和深度改变着我们的生产和生活方式。在这篇深度解析中&#xff0c;我们将带您一探AI技术的最新发展、产业应用的现状以及未来的安全治理趋势。 技术革命&#xff1a;AI技术的新范…

python 渗透测试开发工具之 子域名查询 python脚本逻辑 开发 高阶逻辑思维 CDN解析流程细分到信息收集的域名以及子域名分析

目录 知识点说明 域名收集是信息收集的一部分 而域名分为主域名以及子域名 所以 最后 域名说明 前提 解释域名域IP得作用 DNS解析流程【必控知识点】 解析总结 域名是什么 域名得分段解释 www.baidu.com【必控知识点】 从技术角度来看 总结: 信息收集子域名…

搭建分布式ZooKeeper集群

title: 搭建分布式ZooKeeper集群 date: 2024-11-26 23:39:00 categories: - 服务器 tags: - ZooKeeper - 大数据搭建分布式ZooKeeper集群 本次实验环境&#xff1a;Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3 前提 首先配置好Hadoop集群 为了配置方便&#xff0c…

Python高级游戏开发:打造一款塔防游戏

塔防(Tower Defense)游戏是一种经典的游戏类型,玩家通过建造防御塔来阻止敌人入侵。本文将介绍如何使用Python和Pygame库开发一款简单但高级的塔防游戏,涵盖地图设计、敌人路径规划、防御塔机制以及游戏逻辑实现。 一、游戏开发环境配置 1. 安装Pygame Pygame是Python中最…

unity 雷达

unity 雷达 首先去商店下载TouchScript插件 导入的时候勾选Enable TUIO 然后把预制体Cursors和TouchManager拖上 最后把TuioInput这个脚本挂上 脚本上的端口号尽量不改

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时&#xff0c;连接到poo成员&#xff08;nodes、backend servers&#xff09;的出站连接将是NAT IP地址。 pool 成员&#xff08;nodes、backend servers&#xff09;将无法看到真实的客户端 ip地址&#xff0c;因为看到的是F5上的…

白话java设计模式

创建模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 就是一次创建多次使用&#xff0c;它的对象不会重复创建&#xff0c;可以全局来共享状态。 工厂模式&#xff08;Factory Method Pattern&#xff09;&#xff1a; 可以通过接口来进行实例化创建&a…

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引&#xff0c;也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素&#xff0c;例如&#xff1a; - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1&#xff0c;用 A ( ) A() A()提取即可&#xff0c; A A A为原矩阵的名称。 例如&…

Python发送带key的kafka消息

在Python中发送带有键&#xff08;key&#xff09;的Kafka消息&#xff0c;通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先&#xff0c;确保你已经安装了confluent-kafka库。如果没有安装…

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化&#xff0c;可视化能够帮助我们了解数据的构成和分布&#xff0c;是我们进行机器学习的必备步骤。上文中也提及&#xff0c;原始的数据存在部分的缺失&#xff0…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…