华盛顿大学和加州大学伯克利分校的研究人员最近发表了一项震惊学界的发现:仅仅改变提示的格式,就可能导致AI模型的性能产生高达76个百分点的巨大波动。这项ICLR2024上会的研究不仅挑战了我们对AI模型鲁棒性的认知,还为提示工程领域开辟了一个全新的研究方向。
01
AI模型对Prompt格式的敏感性
近年来,大型语言模型(LLMs)在各种任务中展现出惊人的能力,从回答问题到生成代码,再到创作文章。这些模型的性能很大程度上依赖于输入的提示。因此,提示工程- 即设计和优化这些提示- 成为了一个关键的研究领域。
然而,大多数研究都集中在提示的内容上,很少有人关注提示的格式。这项新研究填补了这一空白,探索了看似无关紧要的格式细节如何对模型性能产生重大影响。
为了直观地展示提示格式对AI模型性能的巨大影响,研究者们提供了一个令人惊讶的实例。在这个例子中,研究者们对一个简单的’**Passage’**和’Answer’格式进行了微小的修改,包括改变分隔符、调整大小写、调整间距等。
令人震惊的是,这些看似微不足道的格式变化导致了模型性能的巨大波动。在最极端的情况下,仅仅是将冒号替换为空格,并略微调整字段间的间距,就使模型的性能从3.6%的准确率飙升到80.4%,提升了惊人的76.8个百分点!
02
FORMATSPREAD算法
研究团队开发了一种名为FORMATSPREAD的新算法,用于系统地评估提示格式对模型性能的影响。这个算法的核心思想是:
1. 定义一个语法,用于生成语义等价但格式不同的提示。
2. 使用贝叶斯优化来高效地探索大量可能的格式。
3. 计算在不同格式下模型性能的范围(即最高性能和最低性能之间的差距)。
FORMATSPREAD算法的创新之处在于,它不需要访问模型的内部参数,这意味着它可以用于评估任何黑盒AI模型,包括那些只提供API访问的模型。
03
实验设置:多模型、多任务的广泛评估
研究人员使用了多个流行的开源大语言模型,包括LLaMA-2系列(7B、13B和70B参数版本)、Falcon-7B和Falcon-7B-Instruct,以及GPT-3.5-Turbo。
他们选择了来自Super-NaturalInstructions数据集的53个分类任务,涵盖了多项选择和其他类型的分类问题。这些任务具有多样性,涉及各种领域和难度级别。
研究人员还考虑了不同的few-shot设置(1-shot和5-shot),以评估示例数量对格式敏感性的影响。
如图所示,我们可以直观地看到FORMATSPREAD算法在不同模型和few-shot设置下的性能spread分布。这张图表明:
**1. 普遍存在的格式敏感性:**从图中我们可以看到,无论是哪种模型或few-shot设置,都存在明显的性能spread,这证实了格式敏感性是一个普遍现象。
**2. 模型间的差异:**LLaMA-2系列模型(7B、13B、70B)显示出相对较大的spread范围,而Falcon模型的spread范围相对较小。这可能反映了不同模型架构对格式变化的敏感程度不同。
**3. Few-shot设置的影响:**对比每个模型的1-shot和5-shot设置,我们可以观察到5-shot设置通常会略微减小spread范围,但并未完全消除格式敏感性。这表明增加few-shot示例可能在一定程度上缓解格式敏感性,但不足以解决这个问题。
**4. 模型大小的影响:**比较LLaMA-2的7B、13B和70B版本,我们发现增加模型参数量并未显著减少格式敏感性。这挑战了"更大的模型更稳定"的普遍假设。
**5. 指令微调的效果:**对比Falcon-7B和Falcon-7B-Instruct,我们可以看到指令微调后的模型spread范围略有减小,但差异并不显著。这表明指令微调可能略微提高了模型对格式变化的鲁棒性,但并未从根本上解决这个问题。
这些观察结果强调了FORMATSPREAD算法的重要性。它不仅揭示了格式敏感性在各种条件下的普遍存在,还为我们提供了一种系统评估和比较不同模型在各种格式下性能的方法。这对于公平、全面地评估语言模型的能力至关重要。
04
关键发现:格式的惊人影响力
1. 显著的性能波动
研究的核心发现是,仅仅改变提示的格式就能导致模型性能的巨大波动。在某些任务中,性能差异高达76个百分点。平均而言,跨所有模型和任务,格式变化导致的性能波动约为10个百分点。
这意味着,一个格式精心设计的提示可能会让模型表现出色,而一个格式不佳的提示则可能导致同一个模型在同一个任务上表现糟糕。
2. 普遍存在的现象
这种对格式的敏感性并不局限于特定的模型或任务。研究发现,即使是最先进的模型,如LLaMA-2-70B,也表现出了显著的格式敏感性。增加模型大小、增加few-shot示例的数量,甚至进行指令微调,都无法消除这种敏感性。
3. 模型间的不一致性
更令人惊讶的是,一个对某个模型有效的格式可能对另一个模型完全无效。研究发现,如果格式A比格式B在模型X上表现更好,那么在模型Y上,格式B反而可能比格式A表现更好。这种现象的发生概率高达14%。
4. 单一特征的影响
研究还发现,即使是单个格式特征的改变,如改变分隔符或使用不同的大小写,也可能导致显著的性能变化。在某些情况下,这种微小的改变可能导致5个百分点以上的性能差异。
5. 格式的可识别性
有趣的是,研究人员发现,模型似乎能够"识别"不同的格式。通过分析模型的内部表示,他们发现不同格式产生的嵌入向量是可分离的。这种可分离性与观察到的性能波动有显著相关性。
05
FORMATSPREAD算法的工作原理
FORMATSPREAD算法的设计目标是在有限的计算资源下,高效地探索大量可能的提示格式并估计性能范围。让我们更详细地了解这个算法的核心组成部分:
1. 语法定义
研究人员首先定义了一个形式语法,用于生成语义等价但格式不同的提示。这个语法包括:
- 基本字段:如"Passage:“或"Answer:”
- 分隔符:如": “或” - "
- 空格:如单空格、双空格或换行
- 大小写变换:如全大写、首字母大写等
- 枚举格式:如"(A)"、"1.“或"I.”
为了理解FORMATSPREAD算法的工作原理,让我们首先看一下上图。这张图展示了算法如何将一个看似简单的提示分解为多个精确定义的组件。从顶部开始,我们可以看到整个提示结构被分为几个主要部分,每个部分又有其自己的格式定义。
特别值得注意的是底部的颜色编码部分,它展示了算法可以操作的各种格式元素。这些包括大小写变化(绿色)、分隔符(粉色)、文本和选项之间的分隔(橙色)、项目格式化(紫色)和空格使用(蓝色)。正是通过系统地变化这些元素,FORMATSPREAD算法能够生成大量语义等价但格式不同的提示变体。
这种精确的结构化方法不仅确保了生成的变体在语义上与原始提示等价,还允许研究人员全面评估格式变化对模型性能的影响。通过这种方式,FORMATSPREAD为提示工程和模型评估提供了一个强大而系统的工具。
2. 贝叶斯优化
为了有效地探索大量可能的格式,FORMATSPREAD使用了一种基于Thompson采样的贝叶斯优化方法。这种方法将问题建模为一个多臂赌博机问题,其中每个"臂"代表一个不同的格式。
算法的工作流程如下:
**a) 初始化:**为每个格式设置一个先验分布,反映我们对其性能的初始估计。
**b) 采样:**根据当前的分布,选择一个格式进行评估。
**c) 评估:**使用选定的格式对一小批数据样本进行评估。
**d) 更新:**根据评估结果更新该格式的后验分布。
**e) 重复:**重复步骤b-d,直到达到预定的计算预算。
3. 性能范围估计
算法分两个阶段运行:首先寻找最佳性能的格式,然后寻找最差性能的格式。通过这种方式,FORMATSPREAD能够估计出给定任务和模型的性能范围。
4. 计算效率
研究人员发现,即使只探索5%的可能格式,FORMATSPREAD也能在2个百分点的误差范围内估计出真实的性能范围。这种高效性使得该方法在实际应用中变得可行。
06
实验结果分析:格式敏感性的多个维度
1. 模型大小的影响
研究比较了不同大小的LLaMA-2模型(7B、13B和70B参数)。结果显示,增加模型大小并不能消除格式敏感性。例如,LLaMA-2-70B在某些任务上仍然表现出高达84个百分点的性能波动。
这一发现挑战了"更大的模型更稳定"的普遍假设,表明即使是最先进的大型模型也可能受到格式变化的显著影响。
2. Few-shot学习的影响
研究者比较了1-shot和5-shot设置下的性能。增加示例数量确实在某种程度上减少了格式敏感性,但并没有完全消除它。这表明,即使在有多个示例的情况下,格式仍然是一个重要的因素。
3. 指令微调的影响
比较Falcon-7B和Falcon-7B-Instruct模型的结果显示,指令微调虽然能提高整体性能,但并不能显著减少格式敏感性。这意味着即使是经过专门训练来遵循指令的模型,也可能受到格式变化的影响。
4. 任务类型的影响
研究发现,不同类型的任务表现出不同程度的格式敏感性。例如,某些多项选择任务比简单的二分类任务表现出更高的格式敏感性。这可能是因为多项选择任务的格式变化空间更大,为模型提供了更多可能的解释。
5. 特定格式特征的影响
研究者详细分析了不同格式特征的影响。、
例如:
**- 分隔符:**使用":“、”-“或”||"等不同分隔符可能导致显著的性能差异。
**- 大小写:**在某些任务中,将关键词全部大写或首字母大写可能影响模型的理解。
**- 空白:**使用换行符、制表符或不同数量的空格也可能影响性能。
这些发现强调了在设计提示时需要考虑的微小细节。
6. 模型内部表示的分析
研究者分析了模型的内部表示(即最后一层隐藏状态),发现不同格式产生的表示在高维空间中是可分离的。这种可分离性与观察到的性能波动有显著相关性,暗示模型可能以某种方式"识别"并区别对待不同的格式。
07
FORMATSPREAD的实际应用****
1. 模型选择和评估
对于需要选择或评估AI模型的组织来说,FORMATSPREAD提供了一个强大的工具。通过使用这种算法,开发者可以:
- 更全面地了解模型在各种条件下的性能范围。
- 识别模型在哪些类型的格式下表现最好或最差。
- 在比较不同模型时,考虑它们对格式变化的敏感性。
这种方法可以帮助组织做出更明智的决策,选择最适合其具体需求和使用场景的模型。
2. 提示优化
对于提示工程师来说,FORMATSPREAD可以成为一个强大的优化工具。它可以帮助:
- 自动发现对特定任务和模型最有效的格式。
- 识别哪些格式特征对性能影响最大,从而指导手动优化。
- 为不同的用户场景设计多个高性能格式,以增加系统的灵活性。
这种系统化的方法可以大大提高提示工程的效率和效果,尤其是在处理复杂任务或需要极高性能的场景中。
3. 鲁棒性测试
FORMATSPREAD还可以用于评估AI系统的鲁棒性。开发者可以:
- 模拟各种可能的用户输入格式,测试系统的适应能力。
- 识别系统的"弱点",即对哪些格式变化特别敏感。
- 设计更全面的测试套件,包括各种格式变体。
这种全面的测试可以帮助开发更可靠、更稳定的AI系统,减少在实际部署中可能遇到的意外问题。
4. 安全审计
从安全角度来看,FORMATSPREAD可以用于:
- 评估系统对潜在的格式操纵攻击的脆弱性。
- 识别可能被恶意利用的格式"漏洞"。
- 开发防御策略,如格式标准化或多格式验证。
这对于需要高度安全性的应用(如金融、医疗或法律领域的AI系统)特别重要。
5. 用户界面设计
对于设计AI系统用户界面的团队,这项研究的发现也有重要意义:
- 可以设计能自动调整输入格式的界面,以优化模型性能。
- 为用户提供格式指导,帮助他们获得最佳结果。
- 在背后使用多种格式重复查询,然后选择最佳结果,从而提高系统的整体可靠性。
这种方法可以显著提升用户体验,同时最大化AI系统的性能。
我用FORMATSPREAD算法写了一个SYSTEM PROMPT用于优化结构化的提示,这些被优化的提示词来自腾讯元器操作文档。结果表明个,这些结构化的Prompt可能更适合Hunyuan大模型,我应该在这个模型上用这条提示进行优化。我相信,操作文档里的Prompt一定是精心优化过的。用GPT 4o和Claude 3.5 Sonnet优化这些提示可能存在过拟合,未必能得到更好效果,因此你优化提示时,最好选定模型再进行优化。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。