强化学习(Reinforcement Learning, RL)是机器学习的一个分支,其核心是让智能体(Agent)通过与环境(Environment)的交互,学习如何采取最优行动(Action)以最大化长期累积奖励(Reward)。
传统强化学习
基本概念和框架
传统强化学习的基本概念和框架如下:
- 智能体(Agent):学习和决策的主体,如机器人、游戏 AI 等。
- 环境(Environment):智能体所处的情境,如游戏规则、物理世界等。
- 状态(State):环境在某一时刻的具体情况,如棋盘布局、传感器数据。
- 动作(Action):智能体可执行的操作,如移动、加速等。
- 奖励(Reward):环境对智能体动作的即时反馈(数值信号),如得分增加、任务失败惩罚。
- 策略(Policy):智能体的行为准则,即从状态到动作的映射,包括了:
- 确定性策略:给定状态选择固定动作(如 a = π ( s ) a=\pi(s) a=π(s) )。
- 随机性策略:按概率分布选择动作(如 π ( a ∣ s ) \pi(a|s) π(a∣s))。
- 价值函数(Value Function):评估状态或动作的长期价值。
- 状态价值函数 V ( s ) V(s) V(s):在状态 s s s 下,遵循策略 π \pi π 的预期累积奖励。
- 动作价值函数 Q ( s , a ) Q(s,a) Q(s,a):在状态 s s s 下执行动作 a a a 后的预期累积奖励。
- 探索与利用(Exploration vs. Exploitation):
- 探索:尝试新动作以发现潜在更高奖励。
- 利用:根据已有知识选择当前最优动作。
- 平衡两者是强化学习的关键挑战。
- 马尔可夫决策过程(Markov Decision Process, MDP):MDP 是强化学习的数学模型,用于描述环境的状态转移和奖励机制。MDP 假设未来状态只依赖于当前状态和动作,而与过去状态无关,即假设当前状态包含所有历史信息(马尔可夫性),由五元组 ( S , A , P , R , γ ) (S,A,P,R,\gamma) (S,A,P,R,γ) 描述,其中:
- S S S:状态集合(或状态空间),表示环境中所有可能的状态。状态 s ∈ S s\in S s∈S 是环境在某一时刻的具体表现。
- A A A:动作集合(或动作空间),表示智能体在某一状态下可以采取的所有可能动作。动作 a ∈ A a\in A a∈A 是智能体的决策输出。
- P P P:状态转移概率 P ( s ′ ∣ s , a ) P(s^\prime|s,a) P(s′∣s,a),在当前状态 s s s 下执行动作 a a a 后转移到状态 s ′ s^\prime s′ 的概率。
- R R R:奖励函数 R ( s , a , s ′ ) R(s,a,s^\prime) R(s,a,s′),其中 s s s 当前状态, a a a 是智能体采取的动作, s ′ s^\prime s′ 是执行动作 a a a 后转移到的下一个状态。奖励函数是一个关键组成部分,它定义了智能体在特定状态下采取某个动作后,环境返回的即时奖励。奖励函数的作用是为智能体提供反馈,帮助其评估动作的好坏,从而学习最优策略。
- γ \gamma γ:折扣因子,权衡即时与未来奖励,调节未来奖励的重要性,取值范围为 0 ≤ γ ≤ 1 0 \le \gamma \le 1 0≤γ≤1。 γ \gamma γ 越接近 1,表示越重视未来奖励;越接近 0,表示越重视当前奖励。
- 贝尔曼方程(Bellman Equation)
贝尔曼方程是强化学习中的核心方程,用于描述价值函数的递归关系。状态价值函数的贝尔曼方程为:
V ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V ( s ′ ) ] V(s) = \sum_a \pi(a|s) \sum_{s^\prime}P(s^\prime|s,a)[R(s,a,s^\prime)+\gamma V(s^\prime)] V(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a,s′)+γV(s′)]
简单示意图
深度强化学习
顾名思义,即深度学习技术和强化学习技术结合,一方面将深度学习模型嵌入到强化学习框架中,从而能够处理开放域复杂推理(如文本生成、逻辑推理)等无限状态空间的决策问题,另一方面,利用强化学习技术训练深度学习模型,能极大提升模型性能。这一技术的典型应用为2022年底OpenAI发布的大模型ChatGPT,其训练中应用了强化学习技术(RLHF),之后强化学习在大模型的训练中受到了越来越多的关注和重视,目前已经成为了训练大模型的必要技术。
基本概念
对应于传统强化学习,大模型背景下的深度强化学习的一些基本概念如下:
- 智能体:大模型
- 环境:开放式环境
- 状态:各种可能的输入数据
- 动作:各种可能的输出
- 奖励:大模型输出的得分(一般与人类偏好对齐)
- 策略:同智能体,一般也叫策略模型或者Actor,产生何种输出是由大模型本身参数决定的
- 价值函数:与策略模型同等参数的另一个模型
算法演进
奖励是训练信号的来源,决定了RL的优化方向。因此,对于奖励函数的设置至关重要,不合理的奖励函数会导致各种各样的问题。
这里将强化学习训练过程类比为小学考试场景,从奖励函数的优化看看强化学习算法的发展,类比关系如下:
- 学生(需要训练的策略模型):通过优化策略(学习)追求高回报(考试成绩)。
- 教师(奖励模型,RM):评估生成内容质量,提供即时反馈(考试评分)。
- 家长(Critic):基于 RM 反馈生成长期价值评估(零花钱发放规则),指导策略优化方向。
只使用奖励
假设哥哥和弟弟在同一个小学班级。老师对学生考试评分并给出“绝对分数”。哥哥得分通常为 80 分以上(满分 100 分),而弟弟的得分通常为 30 分左右。然后他们直接把这些分数拿给爸爸,向他要零花钱——这意味着他们的“奖励”只是原始考试成绩。谁的分数更高,谁就能得到更多的零花钱。
咋看起来挺好的,但其实有两个大问题:
- 不公平:弟弟通过很大的努力成绩从30提高到60,但仍然比不上哥哥的80+,奖励依然比哥哥少,他没有得到应用的奖励,导致弟弟觉得不值得(对应于RL中,模型不往这个方向优化,因为奖励不够)。
- 不稳定:追求更高的分数可能会导致哥哥采取极端的学习方法(例如,整天死记硬背、熬夜等),而这也会导致哥哥状态不稳定,影响了成绩的稳定性(对应于RL中,模型倾向于选择一些极端的动作,导致奖励波动降到,模型训练不稳定)。
在RL中,如果只是简单地优化最终的奖励,也就是最大化下面的目标函数:
J naive ( θ ) = E q , o ∼ ( d a t a , π θ ) [ r ( o ) ] \mathcal{J}_{\text{naive}}(\theta) = \mathbb{E}_{q,o \sim (data,\pi_\theta)}[r(o)] Jnaive(θ)=Eq,o∼(data,πθ)[r(o)]
那么就会遇到高方差和部分改进动力不足的问题。也就是说,Actor缺乏与自身当前水平相匹配的基线,从而阻碍了训练效率。
引入评论家Critic
发现到这个问题后,爸爸意识到“这不仅仅关乎绝对的分数,还关乎你相对于现有水平进步了多少”。
于是他决定: 把哥哥的“预计分数线”定为 80 分,把弟弟的定为 40 分。如果考试成绩超过这些分数线,就能得到更多的零花钱;如果没有,得到的零花钱就很少,甚至一分钱都没有。
因此,如果弟弟努力学习,成绩从 30 分跃升至 60 分,那么他就比“预计分数线”高出 20 分,这意味着他将获得丰厚的奖励。与此同时,如果哥哥成绩保持在 80 多分左右,奖励就会较小,所以哥哥不一定会比弟弟得到更多。这种安排鼓励每个人从自己的基线水平开始进步,而不是单纯比较绝对分数。
但是这个分数线不是一成不变的,爸爸需要不断地调整分数线以适应哥哥和弟弟的进步。如果弟弟水平达到了60分,那40分的分数线就不再合理和公平(这又会导致他进步动力不足,也会让哥哥觉得不公平)。同理哥哥的基线分数也需要调整。换句话说,爸爸也需要学习,特别是要了解哥哥和弟弟进步的情况。
在RL中,这个“分数线”被称为价值函数 V ψ ( s ) V_\psi(s) Vψ(s),它充当了基准,训练目标从“单纯的奖励”演变为“比基准表现好多少”,用优势(Advantage)来表达:
A t = r t − V ψ ( s t ) A_t = r_t -V_\psi(s_t) At=rt−Vψ(st)
对于给定的状态 s t s_t st 和动作 o t o_t ot,如果实际奖励超出了评价者的预期,则意味着该动作的表现优于预期(获得正 A t A_t At,也就是正激励,模型会提高选择该动作的概率)。如果低于预期,则该动作表现不佳( A t A_t At 为负,也就是负激励,模型会降低选择该动作的概率)。最简单的目标函数可以表示为:
J adv ( θ ) = E [ A ( o ) ] ,其中 A ( O ) = r ( o ) − V ψ ( s ) \mathcal{J}_{\text{adv}}(\theta) = \mathbb{E}[A(o)],\text{其中} A(O)=r(o)-V_\psi(s) Jadv(θ)=E[A(o)],其中A(O)=r(o)−Vψ(s)
通过减去这条“分数线”,减少训练中的方差(优势相对单纯的奖励更稳定),对超出预期的行为给予更高的梯度信号,对未达到预期的行为进行惩罚。
添加 Clip 和 Min 操作
即使有了“分数线”,也会出现新的问题。例如:如果哥哥在某次考试中突然取得突破,获得 95 分或 100 分,爸爸就会给他巨大的奖励,这会鼓励哥哥在下次考试前采取过于激进的学习模式,使得其成绩可能会在两个极端(95 和 60)之间波动,从而导致巨大的奖励波动。
因此,爸爸决定对哥哥和弟弟每一步更新学习策略的幅度进行限制——他不会因为一次考得好就给与很多的零花钱。如果他给的太多,哥哥可能会陷入极端探索;如果他给的太少,哥哥又没有动力。所以他必须找到一个平衡点。
在强化学习算法 PPO(Proximal Policy Optimization)中,这种平衡是通过“Clip”机制实现的。PPO目标的核心包括:
min ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ε , 1 + ε ) A t ) \min\Bigg(r_t(\theta)A_t, \text{clip}\bigg(r_t(\theta), 1-\varepsilon, 1+\varepsilon\bigg)A_t\Bigg) min(rt(θ)At,clip(rt(θ),1−ε,1+ε)At)
其中 r t ( θ ) = π θ ( o t ∣ s t ) π θ old ( o t ∣ s t ) r_t(\theta)=\frac{\pi_\theta(o_t|s_t)}{\pi_{\theta_{\text{old}}}(o_t|s_t)} rt(θ)=πθold(ot∣st)πθ(ot∣st) 表示该动作的新旧策略之间的概率比。如果该比率偏离 1 太远,则会将其限制在 [ 1 − ε , 1 + ε ] [1-\varepsilon,1+\varepsilon] [1−ε,1+ε] 范围内,这限制了策略在一次更新中可以移动的程度。
参考模型 Reference Model
即便如此,如果哥哥只关注高分,他可能会采取一些可疑的策略——例如,作弊或恐吓老师让他获得满分。显然,这违反了所有规则。在大模型领域,类似的情况是产生有害或虚构的内容以获取更高的奖励。
因此,爸爸又定了一条规则:“不管怎样,你都不能偏离自己原本诚实的学习方法太多。如果你偏离基准太远,即使你分数很高,我也会取消你的资格,扣留你的零花钱。”
这类似于从学期开始(即在最初的监督微调之后)标记一条“参考线”。你不能偏离原来的策略太远,否则你会面临处罚。
在 PPO 中,这通过针对参考模型(初始策略)添加 KL 惩罚来反映,具体的,在目标函数中会包含下面一项表达式:
− β D K L ( π θ ∣ ∣ π ref ) -\beta\mathbb{D}_{KL}(\pi_\theta||\pi_{\text{ref}}) −βDKL(πθ∣∣πref)
这使得 Actor 不会偏离原始的合理策略太远,避免“作弊”或其他严重越界的行为。
GRPO
有一天,爸爸说:“我没时间一直评估你的学习进度,也无暇不断画新的分数线。为什么不先做五组模拟测试,然后取它们的平均分作为你的预期分数呢?如果你在实际考试中超过了平均成绩,说明你比自己的预期要好,所以我会奖励你。否则,你得不到多少。”所有人都可以依靠一套个人的模拟测试,而不是爸爸必须不断调整的外部评价。
到目前为止,我们看到 PPO 依赖于 Actor + Critic + Clip + KL 框架。然而,在大模型场景中,Critic 通常需要与 Actor 一样大才能准确评估状态,这可能是昂贵的,有时也不切实际——特别是如果你最后只有一个最终奖励(比如最终答案质量)。
因此,Group Relative Policy Optimization (GRPO)应运而生。其核心思想是:
- 没有为Critic提供单独的价值网络
- 对同一个问题从当前策略中采样多个输出
- 将这些输出的平均奖励视为基线
- 任何高于平均水平的输出都会产生“正优势”,任何低于平均水平的输出都会产生“负优势”
同时,GRPO 保留了 PPO 的 Clip 和 KL 机制,以确保稳定、合规的更新。
最终,GRPO的目标是最大化下面的函数:
J G R P O ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G ( min ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) A i , clip ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) , 1 − ε , 1 + ε ) A i ) − β D KL ( π θ ∥ π ref ) ) , \begin{aligned} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}\left[ q \sim P(Q), \{ o_i \}_{i=1}^G \sim \pi_{\theta_{\text{old}}} (O|q) \right] \\ &\frac{1}{G} \sum_{i=1}^G \left( \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 - \varepsilon, 1 + \varepsilon \right) A_i \right) - \beta \mathbb{D}_{\text{KL}} (\pi_\theta \parallel \pi_{\text{ref}}) \right), \end{aligned} JGRPO(θ)=E[q∼P(Q),{oi}i=1G∼πθold(O∣q)]G1i=1∑G(min(πθold(oi∣q)πθ(oi∣q)Ai, clip(πθold(oi∣q)πθ(oi∣q),1−ε,1+ε)Ai)−βDKL(πθ∥πref)),
其中 A i = r i − mean ( { r 1 , r 2 , ⋯ , r G } ) std ( { r 1 , r 2 , ⋯ , r G } ) A_i = \frac{r_i-\text{mean}(\{r_1, r_2, \cdots, r_G\})}{\text{std}(\{r_1, r_2, \cdots, r_G\})} Ai=std({r1,r2,⋯,rG})ri−mean({r1,r2,⋯,rG})
通过对同一问题的多个输出的奖励取平均值并进行标准化来计算“相对分数”,这样,就不再需要专门的价值函数,但仍然可以获得动态“分数线”,并简化训练且节省资源。
深度强化学习演进图示
参考
DeepSeek-R1 Dissection: Understanding PPO & GRPO Without Any Prior Reinforcement Learning Knowledge