那么大模型会不会有“漂移”现象呢,答案是肯定的。大致分为两类:
1)大模型漂移(LLM Drift)
大模型漂移(LLM Drift)是指在较短时间内,LLM在处理相同问题时给出的答案发生了显著变化。这种变化并不仅仅是因为大语言模型本质上的不确定性,或者问题提示的轻微变化,还有可能是LLM本身发生了变化。
斯坦福和伯克利有一项联合研究《How Is ChatGPT’s Behavior Changing over Time?》,对GPT-4 和 GPT-3.5 在回答问题的准确性进行跟踪,研究发现,无论是 GPT-3.5 还是 GPT-4,它们的表现都出现了大幅波动,有的任务甚至出现了性能退化。下图展示了四个月内模型准确度的波动情况,在某些情况下,准确度的下降相当严重,损失了超过60%。
图片
https://arxiv.org/pdf/2307.09009.pdf
而其发生漂移的原因,对于应用开发者本身并不透明,比如模型发生变化等因素,但至少需要让开发者知道持续监控和评估LLM 随着时间推移模型性能变化的必要性,进而保证应用的稳定性。
该研究对应的代码库:https://github.com/lchen001/LLMDrift
2)提示漂移(Prompt Drift)
提示漂移是指在推理过程中,由于模型变化、模型迁移或提示注入数据的变化,提示产生的响应随时间推移而不同的现象。
由于大模型的特点,其每次回答是非确定性的,即使是相同的问题,在不同时间点可能会得到不同的答案。本质上,这并不一定是问题,甚至是一个特点,并且即便用词不同,核心内容可能依旧能保持一致。但在发生提示漂移时,LLM可能会有不合预期的回答。
市面上针对于Prompt drift提供了一些提示管理和测试工具,例如 ChainForge,LangSmith等。
由于模型在整个应用中起重要作用,因此,迫切需要一种机制,来确保在大规模迁移或淘汰大语言模型(LLM)之前,能够对基于LLM的生成应用(Gen-Apps)进行充分测试。如果能有一种模型,在很大程度上对所使用的大语言模型不敏感,那自然是更理想的。要实现这一目标,一种可能的方法是利用大语言模型的上下文学习能力。
级联放大
不仅如此,由于当前很多大模型应用,如RAG,Agent,在使用大模型构建应用时会多次使用到大模型,形成复杂的嵌套和组合的情况。而一旦发生“漂移”,就会引发级联(Cascading)现象,它指的是在一个处理流程的连锁过程中,如果一个环节出现问题或偏差,这个问题通常会在后续的环节被无意中放大。这意味着每个环节的输出都会进一步偏离最初的预期结果。
考虑下面的情形:
用户可能提出的问题是出乎意料的或者没有预先计划的,这可能会导致链式处理中出现意料之外的回答。
前一个环节可能会出现不准确的输出或某种程度的偏差,在后续环节中被加剧。
大语言模型(LLM)的回答可能也会出现意外,这是因为大语言模型本身就具有不确定性。提示漂移或大语言模型漂移可能就是在这里引入的。
然后上一个环节的输出就被传递到下一个环节,导致了偏差的进一步“级联”。
从某种角度看,一个基于大模型构建的应用,会放大因LLM漂移和提示漂移带来的问题,越复杂的应用这样的问题越突出,因此,如何避免这样的问题发生或者降低这类情况的影响,比如类似微服务里的故障隔离等措施,也成了一个新的研究方向。