1、DeepSeek LLM
DeepSeek LLM 发布于 2023 年 11 月,收集了 2 万亿个词元用于预训练。在模型层面沿用了 LLaMA 的架构,将余弦退火学习率调度器替换为多步学习率调度器,在保持性能的同时便于持续训练。DeepSeek LLM 从多种来源收集了超过 100 万个实例,用于监督微调(SFT)。此外,利用直接偏好优化(DPO)来提升模型的对话性能。
1.1、预训练
1.1.1、数据
数据构建的主要目标是全面提升数据集的丰富性和多样性,将方法组织为三个基本阶段:去重、过滤和重新混合。去重和重新混合阶段通过采样独特实例确保数据的多样表现形式。过滤阶段增强了信息的密度,从而使得模型训练更加高效和有效。
DeepSeek LLM 基于分词器库(Huggingface)实现了字节级字节对编码(BBPE)算法。与GPT - 2 类似,采用预分词处理,以防止不同字符类别的词元(如换行符、标点符号和中日韩(CJK)字符)合并。此外,将数字拆分为单个数字,且词表中的常规词元数量设定为100000个。该分词器在一个约 24GB 的多语言语料库上进行训练,在最终词表中添加了 15 个特殊词元,使词表总大小达到 100015 个。为了确保训练过程中的计算效率,并为未来可能需要的额外特殊词元预留空间,将模型训练时的词表大小配置为102400。
1.1.2、架构
DeepSeek LLM 的微观设计在很大程度上遵循了 LLaMA 的设计思路,采用了带有均方根归一化(RMSNorm)函数的预归一化(Pre-Norm)结构,并使用 SwiGLU 作为前馈网络(FFN)的激活函数,其中间层维度为 8 3 d m o d e l \frac{8}{3}d_{model} 38dmodel 。此外,采用旋转嵌入(RoPE)进行位置编码。为了优化推理成本,670 亿参数的模型使用了分组查询注意力机制(GQA),而非传统的多头注意力机制(MHA)。
在宏观设计方面,70 亿参数的 DeepSeek LLM 是一个 30 层的网络,670 亿参数的 DeepSeek LLM 有 95 层。与大多数使用分组查询注意力机制(GQA)的工作不同,对 670 亿参数模型参数的扩展是在网络深度上进行的,而非常见的拓宽前馈网络层的中间宽度,目的是为了获得更好的性能。
1.1.3、超参数
DeepSeek LLM 以 0.006 的标准差进行初始化,并使用 AdamW 优化器进行训练( β 1 = 0.9 \beta_1 = 0.9 β1=0.9, β 2 = 0.95 \beta_2 = 0.95 β2=0.95),权重衰减系数为0.1。
预训练过程中采用了多步学习率调度器,而非典型的余弦退火学习率调度器。模型的学习率在经过 2000 个 warmup steps 后达到最大值,在处理完 80% 的训练词元后,学习率降至最大值的 31.6%;在处理完 90% 的训练词元后,进一步降至最大值的 10%。训练阶段的梯度裁剪阈值设置为 1.0。
尽管训练过程中损失下降趋势存在差异,但使用多步学习率调度器最终获得的性能与使用余弦退火学习率调度器基本一致。在固定模型规模并调整训练规模时,多步学习率调度器允许复用第一阶段的训练成果,为持续训练提供了独特的便利。因此选择多步学习率调度器作为默认设置。
调整多步学习率调度器不同阶段的比例可以略微提升性能。然而,为了平衡持续训练中的复用率和模型性能,选择上述三个阶段分别为 80%、10% 和 10% 的比例分配。此外,batch size 和学习率会随模型规模的不同而变化。
1.1.4、基础设施
DeepSeek LLM 使用 HAI-LLM 高效轻量级训练框架来训练和评估大语言模型。该框架集成了数据并行、张量并行、序列并行和 1F1B 流水线并行。此外,利用闪存注意力机制技术来提高硬件利用率。采用 ZeRO-1 方法在数据并行进程中划分优化器状态。为了最大程度减少额外的等待开销,努力让计算和通信过程重叠,包括最后一个微批次(micro-batch)的反向传播过程以及 ZeRO-1 中的 reduce-scatter 操作,以及序列并行中的矩阵乘法(GEMM)计算和 all-gather/reduce-scatter 操作。
DeepSeek LLM 对一些层/算子进行了融合以加速训练,包括层归一化(LayerNorm)、尽可能融合的矩阵乘法,以及 Adam 优化器的更新步骤。为提高模型训练的稳定性,以 bf16 精度训练模型,以 fp32 精度累积梯度。执行原位交叉熵计算以减少 GPU 内存消耗,即在交叉熵的 CUDA 内核中动态地将 bf16 的对数几率(logits)转换为 fp32 精度(而不是事先在高带宽内存(HBM)中进行转换),计算相应的 bf16 梯度,并用梯度覆盖对数几率(logits)。
模型权重和优化器状态每 5 分钟异步保存一次,即在偶尔出现硬件或网络故障的最坏情况下,最多只会损失 5 分钟的训练进度。此外,定期清理这些临时的模型检查点,以避免占用过多的存储空间。并支持从不同的三维并行配置恢复训练,以应对计算集群负载的动态变化。
1.2、缩放定律
1.2.1、 超参数缩放定律
DeepSeek LLM 最初在计算预算为 1 0 17 10^{17} 1017 的小规模实验中对批量大小和学习率进行了网格搜索,特定模型规模(每词元 1.77 1.77 1.77 亿次浮点运算)的实验结果如下图所示。结果表明,在广泛的批量大小和学习率选择范围内,泛化误差保持稳定。由此可知,在相对宽泛的参数空间内能够实现接近最优的性能。
![](https://i-blog.csdnimg.cn/direct/1618649b3ed345c0851d149027182d83.png)
利用上述多步学习率调度器,通过复用第一阶段的训练成果,对多个具有不同批量大小、学习率以及计算预算(范围从 1 0 17 10^{17} 1017 到 2 × 1 0 19 2\times10^{19} 2×1019)的模型进行了有效训练。考虑到参数空间存在冗余,将泛化误差超过最小值不超过 0.25 0.25% 0.25 的模型所使用的参数视为接近最优的超参数。接着,针对计算预算 C C C 对批量大小 B B B 和学习率 η \eta η 进行了拟合。如下图所示,拟合结果显示,最优批量大小 B B B 随着计算预算 C C C 的增加而逐渐增大,而最优学习率 η \eta η 则逐渐减小。这与模型扩量时对批量大小和学习率的直观经验设置相符。此外,所有接近最优的超参数都落在一个较宽的区间范围内,这表明在该区间内选择接近最优的参数相对容易。最终拟合得到的批量大小和学习率公式如下:
η o p t = 0.3118 ⋅ C − 0.1250 B o p t = 0.2920 ⋅ C 0.3271 (1) \begin{array}{l} \eta_{opt}=0.3118\cdot C^{-0.1250} \\ B_{opt}=0.2920\cdot C^{0.3271} \end{array} \tag{1} ηopt=0.3118⋅C−0.1250Bopt=0.2920⋅C0.3271(1)
![](https://i-blog.csdnimg.cn/direct/6af897255a07408a866c93343fe82698.png)
DeepSeek LLM 在一系列计算预算为 1 0 20 10^{20} 1020 的模型上对这些公式进行了验证,特定模型规模(每词元 29.4 29.4 29.4 亿次浮点运算)的验证结果如上图 (b) 所示。结果表明,拟合得到的参数处于最优参数空间的中心位置。
需要注意的是,尚未考虑计算预算 C C C 之外的因素对最优超参数的影响。这与一些早期的研究成果不一致,这些研究认为最优批量大小可以建模为仅与泛化误差 L L L 相关。此外,在计算预算相同但模型/数据分配不同的模型中,最优参数空间存在细微差异。
1.2.2、估算最优模型和数据规模
在推导出用于拟合接近最优超参数的公式后,通过拟合缩放曲线分析最优的模型/数据扩量分配策略。策略旨在找到分别满足 N o p t ∝ C a N_{opt} \propto C^a Nopt∝Ca 和 D o p t ∝ C b D_{opt} \propto C^b Dopt∝Cb 的模型缩放指数 a a a 和数据缩放指数 b b b。数据规模 D D D 可以始终用数据集中的词元数量来表示。
模型规模通常用模型参数来表示,包括非嵌入层参数 N 1 N_1 N1 和完整参数 N 2 N_2 N2。计算预算 C C C 与模型/数据规模之间的关系可以近似描述为 C = 6 N D C = 6ND C=6ND,即可以用 6 N 1 6N_1 6N1 或 6 N 2 6N_2 6N2 来近似表示模型规模。
然而,由于 6 N 1 6N_1 6N1 和 6 N 2 6N_2 6N2 都没有考虑注意力操作的计算开销,并且 6 N 2 6N_2 6N2 还包含了对模型容量贡献较小的词表计算,所以在某些设置下,它们都存在显著的近似误差。
为了减少误差,引入新的模型规模表示方法:非嵌入层每词元浮点运算次数 M M M。 M M M 包含了注意力操作的计算开销,但不考虑词表计算。用 M M M 来表示模型规模时,计算预算 C C C 可以简单地表示为 C = M D C = MD C=MD。 6 N 1 6N_1 6N1、 6 N 2 6N_2 6N2 和 M M M 之间的具体差异如下列公式所示:
6 N 1 = 72 n layer d model 2 6 N 2 = 72 n layer d model 2 + 6 n vocab d model M = 72 n layer d model 2 + 12 n layer d model l seq (2) \begin{array}{rcl} 6N_1 & = & 72n_{\text{layer}}d_{\text{model}}^2 \\ 6N_2 & = & 72n_{\text{layer}}d_{\text{model}}^2 + 6n_{\text{vocab}}d_{\text{model}} \\ M & = & 72n_{\text{layer}}d_{\text{model}}^2 + 12n_{\text{layer}}d_{\text{model}}l_{\text{seq}} \end{array} \tag{2} 6N16N2M===72nlayerdmodel272nlayerdmodel2+6nvocabdmodel72nlayerdmodel2+12nlayerdmodellseq(2)
其中, n layer n_{\text{layer}} nlayer 表示层数, d model d_{\text{model}} dmodel 表示模型宽度, n vocab n_{\text{vocab}} nvocab 是词表大小, l seq l_{\text{seq}} lseq 是序列长度。如下表所示, 6 N 1 6N_1 6N1 和 6 N 2 6N_2 6N2 在不同规模的模型中都会高估或低估计算成本。这种差异在小规模模型中尤为明显,差异幅度可达 50%。在拟合缩放曲线时,这种不准确性可能会引入大量的统计误差。
![](https://i-blog.csdnimg.cn/direct/1e9308f48a7e4bcf82f36235f4fbdb22.png)
在采用 M M M 来表示模型规模后,目标可以更清晰地描述为:在给定计算预算 C = M D C = MD C=MD 的情况下,找到使模型泛化误差最小的最优模型规模 M opt M_{\text{opt}} Mopt 和数据规模 D opt D_{\text{opt}} Dopt。这一目标可以形式化表述为:
M opt ( C ) , D opt ( C ) = argmin M , D s.t. C = M D L ( N , D ) M_{\text{opt}}(C), D_{\text{opt}}(C) = \underset{M,D \text{ s.t. } C = MD}{\text{argmin}} L(N, D) Mopt(C),Dopt(C)=M,D s.t. C=MDargminL(N,D)
为降低实验成本和拟合难度,采用了来自 "Chinchilla" 模型的等浮点运算量(IsoFLOP)配置方法来拟合缩放曲线。DeepSeek LLM 选取了 8 种不同的计算预算,范围从 1 0 17 10^{17} 1017 到 3 × 1 0 20 3\times10^{20} 3×1020,并为每个预算设计了约 10 种不同的模型/数据规模分配方案。每个预算对应的超参数由公式 (1) 确定,泛化误差则在一个独立的验证集上进行计算,该验证集的数据分布与训练集相似,包含 1 亿个词元。
![](https://i-blog.csdnimg.cn/direct/6d3e5ff1dd8c4fe29fc07eb90842b4bf.png)
上图展示了等浮点运算量曲线以及模型/数据缩放曲线,这些曲线是通过针对每个计算预算采用最优的模型/数据分配方案拟合得到的。最优非嵌入层每词元浮点运算次数 M o p t M_{opt} Mopt 和最优词元数量 D o p t D_{opt} Dopt 的具体公式如下:
M o p t = M base ⋅ C a , M base = 0.1715 , a = 0.5243 D o p t = D base ⋅ C b , D base = 5.8316 , b = 0.4757 (4) \begin{array}{ll} M_{opt}=M_{\text{base}}\cdot C^{a}, & M_{\text{base}}=0.1715, \quad a=0.5243 \\ D_{opt}=D_{\text{base}}\cdot C^{b}, & D_{\text{base}}=5.8316, \quad b=0.4757 \end{array} \tag{4} Mopt=Mbase⋅Ca,Dopt=Dbase⋅Cb,Mbase=0.1715,a=0.5243Dbase=5.8316,b=0.4757(4)
此外,根据计算预算 C C C 和最优泛化误差拟合损失缩放曲线,并对 DeepSeek LLM 70 亿参数和 670 亿参数模型的泛化误差进行预测,如图所示。结果表明,利用小规模实验能够准确预测计算预算为其 1000 倍的模型的性能。
![](https://i-blog.csdnimg.cn/direct/38f6f4f54c1044d6b7bcec40b6f47cfd.png)
1.3、对齐
DeepSeek LLM 收集了约 150 万条中英文指令数据实例,涵盖了广泛的有用性和无害性相关主题。其中,有用性数据包含 120 万条实例,具体分布为:通用语言任务占 31.2%,数学问题占 46.6%,编程练习占 22.2%。安全性数据由 30 万条实例组成,涉及各类敏感主题。
1.3.1、监督微调(SFT)
DeepSeek LLM 对 70 亿参数模型进行了 4 个轮次的微调,因为 670 亿参数模型的过拟合问题较为严重,所以 670 亿参数模型仅进行了 2 个轮次的微调。70 亿参数模型和 670 亿参数模型的学习率分别为 1 0 − 5 10^{-5} 10−5 和 5 × 1 0 − 6 5\times10^{-6} 5×10−6。
除了监控基准测试的准确率外,还在微调过程中评估聊天模型的重复率。DeepSeek LLM 总共收集了 3868 条中英文提示,并确定了生成的回复中未能正常结束、而是不断重复一段文本的比例。随着数学监督微调数据量的增加,重复率往往会上升。这可能是因为数学监督微调数据偶尔会在推理过程中包含相似的模式。因此,能力较弱的模型难以掌握这些推理模式,从而导致回复出现重复。为解决这个问题,DeepSeek LLM 尝试了两阶段微调方法和直接偏好优化(DPO),这两种方法都能在基本保持基准测试得分的同时,显著降低重复率。
1.3.2、直接偏好优化(DPO)
为进一步提升模型能力,DeepSeek LLM 采用了 DPO,该算法已被证明是一种简单而有效的大语言模型对齐优化方法。DeepSeek LLM 从有用性和无害性两个方面构建了用于 DPO 训练的偏好数据。对于有用性数据,收集了多语言提示,涵盖创意写作、问答、指令遵循等类别。然后使用 DeepSeek Chat 模型生成回复,作为候选回复。构建无害性偏好数据时也采用了类似的操作。
DeepSeek LLM 对 DPO 进行了一个轮次的训练,学习率为 5 × 1 0 − 6 5\times10^{-6} 5×10−6,批量大小为 512,并使用了学习率预热和余弦退火学习率调度器。DPO 可以增强模型的开放式生成能力,而在标准基准测试中的性能提升并不明显。
2、DeepSeekMath
DeepSeekMath 发布于 2024 年 2 月,基于 DeepSeek-Coder-Base-v1.5 7B 继续进行预训练,所使用的数据包括从 Common Crawl 获取的 1200 亿与数学相关的 token,以及自然语言和代码数据。
DeepSeekMath 的数学推理能力归因于两个关键因素:其一,通过精心设计的数据筛选流程,充分挖掘了公开可用网络数据的巨大潜力。其二,引入了群组相对策略优化(GRPO),它是近端策略优化(PPO)的一种变体,在提升数学推理能力的同时,优化了 PPO 的内存使用情况。
2.1、数学预训练
2.1.1、数据收集与去污染
如图展示了一个迭代流程,即如何从一个种子语料库(例如,一个规模小但质量高的数学相关数据集)开始,系统地从 Common Crawl 收集大规模数学语料库。值得注意的是,这种方法也适用于其他领域,如编码领域。
![](https://i-blog.csdnimg.cn/direct/29ca15a5a564494bbf7761d2c812ecbb.png)
首先,选择 OpenWebMath(一个高质量数学网页文本的集合)作为最初的种子语料库。利用这个语料库,训练一个 fastText 模型,以召回更多类似 OpenWebMath 的数学网页。具体来说,从种子语料库中随机选择 50万 个数据点作为正训练示例,从 Common Crawl 中再选择 50万 个网页作为负训练示例。在数据收集中使用一个开源库进行训练,将向量维度配置为 256,学习率设置为 0.1,词 n-gram 的最大长度设为 3,词出现的最小次数设为 3,训练轮数设为 3。为了减小原始 Common Crawl 的规模,采用基于 URL 的去重和近似去重技术,最终得到 400亿 个 HTML 网页。然后,使用 fastText 模型从去重后的 Common Crawl 中召回数学网页。
为了过滤掉低质量的数学内容,根据 fastText 模型预测的分数对收集到的网页进行排序,只保留排名靠前的网页。通过对前 400亿、800亿、1200亿 和 1600亿 token 进行预训练实验来评估保留的数据量。在第一轮迭代中,选择保留前 400亿 个 token。
在第一轮数据收集之后,仍有大量数学网页未被收集,这主要是因为 fastText 模型是在一组多样性不足的正例上训练的。因此,确定了其他数学网页来源来丰富种子语料库,以便优化 fastText 模型。具体来说,首先将整个 Common Crawl 组织成不相交的域;一个域被定义为共享相同基础 URL 的网页集合。对于每个域,计算在第一轮迭代中被收集的网页的百分比。超过 10% 的网页被收集的域被归类为与数学相关(例如,mathoverflow.net)。随后,手动标注这些已识别域内与数学内容相关的 URL(例如,mathoverflow.net/questions)。与这些 URL 链接但尚未收集的网页将被添加到种子语料库中。这种方法能够收集更多正例,从而训练出一个改进的 fastText 模型,该模型能够在后续迭代中召回更多数学数据。经过四轮数据收集,最终得到 3550万 个数学网页,总计 1200亿 个 token。在第四轮迭代中,注意到近 98% 的数据在第三轮迭代中已经被收集,所以决定停止数据收集。
为避免基准测试污染,从英语数学基准测试(如 GSM8K 和 MATH)以及中文基准测试(如 CMATH 和 AGIEval)中过滤掉包含问题或答案的网页。过滤标准如下:任何文本段中若包含一个 10-gram 字符串,且该字符串与评估基准测试中的任何子字符串完全匹配,则将其从数学训练语料库中移除。对于长度小于 10-gram 但至少有 3-gram 的基准测试文本,采用精确匹配来过滤掉受污染的网页。
2.1.2、训练设置
DeepSeekMath 对一个具有 13亿 参数的通用预训练语言模型进行数学训练,该模型与 DeepSeek LLM 采用相同框架,记为 DeepSeek LLM 1.3B。在每个数学语料库上分别对模型进行 1500亿 token 的训练。所有实验均使用高效轻量的 HAI-LLM 训练框架进行。遵循 DeepSeek LLM 的训练实践,使用 AdamW 优化器,其中 β 1 = 0.9 , β 2 = 0.95 \beta_{1} = 0.9,\beta_{2} = 0.95 β1=0.9,β2=0.95,权重衰减系数 KaTeX parse error: Expected 'EOF', got '_' at position 13: \text{weight_̲decay} = 0.1,同时采用多步学习率调度策略:学习率在经过 2000 步 warmup steps 后达到峰值,在训练进程的 80% 时降至峰值的 31.6%,在训练进程的 90% 时进一步降至峰值的 10.0%。将学习率的最大值设为 5.3e-4,并使用 batch siz 为 400万 个 token,上下文长度为 4000 的训练设置。
2.2、监督式微调
DeepSeekMath 构建了一个数学指令微调数据集,涵盖来自不同数学领域、具有不同复杂程度的中英文数学问题。这些问题与以思维链(CoT)、程序思维(PoT)以及工具集成推理格式呈现的解决方案一一配对。训练示例总数为 77.6万 个。
- 英文数学数据集:为 GSM8K 和 MATH 问题标注了工具集成解决方案,并采用了 MathInstruct 的一个子集,以及 Lila-OOD 的训练集,其中的问题通过思维链(CoT)或程序思维(PoT)解决。英文数据集涵盖了数学的多个领域,如代数、概率、数论、微积分和几何
- 中文数学数据集:收集了涵盖 76 个子主题(如线性方程)的中国 K-12 阶段数学问题,并以思维链(CoT)和工具集成推理格式对解决方案进行了标注
2.3、群组相对策略优化
2.3.1、从 PPO 到 GRPO
近端策略优化(PPO)是一种基于 演员-评论家(actor-critic)
的强化学习算法,广泛应用于大语言模型的强化学习微调阶段。具体而言,它通过最大化以下替代目标来优化大语言模型:
J P P O ( θ ) = E [ q ∼ P ( Q ) , o ∼ π θ o l d ( O ∣ q ) ] 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ min [ π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) A t , clip ( π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) , 1 − ε , 1 + ε ) A t ] (1) \mathcal{J}{PPO}(\theta) = \mathbb{E}[q \sim P(Q), o \sim \pi{\theta_{old}}(O|q)] \frac{1}{|o|} \sum_{t = 1}^{|o|} \min \left[ \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t, \text{clip} \left( \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}, 1 - \varepsilon, 1 + \varepsilon \right) A_t \right] \tag{1} JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣min[πθold(ot∣q,o<t)πθ(ot∣q,o<t)At,clip(πθold(ot∣q,o<t)πθ(ot∣q,o<t),1−ε,1+ε)At](1)
其中:
- π θ \pi_{\theta} πθ 和 π θ o l d \pi_{\theta_{old}} πθold 分别是当前和旧的策略模型, q q q、 o o o 分别是从问题数据集和旧策略 π θ o l d \pi_{\theta_{old}} πθold 中采样得到的问题和输出
- ε \varepsilon ε 是 PPO 中引入的与裁剪相关的超参数,用于稳定训练
- A t A_t At 是优势值,通过应用广义优势估计(GAE),基于奖励 { r ≥ t } \{r_{\geq t}\} {r≥t} 和学习到的价值函数 V ψ V_{\psi} Vψ 计算得出
因此,在 PPO 中,价值函数需要与策略模型一同训练,并且为了减轻奖励模型的过度优化,标准方法是在每个 token 的奖励中添加来自参考模型的每个 token 的 KL 散度惩罚项,即:
r t = r φ ( q , o ≤ t ) − β log π θ ( o t ∣ q , o < t ) π r e f ( o t ∣ q , o < t ) (2) r_t = r_{\varphi}(q, o_{\leq t}) - \beta \log \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{ref}(o_t|q, o_{<t})} \tag{2} rt=rφ(q,o≤t)−βlogπref(ot∣q,o<t)πθ(ot∣q,o<t)(2)
其中, r φ r_{\varphi} rφ 是奖励模型, π r e f \pi_{ref} πref 是参考模型,通常是初始的监督微调模型, β \beta β 是 KL 散度惩罚项的系数。
由于 PPO 中使用的价值函数通常是与策略模型规模相当的另一个模型,这带来了巨大的内存和计算负担。此外,在强化学习训练期间,价值函数在优势值计算中被用作基线以减少方差。然而,在大语言模型的情境中,通常只有最后一个 token 由奖励模型赋予奖励分数,这可能会使在每个 token 上都准确的价值函数的训练变得复杂。
为了解决这些问题,如图所示,DeepSeekMath 提出了组相对策略优化(GRPO),它无需像 PPO 那样进行额外的价值函数近似,而是使用针对同一问题生成的多个采样输出的平均奖励作为基线。
![](https://i-blog.csdnimg.cn/direct/ef050800fe2647d8b6995f556ea27106.png)
更具体地说,对于每个问题 q q q,GRPO 从旧策略 π θ o l d \pi_{\theta_{old}} πθold 中采样一组输出 o 1 , o 2 , ⋯ , o G \\{o_1, o_2, \cdots, o_G\\} o1,o2,⋯,oG,然后通过最大化以下目标来优化策略模型:
J G R P O ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ o l d ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min [ π θ ( o i , t ∣ q , o i , < t ) π θ o l d ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ ( o i , t ∣ q , o i , < t ) π θ o l d ( o i , t ∣ q , o i , < t ) , 1 − ε , 1 + ε ) A ^ i , t ] − β D K L [ π θ ∣ ∣ π r e f ] } \begin{align*} \mathcal{J}{GRPO}(\theta) &= \mathbb{E}[q \sim P(Q), \{o_i\}{i = 1}^{G} \sim \pi_{\theta_{old}}(O|q)] \\ & \frac{1}{G} \sum_{i = 1}^{G} \frac{1}{|o_i|} \sum_{t = 1}^{|o_i|} \left\{ \min \left[ \frac{\pi_{\theta}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})} \hat{A}{i,t}, \text{clip} \left( \frac{\pi{\theta}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})}, 1 - \varepsilon, 1 + \varepsilon \right) \hat{A}{i,t} \right] - \beta \text{D}{KL}[\pi_{\theta} || \pi_{ref}] \right\} \tag{3} \end{align*} JGRPO(θ)=E[q∼P(Q),{oi}i=1G∼πθold(O∣q)]G1i=1∑G∣oi∣1t=1∑∣oi∣{min[πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)A^i,t,clip(πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t),1−ε,1+ε)A^i,t]−βDKL[πθ∣∣πref]}(3)
其中, ε \varepsilon ε 和 β \beta β 是超参数, A ^ i , t \hat{A}_{i,t} A^i,t 是仅基于每组内输出的相对奖励计算得到的优势值,将在以下小节中详细介绍。GRPO 利用组相对的方式计算优势值,这与奖励模型的比较性质非常契合,因为奖励模型通常是在关于同一问题的输出之间的比较数据集上进行训练的。
还需注意的是,GRPO 不是在奖励中添加 KL 散度惩罚项,而是通过直接将训练后的策略与参考策略之间的 KL 散度添加到损失中来进行正则化,避免了使 A ^ i , t \hat{A}_{i,t} A^i,t 的计算复杂化。并且与 公式(2) 中使用的 KL 散度惩罚项不同,DeepSeekMath 使用以下无偏估计器来估计 KL 散度:
D K L [ π θ ∣ ∣ π r e f ] = π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − log π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − 1 (4) \mathbb{D}{KL}[\pi{\theta} || \pi_{ref}] = \frac{\pi_{ref}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta}(o_{i,t}|q, o_{i,<t})} - \log \frac{\pi_{ref}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta}(o_{i,t}|q, o_{i,<t})} - 1 \tag{4} DKL[πθ∣∣πref]=πθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t)−logπθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t)−1(4)
该估计器保证为正值。
2.3.2、采用 GRPO 的结果监督强化学习
具体而言,对于每个问题 q q q,从旧策略模型 π θ o l d \pi_{\theta_{old}} πθold 中采样一组输出 o 1 , o 2 , ⋯ , o G \\{o_1, o_2, \cdots, o_G\\} o1,o2,⋯,oG。然后使用奖励模型对这些输出进行评分,相应地得到 G G G 个奖励 r = r 1 , r 2 , ⋯ , r G r = \\{r_1, r_2, \cdots, r_G\\} r=r1,r2,⋯,rG 。
随后,通过减去组平均奖励并除以组标准差来对这些奖励进行归一化处理。结果监督在每个输出 o i o_i oi 的末尾提供归一化后的奖励,并将输出中所有标记的优势值 A ^ i , t \hat{A}_{i,t} A^i,t 设置为归一化后的奖励。
即:
A ^ i , t = r ^ i = r i − mean ( r ) std ( r ) \hat{A}_{i,t} = \hat{r}_i = \frac{r_i - \text{mean}(r)}{\text{std}(r)} A^i,t=r^i=std(r)ri−mean(r)
然后通过最大化公式 (3) 中定义的目标来优化策略。
2.3.3、采用 GRPO 的过程监督强化学习
结果监督仅在每个输出的末尾提供奖励,这对于复杂数学任务中的策略监督而言,可能不够充分和高效。因此 DeepSeekMath 还探索了过程监督,即在每个推理步骤的末尾都提供奖励。具体来说,给定问题 q q q 以及 G G G 个采样输出 o 1 , o 2 , ⋯ , o G \\{o_1, o_2, \cdots, o_G\\} o1,o2,⋯,oG,使用过程奖励模型对输出的每个步骤进行评分,从而得到相应的奖励:
R = { { r i n d e x ( 1 ) 1 , ⋯ , r i n d e x ( K 1 ) 1 } , ⋯ , { r i n d e x ( 1 ) G , ⋯ , r i n d e x ( K G ) G } \mathbf{R} = \{\{r_{index(1)}^1, \cdots, r_{index(K_1)}^1\}, \cdots, \{r_{index(1)}^G, \cdots, r_{index(K_G)}^G\} R={{rindex(1)1,⋯,rindex(K1)1},⋯,{rindex(1)G,⋯,rindex(KG)G}
其中 i n d e x ( j ) index(j) index(j) 是第 j j j 步的结束标记索引, K i K_i Ki 是第 i i i 个输出中的总步数。DeepSeekMath 同样通过均值和标准差对这些奖励进行归一化处理,即:
r ^ i n d e x ( j ) i = r i n d e x ( j ) i − mean ( R ) std ( R ) \hat{r}{index(j)}^i = \frac{r{index(j)}^i - \text{mean}(\mathbf{R})}{\text{std}(\mathbf{R})} r^index(j)i=std(R)rindex(j)i−mean(R)
随后,过程监督将每个标记的优势计算为后续步骤归一化奖励的总和,即:
A ^ i , t = ∑ i n d e x ( j ) ≥ t r ^ i n d e x ( j ) i \hat{A}{i,t} = \sum{index(j) \geq t} \hat{r}_{index(j)}^i A^i,t=index(j)≥t∑r^index(j)i
然后通过最大化公式(3)中定义的目标来优化策略。
2.3.4、采用 GRPO 的迭代强化学习
随着强化学习训练过程的推进,旧的奖励模型可能不足以监督当前的策略模型。因此,DeepSeekMath 还探索了基于组相对策略优化(GRPO)的迭代强化学习。如下算法所示,在迭代 GRPO 中,根据策略模型的采样结果为奖励模型生成新的训练集,并使用一种纳入 10% 历史数据的回放机制持续训练旧的奖励模型。然后,将参考模型设置为策略模型,并使用新的奖励模型持续训练策略模型。
![](https://i-blog.csdnimg.cn/direct/d44e33c64f964480af4a2a4db86cac8b.png)
2.4、强化学习的见解
2.4.1、走向统一范式
在本节中提供了一个统一的范式来分析不同的训练方法,如监督微调(SFT)、拒绝采样微调(RFT)、直接偏好优化(DPO)、近端策略优化(PPO)、组相对策略优化(GRPO),并进一步通过实验探究该统一范式的相关因素。一般来说,某种训练方法关于参数 θ \theta θ 的梯度可以写成:
∇ θ J A ( θ ) = E [ ( q , o ) ∼ D ⏟ Data source ] [ 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ G C A ( q , o , t , π r f ) ⏟ Gradient Coefficient ∇ θ log π θ ( o t ∣ q , o < t ) ] (5) \nabla_{\theta} \mathcal{J}\mathcal{A}(\theta) = \mathbb{E}{[\underbrace{(q, o)\sim\mathcal{D}}{\text{Data source}}]} \left[ \frac{1}{|o|} \sum{t = 1}^{|o|} \underbrace{G C_{\mathcal{A}}\left(q, o, t,\pi_{r f}\right)}{\text{Gradient Coefficient}} \nabla{\theta} \log \pi_{\theta}(o_t | q, o_{<t}) \right] \tag{5} ∇θJA(θ)=E[Data source (q,o)∼D] ∣o∣1t=1∑∣o∣Gradient Coefficient GCA(q,o,t,πrf)∇θlogπθ(ot∣q,o<t) (5)
其中存在三个关键组成部分:
- 数据源 D \mathcal{D} D 决定了训练数据
- 奖励函数 π r f \pi_{rf} πrf 是训练奖励信号的来源
- 算法 A \mathcal{A} A 将训练数据和奖励信号处理为梯度系数 G C G C GC,该系数决定了对数据的惩罚或强化程度
基于这个统一范式分析几种有代表性的方法:
- 监督微调(SFT):SFT 在人类挑选的 SFT 数据上对预训练模型进行微调
- 拒绝采样微调(RFT):RFT 基于 SFT 问题,从 SFT 模型采样的输出中筛选出数据,进一步对 SFT 模型进行微调。RFT 根据答案的正确性来筛选输出
- 直接偏好优化(DPO):DPO 通过使用成对 DPO 损失,在从 SFT 模型采样的增强输出上对 SFT 模型进行微调,进一步优化 SFT 模型
- 在线拒绝采样微调(Online RFT):与 RFT 不同,Online RFT 使用 SFT 模型初始化策略模型,并通过对从实时策略模型采样的增强输出进行微调来优化策略模型
- PPO/GRPO:PPO/GRPO 使用 SFT 模型初始化策略模型,并利用从实时策略模型采样的输出对其进行强化
下表中总结了这些方法的组成部分:
![](https://i-blog.csdnimg.cn/direct/457b1316133a4a59829408fa14649057.png)
更详细的推导过程:
1、监督微调(SFT)
监督微调的目标是最大化以下目标函数:
J S F T ( θ ) = E [ q , o ∼ P s f t ( Q , O ) ] ( 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ log π θ ( o t ∣ q , o < t ) ) . (6) \mathcal{J}{SFT}(\theta) = \mathbb{E}\left[q, o \sim P{sft}(Q, O)\right]\left(\frac{1}{|o|}\sum_{t = 1}^{|o|}\log\pi_{\theta}(o_t | q, o_{<t})\right). \tag{6} JSFT(θ)=E[q,o∼Psft(Q,O)] ∣o∣1t=1∑∣o∣logπθ(ot∣q,o<t) .(6)
J S F T ( θ ) \mathcal{J}_{SFT}(\theta) JSFT(θ) 的梯度为:
∇ θ J S F T = E [ q , o ∼ P s f t ( Q , O ) ] ( 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ ∇ θ log π θ ( o t ∣ q , o < t ) ) . (7) \nabla_{\theta}\mathcal{J}{SFT} = \mathbb{E}\left[q, o \sim P{sft}(Q, O)\right]\left(\frac{1}{|o|}\sum_{t = 1}^{|o|}\nabla_{\theta}\log\pi_{\theta}(o_t | q, o_{<t})\right). \tag{7} ∇θJSFT=E[q,o∼Psft(Q,O)] ∣o∣1t=1∑∣o∣∇θlogπθ(ot∣q,o<t) .(7)
数据源:用于监督微调(SFT)的数据集。奖励函数:可视为人工选择。梯度系数:始终设为 1。
2、拒绝采样微调(RFT)
拒绝采样微调首先针对每个问题从经过监督微调的大语言模型(LLMs)中采样多个输出,然后使用正确答案在这些采样输出上对大语言模型进行训练。
形式上,拒绝采样微调(RFT)的目标是最大化以下目标函数:
J R F T ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π s f t ( O ∣ q ) ] ( 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ I ( o ) log π θ ( o t ∣ q , o < t ) ) . (8) \mathcal{J}{RFT}(\theta) = \mathbb{E}\left[q \sim P{sft}(Q), o \sim \pi_{sft}(O|q)\right]\left(\frac{1}{|o|}\sum_{t = 1}^{|o|}\mathbb{I}(o)\log\pi_{\theta}(o_t | q, o_{<t})\right). \tag{8} JRFT(θ)=E[q∼Psft(Q),o∼πsft(O∣q)] ∣o∣1t=1∑∣o∣I(o)logπθ(ot∣q,o<t) .(8)
J R F T ( θ ) \mathcal{J}_{RFT}(\theta) JRFT(θ) 的梯度为:
∇ θ J R F T ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π s f t ( O ∣ q ) ] ( 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ I ( o ) ∇ θ log π θ ( o t ∣ q , o < t ) ) . (9) \nabla_{\theta}\mathcal{J}{RFT}(\theta) = \mathbb{E}\left[q \sim P{sft}(Q), o \sim \pi_{sft}(O|q)\right]\left(\frac{1}{|o|}\sum_{t = 1}^{|o|}\mathbb{I}(o)\nabla_{\theta}\log\pi_{\theta}(o_t | q, o_{<t})\right). \tag{9} ∇θJRFT(θ)=E[q∼Psft(Q),o∼πsft(O∣q)] ∣o∣1t=1∑∣o∣I(o)∇θlogπθ(ot∣q,o<t) .(9)
数据源:监督微调(SFT)数据集中的 question,输出来自 SFT 模型的采样。奖励函数:规则(答案是否正确)。梯度系数:
G C R F T ( q , o , t ) = I ( o ) = { 1 , the answer of o is correct 0 , the answer of o is incorrect (10) GC_{RFT}(q, o, t) = \mathbb{I}(o) = \begin{cases} 1, & \text{ the answer of o is correct} \\ 0, & \text{ the answer of o is incorrect} \end{cases} \tag{10} GCRFT(q,o,t)=I(o)={1,0, the answer of o is correct the answer of o is incorrect(10)
3、在线拒绝采样微调(OnRFT)
拒绝采样微调(RFT)与在线拒绝采样微调之间唯一的区别在于,在线拒绝采样微调的输出是从实时策略模型 π θ \pi_{\theta} πθ 中采样得到,而非从监督微调(SFT)模型 π θ s f t \pi_{\theta_{sft}} πθsft 获取。因此,在线拒绝采样微调的梯度为:
∇ θ J O n R F T ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π θ ( O ∣ q ) ] ( 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ I ( o ) ∇ θ log π θ ( o t ∣ q , o < t ) ) . (11) \nabla_{\theta}\mathcal{J}{OnRFT}(\theta) = \mathbb{E}[q \sim P{sft}(Q), o \sim \pi_{\theta}(O|q)]\left(\frac{1}{|o|}\sum_{t = 1}^{|o|}\mathbb{I}(o)\nabla_{\theta}\log\pi_{\theta}(o_t | q, o_{<t})\right). \tag{11} ∇θJOnRFT(θ)=E[q∼Psft(Q),o∼πθ(O∣q)] ∣o∣1t=1∑∣o∣I(o)∇θlogπθ(ot∣q,o<t) .(11)
4、直接偏好优化(DPO)
DPO 的目标为:
J D P O ( θ ) = E [ q ∼ P s f t ( Q ) , o + , o − ∼ π s f t ( O ∣ q ) ] log σ ( β 1 ∣ o + ∣ ∑ t = 1 ∣ o + ∣ log π θ ( o t + ∣ q , o < t + ) π r e f ( o t + ∣ q , o < t + ) − β 1 ∣ o − ∣ ∑ t = 1 ∣ o − ∣ log π θ ( o t − ∣ q , o < t − ) π r e f ( o t − ∣ q , o < t − ) ) \begin{align*} \mathcal{J}{DPO}(\theta) = \mathbb{E}[q \sim P{sft}(Q), o^+, o^- \sim \pi_{sft}(O|q)] \log \sigma & \left( \beta \frac{1}{|o^+|} \sum_{t = 1}^{|o^+|} \log \frac{\pi_{\theta}(o^+t|q, o^+{<t})}{\pi_{ref}(o^+t|q, o^+{<t})}\right. \\ &\left. - \beta \frac{1}{|o^-|} \sum_{t = 1}^{|o^-|} \log \frac{\pi_{\theta}(o^-t|q, o^-{<t})}{\pi_{ref}(o^-t|q, o^-{<t})} \right) \tag{12} \end{align*} JDPO(θ)=E[q∼Psft(Q),o+,o−∼πsft(O∣q)]logσ β∣o+∣1t=1∑∣o+∣logπref(ot+∣q,o<t+)πθ(ot+∣q,o<t+)−β∣o−∣1t=1∑∣o−∣logπref(ot−∣q,o<t−)πθ(ot−∣q,o<t−) (12)
J D P O ( θ ) \mathcal{J}_{DPO}(\theta) JDPO(θ) 的梯度为:
∇ θ J D P O ( θ ) = E [ q ∼ P s f t ( Q ) , o + , o − ∼ π s f t ( O ∣ q ) ] ( 1 ∣ o + ∣ ∑ t = 1 ∣ o + ∣ G C D P O ( q , o , t ) ∇ θ log π θ ( o t + ∣ q , o < t + ) − 1 ∣ o − ∣ ∑ t = 1 ∣ o − ∣ G C D P O ( q , o , t ) ∇ θ log π θ ( o t − ∣ q , o < t − ) ) \begin{align*} \nabla_{\theta}\mathcal{J}{D P O}(\theta)=\mathbb{E}\left[q\sim P{s f t}(Q), o^{+}, o^{-}\sim\pi_{s f t}(O\mid q)\right]&\left(\frac{1}{\left|o^{+}\right|}\sum_{t=1}^{\left|o^{+}\right|} G C_{D P O}(q, o, t)\nabla_{\theta}\log\pi_{\theta}\left(o_{t}^{+}\mid q, o_{<t}^{+}\right)\right.\\ &\left.-\frac{1}{\left|o^{-}\right|}\sum_{t=1}^{\left|o^{-}\right|} G C_{D P O}(q, o, t)\nabla_{\theta}\log\pi_{\theta}\left(o_{t}^{-}\mid q, o_{<t}^{-}\right)\right) \end{align*} ∇θJDPO(θ)=E[q∼Psft(Q),o+,o−∼πsft(O∣q)] ∣o+∣1t=1∑∣o+∣GCDPO(q,o,t)∇θlogπθ(ot+∣q,o<t+)−∣o−∣1t=1∑∣o−∣GCDPO(q,o,t)∇θlogπθ(ot−∣q,o<t−)
数据源:来自监督微调(SFT)数据集中的 question,其输出从 SFT 模型中采样得到。奖励函数:一般领域中的人类偏好(在数学任务中可以是 "规则")。梯度系数:
G C D P O ( q , o , t ) = σ ( β log π θ ( o t − ∣ q , o < t − ) π r e f ( o t − ∣ q , o < t − ) − β log π θ ( o t + ∣ q , o < t + ) π r e f ( o t + ∣ q , o < t + ) ) (14) GC_{DPO}(q, o, t) = \sigma \left( \beta \log \frac{\pi_{\theta}(o^-t|q, o^-{<t})}{\pi_{ref}(o^-t|q, o^-{<t})} - \beta \log \frac{\pi_{\theta}(o^+t|q, o^+{<t})}{\pi_{ref}(o^+t|q, o^+{<t})} \right) \tag{14} GCDPO(q,o,t)=σ(βlogπref(ot−∣q,o<t−)πθ(ot−∣q,o<t−)−βlogπref(ot+∣q,o<t+)πθ(ot+∣q,o<t+))(14)
5、近端策略优化(PPO)
PPO 的目标为:
J P P O ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π θ o l d ( O ∣ q ) ] 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ min [ π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) A t , clip ( π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) , 1 − ε , 1 + ε ) A t ] (15) \mathcal{J}{PPO}(\theta)=\mathbb{E}[q \sim P{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)]\frac{1}{|o|}\sum_{t = 1}^{|o|}\min\left[\frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}A_t, \text{clip}\left(\frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}, 1 - \varepsilon, 1 + \varepsilon\right)A_t\right] \tag{15} JPPO(θ)=E[q∼Psft(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣min[πθold(ot∣q,o<t)πθ(ot∣q,o<t)At,clip(πθold(ot∣q,o<t)πθ(ot∣q,o<t),1−ε,1+ε)At](15)
为简化分析,假设模型在每个探索阶段之后仅进行一次更新,从而确保 π θ o l d = π θ \pi_{\theta_{old}} = \pi_{\theta} πθold=πθ。在这种情况下,可以去掉 min 和 clip 操作:
J P P O ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π θ o l d ( O ∣ q ) ] 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) A t (16) \mathcal{J}{PPO}(\theta)=\mathbb{E}[q \sim P{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)]\frac{1}{|o|}\sum_{t = 1}^{|o|}\frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}A_t \tag{16} JPPO(θ)=E[q∼Psft(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣πθold(ot∣q,o<t)πθ(ot∣q,o<t)At(16)
J P P O ( θ ) \mathcal{J}_{PPO}(\theta) JPPO(θ) 的梯度为:
∇ θ J P P O ( θ ) = E [ q ∼ P s f t ( Q ) , o ∼ π θ o l d ( O ∣ q ) ] 1 ∣ o ∣ ∑ t = 1 ∣ o ∣ A t ∇ θ log π θ ( o t ∣ q , o < t ) (17) \nabla_{\theta}\mathcal{J}{PPO}(\theta)=\mathbb{E}[q \sim P{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)]\frac{1}{|o|}\sum_{t = 1}^{|o|}A_t\nabla_{\theta}\log\pi_{\theta}(o_t|q, o_{<t}) \tag{17} ∇θJPPO(θ)=E[q∼Psft(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣At∇θlogπθ(ot∣q,o<t)(17)
数据源:来自监督微调(SFT)数据集中的 question,其输出从策略模型中采样得到。奖励函数:奖励模型。梯度系数:
G C P P O ( q , o , t , π θ r m ) = A t (18) GC_{PPO}(q, o, t, \pi_{\theta_{rm}})=A_t \tag{18} GCPPO(q,o,t,πθrm)=At(18)
其中 A t A_t At 是优势值,通过应用广义优势估计(GAE),基于奖励 { r ≥ t } \{r_{\geq t}\} {r≥t} 和一个学习到的价值函数 V ψ V_{\psi} Vψ 计算得出的。
6、群组相对策略优化(GRPO)
GRPO 的目标(为简化分析,假设 π θ o l d = π θ \pi_{\theta_{old}} = \pi_{\theta} πθold=πθ)为:
J G R P O ( θ ) = E [ q ∼ P s f t ( Q ) , { o i } i = 1 G ∼ π θ o l d ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ [ π θ ( o i , t ∣ q , o i , < t ) π θ o l d ( o i , t ∣ q , o i , < t ) A ^ i , t − β ( π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − log π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − 1 ) ] \begin{align*} \mathcal{J}{G R P O}(\theta)=&\mathbb{E}\left[q\sim P{s f t}(Q),\left\{o_i\right\}{i=1}^G\sim\pi{\theta_{o l d}}(O\mid q)\right]\\ &\frac{1}{G}\sum_{i=1}^G\frac{1}{\left|o_i\right|}\sum_{t=1}^{\left|o_i\right|}\left[\frac{\pi_\theta\left(o_{i, t}\mid q, o_{i,<t}\right)}{\pi_{\theta_{o l d}}\left(o_{i, t}\mid q, o_{i,<t}\right)}\hat{A}{i, t}-\beta\left(\frac{\pi{r e f}\left(o_{i, t}\mid q, o_{i,<t}\right)}{\pi_\theta\left(o_{i, t}\mid q, o_{i,<t}\right)}-\log\frac{\pi_{r e f}\left(o_{i, t}\mid q, o_{i,<t}\right)}{\pi_\theta\left(o_{i, t}\mid q, o_{i,<t}\right)}-1\right)\right] \tag{19} \end{align*} JGRPO(θ)=E[q∼Psft(Q),{oi}i=1G∼πθold(O∣q)]G1i=1∑G∣oi∣1t=1∑∣oi∣[πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)A^i,t−β(πθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t)−logπθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t)−1)](19)
J G R P O ( θ ) J_{GRPO}(\theta) JGRPO(θ) 的梯度为:
∇ θ J G R P O ( θ ) = E [ q ∼ P s f t ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ [ A ^ i , t + β ( π r e f ( o i , t ∣ o i , < t ) π θ ( o i , t ∣ o i , < t ) − 1 ) ] ∇ θ log π θ ( o i , t ∣ q , o i , < t ) . \begin{align*} \nabla_{\theta}\mathcal{J}{G R P O}(\theta)=& \mathbb{E}\left[q\sim P{s f t}(Q),\left\{o_{i}\right\}{i=1}^{G}\sim\pi{\theta_{\text{old}}}(O\mid q)\right]\\ &\frac{1}{G}\sum_{i=1}^{G}\frac{1}{\left|o_{i}\right|}\sum_{t=1}^{\left|o_{i}\right|}\left[\hat{A}{i, t}+\beta\left(\frac{\pi{r e f}\left(o_{i, t}\mid o_{i,<t}\right)}{\pi_{\theta}\left(o_{i, t}\mid o_{i,<t}\right)}-1\right)\right]\nabla_{\theta}\log\pi_{\theta}\left(o_{i, t}\mid q, o_{i,<t}\right). \tag{20} \end{align*} ∇θJGRPO(θ)=E[q∼Psft(Q),{oi}i=1G∼πθold(O∣q)]G1i=1∑G∣oi∣1t=1∑∣oi∣[A^i,t+β(πθ(oi,t∣oi,<t)πref(oi,t∣oi,<t)−1)]∇θlogπθ(oi,t∣q,oi,<t).(20)
数据源:来自监督微调(SFT)数据集中的问题,其输出从策略模型中采样得到。奖励函数:奖励模型。梯度系数:
G C G R P O ( q , o , t , π θ r m ) = A ^ i , t + β ( π r e f ( o i , t ∣ o i , < t ) π θ ( o i , t ∣ o i , < t ) − 1 ) (21) GC_{GRPO}(q, o, t, \pi_{\theta_{rm}})=\hat{A}{i,t}+\beta\left(\frac{\pi{ref}(o_{i,t}|o_{i,<t})}{\pi_{\theta}(o_{i,t}|o_{i,<t})}-1\right) \tag{21} GCGRPO(q,o,t,πθrm)=A^i,t+β(πθ(oi,t∣oi,<t)πref(oi,t∣oi,<t)−1)(21)
其中 A ^ i , t \hat{A}_{i,t} A^i,t 是基于分组奖励分数计算得出的。
1、关于数据源的观察
将数据源分为两类,在线采样和离线采样。在线采样意味着训练数据来自实时训练策略模型的探索结果,而离线采样表示训练数据来自初始 SFT 模型的采样结果。RFT 和 DPO 采用离线方式,而 Online RFT 和 GRPO 采用在线方式。
如图所示,在两个基准测试中,Online RFT 的表现显著优于 RFT。具体而言,在训练早期,Online RFT 与 RFT 表现相近,但在后期获得了绝对优势,这表明了在线训练的优越性。这是可以理解的,因为在初始阶段,策略模型(actor)与 SFT 模型非常相似,采样数据的差异很小。然而,在后期,从策略模型采样的数据将表现出更显著的差异,实时数据采样将具有更大的优势。
![](https://i-blog.csdnimg.cn/direct/c854310f2b9047f38016114868a8c945.png)
2、关于梯度系数的观察
算法将奖励信号处理为梯度系数以更新模型参数。DeepSeekMath 将奖励函数分为 "规则(Rule)" 和 "模型(Model)" 两类。"规则" 是指根据答案的正确性来判断响应的质量,"模型" 表示训练一个奖励模型来为每个响应打分。奖励模型的训练数据基于规则判断。公式(10)和(21)突出了 GRPO 和 Online RFT 之间的一个关键区别:GRPO 根据奖励模型提供的奖励值独特地调整其梯度系数。这允许根据响应的不同大小进行差异化的强化和惩罚。相比之下,Online RFT 缺乏此功能;它不对错误响应进行惩罚,并且对所有答案正确的响应以相同强度进行统一强化。
如图所示,GRPO 超过了 Online RFT,从而突出了改变正负梯度系数的有效性。此外,GRPO + PS 比 GRPO + OS 表现更优,这表明了使用细粒度、步骤感知的梯度系数的好处。此外,DeepSeekMath 还探索了迭代强化学习,在实验中进行了两轮迭代。如图,迭代强化学习显著提高了性能,尤其是在第一次迭代时。
![](https://i-blog.csdnimg.cn/direct/073fb57067e14b5396178dfb6a9656e3.png)
2.4.2、为什么 RL 有效?
DeepSeekMath 基于指令微调数据的一个子集进行强化学习,这使得指令微调模型的性能得到显著提升。为进一步解释强化学习为何有效,DeepSeekMath 在两个基准测试上评估了指令模型(Instruct)和强化学习模型(RL)的K次通过率(Pass@K)和K次多数投票准确率(Maj@K)。如图所示,强化学习提升了 Maj@K 的性能,但未提升 Pass@K。这些发现表明,强化学习通过使输出分布更稳健来提升模型的整体性能,换言之,这种提升似乎源于提高 TopK 中的正确响应,而非模型基础能力的增强。类似研究发现监督微调(SFT)模型在推理任务中的不一致问题,表明通过一系列偏好对齐策略,SFT 模型的推理性能能够得到改善。
![](https://i-blog.csdnimg.cn/direct/b6a3e564008043aab8a4cfe642f08751.png)
2.4.3、如何实现更有效的 RL?
DeepSeekMath 展示了强化学习(RL)在数学推理任务中表现得相当不错,并还提供了一个统一的范式来理解不同的代表性训练方法。在这个范式中,所有方法都被概念化为直接的或简化的强化学习技术。如公式(5)所总结的,存在三个关键组件:数据源、算法和奖励函数。
2.4.3.1、数据源
数据源是所有训练方法的原材料。在强化学习的背景下,特别指数据源为未标注的问题,输出是从策略模型中采样的。在 DeepSeekMath 只使用了来自指令调优阶段的问题,并采用了朴素的核采样来采样输出。这可能是 DeepSeekMath 的强化学习管道仅在 Maj@K 表现上有所提高的潜在原因。未来将探索在分布外问题提示上应用强化学习管道,并结合基于树搜索方法的高级采样(解码)策略。此外,决定策略模型探索效率的高效推理技术也起着至关重要的作用。
2.4.3.2、算法
算法处理数据和奖励信号,通过梯度系数来更新模型参数。基于公式(5),从某种程度上讲,所有方法现在完全信任奖励函数的信号来增加或减少某个 token 的条件概率。然而,无法保证奖励信号始终可靠,尤其是在极其复杂的任务中。例如,即使是经过精心标注的 PRM800K 数据集,其中也仍然包含大约 20% 的错误标注。为此将探索对噪声奖励信号具有鲁棒性的强化学习算法,这种弱到强的对齐方法将对学习算法带来根本性的变化。
2.4.3.3、奖励函数
奖励函数是训练信号的来源。在强化学习中,奖励函数通常是神经奖励模型。奖励模型存在三个重要的方向:
- 如何增强奖励模型的泛化能力。奖励模型必须有效地泛化,以处理分布外问题和高级解码输出;否则,强化学习可能只是稳定 LLMs 的分布,而不是提高其基本能力
- 如何反映奖励模型的不确定性。不确定性可能作为弱奖励模型和弱到强学习算法之间的桥梁
- 如何高效地构建高质量的过程奖励模型,能够为推理过程提供细粒度的训练信号
参考文献
- DeepSeek LLM Scaling Open-Source Language Models with Longtermism
- DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
- DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
- YaRN: Efficient Context Window Extension of Large Language Models
- DeepSeek-V3 Technical Report
- DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning