Liquid AI 开源 Antidoom:基于最终 Token 偏好优化的推理模型死循环修复方法
阅读原文· marktechpost.comAntidoom 用一次训练就修复了小型推理模型常见的 doom loop,LFM2.5 和 Qwen3.5 的循环率从两位数掉到 1%,代码和数据全开源,自己训模型时可以直接加这一环。
Liquid AI 开源了 Antidoom,一种基于 Final Token Preference Optimization (FTPO) 的针对性修复方法,用于减少推理模型中的 doom loop(死循环)问题。该方法定位循环开始的第一个 token,训练模型选择连贯替代项,而不改变整体输出分布。在 LFM2.5-2.6B 上,硬数学和编程任务中的循环率从 10.2% 降至 1.4%;Qwen3.5-4B 上从 22.9% 降至 1%。整套流程可在数小时内完成,全部代码和数据集(LiquidAI/antidoom-mix-v1.0)已开源。
Liquid AI 发布了 Antidoom,这是一种开源方法,针对推理模型中一种常见的失败模式。这种失败模式就是“末日循环”。在末日循环中,模型会输出一段文本,然后一遍又一遍地重复该段。输出会一直持续直到上下文窗口耗尽。小型推理模型更容易出现这个问题,尤其是在处理较长的思考轨迹和难题时。
在 LFM2.5-2.6B 的早期检查点上,10.2% 的难数学和编程提示词的补全结果产生了重复循环。经过 Antidoom 训练后,这个比例降到了 1.4%。评估分数全面提升,完全归因于循环的减少。
太长不看版
- Antidoom 通过仅重新训练第一个循环起始 token 来减少末日循环。
- FTPO 将概率分布在多个连贯的替代项之间,而不是单一替换项。
- LFM2.5-2.6B 的循环比例从 10.2% 下降到 1.4%;Qwen3.5-4B 从 22.9% 下降到 1%。
- 该流水线只需几小时即可运行,完整技术栈已开源。
什么是 Antidoom?
Antidoom 是一种针对性修复,而非宽泛的采样改动。它找到循环开始的精确 token。然后训练模型在单一位置偏好连贯的替代项。分布的其他部分基本保持不变。
该方法借鉴了 Antislop。它使用代表单一补全 token 的“选择/拒绝”对进行训练。训练算法是最终 token 偏好优化(FTPO),与 DPO 类似。
训练并不会让模型学到新的数学或编程知识。它清除了阻碍模型输出本已能解答的答案的循环。
末日循环的剖析
Liquid AI 团队将末日循环归因于三种机制共同作用:
机制一:过训练 token 加上不确定性。某些 token 在一般情况下被选中的概率更高。现实中的著名例子包括 ‘delve’ 和 ‘testament’。Liquid AI 团队指出,这可能追溯到训练集中的合成数据。在推理轨迹中,高先验延续项常常包含诸如 ‘Wait’ 或 ‘Alternatively’ 之类的话语标记。这些 token 本身并无问题。它们可以标记有用的策略变化、验证步骤或分支。但当模型不确定或陷入困境时,它们反而成了有吸引力的后备延续项。
对于早期LFM2.5-2.6B检查点,最常见的循环起始token如下。
| Token | 循环起始占比 |
|---|---|
| the | 11.39% |
| So | 4.51% |
| Alternatively | 3.22% |
| Wait | 2.56% |
| But | 2.46% |
机制二:先前上下文强化循环。每次重复都会将该范围内的每个token推向一个概率,Duan等人在关于循环推理的工作中研究了这一点。他们将其与“V形”注意力模式联系起来。他们发现语义重复先于文本重复。
机制三:贪婪采样。推理模型通常以低温度运行,以获得稳定且可复现的推理轨迹。在温度0时,始终选择最可能的token。局部强化的循环因此无法退出。Liquid AI报告称,即使在temp=0.67时也会出现显著的循环。较低的温度会加剧这一问题。
Antidoom如何定位失败
Antidoom在低温度下,对旨在诱发循环的提示组合生成补全。该组合作为LiquidAI/antidoom-mix-v1.0数据集发布。当一个段落重复至少四次,且超过60个字符时,即检测到循环。
然后该方法定位第一个重复片段的第一个token。在该位置,它获取基础模型的前k个log-prob备选。它过滤掉短或非字母数字的噪声。它保留最多20个合理替代作为所选token。
每个训练行是一个由提示前缀、一个被拒绝token和一个或多个所选token组成的元组。所选和被拒绝的分布会在训练前进行正则化。否则,少数几个罪魁祸首如Wait、So和the会占据主导,过度抑制会降低推理能力。
检测规则本身在代码中很容易表述。下面的代码片段是示意性的。
# A loop = a unit repeating >=4 times, spanning >=60 characters.
# Returns the index of the first token of the first repeat (the target), else None.
def find_loop(text, min_repeats=4, min_chars=60):
n = len(text)
for span in range(1, n // min_repeats + 1):
start = 0
while start + span * min_repeats <= n:
unit = text[start:start + span]
repeats = 1
pos = start + span
while text[pos:pos + span] == unit:
repeats += 1
pos += span
if repeats >= min_repeats and span * repeats >= min_chars:
return start + span # first token of the first repeat
start += 1
return None每个检测到的循环随后成为一个训练行。结构是一个简单的元组。
# One FTPO training row, per the post's [prefix, rejected, chosen] format.
row = {
"prompt": prefix_up_to_the_loop, # text before the first repeat
"rejected": " Wait", # the single token that started the loop
"chosen": [" So", " Since", " The", " Therefore"], # up to 20 alternatives
}最终token偏好优化(FTPO)
FTPO是一种与DPO类似的偏好优化算法。一个训练样本包含一个提示、一个所选续写和一个被拒绝续写。其设计目的是改变少数几个token,同时尽量减少对模型其他部分的影响。
FTPO在四个方面与DPO不同:
- 最终token训练:它只训练生成过程中间序列的末尾token。
- 每个样本多个被选token:它将概率分布在一组备选token上,因此一个过训练的token不会被简单替换为另一个。
- logit空间中的类KL损失:它省略softmax,在logits中计算与参考的散度,避免对无关token施加压力。
- 两部分正则化:被选和被拒的logits更自由地移动,而词汇表的其余部分保持严格约束。
在Antidoom实现中,模型使用LoRA训练一个epoch。128–256的高LoRA秩取得了最佳结果。训练覆盖所有注意力层和MLP投影层,以及lm_head。学习率在4e-6到2e-5左右。
训练使用基于chosen_win的早停法,chosen_win是被选token击败被拒token的样本比例。在chosen_win=0.35处停止将死循环率从20–30%降至1–2%。训练时间更长往往会降低模型性能。
对于早期的LFM2.5-2.6B检查点,训练集生成在8块MI325 GPU上耗时约一小时。随后在单块MI325 GPU上训练耗时约一到两小时。收集到2万对后停止生成。
Antidoom与常规修复方法的对比
| 方法 | 改变的内容 | 成本概况 | 已知缺点 |
|---|---|---|---|
| 重复惩罚 | 重新加权输出分布 | 推理时,成本低 | 权宜之计;可能降低性能 |
| 强化学习 | 通过奖励的策略 | 校准后的奖励,昂贵的在线推演 | 设置和计算开销 |
| DPO(最终token) | 每个样本一个被选token | 离线训练 | 粗略的beta;更新单个token |
| Antidoom(FTPO) | 第一个循环token → 多个被选token | 约1小时生成(8块MI325)+ 1–2小时训练(1块MI325) | 可能暴露新的循环;可能需要额外轮次 |
结果
训练后,早期LFM2.5-2.6B检查点上的死循环率从10.2%降至1.4%。评估分数全面改善,完全归因于循环的减少。
Liquid AI团队还在Qwen3.5-4B上运行了该流程,该模型以在推理时循环而闻名。其死循环率在贪心采样下从22.9%降至1%。评估分数显著提高。
随着温度升高,评估分数的变化与死循环率呈反比。训练后,两个模型在 temp=1.0 附近均出现性能下降。这符合预期,因为更高温度的采样可能倾向于选中非优选 token。一旦消除了循环,在测试的模型中,接近贪婪采样的方式得分最高。
Liquid AI 团队指出了当前常见做法中的一个相关问题。认为更高温度有助于推理的看法,可能与死循环效应混为一谈。在他们的测试中,一旦去除循环,接近贪婪的采样方式表现最佳。
多轮处理可能有所帮助。第一轮会拒绝引发循环的 token,并将权重重新分配给其他候选 token。这可能会暴露新的失败点,再由第二轮加以针对。
交互式说明
用例与示例
- 端侧推理模型:诸如 LFM2.5 系列等小于 1GB 的推理模型,在处理困难提示词时可能在证明过程中陷入停滞。Antidoom 能够恢复因循环而损失的准确率。
- 小型编程智能体:一个 4B 的编程模型在调试复杂代码时可能陷入循环,并耗尽上下文窗口。消除循环后,它就能完成原本已经知道的修复方案。
- 智能体流水线成本控制:循环会消耗 token 直至上下文资源耗尽。消除循环可减少长时间智能体运行过程中浪费的 token 和延迟。
- 训练后修复:团队在交付微调后的推理检查点时,可以在几小时内运行 Antidoom 作为清理步骤。
优势与挑战
优势:
- 精准:它只编辑第一个循环 token,而基本保持其他 token 的分布不变。
- 快速:整个流水线在几小时内即可完成。
- 可量化:LFM2.5-2.6B 的死循环率从 10.2% 降至 1.4%;Qwen3.5-4B 从 22.9% 降至 1%。
- 开源:生成、检测以及 FTPO 训练器均已发布。
- 恢复而非教授:它恢复的是模型原本就能生成的答案。
挑战:
- 可能暴露出新的失败点,因此有时需要多轮处理。
- 过度训练会导致模型退化,因此需要在 chosen_win 指标上提前终止。
- 报告的实验结果覆盖了 LFM 检查点以及 Qwen3.5-4B,两者均为小型推理模型。
- 训练后,在 temp=1.0 附近性能可能下降。
- 每个模型都需要生成自己专属的循环数据集。