前沿重器[58] | deepseek-V3&R1技术启示

大模型向量数据库机器学习

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍: 仓颉专项:飞机大炮我都会,利器心法我还有 。(算起来,专项启动已经是20年的事了!)

2023年文章合集发布了!在这里:又添十万字-CS的陋室2023年文章合集来袭

往期回顾

deepseek最近也是火出了圈,在用户视角,其极低的成本和媲美目前SOTA模型的效果为人们所称道,今天我也来盘一下deepseek的V3和R1的细节和启示。

当然,技术细节中,我可能不会完全详推内部的公式,而主要是总结思想和思路,我会配以讲的比较好的文章方便大家进一步深入学习。

目录:

  • deepseek-V3
  • deepseek-R1
  • 个人总结和思考
  • 后记

本篇之谈两篇报告和个人初步感受,有关自己的实测经验和分析,我会再后续的文章里公布。

deepseek-V3

首先是deepseek-V3,V3其实早在一个月前就已经发布了,同时还有自己的技术报告:

我从这里面找几个我自己理解比较重要的关键点拿出来强调一下。

模型架构

首先是模型架构上,根据deepseekV3的报告,有两个亮点机制,一个是MLA(Multi-Head Latent Attention:https://zhuanlan.zhihu.com/p/15153745590),另一个是DeepSeekMoE。

MLA是MHA(multi-head attention)的升级版,旨在压缩kv cache从而减少缓存使用,同时还通过使用decoupled RoPE的方式成功兼容了RoPE。

DeepSeekMoE在deepseekV2中就已经有用到,并在V3中有得到进一步改进。DeepSeekMoE有专门的论文有对这块技术进行详细讲解(https://arxiv.org/abs/2401.06066),文章内提出原有MoE系统中存在专家之间的知识混杂(Knowledge Hybridity)和知识冗余(Knowledge Redundancy)问题,论文是细粒度专家分割和专家共享隔离的模式来进行解决;在V3的报告里,针对MoE特有的多专家的负载均衡问题,介绍了辅助无损负载均衡(Auxiliary-Loss-Free Load Balancing)、互补序列辅助损失(Complementary Sequence-Wise Auxiliary Loss)和节点限制路由(Node-Limited Routing)方案,尤其是最后一个方案,报告中非常自信地说出了这句话:

Under this constraint, our MoE training framework can nearly achieve full computation-communication overlap.

于是,便能够在训练过程中不丢失任何token。

另外报告中还提到了MTP机制(multi-token prediction),这个机制主要来自“Better & Faster Large Language Models via Multi-token Prediction”这篇论文,这个方案的核心优势在于解码速度变快——1.8倍,这个提升无疑是极大的,而且经过评估,第二个token的接受度在85%-90%,说明可靠性比较高,而在具体效果上,也有进行过实验,在规模较大的模型上收益是更高的。

硬件模块的优化很多也很细,我并不算很擅长所以此处就不赘述了。

预训练

预训练阶段,作者做了挺多细节操作,虽说没有全都做过消融,但从最终端到端效果来看,下面这些操作肯定多少有一些用。

  • 数据层面,提升数学和代码占比,扩大中英文之外语言的语料,控制冗余数据和数据多样性。
  • FIM策略(Fill-in-Middle),能在确保下一个token预测能力的同时,让模型能基于上下文预测中间文本,这个在V2中也是有用到的。

<|fim_begin|> pre<|fim_hole|> suf<|fim_end|> middle<|eos_token|>

  • BPE tokenizer,另外提到一个细节,在训练时对一定比例组合的token进行随机切割,这能使模型接触到更多特殊情况来减轻偏差。
  • YaRN(Efficient Context Window Extension of Large Language Models)做上下文拓展,这里是通过两个各包含1000步的额外训练阶段,逐步扩大上下文窗口,处理效率就高了很多。

后训练

后训练上,同样有很多可供参考的细节,我这里同样抽取总结一下。

首先是sft数据:

  • 对推理数据,尤其是数学、代码、逻辑谜题的数据,这里使用了R1(初步理解就是后面发布的这个R1模型,但感觉两头话术对起来看好像又不是)来生成,同时这里也指出了R1生产的数据冗长、不规范的问题。这里作者有针对性地训练了专家模型来作为数据生成器,这里有两类sft的样本,一种是问题和原始答案的配对,一种是引入系统提示词,将q和R1答案结合,这种方式可以引导生成具有自我反思和验证机制的指令。
  • 对非推理数据,即创意写作、角色扮演方面的任务,则使用V2.5模型生产+人工标注的方式进行,比较简单。

然后是RL,RL这里还是有不少值得借鉴的细节,后续RL可能会成为一些场景替代sft的更优化的方式。

  • 奖励模型上,提供了规则性和模型型两种设计方式,规则型是要求模型在特定格式内提供最终答案,可通过规则进行自我验证,类似的例如leetcode编程题,可通过嵌入编译器来形成反馈。模型型主要用于有标准答案但形式灵活的问题,此处会有奖励模型来评估两者的匹配度,奖励模型是基于V3的sft-checkpoint进行训练,此处除了要求有评分,还需要有评分推导过程,此时奖励扭曲风险就会大大降低。
  • GRPO,这应该是最近几天大家讨论的最热烈的话题了,这是PPO的一种优化(DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models)。

讨论

文章中重点提出的还有两个讨论点,一个是对R1知识蒸馏的分析,一个是自我奖励机制。

R1知识蒸馏方面,作者用V2.5进行了实验对比,可以看到最终的效果是有提升的,但与之对应的有一个代价,即会显著增加输出长度,在MATH-500数据集下,长度翻了一番。

本身reward这事在RL中就非常重要,编程和数学这两个方面,目前都是有比较可靠的外部工具验证,但一般场景下,就没有好的反馈机制,在V3的开发中,使用了自身投票的评估结果作为反馈,该方式似乎会有明显成效,从这里看,补充信息和语言模型结合的方式作为反馈来源会有很大意义。

个人的小结

V3的发布时间是24年尾,当时其实并没有起到很大的风浪,然而在现在(25年2月)这个时间点下看,里面还是有很多可以借鉴的细节,例如MLA,例如MoE中的一些研究(尽管这方面的研究需要的成本巨大),还有RL等,启发还是非常大的。

deepseek-R1

R1是年前舆论的中心,与之关系密切的还有R1-zero,后者更像是R1的青春版(重点是纯RL),这里我还是按照R1报告的思路来讲一下我对报告的理解。

在contribution里,作者提到了两个核心贡献。一个是有关RL的地位,一方面论文首次验证LLM可通过纯RL来进行提升存在可能性,另一方面R1的RL包含优化推理模式和人类偏好对齐两个阶段,以及用两个SFT阶段构建模型的推理和非推理基础能力,这些都对大模型最终的效果提升带来新的思路。另一个贡献是小模型性能的提升,大模型知识可通过蒸馏的方式迁移到小模型,效果优于直接对小模型进行RL训练,这为我们的小模型研发也提供了经验。

DeepSeek-R1-Zero

DeepSeek-R1-Zero在文章中有一段这样的描述:

In this section, we explore the potential of LLMs to develop reasoning capabilities without any supervised data , focusing on their self-evolution through a pure reinforcement learning process.

未用到有监督数据、自我进化、纯强化学习,这些关键词组合起来就是R1-Zero的核心亮点,细节上,文章做了这些描述。

  • GRPO(DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models),V3中就已经提到了,此处沿用。
  • 奖励建模上采用了双重奖励,准确性奖励和格式奖励,前者针对数学、代码这俩要求高且好评价的场景进行规范标准的生成反馈,后者要求模型讲推理过程放在指定位置,而并未使用特定的结果或过程神经奖励模型,这里考量的是大规模RL会出现奖励欺骗问题(这个在RL似乎挺常见的,解决方案这方面可能还有很多空间)而且复杂的奖励模型可能需要额外资源,增加训练流程复杂度。

在实验中,作者发现R1-Zero在纯强化学习下,就已经一定程度体现出和o1-0912相当的效果,这其中还有如下发现:

  • 随着训练进行,生成的长度在稳步增加,这应该得益于强化学习的自身探索发现。
  • 而强化学习中的收益,作者将其归于适当的激励机制,这种激励机制显然能促进模型产生高级问题的解决策略。

DeepSeek-R1

但是,R1-Zero在语言的可读性和一致性上仍存挑战,此时R1的研究主要聚焦在2个问题上:

  • 引入少量高质量数据作为冷启动,是否能进一步提升推理性能,加快收敛?
  • 如何开发清晰连贯的CoT,兼顾通用能力和高可读性生成结果。

为此,作者设计了4阶段训练过程:

  • 冷启动阶段,R1使用少量长CoT数据进行预微调,包括长CoT示例的少样本提示、包含提示生成包含反思验证的详细答案、R1-Zero规范化输出、人工标注后处理数据,基于这些数据,能带来更强的可读性和预测性能提升。
  • 面向推理的强化学习。使用和R1-Zero类似的RL训练流程,提升模型在代码、数学、科学、逻辑等领域的推理能力,而考虑到R1-Zero的可读性问题,尤其是答案混合多语言的问题,这里设计了一种与语言一致性的奖励,这个奖励尽管对最终效果有负面影响,但为了维护可读性,还是有必要的(这里可能要考虑一个问题,可读性和最终性能之间出现了偏离)
  • 拒绝采样和监督微调。这部分借助SFT进一步整合模型的写作、角色扮演等能力。这里的推理数据主要来源于RL训练中间过程的checkpoint来做拒绝采样,生成推理轨迹,这里的奖励模型应该是借助来的DeepSeekV3来进行判断(这里说用V3来判断,而V3又说自己蒸馏自R1,感觉这里信息有些矛盾,个人感觉是R1到V3的蒸馏可能并不是最终现在我们看到的这个R1版本),这里还去掉了一些混合语言、长段落、代码快的思维链;而非推理数据,则使用的是V3数据集的一部分,这部分数据并不需要思维链回答(我们是不是可以通过这个方式去掉大部分可能没必要的推理能力,或者是让模型自己理解啥需要推理啥不需要推理?)
  • 全场景强化学习。在上一步SFT基础上在进行RL训练,侧重于完整地多场景的通用能力完善。

小模型蒸馏

我们可以看到,R1下有很多小模型的蒸馏,学生模型的选择上,14B及以下的普遍用的是Qwen2.5的一系列Math模型,32B的用的是Qwen2.5,,另外还有Llama-3.1-8B和Llama-3.3-Instruct,这里的模型选择感觉有说法,尤其是小尺寸选择的是Qwen2.5的Math特异化模型,可能是发现这方面的能力蒸馏起来会更强吧。至于Llama-3.3的选择,应该是直接基于实验的结果。

值得强调的是,这里的蒸馏是直接用的SFT,没有RL。(RL蒸馏估计还有进一步的研究空间)

Discussion

除了上面总结的比较成功的实践,作者还提供了一些实验参考,这些实验也非常有参考价值。

首先是蒸馏和RL的对比,在前面有提到,几个比较小体量的大模型是通过蒸馏来得到的,肯定会有人问,为什么不直接用本文提到的RL来做,作者做了一个实验,对同大小的模型,DeepSeek-R1-Zero-Qwen-32B的效果和QwQ-32B-Preview的效果相当,却远比不过直接从R1蒸馏到Qwen2.5-32B的模型。我自己觉得还缺少一个实验,这里是用R1-Zero做的,但是后续R1的四阶段做完后,32B模型有多大差距还没有数,所以应该还有待进一步实验的,不过可以确认的是,在目前的研究下,通过蒸馏的方式应该是可以让小模型得到更加优秀的效果,比自己通过RL来进行更好一些。

然后是,作者举了两个未成功的尝试,一个是过程奖励模型(PRM),另一个是蒙特卡洛树搜索(MCTS)。

开头作者承认了PRM的方法,但实践中发现并不合适。核心原因是,对于一个长过程的复杂任务下,“过程”都很难量化,步骤的定义困难,标注,还是奖励函数设计,都会很复杂。这个观点在Kimi1.5的报告里也有提到。

MCTS是受到了AlphaGo和AlphaZero的启发,这种方式的思想是把一个完整的答案拆解成更小部分,让模型能从系统上学到甚至是对齐这个思路,搜空间搜索寻优的角度就是让模型在解决方案的空间里进行尽可能广阔的搜索,然而token空间和象棋之类的空间大小有巨大不同,token的空间显然更大,如果不进行空间限制和剪枝,则寻优起来非常困难,但如果限制,又很容易陷入局部最优,生成质量也会受到影响。

局限性

在总结部分,作者除了重述前面的效果,还提到了目前R1所存在的一些问题,如通用能力、语言混杂、提示词工程(prompt敏感度过高)、特定任务评估时间过长(软件工程)等问题,后续作者会持续研究,这些问题当然也是给各位研究者提供后续的研究方向了。

个人总结和思考

这两篇文章着带来很多思维上的启发,我这里按照我的理解列举,希望对大家也有帮助。

  • MoE架构似乎是后续进一步升级大模型的方向,仅从最终效果的角度,上限有很大的探索空间。V3中对MoE的探索实验也很有启发。但问题是,好贵,看这个就好贵。
  • 蒸馏>RL,是R1这篇文章里提出的重要观点,相比直接用RL训练,蒸馏的收益比直接RL好很多,说明教学比自学领域的收益还是要好很多。当然,目前强化学习研究还有待进一步深入,后续会不会反转真不好说。
  • RL,R1-Zero和R1的实践结论告诉我们,RL是具有很高的上限的,我自己的感觉核心是RL内部的Reward,会更加灵活地告诉模型“谁更好”,他是一个量化的比对概念,和基础的SFT只会告诉“对不对”以及“那个对”这种绝对性概念要更强一些。但值得注意的是,RL暂时还不能是“政治正确”,相比之下,他应该是个锦上添花,突破上限的方案,早期或者后期训练,还不能完全离开sft之类的方案来优化。
  • 深度推理能力的出现,从实验中看来,比较重要的贡献是两点,RL和数据,RL前面已经说过,至于数据,精心准备的长推理文本、数学逻辑和代码,这有说法,另外R1中的冷启动,也为推理和可读性带来很大的贡献。
  • 后训练和SFT的重要性。无论是V3还是R1,抛开R1-Zero这个奔着纯RL去的模型,sft都在这里面起到了作用,这种朴素直接的训练,还是能让模型直接提供更加通用、泛用的能力,毕竟最终目标还是应用,而sft提供的便是直接可见的能力。

后记

这篇文章写的时间跨度很长,过年到2月中旬了,中间经历过很多插曲,但随着自己的学习深度却逐渐深入,反复研读、思考、实验还是能够有一些新的理解和认识的。这次这篇更多是讨论文章内的技术,具体在实际实验中的结果,我会再下一篇文章里简聊。

picture.image

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

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论