【大模型理论篇】DeepSeek-R1-Zero之关键技术GRPO解析

embedded/2025/2/5 6:54:03/

1. 背景介绍

        DeepSeek R1在复杂推理任务上可与OpenAI的o1相媲美,其采用了群体相对策略优化(Group Relative Policy Optimization,GRPO)和专注于强化学习的多阶段训练方法。使用纯强化学习进行后训练模型。在这一阶段,DeepSeek-R1-Zero(DeepSeek-R1的首次测试)学会通过重新评估初步方法来为问题分配更多思考时间,而无需任何人工反馈或描述如何操作的数据。

        强化学习在推理任务中已展现出显著的有效性,但是这些研究在很大程度上依赖于监督数据,而收集这些数据耗时巨大。DeepSeek挖掘出大模型在无需任何监督数据的情况下发展推理能力的潜力,我们将重点关注其通过纯粹的强化学习过程实现自我进化。

2. 群体相对策略优化(GRPO)

2.1 GRPO概念介绍

        为了降低强化学习的训练成本,DeepSeek采用群体相对策略优化(GRPO)。GRPO摒弃了传统强化学习中与策略模型同等规模的critic模型,而是通过群体得分来估计基准(baseline)。关于critic模型(价值模型)的介绍,可以参考《大模型中的强化学习RLHF(PPO)、DPO(Direct Preference Optimization)等概念的理解与解析》。  

        具体而言,对于每个问题 q,GRPO 从旧策略 \pi_{\theta_{\text{old}}}中采样一组输出 \{o_1, o_2, \dots, o_G\},然后优化策略模型 \pi_{\theta} 以最大化以下目标函数:

J_{\text{GRPO}}(\theta) = \mathbb{E}_{q \sim P(Q), \{o_i\}_{i=1}^{G} \sim \pi_{\theta_{\text{old}}}(O|q)} \frac{1}{G} \sum_{i=1}^{G} \min \left( \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)} A_i, \text{clip} \left( \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)}, 1 - \epsilon, 1 + \epsilon \right) A_i \right) - \beta D_{\text{KL}}(\pi_{\theta} || \pi_{\text{ref}})

        其中,\epsilon 和 \beta 是超参数,A_i 是优势(advantage),计算方式如下:

D_{\text{KL}}(\pi_{\theta} || \pi_{\text{ref}}) = \sum_{i=1}^{G} \left( \frac{\pi_{\text{ref}}(o_i | q)}{\pi_{\theta}(o_i | q)} - \log \frac{\pi_{\text{ref}}(o_i | q)}{\pi_{\theta}(o_i | q)} - 1 \right),

        优势 A_i由每个群体中的奖励值 \{r_1, r_2, \dots, r_G\} 计算得到:

A_i = \frac{r_i - \text{mean}(\{r_1, r_2, \dots, r_G\})}{\text{std}(\{r_1, r_2, \dots, r_G\})}

        从公式来看,A_i​ 是通过去均值并归一化到标准差的方式计算的,数学上称之为Z-score标准化(Z-score normalization), 表示 A_i其实是奖励 r_i在该群体中的标准化分数,衡量了它相对于群体均值的偏离程度。

        让我们来细看下GRPO的学习目标。从GRPO 的目标函数可以看到:

第一部分:策略更新项

\frac{1}{G} \sum_{i=1}^{G} \min \left( \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)} A_i, \text{clip} \left( \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)}, 1 - \epsilon, 1 + \epsilon \right) A_i \right)

  • \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)}
    这个比值衡量了新策略 \pi_{\theta}​ 相比旧策略 \pi_{\theta_{\text{old}}} 生成某个输出 o_i 的概率变化:

    • 若比值大于 1,则新策略增加了该输出的概率。
    • 若比值小于 1,则新策略减少了该输出的概率。
  • A_i (优势值)

    • 代表该输出 o_i 相对于群体的相对奖励水平,高于均值的 o_i 具有正优势,低于均值的 o_i具有负优势。
    • 目标是增加高奖励输出的概率,减少低奖励输出的概率。
  • 剪裁操作(clipping)

                                           \text{clip} \left( \frac{\pi_{\theta}(o_i | q)}{\pi_{\theta_{\text{old}}}(o_i | q)}, 1 - \epsilon, 1 + \epsilon \right)
    • 限制策略更新的幅度,避免模型发生剧烈变化,保证训练稳定性。
    • 这类似于 PPO(Proximal Policy Optimization)中的重要性采样比值裁剪。

第二部分:KL 散度正则项

-\beta D_{\text{KL}}(\pi_{\theta} || \pi_{\text{ref}})

  • 这里的D_{\text{KL}}(\pi_{\theta} || \pi_{\text{ref}})衡量了新策略 \pi_{\theta} 与某个参考策略 \pi_{\text{ref}}之间的差异。
  • 这一项的作用是防止策略偏离太远,让更新保持平稳。

2.2 GRPO训练步骤

采样(Sampling):
使用当前策略为每个提示生成多个输出。

奖励评分(Reward Scoring):
使用奖励函数对每个生成的输出进行评分,奖励函数可以是基于规则的或基于结果的。

优势计算(Advantage Calculation):
生成输出的平均奖励作为基准。然后,计算每个解在该组中的优势,相对于该基准。奖励在组内进行归一化。

策略优化(Policy Optimization):
策略尝试最大化 GRPO 目标,该目标包括计算出的优势和一个 KL 散度(KL divergence) 项。与 PPO 在奖励中实现 KL 项的方式不同。

2.2 奖励建模

        奖励是训练信号的来源,它决定了强化学习的优化方向。在训练 DeepSeek-R1-Zero 时,采用了一种基于规则的奖励系统,主要包括两类奖励

  • 准确性奖励(Accuracy rewards): 该奖励模型用于评估模型回答的正确性。例如,在数学题这种具有确定性结果的场景中,模型需要以指定的格式(如放在一个框内)提供最终答案,以便通过基于规则的方式可靠地验证其正确性。同样地,对于 LeetCode 题目,可以利用编译器基于预定义的测试用例生成反馈,从而判断代码的正确性。

  • 格式奖励(Format rewards): 除了准确性奖励模型,还引入了格式奖励模型,要求模型在 <think></think> 标签之间呈现其推理过程,从而规范其输出格式。

        在 DeepSeek-R1-Zero 的训练过程中,不使用基于神经网络的结果奖励或过程奖励模型。原因在于,在大规模强化学习过程中,神经奖励模型可能会遭受“奖励欺骗”(reward hacking)问题,而且重新训练奖励模型需要额外的计算资源,增加了整个训练流程的复杂性。

2.3 训练模板

        在训练 DeepSeek-R1-Zero 时,首先设计一个简单明了的模板,用于引导基础模型遵循指定的指令。如下所示,该模板要求 DeepSeek-R1-Zero 先生成推理过程,再给出最终答案。

用户与助手的对话:
用户提出问题,助手进行解答。
助手首先思考推理过程,然后提供答案。推理过程和答案分别被 <think></think><answer></answer> 标签包围,即:
<think> 推理过程 </think> <answer> 答案 </answer>

用户:prompt(问题)。
助手

        在训练过程中,prompt 将被具体的推理问题所替代。

        DeepSeek将约束限制在这种结构化格式上,而不施加任何特定的内容偏见,例如:

  • 不强制模型进行反思性推理(reflective reasoning)。
  • 不偏向特定的问题解决策略(problem-solving strategies)。

        这样可以确保在强化学习过程中,能够准确观察模型的自然学习进程,而不会因人为设计的偏向影响模型的行为。

        以上给出关于GRPO的一些介绍,后续将会给出实战分享。

3. 参考材料

【1】DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

【2】DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models


http://www.ppmy.cn/embedded/159679.html

相关文章

AI学习指南HuggingFace篇-自定义模型开发

一、引言 Hugging Face的Transformers库提供了强大的工具,支持开发者在预训练模型的基础上进行自定义开发。通过自定义模型架构,开发者可以针对特定任务优化模型性能,满足多样化的应用需求。本文将介绍如何基于Hugging Face框架开发自定义模型架构,探讨自定义模型的设计思…

正则表达式超详细讲解

欢迎并且感谢大家指出我的问题&#xff0c;由于本人水平有限&#xff0c;有些内容写的不是很全面&#xff0c;只是把比较实用的东西给写下来&#xff0c;还有对一些常用的正则表达式进行收集整理&#xff0c;如果有写的不对的地方&#xff0c;还希望大家多多指教&#xff01;谢…

机器学习day5

自定义数据集 使用tensorflow框架实现逻辑回归并保存模型&#xff0c;然后保存模型后再加载模型进行预测 代码 import tensorflow as tf import numpy as np# 1. 自定义数据集 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1…

【C++】P1957 口算练习题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a; &#x1f4af;我的做法代码实现&#xff1a; &#x1f4af;老师的做法代码实现&#xff1a; &#x1f4af;对比分析&am…

2025年2月2日(tcp_server_socket.listen(128))

tcp_server_socket.listen(128) 是 Python 中用于设置 TCP 服务器套接字&#xff08;socket&#xff09;在监听传入连接时的最大连接数。 具体来说&#xff1a; tcp_server_socket 是一个通过 socket.socket() 创建的服务器套接字。listen() 方法用于将套接字设置为“监听模式…

2024联想春招硬件嵌入式开发真题及答案解析

目录 一、单选题 1、在 Linux 系统中,以下哪两个命令可以显示系统中运行的进程状态( ) 2、对于如下C++程序: 3、关于操作系统内存管理中堆与栈的下列描述,哪一项是错误的( ) 4、通过文件目录可以实现从文件名到文件()的转化。 5、执行以下代码,结果输出为() …

CompletableFuture

在现代编程中&#xff0c;异步操作是提升程序性能和响应性的关键技术。Java 8 引入的CompletableFuture类&#xff0c;极大地简化了异步编程的复杂性&#xff0c;提供了一种强大且灵活的方式来处理异步任务及其结果。本文将深入探讨CompletableFuture的特性、使用方法以及在实际…

leetcode 1124. 表现良好的最长时间段

题目如下 数据范围 这题的代码好些但是思路十分复杂如果代码再难一点估计就是困难题了&#xff0c;我愿称为中等的困难题。 本题可以用另一个角度来思考&#xff0c;令超8小时为1否则为-1令pre[i]为i天之前的和即pre是前缀和数组。那么当i小于等于j时有pre[j] - pre[i]大于0…