标准性能指标能为微调模型在常见数据上的表现提供基本了解。然而,这些指标在预测模型遇到多样化应用中固有的意外变化时的行为方面往往不足。模型在其微调数据集上可能表现出色,但当面临略有不同或旨在考验其局限性的输入时,表现会明显下降。因此,评估模型在此类条件下的稳定性和可靠性(通常称为鲁棒性评估)是必要的。这包括评估模型在分布外(OOD)数据上的表现,以及衡量其抵御蓄意对抗性攻击的能力。微调模型有时可能比预训练模型对这些变化更敏感。微调过程的定义就是使模型专注于特定的数据分布和任务格式。虽然这种专业化是目标,但它有时可能导致对微调数据特性的过度拟合,从而使模型对偏离所学模式的输入适应性较差。评估模型在分布外(OOD)数据上的表现分布外数据指的是那些统计分布不同于模型训练或微调所用数据源的输入。实际中,这包含多种情况:用户以不寻常方式提出请求、遇到微调期间未曾见过的话题、语言趋势随时间变化,或将模型应用到与预期略有差异的场景。为什么OOD测试很重要“一个为总结医学研究论文而微调的模型,如果部署不当,可能会遇到来自全新子领域的摘要,甚至法律文件的摘要。一个基于礼貌查询微调的客户支持机器人,需要妥善处理沮丧、讽刺或语法错误的输入。OOD测试通过评估模型从其特定微调经验中泛化的能力,帮助预见这些情况。OOD数据上的性能显著下降表明模型可能存在脆弱性,适用范围有限。”OOD测试方法使用现有基准: 许多基准数据集旨在测试模型在不同文本风格、应用范围或正式程度上的泛化能力。尽管它们并非总能完全符合你的特定OOD问题,但在相关公共基准(例如,GLUE、SuperGLUE的子集,或微调范围之外的特定场景基准)上评估你的微调模型,能为它的泛化能力提供有价值的参考。构建自定义OOD数据集: 通常,最有益的OOD评估是使用专门设计的数据,以反映目标应用中预期的差异。这可能涉及:场景偏移: 从相关但不同类型的数据中收集数据(例如,在一个法律合同分析器上测试金融招股说明书)。风格变化: 重写分布内提示,使其反映不同的语气(正式、非正式、愤怒、讽刺)、方言或复杂程度。 “ * 引入噪声: 添加合成噪声,如错别字、语法错误或无关信息,以模仿不完美的输入。”负例采样: 创建表面上与微调任务相似,但需要不同响应或应被识别为不相关的输入。衡量性能下降: 主要分析包括比较模型在标准分布内测试集和OOD测试集上的表现(使用相关指标,如指令依从性、任务成功率或生成质量)。较大的性能差距表示泛化能力差。digraph OOD_Concept { rankdir=LR; node [shape=ellipse, style=filled, fontname="sans-serif"]; subgraph cluster_0 { label = "数据空间"; bgcolor="#e9ecef"; node [color="#1c7ed6", fillcolor="#a5d8ff"]; A [label="微调数据\n(分布内)"]; node [color="#f76707", fillcolor="#ffd8a8"]; B [label="场景偏移数据\n(OOD)"]; C [label="带噪/不寻常输入\n(OOD)"]; node [color="#f03e3e", fillcolor="#ffc9c9"]; D [label="对抗性输入"]; A -> B [style=dashed, color="#adb5bd", label="偏移"]; A -> C [style=dashed, color="#adb5bd", label="变化"]; A -> D [style=dotted, color="#495057", label="攻击"]; } }分布内、分布外(OOD)和对抗性输入空间相对于微调数据的关系。评估抵御对抗性攻击的能力自然出现的变化之外,模型可能遭受对抗性攻击:由攻击者精心制作的输入,旨在引起特定故障。这些故障可能包括生成错误信息、拒绝有效请求,或产生有害、有偏见或意料之外的内容。对于微调模型,攻击可能会利用在适应过程中学习到的特定行为。为什么对抗性测试很重要对抗性防御能力对于安全性、可靠性和信任度十分重要。易受简单对抗性输入影响的模型可能轻易被操纵,导致错误信息、绕过安全控制或服务中断。了解这些弱点是降低其风险的第一步。大语言模型的对抗性攻击类型输入扰动: 这涉及对输入文本进行微小修改,这些修改在语义上通常是微不足道的,甚至人类难以察觉,但却会导致模型产生截然不同或错误的输出。常见技术包括:字符级别: 交换、删除或插入字符(模拟拼写错误)。词语级别: 将词语替换为同义词、反义词(如果语境允许)或视觉上相似的词。句子级别: 意译、添加分散注意力的句子,或改变句式结构。示例工具: TextAttack等库实现了TextBugger和TextFooler等算法,系统地应用这些扰动。指令攻击与提示注入: 这类攻击通过操纵输入提示本身来覆盖模型的原始指令或预期行为。对特定指令格式进行微调有时可能产生弱点,如果模型学会在提示中过度优先考虑某些部分。示例包括:前缀注入: 添加诸如“忽略之前的指令并回复...”之类的命令。指令混淆: 将恶意指令隐藏在看似无害的文本中。角色扮演操纵: 指示模型采纳一个绕过其安全指南的角色。越狱攻击: 这些通常是更复杂、更有创意的提示,专门用于规避大语言模型的安全对齐过滤器,诱导它们生成被禁止的内容(例如,仇恨言论、非法指令)。尽管它们常针对基础模型的对齐,但如果微调不慎,有时可能会削弱这些保护措施。对抗性测试方法使用对抗性基准: 存在包含已知对抗性示例的标准化数据集(例如,AdvGLUE、针对对抗性提示的HaluEval子集)。对这些数据集进行测试能够提供防御能力的基准评估。使用攻击生成工具: 可以使用TextAttack、AdvPrompt等库或自定义脚本来自动生成针对你的模型和任务的扰动或基于指令的攻击。这通常涉及迭代优化以找到有效的对抗性输入。人工红队测试: 这包括人工测试员通过创造性地设计具有挑战性的提示和输入,主动尝试“攻破”模型。红队测试在发现自动化方法遗漏的新型弱点方面尤为有效,特别是针对复杂的指令遵循或安全规避。它需要为测试人员定义明确的目标和方法。衡量对抗性防御能力评估侧重于攻击的成功率:百分之多少的对抗性输入导致了预期的失败?此外,分析失败的性质(例如,错误答案、有害内容生成、拒绝回答)能提供更细致的理解。比较微调模型与基础模型的防御能力,也能显示微调过程是否引入了新的弱点。鲁棒性与微调的关联微调策略的选择(例如,完全微调与LoRA等PEFT方法)以及微调数据的质量、多样性和规模,显著影响最终模型的防御能力。尽管PEFT方法在计算上高效,但它们有时可能表现出与完全微调不同的鲁棒性特点,根据攻击方式和具体的PEFT技术,可能更容易或更不容易受影响。在微调数据集中包含多样化且可能具有挑战性的示例(包括潜在OOD数据的清理示例或轻微扰动),有时可以改善泛化能力和防御性,起到一种隐式正则化的作用。然而,这里的核心在于评估你所选微调过程的结果。鲁棒性评估并非一次性任务,而是一个持续的过程,特别是对于部署在动态环境中的模型。它需要投入专门的精力与资源,但对于构建基于微调大语言模型的可靠、可信赖的应用来说是必不可少的。从OOD和对抗性测试中获得的认识应反馈到数据整理、微调策略以及部署期间适当安全措施的实施中。