别把 Product Hunt 当作冷启动:独立开发者追求的不是流量而是对的人
2026-06-14
2026-06-20 0

这项由北京航空航天大学、人民大学与IQuest Research、Langboat等机构联合开展的研究,于2026年6月以预印本形式发布,论文编号为arXiv:2606.18023,感兴趣的读者可通过该编号检索完整论文。
在人工智能的世界里,有一个让人着迷的问题:一个模型如果没有办法变得"更大",能不能变得"更聪明"?这个问题就像是问一个普通大脑,能不能通过反复思考同一道题来获得天才的答案。这项研究给出了一个令人意外但又在情理之中的答案——可以,但只能多想一次,多想第二次反而会越来越笨。
研究团队构建了名为LoopCoder-v2的系列模型,核心思路是让一个70亿参数的语言模型在处理问题时"循环思考"。他们在1800亿个文本和代码数据上从头训练,然后测试了让模型循环思考1次、2次、3次和4次时的表现差异。结果发现,从1次跳到2次,模型在著名的软件工程测试基准SWEbench Verified上的得分从43.0分飙升到64.4分;然而从2次跳到3次,得分却暴跌至27.6分,甚至不如什么都不做的基础版本。这种"多一步反而退步"的现象,正是本文要深入解剖的核心谜题。
一、为什么同样的参数,"想两遍"比"想一遍"厉害这么多
要理解这项研究,先得理解"循环Transformer"这个核心概念。通常一个语言模型由许多层叠加而成,每一层都有自己的参数(可以理解为独立的神经回路),信息从第一层依次流向最后一层,完成处理。而"循环Transformer"的做法完全不同——它只有一组共享的神经回路,但这组回路会被反复调用多次。用一个更直观的比方来说:传统模型就像一条生产流水线,每个工位只负责一道工序,信息流过去就完成了;循环Transformer则像是一个工匠,拿到原材料后反复打磨,每次打磨都用同一套工具,但角度和力度不同。
这种设计最吸引人的地方在于,理论上你可以用"更多次打磨"换来"更高精度的成品",而不需要增加工具的数量(即参数量)。换句话说,这是一条不靠扩张规模、而靠加深思考来提升能力的路径。麻省理工和其他机构的早期研究已经证明,这种方式确实能让模型在推理任务上表现出色,有研究甚至让一个35亿参数的模型通过50次循环,达到了相当于500亿参数模型的计算量。
然而问题来了:循环次数越多,每多转一圈,计算机就要多花一倍的时间,还要额外存储每次循环的中间状态。这就好比工匠每打磨一遍,就要把当前工件的照片存入档案,多打磨50遍,档案就要积累50倍。在实际部署中,这样的内存和延迟开销是无法接受的。这就是"并行循环Transformer"(Parallel Loop Transformer,简称PLT)登场的原因。
PLT用两个互补的设计解决了这个工程难题。第一个设计叫做"共享KV门控滑动窗口注意力",听起来很复杂,但本质上就是:第一圈处理时建立一个"全局档案",后续所有圈都可以随时翻阅这个固定档案,而不需要各自建立新档案。这样内存占用几乎不会随循环次数增加。第二个设计叫做"跨循环位置偏移"(Cross-Loop Position Offset,简称CLP),它的作用是让各个循环之间不再严格排队等待——第二圈不用等第一圈的某个位置完全处理完才能开始,而是可以利用前一圈中邻近位置的信息提前开工。这就像工厂里的并行流水线:原本必须等上一道工序完全结束,现在可以在错位的时间窗口内同时推进多道工序。
这两个机制合在一起,使得PLT无论循环几次,延迟和内存消耗都几乎和只循环一次相同。这在工程上是一个很实际的突破。但是,这里藏着一个微妙的代价——CLP机制为了实现并行,让每个位置的词在第二圈及以后不再接收自己上一圈的状态,而是接收旁边位置的状态。换句话说,处理第5个词的时候,用的是第4个词的历史信息而非第5个词自己的历史信息。这就像一个人在修改作文时,不是根据自己上一稿的思路继续,而是偷看了旁边同学上一稿的思路。这种"位置错配"(positional mismatch)是PLT的结构性代价,也是这项研究中最关键的分析对象。
二、用"收益与代价"的天平来衡量每一圈循环
研究团队将整个分析框架建立在一个朴素但有力的逻辑上:每多循环一圈,都有两件事同时发生——模型有机会对表示进行进一步精炼(这是收益),但CLP引入的位置错配也同时存在(这是代价)。当收益大于代价,多循环就是有益的;当代价大于收益,多循环就是有害的。
为了量化"收益",研究团队从三个独立角度观察模型内部发生了什么。第一个角度是"隐藏状态动态",也就是观察每一圈结束后模型内部的"词语表示向量"变化了多少、变化方向是否一致。如果一圈接一圈的修改方向相同,说明模型在朝着一个更好的答案持续收敛;如果修改方向反复颠倒,说明模型在来回摇摆,浪费了循环。第二个角度是"注意力热图演化",也就是观察模型在每一圈中如何分配对不同词语的关注度——如果每圈的关注分布都大幅变化,说明模型在持续学习新的上下文关系;如果几圈下来关注分布几乎不变,说明信息路由已经"冻结",继续循环没有新意义。第三个角度是"输出分布变化",即直接观察每一圈后模型对下一个词的预测发生了多少变化——变化越大,说明这一圈修改越有实质性影响。
为了量化"代价",研究团队定义了一个叫做"内在偏移代价"(Intrinsic Offset Cost,记作Ω)的指标,计算方法是:在某一圈的边界处,看相邻两个词的表示向量之间的平均距离。如果相邻词的表示差异很大,那么把邻居的信息当成自己的信息使用,就会造成较大的失真;如果相邻词的表示已经很相似,则这种替换几乎无损。
把收益与代价这两条曲线画在同一张图上(对应论文中的"增益-代价剪刀图"),就能看到一个引人注目的现象:从第一圈到第二圈,收益急剧下降但仍然很高,而代价保持稳定;从第二圈开始,收益持续萎缩,甚至跌到一个微不足道的低点,而代价却始终不变。也就是说,代价是一个固定税,收益是一个不断缩小的蛋糕,迟早蛋糕会小到连税都不够交的地步。经过实验估算,从第三圈开始,每一圈的偏移代价大约是实际精炼收益的30到45倍。这就解释了为什么循环两次是最优点,再多就只剩亏损了。
三、在模型内部,每一圈到底在做什么
研究团队对训练了不同循环次数的模型(分别是1次、2次、3次、4次)进行了细致的内部解剖,结果每一个观测角度都指向同样的结论:第二圈是黄金循环,此后的每一圈都是递减甚至有害的。
从隐藏状态动态的角度看,研究人员追踪了四个具体指标。"步长"描述了每一圈中词语表示向量移动的幅度——从第一圈到第二圈,步长最大,之后逐渐缩小,说明后续循环的修改越来越细微。"角度变化"描述了相邻两次修改的方向是否一致——在第三圈开始,角度余弦值为负数,意味着连续两次修改的方向相反,模型在来回振荡而非持续优化,正如一个工匠不断修了又改、改了又修,最终什么也没有改善。"有效秩"是一个衡量词语表示多样性的指标,可以理解为:模型内部各个词的表示向量是否能够撑开一个足够宽广的语义空间。有效秩在第二圈达到峰值,此后开始下降,说明从第三圈开始,词语的表示逐渐"趋同",模型区分不同词的能力在减弱——就像一盒蜡笔,本来有24种颜色,用到最后很多颜色变得难以区分。最后,"固定点距离"衡量当前状态离模型愿意停下来的稳定状态还有多远,这个指标在各循环之间的变化也印证了上述趋势。
从注意力热图演化的角度看,研究团队追踪了注意力熵(描述每个注意力头的关注是分散还是集中)、循环间KL散度(描述相邻两循环的注意力分布变化幅度)以及注意力头之间的相似度。结论非常清晰:循环间KL散度在第二圈时最大,之后急剧跌落并保持在低水平,说明从第三圈开始,模型的注意力路由基本"冻结",不再产生新的信息流动模式。与此同时,随着循环次数增加,不同注意力头之间的相似度不断攀升,到第三圈时,各个头已经变得越来越同质化——本来应该各司其职的40个注意力头,逐渐开始做同样的事情,这是一种严重的冗余退化。此外,PLT中控制"使用全局缓存还是使用当前循环信息"的门控值从始至终维持在0.5以上,说明模型在所有循环中都大量依赖第一圈建立的全局缓存,而非从后续循环中获取真正新鲜的上下文。
从输出分布变化的角度看,研究团队引入了"逻辑透镜"技术——在每一圈结束后,直接用输出层对当前状态做预测,看正确答案的排名是否越来越靠前。结果表明,随着循环深入,正确答案的排名确实在单调上升(排名越靠前越好),但每一圈的推进贡献在第二圈之后就急剧萎缩。在4次循环的模型中,第四圈的输出变化虽然在数值上看起来不小,但研究团队通过与有效秩下降的对照分析判断,这不是真正的语义精炼,而只是模型在最终输出层做的一次"最终朗读"——格式上的整理,而非内容上的深化。
四、来自真实战场的数字:2次循环的实力究竟有多强
理论分析再精彩,也需要硬数据来支撑。研究团队在一系列权威代码能力测评上对四种模型进行了全面对比,测评范围涵盖代码生成、多语言代码、代码推理、数据科学与SQL、自动化软件工程,以及通用工具使用。
在代码生成领域,2次循环的LoopCoder-v2在HumanEval+(一个业内常用的代码生成测评,侧重严格正确性)上得分84.1,相比基础版本(1次循环,81.1分)有所提升,而3次循环版本降至75.0分。在多语言代码测评MultiPL-E上,2次循环版本的跨语言平均分为73.9,3次循环回落至69.8。BigCodeBench(侧重实际代码任务)上,2次循环达到46.1分,超越了参数量是其两倍的14B模型(47.0分)和四倍的32B模型(48.0分)只差一点点。
最令人印象深刻的是自动化软件工程领域。SWEbench Verified是目前最权威的代码能力测评之一,要求模型真正解决来自GitHub的真实软件工程缺陷,而不是做玩具题目。基础版本(1次循环)得了43.0分,2次循环直接跳到64.4分,绝对增幅超过21个百分点——这对于一个7B参数的模型来说,是一个极为罕见的飞跃。相比之下,Qwen2.5-Coder系列7B、14B、32B模型在这个测评上均为0分(它们不具备自动软件工程能力),而Kimi-Dev-72B(720亿参数)得了60.4分,竟然还低于LoopCoder-v2的64.4分。3次循环版本则跌至27.6分,甚至不及什么特殊能力都没开启的基础版本。在多语言软件工程测评Multi-SWE上,2次循环从14.0分提升至31.0分,同样展现出类似的跳跃。
这些数字放在整个行业背景下来看更具冲击力:Kimi-K2-Instruct(一个专为代码优化的顶级模型)在SWEbench Verified上得了69.2分,Claude-Opus-4.5得了80.9分,Gemini-3-Pro得了76.2分。而LoopCoder-v2以70亿参数达到了64.4分,差距并不遥远。这说明通过更聪明的"循环思考"设计,小模型具备了与大模型正面竞争的可能。
五、如果再加上"明说出来"的推理过程,效果会更好吗
上述分析针对的是"只循环不输出推理过程"的版本,也就是模型在内部多想了一遍但不说出来怎么想的。现实中,很多模型会被训练成"边想边说"——先输出一段推理过程,再给出最终答案,这通常被称为"思维链"(Chain-of-Thought)或"思考模式"(Thinking Mode)。
研究团队对此进行了一组对比实验,比较了两种版本:一种是只使用循环(2次循环的指令微调模型),另一种是在2次循环基础上叠加了显式推理过程的"思考版本"。结果表明,在推理密集型任务上,两者叠加的效果远超任何一个单独使用。以LiveCodeBench(一个考察实时代码竞赛能力的测评)为例,2次循环的指令模型得35.4分,叠加显式推理后升至62.3分,提升了26.9分。在CRUX(代码推理测评)上,从86.9分升至93.5分。
关键的发现在于:这种提升是"超加法"的,即两者叠加的增益远大于各自单独贡献的增益之和。研究团队的解释是,显式推理和隐性循环在两个不同的层面上工作:显式推理负责在文字层面把问题分解成一步一步的子问题,而隐性循环则负责在每一步子问题的表示层面做精炼,让模型对当前正在处理的那个子问题理解得更深入。两者就像宏观规划和微观执行的分工,并不重叠,反而相互增强。这个发现为未来的模型设计指出了一个有价值的方向:在测试阶段,同时利用"内部循环精炼"和"外部推理展开",可能是效率最高的扩展计算方式。
六、这个研究告诉我们怎么选择循环次数
当然,上述发现是基于一种特定的PLT架构和特定的训练设置,研究团队也对此保持清醒。他们总结了一套实用的循环次数选择指南,可以在不需要穷举测试所有循环次数的情况下,通过观察有效秩的变化轨迹来做出判断。
具体逻辑是:如果在某个候选循环次数处,有效秩仍然在上升,说明模型的表示多样性还没有饱和,再加一圈可能还有实质收益;如果有效秩已经开始下降,则说明后续循环只会越来越窄化表示,继续加圈只是在缴纳CLP位置偏移的固定税,而买不到任何新的精炼成果。这个判断标准只需要在模型内部运行一次前向传播并计算隐藏状态的奇异值分布,成本很低,是一个轻量级的诊断工具。
对于PLT架构而言,2次循环是一个稳健的默认设置,它捕获了最主要的精炼步骤,并且仅需一次额外的前向传播(在PLT的并行化设计下,延迟和内存几乎与1次循环相同)。想要在这个基础上进一步提升性能,比起盲目增加循环次数,更有效的方向可能是结合显式推理过程,或者探索更智能的自适应偏移机制——也就是让CLP的位置错配代价不再是固定税,而是能够根据上下文动态调整。
说到底,这项研究做的事情有点像心理学里的"过度思考"研究——研究者发现,在某类决策中,快速直觉有时比反复权衡更准确,因为过度分析会让人陷入对细节的反复纠缠,反而失去对全局的把握。LoopCoder-v2的实验结果与这个规律惊人地相似:第二圈的循环是清醒的再审视,抓住了第一圈遗漏的关键信息;而第三圈、第四圈的循环更像是在焦虑中不断推翻自己已经建立好的判断,最终导致越想越乱。
这对于整个AI领域具有一定的参考意义。当计算资源有限、模型无法无限扩大时,如何设计"更深入思考"的机制是一个值得认真对待的问题。简单地"再想多几遍"并不必然有效,关键在于理解每一次额外思考究竟在做什么、带来了什么、又牺牲了什么。这项研究通过内部可解释性分析给出了一套具体的诊断方法,而不只是停留在经验性的"试出来的"结论上。
当然,这项研究也有其局限性——所有结论都基于PLT这一特定架构,CLP的位置偏移代价是PLT独有的结构性代价,其他循环架构未必有同样的现象。此外,实验只在代码任务上进行了大规模验证,在其他领域(如数学推理、多模态任务)是否有类似的饱和点,仍然有待探索。
如果你对这个研究感兴趣,想亲自看看论文里的数学推导和更完整的实验数据,可以在arXiv上搜索编号2606.18023找到完整原文。
Q&A
Q1:LoopCoder-v2是怎么在不增加参数的情况下提升性能的?
A:LoopCoder-v2采用"循环Transformer"设计,让同一组参数被多次调用,每次调用都对词语的内部表示进行进一步精炼。配合并行循环Transformer(PLT)的两项机制,额外的循环几乎不增加延迟和内存占用,因此能用接近相同的计算代价实现更深入的"思考"。
Q2:为什么循环次数从2次增加到3次,LoopCoder-v2的表现反而会下降?
A:研究发现,CLP机制带来的"位置偏移代价"在每次循环中几乎固定不变,而每次额外循环带来的实质性精炼收益则快速萎缩。从第三圈开始,每圈的代价大约是收益的30至45倍,相当于为一块越来越薄的饼干付越来越高的税。此外,模型表示的有效多样性(有效秩)在第二圈达到峰值后持续下降,说明后续循环反而在压缩模型能力。
Q3:PLT循环模型的"思考版本"和普通版本有什么区别,为什么叠加使用效果更好?
A:普通指令版本只在内部隐性地多循环一遍,不输出推理过程;思考版本则在此基础上额外输出一段文字推理链。两者的提升来自不同层面:隐性循环在向量表示层面精炼每个子问题的理解,显式推理链在文字层面拆解宏观问题结构,两者互不重叠,因此叠加使用时效果超过各自单独使用之和,在LiveCodeBench上的叠加提升高达26.9分。