本文翻译DeepSeek Explained 6: All you need to know about Reinforcement Learning in LLM training。
这是 DeepSeek 系列的第六篇文章,我们将深入探讨 DeepSeek 模型训练策略中的一项关键创新:分组相对策略优化(Grouped Relative Policy Optimization, GRPO)[3]。
为了确保本文的独立性并阐明 GRPO 背后的原理,我们将首先介绍强化学习的基本概念,强调强化学习和 RLHF(基于人类反馈的强化学习)在大型语言模型训练中的关键作用。之后,我们将探讨不同的范式,包括基于价值的强化学习、基于策略的强化学习和Actor-Critic 强化学习,回顾像信任区域策略优化(Trust Region Policy Optimization, TRPO)和近端策略优化(Proximal Policy Optimization, PPO)等先前的算法,最后,解释 GRPO 所引入的优化。
目录
背景
为什么 LLM 训练需要强化学习
在强化学习引入 LLM 训练之前,自然语言处理(NLP)模型通常采用两阶段训练方法,即所谓的预训练-微调范式:
- 预训练:在一个大型文本语料库上,使用诸如预测缺失令牌等无监督目标进行训练。此阶段帮助模型对语言建立广泛的理解。
- 有监督微调:在人工标注的数据集上进行训练,以专门处理问答等特定任务。这有助于模型针对特定任务生成更有用、结构化的输出。
然而,即使经过这两个阶段的训练,LLM 生成的回答仍然经常与人类偏好不符,例如,臆造错误信息、给出过于冗长或过于简洁的回答、忽略隐含上下文信息,或误解讽刺幽默等。
换句话说,要让 LLM 真正有用,需要使其与人类偏好对齐,而仅仅依靠有监督微调是难以实现的。
那么,这是为什么呢?
真正的挑战在于将对齐转化为一个可学习的目标,使其能够被正确标注并用于构建有意义的学习目标。鉴于对齐本身固有的模糊性和细微差别,穷举所有可能的未对齐情况并为每种情况定义特定标签是不切实际的。
而这正是强化学习变得有用的地方。
强化学习的工作原理
机器学习算法大致可分为三大类:
- 有监督学习:这类算法从标注数据中学习,每个输入 $x$ 都与一个目标 $y$ 配对,目标是构建一个能够根据 $x$ 预测 $y$ 的模型。当 $y$ 是离散的时,该任务称为分类问题;否则,称为回归问题。
- 无监督学习:当没有标注目标可用时,我们可以设计算法来发现输入数据中的潜在模式或结构。这类方法包括主成分分析(PCA)等降维方法和 K 均值聚类等聚类方法。
- 强化学习(RL):在定义明确学习目标具有挑战性的情况下,强化学习模型可以通过与特定环境的交互进行学习,收集反馈或奖励进行模型更新。这种方法通常用于训练智能体,例如教机器人保持平衡和在空间中导航。
下图展示了强化学习场景中的 5 个要素。
图 1. 强化学习的五个要素:智能体、环境、奖励、状态和行动。(图片来自维基百科。)
现在设想你正在教你的小狗坐下,你会发现这 5 个要素都存在:
- 智能体(Agent):你的小狗,正在学习“坐下”这个新指令。
- 环境(Environment):小狗周围的一切。
- 状态(State):小狗所处的情况(它是否坐着)。
- 奖励(Reward):当小狗听从指令时你给它的零食。
- 行动(Action):小狗可以做的事情,比如坐下、跳跃或吠叫。
那么,监督学习中的学习目标与强化学习中的奖励有什么区别呢?
在监督学习中,每个样本输入都应与一个标签配对,目标是训练模型使其预测与目标之间的损失函数最小化。然而在强化学习中,智能体与环境交互,没有为每个行动提供明确的标签,而是时不时地从环境中获得奖励作为其行动的反馈。
请注意,奖励通常是延迟的并且可能非常稀疏,例如下棋时你只在游戏结束时获得输赢结果。这意味着智能体可能无法立即知道某个行动是好是坏。相反,它必须随着时间的推移通过试错来学习,目标是随着时间的推移最大化累积奖励。
这使得强化学习在没有明确标签但反馈仍可作为成功线索的场景中特别有用。例如,在训练机器人行走时,我们无法预定义每种状态下正确的关节角度。然而,当机器人尝试不同的动作时,它最终可能会成功迈出一步——这个事件自然地作为一个奖励,表明它之前的动作是有效的。
回到我们训练小狗的例子,强化学习是这样工作的:
- 一开始你的小狗(智能体)不明白“坐下”是什么意思,但它会在你家(环境)里尝试不同的事情,比如跑、坐下甚至吠叫(行动)。
- 每次它坐下,它就会得到一个零食(奖励)。
- 随着时间的推移,你的小狗学会了坐下就能得到零食,它看起来终于明白“坐下”了。
总的来说,强化学习模型是遵循试错方法学习的,关键在于拥有一个精心设计的奖励。这个奖励必须与目标紧密对齐;否则模型将无法学习所需的行为。同时,产生这种奖励应该尽可能容易和快速,因为如果奖励的计算过于缓慢或复杂,强化学习过程也会变得极其缓慢,使其在实际任务中变得不那么有用。
例如,在游戏中,模型采取的每个行动都会自动从游戏环境中获得一个分数,这个分数直接关系到模型在游戏中表现的性能。
然而,在许多实际应用中,并没有像游戏分数那样现成的奖励。相反,研究人员必须付出巨大努力来定义一个合适的奖励函数。此外,一些期望的行为很难转化为奖励函数——例如,你如何定义一个奖励函数来引导智能体更礼貌地回答问题?
这就引出了 RLHF:基于人类反馈的强化学习(Reinforcement Learning from Human Feedback)。
基于人类反馈的强化学习(RLHF)
再次回到训练小狗的例子,设想你的小狗最终学会了坐下,但有时它坐下时也会吠叫,或者它会先跳到沙发上而不是安静地坐在地板上。
在这种情况下你能做什么?
有了 RLHF,你不仅仅是每次小狗坐下时都给它零食。相反,你通过比较它的行为来给零食。例如,如果小狗安静地坐在地板上,它会比坐下时吠叫或跳到沙发上之后再坐下获得更大的奖励。通过这种方式,你的小狗学会了安静地坐在地板上更好,尽管你没有明确解释“安静”是什么意思。
正如我们之前提到的,拥有一个简单快速的奖励是强化学习的关键,这使得让人类参与训练循环以提供直接反馈是不现实的。为了克服这个问题,我们可以首先收集一些人类反馈,然后使用这些反馈来学习一个奖励函数,以在比较两个行动时模仿人类偏好。
总而言之,RLHF 通常包括三个阶段:
- 收集人类反馈:对模型输出进行抽样,并请人类评委比较哪个更好。
- 学习一个奖励模型:通过模仿人类评委的偏好。
- 使用学习到的奖励模型训练一个更好的策略:在强化学习过程中。
这里的策略指的是智能体根据环境状态选择行动的策略。下图展示了 InstructGPT [6] 在微调中如何实现 RLHF,这在很大程度上遵循了上述三个阶段。
如果你对 InstructGPT 感兴趣,想了解更多信息,这里是我们的上一篇文章链接:[Codex 和 InstructGPT 的洞察]。
图 2. 训练 InstructGPT/ChatGPT 中 RLHF 步骤的示意图。(图片来自 [6]。)
如上图所示,强化学习过程主要发生在第三步,其中使用近端策略优化(PPO)来优化策略。
那么,PPO 到底是如何工作的呢?
为了理解这一点,在下一节中,我们将首先解释强化学习中的三个关键范式:基于价值的方法(Value-based)、基于策略的方法(Policy-based)和 Actor-Critic 方法。
强化学习范式
在我们深入探讨所有数学细节之前,让我们先解释一下强化学习中价值函数和策略的概念。
在强化学习中,价值函数告诉我们,在状态 $s$ 下,遵循策略 $\pi$ 执行行动 $a$ 的预期未来回报:
其中:
- $R_t$ 是时间步 $t$ 的奖励。
- $\gamma$ 称为折扣因子,表示未来奖励的重要性。
这里有几点需要提及:
- 我们之所以需要考虑未来回报,是因为强化学习中的奖励通常是延迟的,所以我们不能仅仅根据即时回报来判断一个行动的好坏。
- 引入折扣因子有助于平衡短期奖励和长期未来回报。它还能稳定训练并提高收敛性,因为当 $0 \le \gamma < 1$ 时,价值函数保持有限。
- 上述价值函数的定义也包含了策略 $\pi$,它被视为智能体在给定状态下决定采取何种行动的策略,通常表示为从状态到行动概率的映射。
上述价值函数和策略的定义表明,强化学习智能体可以通过优化价值函数或策略进行训练。这导致了三种不同的训练范式:基于价值的强化学习、基于策略的强化学习和 Actor-Critic 强化学习。
基于价值的强化学习
基于价值的强化学习方法根据贝尔曼方程 [8] 更新价值函数,贝尔曼方程将一个状态的价值分解为两部分:即时奖励和下一状态的折扣价值。
以 Q-learning [7] 为例,价值函数可以通过以下方式更新:
- $\alpha$ 是学习率,用于结合即时价值和未来价值。
- $Q(S_t, A_t)$ 是当前状态的即时价值。
- $R_{t+1}$ 是在状态 $S_t$ 中采取行动 $A_t$ 后观察到的奖励。
- $Q(S_{t+1}, a)$ 是在下一状态采取行动 $a$ 时的价值,所以对 $a$ 取最大值可以得到从 $S_{t+1}$ 中可以获得的最大奖励。
更具体地说,这个过程是这样的:
- 初始化:我们从一个随机的 $Q(S_t, A_t)$ 值开始。
- 与环境交互:在时间步 $t$,智能体在状态 $S_t$ 中选择一个行动 $A_t$,然后从环境中接收一个奖励 $R_{t+1}$,并过渡到下一状态 $S_{t+1}$。
- 更新:使用上述规则更新价值函数。
- 重复:重复此过程直到收敛。
然而,上述更新过程涉及计算一个 argmax 操作,这在具有无限数量可能行动的连续行动空间中是难以处理的。这是因为计算所有行动的 argmax 需要在每个学习步骤中进行全局优化,这在计算上非常昂贵。
当使用 Q 网络(例如在深度 Q 网络 (DQN) 中)时,这通常会因训练不稳定性问题而变得复杂,因为 Q 网络通常是非凸的,有时 $Q(s, a)$ 的微小更新会导致行动选择发生巨大变化。
因此,基于价值的强化学习通常用于行动空间离散且可能行动较少的场景,例如 Atari 或 AlphaGo 中的 DQN。
但是,如果我们必须处理连续或大型行动空间怎么办?这时基于策略的强化学习就可以提供帮助。
基于策略的强化学习 (Policy-based RL)
如前所述,策略(Policy)是指智能体用来决定采取哪些行动的规则,表示为从状态到行动概率的映射:
其中策略 $\pi(a \mid s)$ 通常是一个可微分函数,例如一个参数由 $\theta$ 表示的神经网络。
因此,基于策略的强化学习不再像基于价值的强化学习那样在行动空间中搜索,而是在参数空间 ($\theta$) 中搜索,以最大化预期奖励。
更具体地说,基于策略的强化学习通过使用策略梯度(policy gradient)进行梯度上升来优化策略网络:
策略梯度通常以以下形式估计:
其中 $R$ 是作为奖励总和计算的总回报。
引入策略梯度后,基于策略的强化学习消除了在行动空间上计算 argmax 的需要,使其更适用于行动空间大或连续的场景。
然而,计算策略梯度仍然具有挑战性。在许多实际的强化学习任务中,例如下棋,回报取决于整个回合的累积奖励,并且可能具有很高的噪声,导致策略梯度的高方差和训练的不稳定性。
为了解决这个问题,提出了 Actor-Critic 强化学习,通过结合基于价值和基于策略的方法来减少方差并提高训练稳定性。
分组相对策略优化 (GRPO)
为了更好地理解 GRPO,我们先简要回顾一下启发了它的两种常用 Actor-Critic 方法:信任区域策略优化 (TRPO) 和近端策略优化 (PPO)。
信任区域策略优化 (TRPO)
如前所述,Actor-Critic 强化学习方法通过使用优势函数计算策略梯度的估计器来优化策略网络,并且可以通过对以下目标函数求导来获得梯度估计器:
这种方法的一个缺点是它经常导致策略更新过大,从而导致强化学习过程的不稳定性。为了解决这个问题,TRPO [4] 引入了一个替代目标函数,通过对策略更新的大小添加一个约束:
其中 $\pi_{\theta}$ 和 $\pi_{\theta_{old}}$ 分别是更新后的策略网络和更新前的参考策略网络。
上述目标函数明确区分了旧的策略网络和更新后的策略网络,并使用这两个策略网络之间的 KL 散度作为约束,因为 KL 散度通常用于衡量概率分布之间的差异。
近端策略优化 (PPO)
PPO [5] 在稳定策略梯度的基础上,通过引入裁剪替代目标函数进一步增强了 TRPO。
更具体地说,PPO 首先定义了旧策略网络和新策略网络之间的概率比率:
并将 TRPO 中的目标函数重写为:
其中 CPI 代表保守策略迭代(Conservative Policy Iteration)。
在此基础上,裁剪替代目标可以写成:
其中:
min()
运算符中的第一项与 TRPO 相同,即 $L^{CPI}$。min()
运算符中的第二项使用超参数 $\epsilon$ 将概率比率裁剪到 $[1 - \epsilon, 1 + \epsilon]$ 的范围。
通过对未裁剪和裁剪后的目标应用 min()
运算符,PPO 可以被视为优化原始未裁剪目标的下界,从而导致更保守的更新,这有助于稳定训练过程。
PPO 在大型语言模型训练中被广泛使用,例如 InstructGPT [6]。然而,它仍然继承了我们之前提到的 Actor-Critic 方法的常见挑战。此外,随着大型语言模型规模的不断增长,维护一个单独的价值网络变得越来越昂贵,因为价值网络通常与策略模型的大小相当。
在下一节中,我们将解释 GRPO 如何消除对单独价值网络的需求。
分组相对策略优化 (GRPO)
GRPO 的核心思想是消除对单独价值网络的需求,同时保持训练的稳定性,这也使得 GRPO 成为一种纯粹基于策略的强化学习方法。
为了更容易看出 PPO 和 GRPO 之间的区别,我们把 PPO 的目标函数重写如下:
其中,$q$ 和 $o$ 分别是从问题数据集和旧策略网络中采样的查询和输出。这个目标函数使用查询来组织平均值,使其更容易扩展到 GRPO [3] 中引入的分组结构。
更具体地说,
其中惩罚项被表述为无偏 KL 散度:
而优势 $A_i$ 计算如下:
其中 $r_1$ 到 $r_G$ 代表每个组内输出对应的奖励。引入这种分组结构在 GRPO 中至关重要,因为每个查询都不同,计算来自不同查询的全局奖励的标准化优势在指导模型更新方面意义不大。
这就是 GRPO 和 PPO 的关键区别:通过使用每个组内的相对奖励来估计优势函数,它完全消除了对单独价值网络的需求,使其成为一种纯粹基于策略的强化学习方法,而不是 Actor-Critic 方法。
如前所述,移除价值网络显著降低了训练资源需求,因为价值网络通常与策略模型的规模相当。此外,它可以通过避免优化两个独立网络的复杂性来增强训练稳定性。
但为什么这种方法是可行的呢?
回想一下,优势函数衡量的是某个行动与给定状态的预期回报相比,好或差的程度。在 PPO 中,它被估计为价值函数 $Q(s, a)$ 和基线价值函数 $V(s)$ 之间的差值。
这意味着,只要我们能够定义一个捕获相同概念的度量——当前行动相对于该状态的预期回报好或差的程度——我们就可以将其用作优势函数。
在 GRPO 中,这个度量是在每个组(可以解释为一个查询)内计算的,因为该组本质上代表了智能体所处的状态。因此,通过比较特定行动的奖励与同一组内其他采样行动的奖励,GRPO 自然地推导出了优势函数的估计值。
下图比较了 PPO 和 GRPO,请注意后者中没有价值模型:
以下算法总结了 GRPO 的实现方式:
总结
本文全面介绍了强化学习概念,这些概念对于理解 DeepSeek 分组相对策略优化 (GRPO) 背后的创新至关重要。
我们首先高层次地讨论了强化学习为何对大型语言模型 (LLM) 训练至关重要,强调了它在超越监督学习之外,使模型输出与人类偏好对齐方面的作用。接着,我们探讨了强化学习和 RLHF(基于人类反馈的强化学习)的工作原理,解释了奖励模型如何帮助大型语言模型行为与人类偏好对齐。
为了奠定坚实的基础,我们介绍了三种主要的强化学习范式——基于价值、基于策略和 Actor-Critic 方法——概述了它们各自的优势、局限性及实际应用。
在此基础上,我们进一步探讨了两种广泛使用的 Actor-Critic 方法:信任区域策略优化 (TRPO) 和近端策略优化 (PPO)。最后,我们介绍了 DeepSeek 提出的 GRPO,阐述了它是如何通过利用分组结构和相对优势估计,在 PPO 的基础上进行构建的。
在下一篇文章中,我们将更深入地探讨 DeepSeek 的训练过程,涵盖预训练、微调以及使用 GRPO 进行 RLHF 对齐,以及这些阶段如何协同工作以优化模型性能。
参考文献
- [1] DeepSeek
- [2] DeepSeek-V3 Technical Report
- [3] DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
- [4] Trust Region Policy Optimization
- [5] Proximal Policy Optimization Algorithms
- [6] Training Language Models to Follow Instructions with Human Feedback
- [7] Q-learning
- [8] Bellman Equation
- 显示Disqus评论(需要科学上网)