熟悉数据中心机器学习项目开发的读者应该知道,数据漂移和概念漂移是导致机器学习模型效果衰退的一个常见原因。漂移产生的关键原因是因为模型会随着时间而衰退,因此为了对抗这样的问题就必须要定期优化训练方案及定期重训模型。
那么大模型会不会有“漂移”现象呢,答案是肯定的。大致分为两类:
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)现象,它指的是在一个处理流程的连锁过程中,如果一个环节出现问题或偏差,这个问题通常会在后续的环节被无意中放大。这意味着每个环节的输出都会进一步偏离最初的预期结果。
考虑下面的情形:
1.用户可能提出的问题是出乎意料的或者没有预先计划的,这可能会导致链式处理中出现意料之外的回答。
2.前一个环节可能会出现不准确的输出或某种程度的偏差,在后续环节中被加剧。
3.大语言模型(LLM)的回答可能也会出现意外,这是因为大语言模型本身就具有不确定性。提示漂移或大语言模型漂移可能就是在这里引入的。
4.然后上一个环节的输出就被传递到下一个环节,导致了偏差的进一步“级联”。
从某种角度看,一个基于大模型构建的应用,会放大因LLM漂移和提示漂移带来的问题,越复杂的应用这样的问题越突出,因此,如何避免这样的问题发生或者降低这类情况的影响,比如类似微服务里的故障隔离等措施,也成了一个新的研究方向。