FEATURED · 精选文章

解密prompt系列42. LLM通往动态复杂思维链之路

发布时间 / 2026/8/27 14:10:25
来源 / 创域科博编辑部
栏目 / 资讯中心
解密prompt系列42. LLM通往动态复杂思维链之路 前言最近大家都在探讨和尝试复现OpenAI O1的思考效果解码出的关键技术方向包括之前已经探讨过的Inference Time Scaling在推理过程中进行路径决策和选择。但想要更优的Inference Time Scaling曲线前提是模型本身是一个很强的Generator已经拥有足够的生成合理推理过程的能力同时还拥有很强的Verifier模型来对推理节点进行打分决策并且二者可以在少人类监督的条件下不断迭代优化。这一章我们先聊聊如何让大模型自学推理思考从而得到思考推理能力更强的Generator。本章会以STaR论文为基础介绍生成复杂动态思维链背后可能的技术方案STaRSTaR: Self-Taught Reasoner Bootstrapping ReasoningWith ReasoningSTaR是这一系列论文的第一篇思路就是妥妥的Bootstrap生成推理过程-训练模型-生成更优的推理过程-训练更强的模型。STaR的流程很直观Pretrain模型通过指令fewshot引导模型对QA数据集生成推理过程对以上推理过程进行过滤只保留回答正确的对推理答案错误的通过Hint在上文中告诉模型正确答案引导模型生成正确的推理过程对这部分样本也进行过滤只保留回答正确的使用以上样本进行SFT教模型如何思考再使用SFT后的模型重复以上样本生成的过程直到评估指标不再提升STaR的优缺点都非常明显优点就是不需要大量人工标注的思维链样本也不依赖更强大的模型提供合成样本其他模型提供的合成样本本身也可能存在分布漂移会影响模型效果实现了一定程度的模型自我优化提升。缺点有可用场景有限STaR依赖正确答案作为过滤条件因此只适用于问答数学计算等有限领域对于更广泛的开放领域无法适用。这个限制其实也是因为STaR并未引入Verifier因此只能依赖答案本身作为评估基准。SFT本身的泛化性有限通过SFT把生成的推理过程注入模型很难让模型学到推理过程中的奖励信号更多还是在做Behaviour Cloning。达不到Don’t Teach, Incentive的效果STaR对样本的使用率不足只使用了唯一的一条正确样本丢弃了通往正确答案的更多正确路径也丢弃了更大量级的错误思考过程思考链路是静态既针对任何问题模型都默认上来就进行思考这种形式在单一场景中适用在更灵活广泛的实际场景中思考应该动态存在下面我们看下针对以上问题其他论文给出了哪些优化方案以下论文更多会关注和STaR的对比~RFTScaling relationship on learning mathematical reasoning with large language modelsRFT也是模型自我合成数据进行优化的方案它没有使用STaR的多轮Bootstrap来持续优化合成数据只用了一轮优化但RFT给出了在一轮迭代内更充分利用正样本的方案。RFT会使用SFT后的模型针对每个问题随机采样100条推理路径筛选所有答案正确的推理路径并使用编辑距离对不同的推理路径进行消重只保留差异化的正确推理路径。这样对比以上STaR每个问题只有1条正确样本RFT对每个问题会保留多样性的正确推理路径然后使用该合成数据集对模型进行训练。对比后发现使用更多推理路径效果会有提升同时去重也会带来明显的效果提升。大概率因为不去重会导致部分重复样本的过度拟合影响泛化性。RFT这种使用模型自我合成数据再微调基座的方案在后面Google Deepmind的论文中也进一步论证了它的有效性要超过使用更强大的模型直接合成数据的效果。部分因为多个正确推理路径的提供能给模型提供一些哪些推理节点是核心节点的有效信息降低模型模仿率提高模型泛化性。V-STaRV-STaR: Training Verifiers for Self-Taught ReasonersV-STaR沿用了STaR的多轮Bootstrap样本迭代的方案并给出了一种简单的利用负样本的方案在以上STaR的基础上每一轮模型生成推理答案时正确和错误的推理链路都会被保留其中正确的样本用来训练微调Generator而正确和错误的样本会合并用于训练Verifier。以及和STaR每一轮都只使用新训练的Generator合成的样本不同这里训练Verifier的样本是每一轮收集样本的并集。因为RM模型需要广泛学习不同分布的推理结果而每一轮随着Generator不断增强其实都在拓宽RM模型学习的样本范围提升Verifier的泛化性。最后论文用收集好的正负样本构建了针对问题的对比样本对(x, y,y-) 然后使用DPO在最后一轮微调得到的最优的Generator上来训练Verifier。并在推理过程中使用该Verifier来实现best-of-n策略从N个随机采样的推理结果中选择RM得分最高的推理链路。效果上加入Verifier的STaR效果会有进一步提升并且多轮Bootstrap也能有效提高V-STaR的效果。Incorrect Synthetic DataRL on Incorrect Synthetic Data Scales the Efficiency of LLM Math Reasoning by Eight-FoldGDM这篇论文对正负合成思维链样本都做了更加全面的讨论基本结论如下正样本论文论证了前面RFT也就是使用微调模型自我生成推理链路的方案要优于使用更强模型直接生成样本进行SFT。但是只使用合成正样本做SFT因为无法保证链路的完全正确会让模型学到一些混淆的错误思考模式。负样本对比V-STaR只在Verifier中简单利用了负样本论文给出了在优化Generator中使用负样本的训练方案下面我们分正负样本来分别说下~正样本为何自我生成的正样本效果更好论文分别采用两种方案来合成数据SFT使用更强大的模型合成数据例如GPT4来生成带有思维链的推理样本经过简单的消重过滤错误答案后使用正确样本直接微调模型RFT模型自我合成数据使用以上微调后的模型针对每个问题再生成N个推理结果经过过滤后使用正确的样本微调模型也就是使用基座微调模型自我生成的样本再回来微调基座论文发现在Deepseek和Llama2上随着合成数据集的数量变大RFT显著优于SFT并且优势并不随数据集变大而缩小。具体到数据使用效率相同的Test Error下使用RFT策略训练的效果相当于使用2倍的合成数据进行SFT这个结论会有一些反直觉因为之前很多优化小模型的思路都是去蒸馏GPT4的回答。当然后面也有一些研究认为拟合另一个模型的回答因为预训练的差异导致微调过程中模型很难直接学习新的推理回答只能强行记忆影响模型泛化效果。类似的问题其实在早期我们也用GPT3.5GPT4的回答去构建样本然后微调一些小模型的时候就发现了当回答风格差异巨大的时候直接微调会影响基座本身的知识存储和指令理解。其实就是小模型为了去强行改变自己的输出风格负向影响了模型本身的参数分布。论文使用RFT生成的样本相比SFT样本在基座模型上有更高的log likelihood来论证之所以使用RFT的样本微调效果更好就是因为RFT样本是基座模型自我合成的因此和基座模型本身的推理分布更加接近模型更好学习会降低模型去强行记忆的概率对泛化性的损失更小更加“easy-to-fit”。但不论是SFT还是RFT论文提出都需要关注正确样本中错误的推理链路因为样本过滤只使用了答案并未对中间推理链路的正确性进行校验而这些错误的步骤会导致模型学到一些混淆的因果关系。而虚假步骤带来的推理问题并无法通过简单的增加合成数据的方法来解决。下面我们接着看论文如何通过引入负样本和per-step DPO来优化合成样本中错误步骤带来的问题。负样本呦呵你没想到我也这么有用吧既然同一个问题生成多条正向的推理链路的合成样本可以提升效果那如何更有效的利用比正样本占比更高的负样本呢前面V-STaR是选择利用负样本去训练Verifier而GDM的论文给出了通过正负样本对比学习来充分利用负样本的方案。论文设计的RL目标函数如下通过正负样本分别和基准微调后的基座模型模型对比来进行对齐。并且论文给出了从“关键步骤”这个概念出发构建正负样本对的方案那啥叫关键步骤嘞可以从熵值的视角去看如果生成步骤A后模型得到正确答案或者错误答案的概率显著更高那步骤A就是关键步骤。其中通往错误的核心步骤需要模型遗忘通过正确的核心步骤需要学习。那如果生成步骤A后模型得到正确和错误答案的概率一半一半那步骤A就不是关键步骤。想要获得每个步骤通往正确、错误答案的概率其实只需要通过蒙特卡洛模拟采样足够多的链路然后做个概率统计就行嘞以上的关键价值论文用以下的公式来计算每个步骤i的价值Q value都是给定(1i-1)的步骤计算步骤模型在未来i1L步内获得正确答案的期望概率。以上价值其实是步骤(1~i)的累计价值而每个步骤的增量价值就是和截止前一步Q value的差值。所以构建正负推理链路的步骤就是基于每个问题使用微调后的基准模型采样N条推理链路基于答案是否正确先初步分成正负样本。然后在负样本内寻找每个推理链路中关键价值最低的第一个步骤大概率导致模型失败的第一个核心节点作为\(-y_{1:c}\)。在正样本内寻找每个推理链路中关键价值的第一个步骤作为\(y_{1:c}\)然后基于这些正负样本对使用以上对比RL损失函数进行训练。效果上对比SFTper-step DPO训练的效果会发现相同Test-Error下使用per-step DPO训练相当于使用8倍的合成数据进行SFT, 也就是per-step DPO的合成数据使用效率比SFT要高8倍对比前面RFT利用负样本识别关键步骤进行对比学习对合成数据有更高的利用率~Quiet-STaRQuiet-STaR: Language Models Can Teach Themselves to Think Before SpeakingTHINK BEFORE YOU SPEAK: TRAINING LANGUAGE MODELS WITH PAUSE TOKENShttps://github.com/ezelikman/quiet-star?tabreadme-ov-fileQuiet-STaR拓展了以上STaR们的应用范围针对开放世界的各类问题给出了让模型先给出多条思考路径再在推理时动态决策多大程度上依赖前置思考来回答问题的新方案。Quiet-STaR的实现包括3步我们对照的着下面的代码来说N路平行思考生成针对每个输入token生成N个推理链路每个推理链路的长度都是固定的并且在推理链路的开始和结束分别插入新的Special token ,。 这些推理链路就是模型的隐藏思考步骤。对应以下代码中continuation迭代生成的部分。混合权重头论文在原生LLM的基础上添加了一个分类头就是简单一层或多层MLP。分类头用于进行权重混合也就是在预测真实的下一个token的时候根据分类头的权重决定多少信息来自上一个输入token多少信息来自新生成的隐藏思考步骤。对应以下代码中的mixing_weight和mixed_hidden_states。RL训练优化思考生成最后通过强化学习在训练以上,MLP分类层的基础上让模型生成的隐藏思考步骤更加有用可以提高模型推理效果。# Append the start thought token to the input sequencestart_thought_token_idself.tokenizer.convert_tokens_to_ids(|startthought|)input_idstorch.cat([input_ids,torch.tensor([[start_thought_token_id]]*batch_size).to(input_ids.device)],dim-1)seq_len1# Update the attention maskifattention_maskisnotNone:attention_masktorch.cat([attention_mask,torch.ones((batch_size,1)).to(attention_mask.device)],dim-1)# Generate the continuationcontinuation_lengthself.n_ahead-2new_key_valuespast_key_values start_timetime.time()forcontinuation_idxinrange(continuation_length):outputsself.model(input_idsinput_idsifcontinuation_idx0elsenext_token_id.unsqueeze(-1).to(input_ids.device),attention_maskattention_mask,position_idsposition_ids,past_key_valuesnew_key_values,inputs_embedsinputs_embeds,use_cacheTrue,output_attentionsoutput_attentions,output_hidden_statesoutput_hidden_states,return_dictreturn_dict,)new_key_valuesoutputs.past_key_values hidden_statesoutputs[0]logitsself.lm_head(hidden_states)logitslogits[:,-1,:]# Only consider the last token# Apply Gumbel-Softmax to the logitsnext_token_logitsF.gumbel_softmax(logits,tauself.gumbel_temperature,hardTrue,dim-1)next_token_idtorch.argmax(next_token_logits,dim-1)# Append the generated token to the input sequenceinput_idstorch.cat([input_ids,next_token_id.unsqueeze(-1).to(input_ids.device)],dim-1)seq_len1# Update the attention maskifattention_maskisnotNone:attention_masktorch.cat([attention_mask,torch.ones((batch_size,1)).to(attention_mask.device)],dim-1)# Append the end thought token to the input sequenceend_thought_token_idself.tokenizer.convert_tokens_to_ids(|endthought|)input_idstorch.cat([input_ids,torch.tensor([[end_thought_token_id]]*batch_size).to(input_ids.device)],dim-1)seq_len1# Update the attention maskifattention_maskisnotNone:attention_masktorch.cat([attention_mask,torch.ones((batch_size,1)).to(attention_mask.device)],dim-1)# Get the hidden states before and after the thoughtoutputs_beforeself.model(input_idsoriginal_input_ids,attention_maskoriginal_attention_mask,position_idsposition_ids,past_key_valuespast_key_values,inputs_embedsinputs_embeds,use_cacheuse_cache,output_attentionsoutput_attentions,output_hidden_statesoutput_hidden_states,return_dictreturn_dict,)hidden_states_beforeoutputs_before[0][:,-1:,:]# two new tokens: last continuation token and end thought tokenoutputs_afterself.model(input_idstorch.cat([next_token_id.unsqueeze(-1).to(input_ids.device),torch.tensor(end_thought_token_id).unsqueeze(-1).unsqueeze(-1).to(input_ids.device)],dim-1),attention_maskattention_mask,position_idsposition_ids,past_key_valuesnew_key_values,inputs_embedsinputs_embeds,use_cacheuse_cache,output_attentionsoutput_attentions,output_hidden_statesoutput_hidden_states,return_dictreturn_dict,)hidden_states_afteroutputs_after[0][:,-1:,:]# Apply the talk head to get the mixing weightmixing_weightself.talk_head[0](torch.cat([hidden_states_before,hidden_states_after],dim-1))# Apply the mixing weight to the hidden statesmixed_hidden_states(1-mixing_weight)*hidden_states_beforemixing_weight*hidden_states_after# Apply the language model head to get the final logitslogitsself.lm_head(mixed_hidden_states)按照以上的步骤我们来举个例子输入是“今天天气“:1. 平行思考生成N5 - 思考1startofthought是否下雨、下雪等异常天气endofthought - 思考2startofthought温度、湿度情况endofthought - 思考3startofthought湿度情况endofthought - 思考4startofthought对人们生活活动的影响endofthought - 思考5startofthought穿衣建议endofthought 2. 权重混合思考1举例 - 无思考时输入的next-token很0.4 真0.6 - 思考1后面的next-token晴朗0.2 下雨0.2 ....各种天气情况 - 思考1混合后(混合权重0.5很0.2 真0.3晴朗0.1 下雨0.1 ....各种天气情况*0.5 3. RL训练(如果原始文本后面是“晴朗” - RL给予“思考1”以正向梯度更新在天气后面思考温度有助于模型推理论文给出的一个实际的推理效果如下再来说下训练的部分论文采用了强化学习来训练新加入的MLP混合头思考开始和结束的token以及基座模型本身。因为前面再每个位置生成了N个不同的思考路径论文选择的RL训练目标是优化每个token位置生成正确思考路径相对其他思考路径对推理下一个token带来的增量信息。然后鼓励模型去生成对推理下一个token有帮助作用的思考路径Tj同时还会增加一个NLI Loss来训练用于混合思考和推理权重的MLP头。训练对比前面STaR等策略都是使用QA等特定领域指令样本Quiet-STaR选择OpenWebMath技术网站爬虫数据进行训练考虑技术类文本依赖思考的情况更多模型训练得到的正向信号会更加密集。因为训练本身是预训练的Next-Token-Prediction因此对比STaR具有更好的泛化效果可以不限领域不限任务进行训练。Quiet-STaR还有待进一步优化的问题包括动态思考位置的选择Quiet-STaR是在每个位置都生成N个思考链路后再使用mix-head来对每个位置的思维链和原始推理进行权重融合属于后选择方案推理成本较高如果能根据输入本身进行前置的思考位置选择只在最优的一个或几个位置上进行内生思考推理MCTS就更完美了模型内容思考可能本身不可解释因为Quiet-STaR只在HighLevel层面去优化加入内生思考后模型推理效果的提升并未对思考本身的next-token prediction进行对齐导致生成的思考本身甚至可能并不在语言上通顺。当然因为本身是在训练后的基座模型上推理所以肯定保留了部分的语言逻辑性模型内生思考可能存在各种3Hhelpfulharmlesshonesty问题。同样是对齐问题模型生成的思考链路不仅未在语言模型角度对齐也未在人类偏好角度对齐这可能也是OpenAI在O1中考虑对用户隐藏内在思考链路的原因之一。而对齐本身是否会影响内生思考的效果需要额外的实验验证。Quiet-STaR和OpenAI O1在生成模型内生思考上的技术栈是很像的。OpenAI在O1的使用说明Link中也指出,O1是通过动态插入思考token来生成内生思考并基于内生思考进行推理回答思考对用户不可见OpenAI在Learning to Reason with LLMs中也说明隐藏思维链的部分是未对齐的只展示回答部分。而多轮对话的上文也只会使用输入输出不会使用内生回答。使用感受上在金融场景下一些强数字强逻辑的问题例如表格问答财务问题分析上O1有比较显著的效果提升。最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻