对齐推理模型的一些认知!

大模型向量数据库机器学习
  
知乎:https://zhuanlan.zhihu.com/p/1943048398333780944  
(已授权)  

今天给大家分享一篇知乎好友@ybq的文章。

这篇文章随便聊一下如今比较火的推理模型,给新入坑的同学做一些简单的科普,都是一些偏基础的知识。

推理模型的训练

推理模型的训练和普通模型的训练并无什么区别,仅仅是 sft 语料多了一些特殊的 token 而已。具体来说,就是用 "" 和 "" 把模型的 cot 过程包裹起来。

sft 之后,模型 rl 时的每一条 response 都已经会稳定输出 和 了,和常规 rl 的流程是一致的。

需要注意的是,在 vllm 中是可以通过 这个 token 来切分出模型的 reasoning_content 和 content 的。

所以 最好事先设置成一个单独的 token,而不是多个 token,不然后续会有很多开源适配的麻烦事项。

推理模型训练时一个比较容易疏忽的点是:历史轮的 think 过程是不放置在模型的训练语料中的。 具体可以去查看 deepseek 和 qwen 的 tokenizer_config.json,都有一个逻辑是 content=content.split('')[-1]。

tokenizer_config.json 是每个开源模型除了 modeling_XX.py 外信息量最大的的文件了,里面的 chat_template 会明确指出模型推理时该如何拼接 prompt,知道推理时怎么做的,那自然就知道训练时怎么做的了。

注意:推理模型的思维链涉及较多枚举法,所以复读机的概率会远大于非推理模型。因此,无论是推理服务还是做 rl 训练的时候,最好都引入一个 N_gram_repeat 提前截断的机制。

至于所谓的混合推理模型(模型同时具有推理能力和直接回复的能力),则是一个调整训练分布的问题:既在训练数据里放一些长思维链数据,又在训练数据里放一些短思维链数据,就是混合模型。训练时通过评测指标调整一下 prompt 的分布和长短思维链各自的比例即可,并没有特别高深的技术。

以 qwen 为例,在 prompt 里加上 /no_think 便是没有思维链,其实就是让模型学会见到 "/no_think" 就直接生成 "\n\n\n\n",这种固定 pattern 的学习几乎没任何难度。

而在 tokenizer 里提供的 enable_thinking=False,是在模型生成的时候提前放置 "\n\n\n\n" 这些 token,原本输出思维链的位置被抢了,自然只能直接生成答案了,这属于一种 trick 吧。

特别注意,混合模型的续训在任何场景下都需要 "\n\n\n\n" 这个 pattern ,不要以为你对模型进行的是短链能力微调,就可以直接让模型输出 answer 了。短链微调也要乖乖的给模型拼一个空思维链,否则和事先已经训过的数据分布不一致,很影响进一步微调后的效果。

混合模型效果一定没有拆成两个模型的效果好,这个基本不需要质疑,长思维链和短思维链的分布差距那么大,八竿子打不着,肯定不存在相互促进的情况。qwen 最近拆成两个模型,应该是在追求极致的指标,deepseek 最近合并成一个模型应该是为了降低成本(API 端以后便可以只部署一个模型)。

与混合推理类似的:gpt-oss 的 low、medium、high 三层推理模式,seed-oss 的附带推理已消耗多少 token …… 这些大概率都是 sft 训练阶段调整数据的分布得到的特殊能力。

推理模型的数据

时间和实践会改变一些认知的

年初 deepseek_r1 论文里提出的 zero 路线的确惊艳到了我,但此时,我相信模型的 long cot 能力是靠 sft 学到的,强化只是进一步提高模型性能的手段而已。

具体来说,只训过 pretrain 知识和短链 sft 数据的模型,几乎不可能 explore 到有价值的思维链,必须事先通过 sft 来让模型学一些现成的长思维链。

然而,完全凭空标注出思维链这件事实在是太难了,所以蒸馏更强力模型的思维链数据便成为了大家的默认选项。

推理模型的训练要在 cold start 阶段大量蒸馏一些现成的思维链数据 ,具体过程大概分为两阶段:

  • 虽然我们仍不知道 OpenAI 的第一版 o1 模型到底是怎么标注出来的思维链数据,但据传是靠着在 prompt 中注入 special_token 去 hack o1 的思维链,让各家公司陆续都拥有了自己的 long cot 模型。起步更晚的公司,则可以直接蒸馏那些开放思维链的公司的数据;
  • 对自家已经具备 long cot 能力的模型做强化学习,并结合人工标注来修缮模型的思维链,可以有效提高模型的思维链质量。至此,自家的模型便可以为下一版本模型的生产积累新的“cold start 蒸馏数据”,左脚踩右脚的良性循环就开始啦。

认为 long cot 必须靠蒸馏来启动属于当下的个人理解,未必正确,年初我还在爆吹 zero 路线哈!

概括一下过去半年的发展:国内都做出来了自家的推理模型,是 deepseek r1 开源后的那段时间;国内推理模型效果进步飞快,是 GeminiPro 放出思维链的那段时间。

蒸馏不丢人,蒸不到优质数据那是真着急,如果此时谁能通过某种方法稳定 hack 出 GeminiPro 或 GPT5 的思维链,哪怕仅仅是一个prompt,在被封之前卖大模型厂商个几万块钱不在话下。

推理模型的 test time scaling law

test time scaling law 是一个 o1 出来后就一直被讨论的话题了,但是很多初入门者的理解还停留在“模型输出越长,效果越好” ,也就是所谓的推理模型。

这种理解不能说有错,只能说不全面。 test time scaling law 指的不仅是模型单次的输出更长,更是模型的多次调用,以及模型的多路调用

先说下多次调用,有时候模型的 long cot 不仅是一种辅助信息,也是一种 noise。相信大家都看过 deepseek 的思维链,很可爱,也很多废话。大模型天然存在 rope 的衰减机制和 attention 能看见所有 token 的机制,所以你觉着是那些废话的 token 一定在影响后续的输出,即使完全没有废话 token,那几万个 token 之后的模型效果也会衰减。

回想下,大家发现 ChatGPT 或 DeepSeeK 的回答走偏了的时候,往往都会新开启一个对话框,这就说明我们都知道有些 token 不滤掉是会影响模型效果的。

所以一种很自然的想法就是:一边 think,一边做 summary ,把之前的的所有思考过程凝缩成少量 token,和 prompt 组合在一起重新生成,这就是多次调用的思想。一边 think 一边 summary,一边 answer 一边 function_call,一边 solve 一边 verify …… 这些都是 test time scaling law,也是 agent 的基本思想和实现框架。

如果对这个过程做 RL,那单条 trajectory 就包括多次 response 了,这时候只看最终结果给 reward 就未必合理了,可以考虑给每个 response 具有单独的 reward shaping。

至于多路调用就更好理解啦,vote 就是最简单的实现方案。除此之外,一些 deep think 的思想,并不会让多路调用都输出结果,而是让多路思维链一边生成,一边相互校验、或者是计算置信度,把控模型的思维链一直处于相对正确的路线上,来提高准确率。

总结下来,test time scaling law 的核心思想就是:不计时间,不计成本,把一个模型的潜力充分挖掘。只要没借助其他模型,那就是该模型的能力。如果觉得有些任务必须借助其他模型,就把所需要的其他模型的能力训到目标模型中,让目标模型同时扮演多个角色来解决该任务。

目前,模型的单 response 的极限是把 AIME 做到满分,但充分发挥 test time scaling law 的单模型,极限是 IMO 的金牌水平。这种效果的巨大提升,就是 Agent RL 爆火的根因。

PS:都看到这里,来个点赞在看关注 吧。 您的支持是我坚持的最大动力!

欢迎多多关注公众号「刘聪NLP」,加入交流群,交个朋友吧,一起学习,一起进步!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
大模型产品方案白皮书——PromptPilot
AI 正以空前速度重塑行业,大模型成为继移动互联网后的新科技浪潮。如何将其与业务深度融合,实现落地,仍是数字化转型的核心挑战。有效 Prompt 是驱动模型达成业务目标的关键,但业务诉求常模糊、缺乏标准答案,模型理解差异大。企业需让模型准确理解需求、稳定输出高质量结果,并在数据积累中持续优化性能与价值。 PromptPilot 应运而生,通过对话与任务用例自动生成高质量 Prompt 与评估标准,运行中持续识别并优化问题,释放大模型潜力,让非技术人员也能轻松驾驭大模型,推动落地与创新。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论