专栏名称: AINLP
关注AI、NLP相关技术,关注算法研发职位和课程;回复"文章"获取历史信息;双语聊天机器人"无名";中英翻译请输入:翻译 翻译内容;自动对联,请输入:上联 上联内容;调戏夸夸聊天机器人,请求夸、求赞;查询相似词,请输入: 相似词 词条
目录
相关文章推荐
最英国  ·  唐顿移民问答| ... ·  22 小时前  
51好读  ›  专栏  ›  AINLP

深度求索DeepSeek-R1详解

AINLP  · 公众号  ·  · 2025-02-01 10:10

正文

过年这段时间好几个重磅工作相继发布,有深度求索的DeepSeek-V3、DeepSeek-R1、月之暗面的Kimi-K1.5,还有MiniMax的MiniMax-01、面壁智能的MiniCPM-o 2.6和智谱的GLM-Realtime,以及阶跃的Step-1o等,2025年才过了不到一个月,真·卷起来了。百花齐放的场景让人对AI充满期待,同时作为开发者也感到压力山大。

还好不少工作都有给出技术报告,让我们有机会站在它们的肩膀上,今天就来学习一下DeepSeek-R1。

1.overview

先概括说说DeepSeek-R1是什么,大致干了什么:

  • ①:以671B参数的DeepSeek-V3-Base为起点,直接对预训练模型进行reasoning任务的强化学习,获得DeepSeek-R1-Zero,发现效果比单纯SFT更好,说明强化学习的self-evolution很有效果
  • ②:DeepSeek-R1-Zero虽然效果好,但是有一些小问题比如语言问题和格式问题,那么在强化学习RL之前,先做SFT,就可以缓解这些问题了
  • ③:②的方法得到的模型的reasoning效果很好,那就用它来搞reasoning数据;再加上DeepSeek-V3的SFT数据中的non-reasoning部分,合在一起获得高质量的SFT数据
  • ④:③中的数据用来对DeepSeek-V3-Base做微调,之后再进行RL,得到效果最好的模型DeepSeek-R1
  • ⑤:用③中的数据对Qwen/Llama模型进行SFT,可以视作是数据蒸馏;得到的模型效果也比非蒸馏的SFT要好

2.训练pipeline

DeepSeek-R1技术报告给出了几个模型的训练流程,DeepMind的大佬给训练流程画了图,原图在https://x.com/SirrahChan/status/1881488738473357753?s=19&mx=2

在这个基础上,我稍稍加了一点点修改,理清一点细节。DeepSeek-R1中提到的模型训练流程如下:

左路就是DeepSeek-R1-Zero的训练(上面的①),中路是基于SFT和RL搞数据(上面的③),获得800k Combined SFT data之后,左边是对Qwen和Llama进行蒸馏(上面的⑤),右边就是训练DeepSeek-R1(上面的④)。

下面就一个个来看下细节。

3.DeepSeek-R1-Zero

DeepSeek-R1-Zero以DeepSeek-V3-Base做初始化,在没有SFT阶段的情况下直接做RL,就获得了比较好的效果。

强化学习方法用的是Deepseekmath中提出的Group Relative Policy Optimization(GRPO),而训练的reward信号没有使用模型产生,而是仅使用规则来决定。主要包含两类reward:

  • accuracy rewards:对于数学问题这类有确定答案的问题,要求模型给出特定格式下的结果,方便进行正确性校验;而对于LeetCode问题,则是给出test case的执行结果作为反馈;
  • format rewards:格式奖励,强制模型将思考过程放在输出的这两个特殊tag中间;

那么为什么不使用模型来获取reward呢?

因为使用reward model就有可能出现reward hacking,也就是actor有可能会找到捷径来获取高reward值,从而偏离了我们想要的优化目标。比如一个常见的hacking就是模型经常会发现“输出越长得分越高”,从而给出又臭又长的回答。因此在一些RL框架中就有专门对长度进行惩罚来避免这个捷径被滥用。

reward hacking没法预测,不知道在什么时候就会出现一个奇怪的reward漏洞,这么一来就可能需要多次迭代reward模型,堵上这些捷径和漏洞。但是对于大规模的模型,每次迭代的更新数据和训练都要耗费比较大的成本,从而导致整个训练流程变得困难。

用规则reward就不会有这样的问题,而且对于数学和代码类问题规则的效率也更高。

训练DeepSeek-R1-Zero的目的是希望模型能够通过长思考自我反馈来解决复杂问题,那么就需要它按我们想要的格式输出,起码能清晰给出哪些是思考过程(隐藏的输出),哪些是最终结果(用来呈现给用户)。因此给RL训练的输出设计了模板,引导模型按照这个格式输出,方法就是前面提到的format reward:

随着RL训练的进行,DeepSeek-R1-Zero的长思考能力持续提升。

下图是训练期间DeepSeek-R1-Zero在AIME 2024 benchmark上的得分变化情况,每400步进行一次评测:

可以看到相比Base模型,得分确实有显著的提升,从15.6%提升到了71.0%,达到了与OpenAI-o1-0912相当的水平。在其他benchmark上,DeepSeek-R1-Zero也有类似的提升:

另外还可以观察到,随着RL的进行,DeepSeek-R1-Zero的思考内容在持续变多。这表现在输出结果的CoT中,即中间的内容长度在持续增加,最后达到了接近10k,而且增长的趋势完全没有减弱。可以预想继续训练的话还会变得更长(当然更长并不一定是更好):

这些效果提升说明不使用监督数据,而仅使用强化学习,模型可以自发探索和环境进行交互的方式,并且对复杂问题可以自发学会进行复杂的思考,从而提升处理困难问题的能力。

3.1.Aha moment

DeepSeek-R1-Zero的Aha moment是在训练过程中观察到的一个有趣现象。在一些中间版本,模型在思考过程中对前面的方法进行重新审视,并为其中的问题重新分配了思考时间:

这是一个拟人化的心理活动,而且是在没有人类监督学习的情况下出现的。(这会不会说明RL真的可以通往更高层级的智能,真正到达人类水平甚至更高的水平呢?)

3.2.Drawback of DeepSeek-R1-Zero

DeepSeek-R1-Zero虽然在reasoning任务上有了明显的提升,不过也有一些缺点:比如模型的输出可读性较差(会不会这就是模型的思考方式呢,所以人类看着费劲),对于部分语言会出现混用乱用的情况。

4.DeepSeek-R1

接下来就是DeepSeek-R1的出场了。在DeepSeek-R1-Zero的结果和分析之下,就有两个自然的问题:

  • RL已经这么好,那么先SFT再RL不得起飞?
  • 光有reasoning CoT的能力不够,能不能搞一个通用能力也很强的版本?

4.1.Reasoning版本R1

首先来看第一个问题,SFT+RL。

为了防止Base模型在RL初期出现不稳定的情况,先收集几千个long CoT data,用来对Base模型做了SFT。这些long CoT data怎么收集的呢?就是用包含few-shot example的prompt,让DeepSeek-R1-Zero输出可读性较好的、带有reflection和verification的结果,再经过人工校验获取的。

为了提升SFT后生成结果的可读性,专门给这些SFT数据设计readable pattern:在response后面加上一个summary,格式如下:

|special_token||special_token|

其中reasoning_process是CoT的内容,而summary是reasoning结果的总结。

SFT之后就是进行和DeepSeek-R1-Zero一样的RL了。前面在训练DeepSeek-R1-Zero的时候,就发现模型输出会出现语言混用的情况,特别是当输入prompt涉及多种语言时。那么这次RL就为此专门设计了一个language consistency reward,具体来说就是CoT中target language word的比例。虽然在消融实验中发现加入这个语言一致性reward会带来一点效果损失,不过这样的输出结果对人类更友好。

有了这些SFT数据做冷启动之后,再进行RL,模型主要有两点变化:

  • readability:有了SFT作为冷启动,模型的可读性更好了
  • potential:增加SFT之后,整体的效果也更好了

4.2.新一轮的数据收集

1、reasoning数据

上一步通过少量人工参与的SFT数据+RL,获得了比DeepSeek-R1-Zero更好一点的模型。那这个模型是不是又可以用来收集更好的SFT数据了呢?答案当然是yes,不要忘了前面这些SFT数据就是从更早的版本DeepSeek-R1-Zero来的。

为了收集更好的数据,这里使用rejection sampling来采样reasoning trajectory。之前的数据基本上至包含了可以使用规则来评估reward的样例,但是这次我们把范围扩大,增加了一些没法直接用规则判定的reasoning数据。这些新增的reasoning数据就需要用到模型来判别,而DeepSeek-V3就可以作为这个判别模型,通过输入的ground truth和prediction来judge结果的好坏。

此外,还有一些清洗规则:

  • 语言混合
  • 长段落
  • 包含代码块(毕竟大脑不能跑代码?)

最终采样了600k条reasoning data。

2、non-reasoning data

回顾前面的两个问题,第一个已经验证了,再看看第二个:光有reasoning CoT的能力不够,能不能搞一个通用能力也很强的版本?

想要提升通用能力,那就需要包含一些non-reasoning data:比如writing、factual QA、self-cognition和translation等。

这些数据来自于DeepSeek-V3的SFT数据。对于某些任务,会调用DeepSeek-V3在回答问题之前先生成一个CoT;而对于某些比较简单的query,比如“hello”这样的打招呼,则不增加CoT。

最终整合大约200k的non-reasoning data。

4.3.SFT + RL

上面得到了600k + 200k = 800k的SFT数据,首先用这些数据在DeepSeek-V3-Base上训了2个epoch。接下来就要进行RL了。

RL的reward设置和前面又有点不同。对于数学、代码和logical reasoning的任务,这里还是使用和DeepSeek-R1-Zero一样的规则reward。而对于general数据,就用上了reward model。

reward model依然是基于DeepSeek-V3的。对于helpfulness,主要关注在final summary,确保给到用户的response的实用性。而对于harmlessness,则会关注整个模型数据,包括过程和结果,识别和减轻在生成过程中任何可能出现风险的地方。

这样一套下来,就得到了最终DeepSeek-R1。

4.4.评测

评测中,所有模型的设置都是:

  • 长度32768 token
  • 对于需要采样的,使用temperature = 0.6,top-p = 0.5,每条query生成64条response

DeepSeek-R1的评测结果如下:

5.蒸馏

在前面的流程中,SFT数据的产生来自DeepSeek-V3(或进一步训练的变体),reward来自DeepSeek-V3,所有流程都是基于DeepSeek-V3来做的。最后产生的这800k数据可以说是DeepSeek-V3这个模型能给出的精华内容。

用这800k数据训练其他更小的模型,也可以视为是一种数据蒸馏(就像大家都去拉取GPT-4/o1/o3的数据用来训练一样)。

具体选择的小模型有:Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B 和 Llama-3.3-70B-Instruct。

这些蒸馏模型相比原模型也有很大的提升:

DeepSeek-R1-Distill-Qwen-32B甚至超过了QwQ-32B-Preview(这是不是有点打Qwen脸了)。

如果这些模型不蒸馏,而是进行和DeepSeek-R1-Zero类似的强化学习,能不能比数据蒸馏强呢?为了回答这个问题,在Qwen-32B-Base上进行了10k+步的强化学习,得到DeepSeek-R1-Zero-Qwen-32B,效果和QwQ-32B-Preview差不多,但是还是不如数据蒸馏的SFT模型:







请到「今天看啥」查看全文