大国色批之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)

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

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

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

主流解决方案

调参

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

​​参数​​​​推荐值​​​​作用​​
temperature​​0.3~0.7​​平衡创意与稳定性
top_p​​0.7~0.9​​扩大选词范围
frequency_penalty​​0.5~1.0​​主动降低重复词概率
presence_penalty​​0.5~1.0​​避免重复相同概念

记忆表格

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

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

切换窗口

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

更新话题

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

更换更优模型

当前宇宙终极解决方案。

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