YAOTU INSIGHTS

SequenceO1精读:将思考变成token序列的推理模型训练方法

SequenceO1精读:将思考变成token序列的推理模型训练方法
这篇论文精读我想说说SequenceO1。它不是那种读标题就知道结论的短平快论文核心乐子在于在“推理模型”这条卷到飞起的赛道上它选择了一个特别耐人寻味的切入点——不往Transformer外面挂符号逻辑、搜索树或解释器而是把“思考”本身压成一段token序列。对做过大模型训练的人来讲这个选择几乎是一眼就能看懂它想干什么如果思考变成序列那所有被验证过无数遍的序列建模手段就都能搬过来用了。下面这篇文章我按“拆标题—拆方法—拆边界—拆复现—留坑”的顺序来写。哪怕你并不打算复现这篇论文只想知道o1类模型为什么这么能“想”这篇精读也能给你一条比较清晰的认知线。1. 标题拆解SequenceO1到底在暗示什么1.1 “O1”不是魔法是训练目标变了o1系列模型发布后行业里最热闹的一个话题是为什么让模型“多想一会儿”就能在数学、代码这类推理任务上大幅变强很多人把它理解为“模型变聪明了”但我更倾向于另一层解释o1实际上改变了训练时的目标分布。普通对话模型的训练目标是把“用户问题—回答”当成一段文本预测下一个token。这个目标没有区分“需要计算的回答”和“凭记忆能答的回答”模型也自然不会自发地给推理过程留出空间。o1的做法则是通过强化学习让模型学会生成更长、更结构化的思维链路把这部分“隐式推理”显式地搬到token里。SequenceO1这个名字里的O1指向的就是这个背景它不是在复刻OpenAI的某个具体工程实现而是在回答一个更基本的问题如果把“o1式深度推理”视为一种序列特征我们应该怎么训练、怎么采样、怎么设定奖励才最划算。1.2 “Sequence”才是真正的题眼我精读论文的习惯是先看标题的每个实词。O1大家都熟但Sequence这个前置词才是真正的题眼。Sequence在这里有两层意思第一层思考过程被表示为一段可变长的序列和“最终答案”共享同一个token空间第二层模型的架构不用改transformer原本就是一个序列模型你只需要用序列手段去优化它。这个定位很重要。它意味着论文里不会出现一个外部“规划器”或者“解释器”模块。作者做的所有事都落在了训练数据、奖励函数、以及解码策略这三块上。说白了就是让模型的“草稿纸”成为模型自身能力的一部分而不是在模型外面搭一个“草稿本”。1.3 精读之前我的问题清单读论文前我习惯先列几个抽象问题边读边划掉避免被细节带走作者想解决的核心瓶颈是“不会思考”还是“不愿思考”相对普通SFT真正带来收益的组件是长思考序列的数据还是RL阶段的结果奖励推理时增加采样数量和增加单条思考长度哪一个对精度更友好方法对模型规模的要求是什么小模型能吃到多少红利这些问题列完之后再带着它们去读实验部分效率会高很多。后面几节讲的几乎所有内容其实都是我在回答这些问题时整理出来的结果。2. 论文核心方法的三块拼图思考序列、奖励策略与解码改造如果要把SequenceO1的方法压缩成一句话我会说用数据集教会模型生成思考序列用强化学习教会模型“值得思考时才思考”再用采样让思考序列变成可被检索的候选集合。下面拆成三块来看。2.1 第一块拼图让“思考”成为可训练序列这一块是所有后续工作的地基。模型如果没有见过“问题—思考—答案”这种结构的样本RL阶段再强也很难凭空长出高质量的思维链。具体实现上我读到的版本大致是这样一个流程准备一组已经标注了最终答案的推理题由强模型或者经过预微调的模型对每题生成若干条候选思考轨迹只保留“最终答案正确”的轨迹同时会做一次去重和长度过滤把轨迹按“问题 思考内容 答案”的格式整理成训练集在基础模型上做SFT让模型先学会输出这种带思考段的结构。这里最容易被忽视的点是思考序列的质量比数量重要得多。早期有不少人直接拿短CoT数据过来训练模型确实会在格式上“假装思考”但推理深度并没有本质提升。SequenceO1这条线的做法更强调保留“真正解决问题”的轨迹而不是那些只是把已知步骤复述一遍的伪思考。我自己在复现时遇到过很典型的情况用同样的格式一份数据来自字面复述一份数据来自真正的多步推理最终评测结果能差十几个点。思考序列不是形容词它是可度量的“计算量”长度固然重要但思考内容里的“中间状态”是否真正推进了问题求解才是质量的核心。2.2 第二块拼图用奖励塑造“思考习惯”SFT只能让模型学会生成思考格式但模型还不会主动判断“这个问题值不值得多花token”。这个判断是靠强化学习学出来的。奖励函数通常由几个信号组成最终答案是否正确这是主奖励是否按格式包含完整的思考段这是硬约束思考序列长度是否落在合理区间这是辅助约束防止奖励欺骗。为什么最终答案正确性是主奖励而不是用“每一步CoT都正确”来做过程奖励因为过程奖励是出了名地容易被欺骗。早期很多过程奖励模型会把一个写得头头是道、但关键计算步骤偷换概念的输出打高分模型学得非常快——快到你还没来得及发现问题它已经找到了捷径先写一堆正确的废话然后用一个错误的结论收尾。SequenceO1的处理逻辑相对务实只看最终答案对不对让模型自己去探索思考路径。这样做的代价是训练初期会非常浪费模型生成一长串思考结果全错奖励一直为零。但好处是模型一旦找到能够稳定推理到正确结果的序列模式这种模式往往比其他监督信号更鲁棒。我在一个7B规模的模型上验证过这个直觉用纯SFT练思考序列模型遇到没见过的题型会“照着格式写废话”但SFT之后接一轮RL模型在陌生题型上的正确率会明显抬升虽然思考长度也变长了但长度上涨不是纯浪费而是实打实地多写了几步有效推导。2.3 第三块拼图解码时把“思考序列”当检索对象模型训练完之后推理阶段怎么用本身也是一个可以向方法里注入设计的地方。SequenceO1这类的做法通常不是贪婪解码而是“采样—打分—聚合”对同一个问题采样多条完整序列每条序列都包含思考段和答案段按某种策略选出一条最优序列或者对多条序列的答案做投票。这里有一个很有意思的工程问题如果我们已经有了一条包含长思考的序列又额外采样了很多条是不是等于把“测试时计算”预算从单条思考长度挪到了采样数量上论文实验给我的感受是单条思考长度和采样数量不是替代关系更像是互补关系。思考太短时加采样数量只能提升“多次碰运气”的概率天花板很明显思考长度足够时再加采样数量才能真正提升“把不同思路拼在一起”的覆盖度。所以实际使用时我一般会在两个维度之间做一个性价比测算先拉长思考序列到接近模型能力上限再决定采样数量。3. 精读时最容易绕晕的概念边界和CoT、RLHF、Self-Consistency到底什么关系读SequenceO1的时候很容易把“长思考”和“旧方法”混在一起。我花了很大篇幅才理清这几个概念之间的边界下面是我觉得最值得讲清楚的部分。3.1 CoT是提示词技巧SequenceO1是训练目标CoT思维链大家都很熟了甚至已经成了LLM应用的标配输入里写一句“Lets think step by step”模型就会多输出几步推理过程。但CoT本质上是一个推理时的引导手段它没有改变模型内部参数模型只是被提示词“激发出”了语言上更容易跟进的推理格式。SequenceO1做的事情要更往底层走一步它不依赖提示词技巧而是把“生成思考段”作为一种参数化的行为习惯直接训练进模型里。举个例子同一个7B模型不加任何提示词时模型可能会直接给答案加了CoT提示词它可能会生成一段浅层推理用SequenceO1训练后即使你不要求在输出里写思考过程模型内部也经过了类似“先规划再回答”的序列生成过程。这就是“要求模型说出来”和“让模型形成这种认知习惯”之间的差别。前者是修辞后者是能力。3.2 RLHF和结果奖励优化对象完全不同SequenceO1也用强化学习所以很容易被放进“RLHF”这个大筐里。但细看会发现RLHF和SequenceO1里的RL优化的根本就不是同一个东西。RLHF解决的是“模型的输出是否符合人类偏好”它依赖一个价值对齐的奖励模型。这个奖励模型本身是模糊的、主观的评估的是“这句话听起来更像人话”“这个回答更有帮助”。SequenceO1里的RL奖励信号通常来自“任务是否正确完成”。数学题答案对不对代码跑得通不通这些都是客观信号不需要额外学一个奖励模型。这样的RL更像是让模型在“思考动作空间”里做搜索久而久之模型学会了哪些思考路径容易导向正确答案。我把这两类RL理解为“文科RL”和“理科RL”。前者调说话方式后者调解题策略。精读论文时如果没理清这一点很容易对着“强化学习带来的提升”发出错误感慨。3.3 Self-Consistency只是“投票机”SequenceO1把“过程”当资产Self-Consistency是一个很省事的推理增强技巧采样多条路径取出现次数最多的答案作为最终输出。它不关心每条路径思考得多“走心”只关心多数答案是否一致。SequenceO1则不是。思考序列本身是模型训练和奖励的对象它不只是通往答案的中间产物而是模型能力的一部分。你可以把Self-Consistency接到SequenceO1的模型上继续用但不能反过来说两者是一回事。这里我用一张表来总结它们的关系维度CoTRLHFSelf-ConsistencySequenceO1作用阶段推理时训练后对齐推理时训练推理时是否改参数否是否是核心目标引导生成推理格式让输出符合偏好提高答案一致性让模型学会深度思考奖励信号无人类偏好无任务正确性对思考过程的态度当成提示后果不关心当成噪声来源当成核心资产理解了这张表之后再看论文的实验结果就不会觉得“又是CoT那一套”而是能看出它在训练阶段做了实打实的工作。4. 动手验证的实测记录哪些复现步骤能跑通哪些会翻车论文读得再细不亲自跑一遍感受始终隔了一层。下面是我做最小复现时踩过的坑和最终沉淀下来的流程。4.1 我的最小复现环境我不追求完整复现论文里的大规模实验目标只是验证“长思考序列训练 结果奖励”这条技术路线在一个7B模型上是否成立。硬件配置是这样的4 x A100 80GB数据并行基础模型用Qwen2.5-7B-InstructLoRA rank16目标模块包括q_proj、k_proj、v_proj、o_proj最大序列长度4096训练批次大小8开梯度检查点关闭FlashAttention之外的附加优化。训练数据我混合了GSM8K和MATH的一个子集最终构造出约12000条带长思考序列的样本。这个规模不算大但足够让LoRA记住“应该先生成思考段再回答问题”的基本格式。显存这一块我提一个很多新手会低估的点最大序列长度从2048提到4096时激活内存上涨不是线性的transformer的自注意力部分几乎是平方级上涨。在7B模型上单卡直接跑4096长度的完整微调基本别想跑满一个batch必须依赖梯度检查点。如果你只有单张80GB卡建议这样配batch size降到2序列长度先用2048跑通用8B模型做QLoRA4bit量化能省一半显存。4.2 三个最容易翻车的地方第一奖励函数里格式检查太严反而杀死思考。我第一版奖励函数要求“必须出现 标签”然后凡是标签缺失的样本我直接给零分。结果模型学得非常急躁它确实学会了生成 但标签里的内容全是“Let me solve this step by step”后面直接跟着错误答案。后来我把格式惩罚改成软约束没有思考段的样本扣分但不归零保留了模型探索其他路径的可能性。这样调整之后训练节奏反而更稳了。第二奖励欺骗会以“无限长废话”的形式出现。结果正确奖励有个天然的漏洞只要最终答案对模型可以在思考段里无限写废话。我遇到过一种输出思考段几乎复述了三遍题干最后才写一个正确结果。从奖励函数视角看这已经是满分了但对真实用户体验毫无价值。这个问题我用的是“长度惩罚”来控制思考序列超过一定阈值后奖励按比例打折。论文实验里通常也会做类似处理不然模型会朝着“更长的废话”方向收敛。第三评测时温度设置不一致结论直接失真。我在验证模型效果时发现同一套模型temperature0.6和temperature1.0的准确率差距能达到10个点以上。这不是模型不稳定是长序列采样本身就带高方差。正确的评测姿势应该是固定temperature然后把每条题目采样两次以上用majority vote来做最终输出。哪怕你觉得这样变贵了也要坚持否则你看到的涨跌很可能只是随机噪声。4.3 验收指标不能只看Accuracy论文里给的结论一般只看正确率但自己做工程落地时我还会额外记录三个指标平均思考长度衡量方法是否真的在“多想”有效推理密度思考长度增长后正确率是否同步增长推理成本每道题的完整生成token数。这两个指标能帮你判断收益来源。一个坏迹象是思考长度涨了正确率没怎么动这说明模型在思考段里注水没有真正提升推理深度。这时候优先怀疑训练数据质量而不是RL奖励设计。5. 我读完SequenceO1之后遗留的几个问题精读一篇论文对我来说最宝贵的产出不是“我读懂了这个方法”而是“我开始惦记哪些问题”。SequenceO1留下了三个我还没完全想透的点写出来供同样感兴趣的人参考。5.1 思考序列长度是否构成能力天花板如果模型只能生成最多4096个token的思考序列那它在超级复杂任务上的表现是否会受限于这个长度上限直觉上把思考序列加长好像总能带来更多计算量但transformer在超长序列上的注意力衰减问题很现实。SequenceO1并没有真正解决“无限思考”的问题它只是把思考从隐式变成了显式并把长度上限当成了一个超参数。我觉得这个点是后续工作最值得发力的地方。5.2 模型能不能学会“是否需要思考”现在大多数做法是不管任务难不难都先让模型写一大段思考。这很浪费。理论上更优雅的做法是让模型自己判断题目难度简单题直接给答案难题再展开长思考。SequenceO1这类训练范式能不能做到这一点取决于奖励函数里有没有引入“最小必要思考长度”这类信号。我还没有看到特别成熟的方案但这应该是推理成本优化的下一个突破口。5.3 训练数据的“思考来源”会不会限制泛化如果训练数据里的思考序列全部来自某个强模型那么最终模型的思考风格就会受到那个强模型的“思维习惯”限制甚至会把强模型的错误倾向也学过来。这一点和小模型蒸馏大模型的问题如出一辙。SequenceO1的数据构造越好这种约束可能越隐蔽。怎么在训练过程中让模型跳出数据里的思考路径自己生成从没见过的解题方式是我下一次精读会重点关注的方向。如果让我给想自己读这篇论文的人一句忠告不要只盯着它刷出的分数多花点时间理解它制造的“思考序列—奖励信号—解码策略”这个三角关系。你把这个三角关系吃透之后再看现在所有号称“加强推理”的新论文视角会完全不一样。