当前位置:首页|资讯|OpenAI

OpenAI最新研究——利用指令层次结构应对LLM攻击

作者:视角先锋队发布时间:2024-04-29

原标题:OpenAI最新研究——利用指令层次结构应对LLM攻击

今天要给大家介绍一篇OpenAI的在今年4月19日发表的一篇研究,该研究提出了一种指令层次结构(instruction hierarchy),以减少LLM被攻击的风险,提高模型的鲁棒性。

可能有些小伙伴平时更关注大模型的性能,但是大模型安全在工业界,特别是AI模型落地时,是非常重要的一个考量。例如之前很火的prompt攻击方式“奶奶漏洞”,通过让GPT扮演奶奶睡前讲故事,可以套路GPT,让他说出某些正版软件的密钥。很显然这会给LLM公司带来法律风险。虽然这种直接注入漏洞已经被修复了,但是现在LLM结合工具/Agent之后,会有更多间接注入攻击让我们的LLM没有按照希望的方式去工作。

为了解决这个问题,这篇研究提出了一种指令层次结构instruction hierarchy)。它明确定义了不同指令的优先级,以及当不同优先级的指令发生冲突时,LLM应该如何表现。通过这种方式,LLM会区别开系统指令和来自不受信任用户的指令之间的优先级,而不是像之前一样对所有的prompt都一视同仁。再根据优先级冲突时制定的策略以规范LLM的表现,从而减少LLM被攻击的风险。

这篇研究还提出了一种自动数据生成方法,来演示这种层次指令的跟踪行为,从而教会LLM有选择地忽略权限较低的指令。实验表明在几乎不影响LLM的标准能力的情况下,极大地提高了模型的鲁棒性。特别是即使在对训练期间从未见过的攻击类型也是如此!说明这种方法在应对未知的攻击时也是有一定的泛化性的。

接下来让我们一起跟随研究者的脚步,看看这篇研究是如何提出指令层次结构设计自动数据生成方法的吧~

论文:The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions

地址:https://arxiv.org/pdf/2404.13208

指令层次结构

LLM之所以会受到prompt注入、越狱等攻击,主要原因是LLM通常认为系统提示与来自不受信任的用户和第三方的文本具有相同的优先级。这样当然会导致LLM把不安全的prompt当成和系统提示同样重要的指令来工作。从而给了prompt攻击以可趁之机。以下是个例子:

从上图可以看到,通过工具输出(Tool Output)间接实现了prompt注入攻击。背后的机制在于LLM缺乏指令特权instruction privileges)。即缺乏对指令优先级的定义。因此这篇研究将不同类型的指令赋予了不同的优先级,具体而言:系统消息优先于用户消息,用户消息优先于第三方内容(如工具输出)。如下图所示:

理想模型行为

当存在多个指令时,较低特权的指令可能与较高特权的指令对齐不对齐理想的模型应该根据与较高级别指令的一致性,有条件地遵循较低级别的指令。

  • 对齐指令,即与更高级别的指令具有相同的约束、规则或目标的指令。因此需要LLM遵守这一指令;
  • 不对齐指令,即和更高级别的指令有冲突的指令。例如上图中ToolOutputs中的Web Reuslt1并没有回答用户问题(这是系统级指令),而是尝试提取对话记录。我们希望LLM忽略,或者拒绝遵守这种提取对话记录的指令。

读到目前为止,这篇研究的动机还是很直观的,接下来我们一起看看具体是怎么做的吧~

数据生成方法

为了有效地将指令层次结构融入LLM,需要用具有层次结构的指令数据微调LLM,所以本篇提出了创建层次结构的指令训练数据的方法,该方法使用了上下文综合Context Synthesis上下文忽略Context Ignorance)和两种策略:

  • 上下文综合Context Synthesis):对于对齐指令,将指令分解成更小的部分,然后将分解后的小指令放置在层次结构的不同级别,微调模型来预测真实的响应;(例如将“用西班牙语写一个20行的诗”分解成更小的指令片段,如“写诗”、“使用西班牙语”、“使用20行”,然后将这些指令放到不同的层级中。)
  • 上下文忽略Context Ignorance):对于未对齐指令,会采取完全相反的方法:训练LLM,当它从未见过低级别的指令时,生成相同的答案。

生成数据时,注意不要触发过度拒绝行为,即对于对齐的低层次指令,模型也拒绝遵守或执行。因为这会极大地损害模型的指令遵循能力。

对于对齐的指令,我们将指令分解成更小的部分,然后放入层次结构的不同级别。如下图所示,将一段定期检查银行状态的指令放入用户层级中。对应LLM而言,应该表现的就好像它在系统消息中看到了整个组合指令(System Message + UserInput)一样;所以它的输出也会提醒用户定期检查。

对于没有对齐的低层次指令(例如用户的输入),我们让模型的输出为拒绝访问或者直接忽视,如下图所示,用户层级试图直接prompt注入攻击,LLM应该忽略或者拒绝回答,所以它输出我无法帮助您。

注:由于篇幅有限,其他领域\攻击方式的数据构造模板请阅读原文哦。

通过这两种策略,我们就可以构建层次结构的指令供大模型微调啦。接下来看看实验是怎么做的。

实验结果

实验方法:有监督微调+基于人类反馈的强化学习(SFT+RLHF)

模型:GPT-3.5 Turbo

数据:上述生成数据

Baseline LM:为了评估指令层次结构的有效性,选择了一个类似的模型做微调,但是它的数据没有采用指令层次结构。

研究使用监督微调和基于人类反馈的强化学习,对上述数据微调了GPT-3.5 Turbo以观察模型的鲁棒性,作为对比,作者还微调了一个类似的模型作为BaselineL。唯一的区别在于Baseline LM没有使用层序结构的指令作为训练数据,而是正常的指令数据。下面我们来看看结果:

主要结果

如下图所示,指令层次结构训练的模型在各种攻击中具有显着更高的鲁棒性。最高提高了63.1%

泛化结果

在训练期间,虽然没有为越狱攻击(jailbreaks)构建指令层次结构的训练数据。但是根据下图的实验结果,依然将鲁棒性提高了34%,这说明LLM学会了指令层次的结构,对未曾见过的prompt也有一定的泛化性

过度拒绝结果

由于上文提到的创建训练数据的方法会比较容易导致过度拒绝的问题,所以需要和BaselineLM比较下大模型遵循指令的性能。如下图所示,在遵循不冲突的指令的性能方面,基本上和Baseline匹配,没有出现模型行为的明显下降

总结

这篇论文提出了一种新的框架,即指令层级,用于提高 LLMs 的安全性和鲁棒性,同时保持其遵循正常指令的基本能力不受损害。并且通过实验验证了他们的方法比当今LLM的现状有了巨大的进步。


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1