
当大家都在期待GPT-5诞生的时候,OpenAI反而发布了o1,o1实际上是换赛道,不再疯狂卷模型参数、数据量或数据质量,而是转而扩大推理规模,用深度思考的方式来提升性能。
老实说,这种方法并不“优雅”,也算是暴力美学的一部分。虽然大家大体都能猜到o1大体上是怎么做的,但对于具体的技术还不明确,于是也就有了各种探索路径。正巧最近有两家公司发布了性能不错的o1类模型(或者我自己习惯叫做深度思考模型)的论文,那我们就看看他们是如何实现自己的o1的
这两篇论文是前不久出圈了的DeepSeek的DeepSeek-R1和广告打的很多,在圈外认知度比较高的Kimi的K1.5。K1.5还是多模态模型,不过本次我们还是只关注文本部分。


顺便,其实已经有类似于综述的论文总结了o1的大部分可行思路——《Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective》,有兴趣的朋友也可以去看。
DeepSeek也算是我看大的孩子了(bushi,见:
最近,DeepSeek开源了DeepSeek-R1-Zero和DeepSeek-R1两个模型。
DeepSeek-R1-Zero算是初号机,之所以不叫R0,可能是因为致敬Alpha-Zero。DeepSeek-R1-Zero用了一个大胆的想法,即不经过微调直接进行强化学习。
毕竟这个系列是更加照顾圈外人和新手的,这里还是稍微讲讲预训练、微调和强化学习。
现在的大模型的base模型首先要进行预训练,预训练的语料就是从网络上爬的超巨量语料,这些语料不需要非常高的质量(往往只需要比较简单的质量过滤),也不需要人工标注(也就是人是不需要去一个个看数据的,图像也是类似,所以在图片上添加“禁止用于机器学习”之类的操作很大程度上是没用的,因为这一阶段不太可能上模型一个个进行OCR过滤[不过如果抵抗真的能规模化,大公司可能确实会考虑],况且OCR本身也不一定准。另外打上水印的图像终究是少数[除非真的能形成足够的规模],对最终模型结果的影响不会很大。我本科机器学习的老师说过,只有当你能把一件事给计算机说明白你才算真正的明白了这件事。这句话当然有问题,但是对于我们理解AI其实很有帮助,就是不要用人类的尺度去判定一件事对于AI来说是简单还是困难,图像上打上水印人看起来确实容易但对于简单质量过滤来说通常是过不掉的。要进行行之有效的抵抗是不能不去了解要抵抗的对象的。偏题有点远,我们还是回到具体技术)。预训练的主要目的是让模型通过大量语料学会语法等,知道怎么说话,并且记住大量世界知识。由于一般来说还是真信息多于假信息,所以一般来说还不至于跑太偏,不过语料库本身的偏见确实可能影响模型从而导致我们不希望的输出。
微调用的一般就是相比于预训练少得多但质量高的数据,这些数据可能来源于自动化生成(对于能够形式化验证的一些数据)、人工标注(例如情感分类)或机器合成(就是用大模型来合成数据,合成数据的坑非常多,之前专栏也讲过,这里不再展开)等,形式往往是QA(问题-答案)的形式。
在大语言模型领域,预训练和微调都是采用教师强迫的方式,就相当于一个token(子词,一般大语言模型处理的基础单位,可以简单理解成词)一个token地教,区别在于预训练往往是从头开始教,而微调往往是给定问题,只一个token一个token地教答案。
强化学习则完全不同,即先让模型自由输出,然后对于输出进行评估,给定一些奖励值或惩罚值,然后再反馈给模型。
强化学习往往比微调/预训练(后面主要和微调比,因为谈论的东西不涉及预训练了)要慢,毕竟要生成一遍之后再从环境中得到评估(评估也是要时间的,有时候还特别慢),然后才能修改模型,而微调是几乎立刻就能修改模型。并且强化学习往往稳定性较差。
类比下,预训练其实就是什么都不会的儿童被一步步教说话,微调就是对于给定问题,老师一步步教学生如何答题。强化学习就是学生自己做题,然后根据答案进行反思来提升自己。
ChatGPT能够成功的秘籍是RLHF,属于强化学习(RL)的一种,但是我们看整个流程:

发现RLHF实际上是要先进行微调(SFT,全参数微调。此外还有非全参数的高效微调PEFT,使用少量角色图片就可以修改AI绘图模型一般就是高效微调),然后训练一个奖励模型RM,然后用RM进行RL。RM的作用就是给模型的输出打分。对于我们做的习题来说有答案,但实际上的QA大部分都是“主观题”,所以打分是很困难的,既然人没办法设计很好的打分系统,那就让模型学。RM本身就是个模型,甚至可能比目标模型还要大。
RLHF除了提升模型性能外,另外一个重要作用是和人类价值观对齐。
RLHF后还有很多改进,例如为了防止强化学习的不稳定性,出现了DPO,将RLHF转换成微调任务。
OK,讲了一堆前置知识,我们回到正题。
DeepSeek-R1-Zero没有进行微调直接开始强化学习,而且强化学习的奖励设置还非常简单,包括准确度奖励和格式奖励,不需要单独训练模型。训练过程中发现DeepSeek-R1-Zero能够自我进化,即随着训练步骤增多输出慢慢变长,并且出现了“顿悟时刻”,顿悟时刻之后模型学会了通过重新评估初步的解决方案,给予问题更多的思考时间(而不是增加无效的步骤来“水字数”)。
DeepSeek-R1-Zero仍然有可读性差和语言混合等问题,毕竟实验初号机嘛。于是有了改进型的DeepSeek-R1。
DeepSeek-R1先进行了少量数据的微调进行“冷启动”,然后进行和DeepSeek-R1-Zero一样进行训练,只不过增加了语言一致性奖励来缓解语言混合的问题。
强化学习过后DeepSeek-R1再进行微调,用于进一步增强模型在写作、角色扮演等非推理任务上的能力。
微调后再进行二次强化学习,通过使用多种奖励信号和不同的提示分布来训练模型,特别是在推理任务中使用基于规则的奖励,而在一般任务中则使用奖励模型捕捉人类的偏好。
可以看到整个步骤是少量数据微调-强化学习-微调-强化学习。步骤看上去繁琐,但实际上是在模型常见的训练步骤(后两步)的基础上增加了前面两步,而这两步的主要目的也是让模型具有深度思考能力。
我们先转到Kimi,Kimi K1.5的思路也非常简单,核心思想是长上下文扩展和改进的策略优化。
步骤也是先用少量微调数据进行预热(和冷启动基本上是一个意思),然后进行强化学习,学习目标包括经典奖励模型(就是一般LLM强化学习常用的RM)、链式思维奖励模型和长度奖励,并不是什么“高大上”的奖励模型,长度奖励的目标实际上是防止输出过长,也是个非常简单、好算的奖励目标。
除了上述提到的先少量数据冷启动再强化学习的相同点外,两者还有如下共同点:
(1)都进行了“奖励黑客”的预防。所谓奖励黑客也是强化学习中常见的现象,就是模型针对奖励进行了偷鸡。例如如果我想用强化学习训练一个对抗“AI检测模型”的模型,用检出多少作为奖励,结果训练出的模型学会了只输出短句(毕竟现在有两个“Hello”,你告诉我哪个是人类生成的,哪个是AI生成的),这就是偷鸡。又例如莫德雷德可以用大量古遗物变强,但面对真正的强者、古遗物被破坏、抢走,立刻就现出原形,这显然不是我们想要的。之所以有这种现象,是因为我们很难完全建模我们真正的“需求”,而模型训练其实也是有“能量壁垒”的,很多偷鸡方法实际上是陷入局部最优,然后出不来了。
DeepSeek-R1的应对方法就是非常简单的奖励,K1.5的应对方法是确保每个问题的答案能够客观且可靠地验证。
(2)都没有采用蒙特卡洛树搜索(MCTS)、过程奖励模型(PRM)这种看上去“高大上”的方法。
K1.5论文中并没有明说,DeepSeek-R1的论文中说明了他们尝试了这两种方法但是失败了(失败了不代表这两种方法真的不行,可能是哪些步骤没设置好或者没有找到能解决这些方法关键缺点的方法)。
MCTS这个大家应该比较熟悉了,毕竟是AlphaGo的核心技术,基本思路就是树状搜索,然后把不行的枝条剪掉来获得一个或一些好的输出。但是虽然说围棋有非常多下法,但是文字的复杂度更高,基于token搞出一条非常大的搜索树是非常困难的。或者说,这又是一个难以规模化的方法,所以DeepSeek-R1没有采用。规模化其实是个很重要的问题,例如我们可以在实验室合成一些东西,但如果实验室的方法不能批量生成这种东西或者规模化成本难以承受,那么这个东西当然就不会量产。
PRM也是OpenAI提出的一种“先进”理念,就是我们对于一个输出不仅仅是做整体或答案的评估,而是精细到评估每个步骤。但是DeepSeek-R1发现这种情况难以避免地出现奖励黑客的现象(至少DeepSeek暂时没找到好的解决方案)。
从这两点可以看出来,两个模型实际上都是实事求是、大道至简,没有去刻意用比较高大上的技术。
当然我之后也会去测试下DeepSeek-R1,看看效果如何。顺便再贴一下看到的一个对联,也算是给大家拜个早年了,祝大家新的一年继续深度求索。
