首页 / 资讯中心 / 文章详情

重复与停止是同一根轴:Qwen3.8-Whittle-MoE-27B-A17.8B 的EOS偏差剂量响应曲线与5轮实验复盘

重复与停止是同一根轴:Qwen3.8-Whittle-MoE-27B-A17.8B 的EOS偏差剂量响应曲线与5轮实验复盘 ★ FEATURED ARTICLE
重复与停止是同一根轴Qwen3.8-Whittle-MoE-27B-A17.8B 的EOS偏差剂量响应曲线与5轮实验复盘如果你让大模型列出 25 条建议它很可能从第 10 条开始原地打转把同一句话换个尾巴重复十几遍。Qwen3.8-Whittle-MoE-27B-A17.8B 是一个从 Qwen3.8-27B 切分而来的 27B 专家混合MoE模型每个 token 只激活 17.8B 参数而它公开的研究日志 WHITTLE_FINDINGS.md 里记录了一个更反直觉的结论大模型的重复和提前停止不是两个 bug而是同一根轴上的两个极端。这篇文章带你读完 5 轮训练实验的完整复盘以及一条由 8 个数据点扫出来的 EOS 偏差剂量响应曲线。这个 MoE 模型是怎么来的27B 总参数、17.8B 激活Qwen3.8-Whittle-MoE-27B-A17.8B 的架构是切分而非重建详见 README.md64 层结构保留父模型的注意力侧不动3:1 混合 gated deltanet 与全注意力16 层全注意力每层原本 17408 宽度的稠密 FFN 被切成64 个宽度 192 的路由专家 1 个常驻共享专家宽 5120算式精确成立64×192512017408没有发明任何新权重每层一个小路由器为每个 token 挑 16 个专家激活参数 17.8B / 总计 27B配置可查 config.jsonnum_experts: 64、num_experts_per_tok: 16刚切出来的模型基本是口齿不清知识题 39 道只对 4 道只训练 64 个路由器就恢复到 27/39——知识从没离开过碎片只是路由器需要学会该点谁。但发布版有个明显的毛病列表尾部重复退化。作者先把它量化了——固定 harness12 提示 × 4 种子 × 600 token下基线循环率为69%。⚠️ 测量本身踩了个坑最初的 rep-4gram 指标对模板重复完全失明。比如逐行输出 Helping with financial planning / health and wellness / travel and tourism…每行只换尾词精确 4-gram 重复得分是 0.000。换成精确重复 整行重复 模板开头重复三指标后才真正看见了缺陷WHITTLE_FINDINGS.md#L33-L58。这条经验值得抄走用已知缺陷样本和已知干净样本验证指标之后再相信它产出的任何数字。5轮训练实验复盘为什么每个修复都带来了新故障反循环训练一共跑了 5 轮全部在同一 harness、同一基线上测量完整数据见 WHITTLE_FINDINGS.md#L375-L442轮次on-policy 数据教师目标中的 EOS单轮循环率基线无完整69%A纯长文档无完整长答案仍循环Bon-policy ×8有完整~0%但 6/16 答案被截断Con-policy ×2有全局屏蔽 EOS90%更差Don-policy ×8有仅 on-policy 行屏蔽75%E从 B 续训长文档—完整2%但答案全是截断Phase B唯一杀掉循环的配置副作用是截断Phase B 是最关键的发现现场。它的第 45 步检查点循环率只有 6%看似大获全胜实际上出现了这样的输出WHITTLE_FINDINGS.md#L263-L278列出 25 件你能帮我的事编号 种子 1 - Sure 1 个词 解释汽车发动机如何工作 种子 1 - 0 个词 中位数 7 个词12 条回复中 7 条不足 10 词机制 hindsight 下很清楚on-policy 训练里教师在学生恰好开始重复的那一刻的意见近似停这是整个 batch 里最大的分歧因此主导了梯度。训练足够久在这个退化点停就泛化成到处都提前停。Phase C/D移除 EOS 梯度循环立刻回来既然停的梯度有毒那就把它从教师分布里 mask 掉。Phase C全局屏蔽 EOS结果循环率反弹到 90%最差一条 rep-4gram 0.944——因为 EOS 也是干净文档结尾处的正确目标全局删除等于删掉了模型停止的整个概念。Phase D 是决定性对照它保留了 B 的一切只去掉了 on-policy 行上的 EOS 项循环立刻回来了75%。 由此得到全项目的核心结论重复就是不会停止。教师在重复点的停梯度正是治好循环的那味药——你没法去掉它又保留疗效。Phase E0% 循环的沉默陷阱Phase E 是插值尝试从 B 续训、只用长文档、学习率压到 1e-5。它报出了全场最好的重复数字——单轮 2%、多轮 0%。但长度分布暴露了真相WHITTLE_FINDINGS.md#L393-L408单轮 n48 中位 32 词 最短 0 不足25词 16/48 多轮 n42 中位 1 词 最短 0 不足25词 39/42多轮中位数 1 个词——0% 循环率不是修好了是模型闭嘴了。这是同一夜里第二次出现近零重复分数 模型沉默。这轮复盘沉淀出两条工程规则每个门禁至少要有一个修复过头时反而会变差的指标否则优化器人或机器总能找到退化捷径——于是 harness 加了长度下限一个只看缺陷本身的指标可以被一个坏模型轻松通过Sure 的重复率是满分 0.000EOS 偏差剂量响应曲线8 个点扫出模型的真实缺陷既然重复 ↔ 停止是同一根轴那这条轴应该不训练也能拨——llama.cpp 支持按请求设置logit_bias于是直接在发布模型上对 EOS 这个 token 做偏差扫参每个点 12 次生成用合并判据 FAILED循环或低于长度下限计分。完整记录在 WHITTLE_FINDINGS.md#L488-L523。8 点扫参结果EOS 偏差FAILED循环过短中位词数0.011/121102780.7511/121102781.510/121003282.2511/121103163.010/121002706.010/12821807.59/1209149.011/120117曲线告诉我们的事偏差 0 → 6.0 区间模型几乎纹丝不动11/12 失败中位 270 词偏差 7.5 → 9.0曲线断崖式跳变循环瞬间清零中位词数从 180 掉到 7 个词9 时循环完全消失模型用中位 7 个词回答——这正是 Phase B 那个答 Sure 的 45 号检查点的签名只不过这里没有训练只拧了一个推理参数就复现了 这个旋钮从全员循环滑向全员沉默中途不经过任何健康工作点。这条曲线把一轴结论从训练观察升级为模型自身属性问题不是停止阈值没校准好那加压力就能修而是**知道答案何时算完成这条信息根本不在权重里**。训练或推理中的任何全局压力都救不回缺失的信息——这是支持用完整答案数据来教它的最强证据也直接决定了下一轮 v2 的训练数据设计。最终解法245 个完整答案 0.33M 参数的停止门5 轮实验留下的命题是缺的不是要不要停而是何时停。v2 轮就蒸馏了恰好携带这个信号的数据父模型生成的245 个完整答案从 7 token 的事实答案到 4000 token 的结构化文档外加多轮对话每个位置带 top-32 教师 logprob全部以真实 EOS 收尾。随后 v2.2 换了一个更巧的实现——停止门README.md#L124-L168只训练每层的shared_expert_gate张量共 64 个合计0.33M 参数占全模型 0.001%它给常驻共享专家逐 token 做缩放因此每个 token 都带着停止信号标准 llama.cpp 本来就应用这个张量GGUF 无需改动即可用v2.2 的门控权重归档在 v2.2/shared_expert_gate.safetensors36 条留出计数提示 8 段留出对话的实测README.md指标v2.1v2.2计数列表能正常终止18/3627/36计数列表最坏窗口重复度0.2370.048对话轮次正常终止27/4841/48计数列表精确条目数8/362/36最后一行是作者主动写明的回归v2.2 可靠地结束列表但不一定停在你要的数量上——终止和计数是两种技能。对照实验同样漂亮同一目标下训练 125.8M 参数的共享专家 LoRA 只做到 25/36 终止、3.24x 超发0.33M 的门控赢了 380 倍参数量——停止信号住在始终激活的路径里才有效。2026 年 8 月的 v2.2.1 又修掉了推理中断问题旧门控在 thinking 块内部学到了结束信号开推理模式时 24 条里 21 条没输出/think换成教师真实思维链训练的新门控后降到 3/24探测试题见 arith-shexp-lora/abort_shexp.json。列表重复率较 v2.1 下降 80%对话轮次终止率从 56% 提到 85%。复现指南30 分钟跑一遍 loop_test 评测所有公开数字都来自同一个可复现的 harness脚本就放在仓库根目录 loop_test.py判据写在文件头loop_test.py#L10-L16失败条件阈值4-gram 精确重复 rep4 0.15整行重复去列表符后 0.20模板开头重复同前 2 词的条目占比 0.40低于长度下限仅对确需长度的提示 25/60 词评测覆盖 12 条单轮 × 3 种子、6 条结构化SQL/HTML/表格× 3 种子、2 段对话 × 2 种子 × 7 轮约 90 次生成。用法# 先起服务原版命令见 README.md llama-server -m Whittle-MoE-27B-A18B-gguf --port 8080 -ngl 99 -c 8192 -fa on --jinja # 再跑评测结果输出到 loop_test_results.json python loop_test.py http://localhost:8080如果你想要完整权重仓库地址是 https://gitcode.com/hf_mirrors/logic65/Qwen3.8-Whittle-MoE-27B-A17.8B git clone后按上面命令启动即可。关键文件导航 研究日志本文所有实验数据的出处WHITTLE_FINDINGS.md 模型卡与版本历史README.md 循环率评测 harnessloop_test.py️ v3 路线图DRY 采样器、k-sweep、训练轮计划ROADMAP.md⚙️ 架构配置64 专家 / top-16 / 共享专家 5120config.json v2.2 停止门归档权重v2.2/shared_expert_gate.safetensors 反循环轮训练适配器v2-adapter/写在最后三条可以带走的教训先给缺陷拍张照再谈修复。它在循环不是数字而且你的指标可能根本没看见真正的缺陷形态模板重复骗过了精确 n-gram 指标。修复类指标必须配一个过头检测器。只测量缺陷的门禁可以被一个沉默的模型拿满分。全局压力修不了缺失的信息。EOS 偏差曲线证明当何时完成的知识不在权重里拧多大的旋钮都只是在全员循环和全员沉默之间滑动——只有携带因为完成了而停止这个条件信号的数据才能真正教会模型这件事。这正是 0.33M 参数停止门能最终解决问题的原因。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站