@harshbhatt7585: 这是在阅读了所有强化学习基础论文后的一篇文章,学习策略梯度算法的推导和演进……

X AI KOLs Timeline 新闻

摘要

这篇文章阐述了强化学习的数学基础,推导了策略梯度、PPO和GRPO等算法,并探讨了这些算法通过RLHF和RLVR等技术在对齐大型语言模型中的应用。

本文是在研读所有强化学习基础论文后撰写,一篇文章带你了解策略梯度算法的推导及其演进变体。https://t.co/T6B4SW6aba
查看原文
查看缓存全文

缓存时间: 2026/08/30 22:24

这是在阅读所有强化学习基础论文后的总结,一篇文章掌握策略梯度算法的推导及其演进变体。https://t.co/T6B4SW6aba


强化学习的数学原理:从策略梯度到PPO与GRPO

强化学习在过去几年变得非常流行,尤其是在大型语言模型领域,得益于RLHF(基于人类反馈的强化学习)和RLVR(基于可验证奖励的强化学习)等技术的兴起。自DeepMind构建并训练AlphaGo以来,强化学习获得了极高的关注,但随后有一段时间研究重心转向了无监督技术如GANs的对抗损失、基于Transformer的半监督学习。随着大型语言模型推动了整个深度学习领域的发展,研究者们重新将目光投向了强化学习。正是通过强化学习,我们能够使用RLHF来对齐大型语言模型,并通过RLVR使它们在数学和编程等任务上成为专家。

在本文中,我们将深入探讨强化学习的数学原理,推导策略梯度、PPO、GRPO以及其他变体等强化学习算法。

首先让我们深入理解强化学习。简单来说,它是一种通过试错过程来训练AI模型的方法,无需极度依赖监督数据集。这是强化学习流程最简单的展示:

智能体 –> 环境 –> 奖励 –> 更新 –> 重复

强化学习训练有三个主要组成部分我们需要理解:

  1. 动作 (at) –> 智能体在时间步t采取的动作
  2. 状态 (st) –> 智能体在时间步t所处的状态
  3. 奖励 (rt) –> 时间步t的奖励
  4. 策略 –> 策略决定在状态t下采取什么动作

智能体与环境交互,并根据其动作获得环境给予的奖励或惩罚。通过使用学习算法进行多次迭代,它学会采取更好的动作。奖励是学习算法的信号,它促使智能体采取那些能获得高奖励的动作。在一个轨迹中,目标是收集尽可能多的奖励,并避免任何惩罚性奖励。例如在国际象棋中,智能体赢得的对局越多,获得的奖励就越多;在Atari游戏中,得分越高,获得的奖励就越多。在学习过程中,策略会改变分布,使得那些更可能带来高奖励的动作具有更高的概率。那么,我们如何发现哪些动作好、哪些动作不好呢?这来源于经验。智能体拥有的经验越多样化,它就越能知道什么有效、什么无效,而这正是我们在强化学习中所做的。

强化学习是一种通过经验学习的方式,而非通过任何预定义的数据集。

让我们定义策略: [π(a∣s)=P(at=a∣st=s)]

给定当前状态 s_t,选择动作 a_t 的概率是多少?

智能体的目标:最大化奖励。

π∗=argmaxπEτ∼pπ(τ)[∑t=0Tr(st,at)]

这是一个策略的期望总奖励。我们从策略创建的概率分布中采样轨迹,然后随时间对奖励求和并取平均值。

现在我们的智能体知道它该做什么了:在一个轨迹中收集尽可能多的奖励。我们的策略很可能是一个神经网络,可以是Transformer、RNN等结构。我们将进行前向传播,从动作空间中输出动作。智能体随后使用该动作在环境中采取一步,并获得奖励。现在,为了训练模型,我们需要进行反向传播来训练这个策略,以便它调整其分布,从而产生能够收集高奖励的动作。

思考一下目标是什么,我们要最大化什么?是的,奖励。即:

θ∗=argmaxθJ(θ)=argmaxθEτ∼pθ(τ)[∑t=0Tr(st,at)]

我们必须计算J(θ)的梯度,这正是反向传播所做的。

∇θJ(θ)=∇θEτ∼pθ(τ)[∑t=0Tr(st,at)]

让我们计算这个梯度:

Eτ∼pθ(τ)[r(τ)]

其中轨迹的总奖励是:

∑t=0Tr(st,at)

将期望写为轨迹上的积分:

∫pθ(τ)r(τ)dτ

现在我们对其求梯度:

∇θ∫pθ(τ)r(τ)dτ

由于奖励函数不直接依赖于θ,我们将梯度移入积分内:

∫∇θpθ(τ)r(τ)dτ

现在我们使用对数导数技巧:

pθ(τ)∇θlogpθ(τ)

将其代回:

∫pθ(τ)∇θlogpθ(τ)r(τ)dτ

这可以再次写成一个期望:

Eτ∼pθ(τ)[∇θlogpθ(τ)r(τ)]

现在展开轨迹概率:

p(s0)∏t=0Tπθ(at∣st)p(st+1∣st,at)

两边取对数,将乘积转化为加法:

logp(s0)+∑t=0Tlogπθ(at∣st)+∑t=0Tlogp(st+1∣st,at)

环境状态转移不依赖于θ,初始状态分布p(s_0)也不依赖于θ。因此,它们的梯度为零:

∑t=0T∇θlogπθ(at∣st)

将其代入策略梯度表达式:

Eτ∼pθ(τ)[(∑t=0T∇θlogπθ(at∣st))r(τ)]

由于:

∑t=0Tr(st,at)

我们得到:

Eτ∼pθ(τ)[(∑t=0T∇θlogπθ(at∣st))(∑t=0Tr(st,at))]

这是基本的策略梯度估计器。

这意味着我们增加那些导致高未来奖励的动作的概率,降低那些导致低未来奖励的动作的概率。

但这里每个动作都获得了从时间步0到T的总奖励(见奖励的求和):

(∑t=0Tr(st,at))

那么会发生什么呢?假设在a3时它获得了-5的奖励,而a1和a2的奖励分别是5和10。

r = r1 + r2 + r3 r = 5 + 10 - 5 = 10

在学习过程中,它会促进在a3时采取的动作,尽管在a3时得到了-5的奖励,但因为之前的奖励总和仍然很高。这引入了偏差和噪声。因此,更好的方法是,在计算每个动作的奖励时,移除之前的奖励。以下是策略梯度中提到的改进方法:

(∑t=t’Tr(st,at))

注意它从t=t’开始,现在完整的方程将如下所示:

Eτ∼pθ(τ)[(∑t=0T∇θlogπθ(at∣st))(∑t=t’Tr(st,at))]

这也被称为REINFORCE,由Ronald J. Williams在1992年的论文《用于连接主义强化学习的简单统计梯度跟踪算法》中提出。

REINFORCE的问题在于,每一步的奖励直接用作训练信号,结果有时模型获得高奖励,于是模型将参数调整到奖励的方向,然后在下一个连续回合中模型获得负奖励,于是模型又将参数调整到远离该方向。奖励信号的这种突然变化造成了高方差,并在学习过程中使模型非常困惑。

为了解决这个问题,我们可以重新定义给模型的训练信号。如果我们使用轨迹的平均奖励呢?这是个好主意,但我们还需要给每个动作步骤以奖励,以便给予更好的反馈。因此,我们可以改为给出训练信号,判断当前奖励是否优于平均奖励?如果不是,那么就不值得大力推崇并告诉模型朝那个方向前进;如果它优于平均奖励,那就超出了我们的预期,让我们告诉模型朝那个方向前进。

b = (1/N) ∑_{i=1}^{N} r(τ^{(i)})

这里b是一个基线,计算轨迹的平均奖励。

Eτ∼pθ(τ)[(∑t=0T∇θlogπθ(at∣st))(r(τ)−b)]

我们可以用恒定的平均奖励减去轨迹中的奖励,并且这个b是无偏的,不会改变梯度,原因如下:

E[∇θlogpθ(τ)b] = ∫pθ(τ)∇θlogpθ(τ)b dτ = b∫∇θpθ(τ) dτ = b∇θ∫pθ(τ) dτ = b∇θ1 = 0

我们也称这个“减去平均奖励”为优势函数,它告诉我们具有负优势还是正优势。

A = r(τ) − b

所以梯度的最终方程将如下所示:

Eτ∼pθ(τ)[(∑t=0T∇θlogπθ(at∣st))A]

这是所有强化学习流程(如RLHF、RLVR以及训练基于强化学习的智能体)的基础,所有著名的强化学习方法如PPO、RLHF、GRPO等都是REINFORCE的变体或构建在其之上。

现在让我们思考像大型语言模型这样的模型如何在生产环境中使用强化学习方法进行大规模训练。首先让我们了解离策略和同策略方法。

同策略

通常在强化学习训练流程中,我们的智能体从策略中采取动作并与环境交互,训练算法将模型调整到获得更好奖励的方向。

在每一步,模型都通过与环境交互收集自己的数据,并用这些数据来训练自身。因此,智能体生成数据的每一步总是来自更新后的策略。这被称为同策略,我们使用相同的更新后的策略来收集训练数据。

离策略

当数据是来自与训练期间正在更新的策略不同的策略生成时,称为离策略学习。生成经验的策略称为行为策略,而正在更新的策略称为目标策略。例如,有一个已经训练好的教师模型,我们可以用它来采样数据,智能体可以使用这些数据作为经验来更新参数。

这就是为什么大多数情况下离策略学习更高效,因为我们已经准备好了数据;而在同策略中,数据是在训练时实时生成的。

TRPO

信赖域策略优化是策略梯度算法的一次重大升级。它提出了一个问题:“我们能否事先估计未来奖励,并将我们的模型引导向更好的状态?”为了解决这个问题,作者引入了价值函数。价值函数简单来说就是一个状态的价值。一个状态的价值意味着在该状态下可以获得多少奖励。

一个状态的价值是智能体从该状态开始并遵循某个策略将获得的未来奖励的期望和。

Vπ(s) = Eπ[∑t=0Tγtrt ∣ s0=s]

如果我们能预测智能体从给定状态能获得的未来奖励,我们就能将智能体引导至奖励最高的轨迹。

为了直观理解,让我们举个例子:

假设一个轨迹中有4个状态:s1, s2, s3, 和 s4。 s1 –> s2 –> s3 –> s4

每个状态对应的奖励分别为0, 0, 1 和 1。

在无折扣奖励下,每个状态的价值将是: V(s1) = 0 + 0 + 1 + 1 = 2 V(s2) = 0 + 1 + 1 = 2 V(s3) = 1 + 1 = 2 V(s4) = 1

然后将这个价值函数加入优势函数中代替基线(平均奖励)。所以现在方程变为:

Ât = (∑k=tTγk−trk) − Vπ(st)

PPO

PPO是2017年由OpenAI的研究人员创建的最具影响力的强化学习算法之一。有趣的是,它当时被NIPS拒绝了。

PPO提出了一个问题:如何在多次梯度更新中重用收集到的轨迹,而不会剧烈改变策略导致训练崩溃?

它找到了原始策略梯度和TRPO之间的折衷方案,有助于更好地平衡方差和稳定学习。它引入了新的方法,如裁剪和策略代理。

PPO在几乎所有连续控制环境上都优于比较的算法。

原始的策略梯度方法通常使用蒙特卡洛未来回报,偏差低但方差高。TRPO使用一个学习到的价值函数结合GAE来估计优势,其中参数λ平衡偏差和偏差:更多的自举(bootstrapping)给出更低的方差但偏差更高,而更长的采样回报给出更低的偏差但方差更高。PPO保留了TRPO的这种GAE风格的优势估计,但用更简单的裁剪代理目标取代了TRPO复杂的KL约束更新。

这是TRPO中的公式: maxθ Et[πθ(at∣st) / πθold(at∣st) Ât] Et[DKL(πθold(⋅∣st)∥πθ(⋅∣st))] ≤ δ

PPO: rt(θ) = πθ(at∣st) / πθold(at∣st) LCLIP(θ) = Et[min(rt(θ)Ât, clip(rt(θ), 1−ε, 1+ε)Ât)]

它添加了一种裁剪方法:如果轨迹奖励与优势函数的乘积为正,则使用该乘积本身;如果为负,则使用裁剪后的版本,其中最小值为1 - epsilon,最大值为1 + epsilon。

GRPO

群组相对策略算法于2024年在DeepSeek-Math论文中提出。由于在PPO中需要两个网络:演员(actor)和评论家(critic)。正如我们上面所描述的,价值函数估计当前状态的好坏,并帮助PPO使用GAE等方法计算优势。这在小模型网络规模下工作良好,但对于大型语言模型,评论家本身可能是一个与策略网络规模相当的模型。这增加了巨大的内存和计算需求,同时从主要是序列级别的奖励中学习准确的词元级价值也可能很困难。DeepSeek的研究人员通过移除评论家函数并利用大型语言模型的一组响应来计算优势,引入了一种新的变体。

GRPO针对相同的提示生成多个响应,并询问**“这个响应与其他响应相比有多好?”**

对于一个问题(q),GRPO采样一组(G)输出: o1, o2, …, oG ∼ πθold(⋅∣q)

每个输出获得一个奖励: r1, r2, …, rG

然后GRPO使用该组奖励分布作为其基线。对于结果监督的GRPO,优势变为: (ri − mean(r1, …, rG)) / std(r1, …, rG)

因此,如果一个响应的表现优于群体平均,它将获得正优势。如果表现劣于群体平均,它将获得负优势。

相似文章