大国色批之AI持续输出陷入失忆、循环、重复

Updated on

模型生成机制

语言模型通过以下步骤生成文本:

  • 输入处理:将输入文本(Prompt)编码为向量。
  • 迭代预测第一步:基于输入预测第 1 个输出 Token 的概率分布 (例如 Token A 概率 30%,B 概率 25%…) 第二步:将已生成的 Token(如 A)加入输入,预测第 2 个 Token (例如 B 概率 40%,C 概率 20%…)
  • 重复此过程直到满足停止条件(如达到 max_tokens 或遇到停止符)

上下文上限 Context Window

模型的上下文窗口(Context Window) 限定了单次对话可处理的输入与输出Token总量上限。随着对话推进,当Token总量逼近窗口容量时,可能导致失忆,加剧重复。

失忆与混乱

窗口滑动机制直接丢弃最旧Token,且保留的远距Token会因位置编码衰减导致注意力权重趋近于零。也就是说,早期信息失效,你的爱人再也忆不起来了。

记忆瓶颈

Context Window主要受硬件显存(KV缓存)和算法设计(位置编码)限制。

KV缓存(Key-Value Cache)

KV缓存是一种提高模型效率的内存结构,通过在显存中存储历史token的KV矩阵,可以避免自注意力机制重复计算。上下文长度越长,所需存储的KV缓存越多,显存需求越大,对显卡性能和数量的要求就越高[^1]。显然硬件无法无限满足KV缓存的需求,就此制约Context Window上限。

显存占用 ≈ 2 × L × D × T × dtype_size
L:Transformer层数
D:Key/Value向量维度
T:对话Token总数
dtype_size:数据类型字节数(如fp16为2)

位置编码

模型本身不能感知物理时间、序列顺序。需要位置编码为每个token嵌入位置信息,使其能识别顺序关系,避免对话逻辑混乱。当前主流方案(如RoPE、ALiBi)的相对位置感知能力存在固定范围限制。超出此范围后,位置分辨率锐减,模型难以区分远距离token的相对位置,就此约束有效上下文窗口的上限。

窗口策略 Context Window Windowing

当对话长度 > Context Window Size 时,管理上下文有不同的的动态截取策略。

策略类型技术实现优点缺点
固定滑动窗口丢弃最旧 tokens(FIFO)计算复杂度 O(1)破坏长距离依赖
层次化保留根据注意力得分动态压缩旧内容保留关键信息实现复杂(需梯度回传)
块丢弃策略按语义块(segment)丢弃保持局部连贯性可能丢失核心前提

循环与重复

若新生成内容的信息熵显著降低( ΔH<ϵ )或与近期上下文高度相似(相似度>0.8),模型概率分布将坍缩至高重复性Token,引发局部收敛循环。也就是说,长期无聊重复的对话只能引来无聊重复的回答。想想自己的问题吧,我的朋友。

信息熵衰减(Probability Collapse

随着生成文本增长,模型预测会面临信息熵衰减(Probability Collapse):

  • 早期阶段(高熵):上下文空白较大,模型可选择多种合理路径
  • 后期阶段(低熵):已生成文本形成强约束(如故事主角已死亡,科技文章结论已明确)。剩余合理选项急剧减少 → 模型被困在狭窄的概率分布中。

当模型在低熵状态下继续生成时,剩余可选的合理 Token 减少。重复模式成为高概率路径: 模型发现重复已说内容(如总结句、关键词)的 概率远高于新内容

主流解决方案

调参

调整模型输出参数,提高模型输出新内容的概率。

参数推荐值作用
temperature0.3~0.7平衡创意与稳定性
top_p0.7~0.9扩大选词范围
frequency_penalty0.5~1.0主动降低重复词概率
presence_penalty0.5~1.0避免重复相同概念

记忆表格

阶段性地总结关键内容,提醒模型关键信息。

如果频繁总结、总结冗余,还高频注入到当前上下文窗口中,可能会导致模型输出过度强调、以至于复读关键词。

切换窗口

在新的对话窗口/隐藏前文信息,输入刚刚总结的关键信息,继续对话。

更新话题

在话题中引入新的元素,拓展模型的采样候选池。

更换更优模型

当前宇宙终极解决方案。

[^1]单卡的性能有极限,有时无法满足某些高精度模型的算力需求(比方说KV缓存太大,存不下来)。分布式训练则分解计算任务到多张显卡,用通信换性能,但仍有其需要各种优化的地方。