RL笔记 · 三
PPO、GRPO的理论基础:策略梯度与Reinforce算法
Value-based方法遇到的问题
在先前的学习中,我们探讨了Q-learning算法,以及DQN用神经网络代替Q表的优化。但总的来说,我们采取的策略都是最小化一个损失函数来逼近Q函数。这里的策略是隐式的,是基于值函数的,也就是Value-based。
但这么做会带来一个问题,假设我们有这么一个场景:扫地机器人需要清洁地板上的污渍,地板上除了污渍还有两群可爱的仓鼠,黑色的部分代表墙壁,如下图所示。
问题发生在当图中机器人经过红色区域时。当机器人从中间位置经过左边的红色区域时,它会感知到上方有墙壁(往上走撞墙给Q值扣分),而左边的区域是一片空白,那么显然机器人会学习到往左走这个动作;当机器人从中间位置经过右边的红色区域时,问题就产生了。机器人感知到上方有墙,但此时他所应该采取的动作应该是向右走,这就与先前学习的策略冲突了!
我们来系统地重述一遍问题:在两个红色区域里,机器人的感知态是相同的。在动作价值函数Q(s,a)中,输入s是智能体的感知态,而非环境的真实状态。所有共享同一感知态的真实状态(如图中的两个红色区域S1与S2),其动作a的Q值会被混合计算,此时S1与S2经验会混合更新Salias的Q值,导致智能体无法为S1与S2分别学习左/右的动作价值。
事实上,遇到这种情况最好的办法是在红色区域随机选取左右行动。但value-based值函数方法的策略是从Q值推导的副产品,本质是确定性策略,无法在Salias下稳定输出随机动作。因为 argmaxaQ(s,a) 只能选一个动作;即使用 ε-greedy,随机性也是外加的、与环境无关的,无法学到“在 Salias下 50% 左、50% 右”这种依赖状态的随机策略。
总结一下,value-based的方法问题出在Q值与感知态的强绑定:
- ε-greedy无法学习随机策略
- 无法区分感知相同但需求不同的状态
- 确定性(准确定性/ε-greedy)策略无法应对非对称场景
如何解决:policy-based
在这种场景下,我们就不再学习值函数,转而直接显式学习策略,也就是policy-based。这样就可以学习到随机的策略,而不会一直被卡住。
policy-based不同于value-based追求最小化损失函数逼近Q值,它直接去优化策略π。
具体来说,我们先将策略参数化为:
πθ(s)=P[A∣s;θ]
意思是给定参数 θ ,将处于状态 s 时的策略表述为采取各个动作的概率。我们通过优化 θ,来让策略 πθ(s) 变好,这样我们可以得到一个随机的策略,输出一个动作的概率分布。
如何优化 θ 呢?我们定义一个目标函数 J(θ),J(θ) 代表的是预期的累计奖励。我们让 J(θ) 最大,就找到了最优策略。之前我们让损失函数最小时使用的是梯度下降方法,那么在追求目标函数最大时,我们就采用梯度上升。
其实就是把梯度下降的步骤反过来,对函数求梯度,沿着梯度方向更新参数即可。
话都说到这份上了,接下来我们就该对 J(θ) 求梯度了。首先我们定义目标函数 J(θ) 为:
J(θ)=τ∑P(τ;θ)R(τ)
其中 τ 代表一个 trajectory 轨迹。接着,对 J(θ) 求梯度:
∇θJ(θ)=∇θ∑τP(τ;θ)R(τ)=∑τ∇θP(τ;θ)R(τ)=∑τP(τ;θ)∇θP(τ;θ)P(τ;θ)R(τ)
最后一步得到∑τP(τ;θ)∇θP(τ;θ)P(τ;θ)R(τ) 是有意为之的,因为我们知道对 log 函数求导的形式为:
∇xlogf(x)=f(x)∇xf(x)
因此注意到(我知道你要说什么),我们有:
P(τ;θ)∇θP(τ;θ)=∇θlogP(τ;θ)
也就是说,目标函数的导数 ∇θJ(θ) 可以表示为:
∇θJ(θ)=τ∑P(τ;θ)∇θlogP(τ;θ)R(τ)
这一步其实符合对期望定义的展开式:
E[X]=所有可能结果 τ∑P(τ)X(τ)
也就是说,轨迹 τ 发生的概率为P(τ;θ),对应值为 ∇θlogP(τ;θ)R(τ),我们把 ∇θJ(θ) 转写为期望表达式:
∇θJ(θ)=∑τP(τ;θ)∇θlogP(τ;θ)R(τ)=Eτ∼P(τ;θ)∇θlogP(τ;θ)R(τ)
而根据大数定律,从独立同分布的样本里采样,最终样本均值会收敛到理论的期望,我们可以用采样均值来近似期望值。
∇θJ(θ)=m1i=1∑m∇θlogP(τ(i);θ)R(τ(i))
其中 τ(i) 表示采样出来的一条轨迹。接下来我们要对 ∇θlogP(τ(i);θ) 进一步化简,我们先把P(τ;θ)拆开。我们先前说过,轨迹 τ 本质上是state-action-reward chain。因此,P(τ;θ)可被视为一连串独立步骤的概率连乘,类似于数理统计中观测与事件的关系。
P(τ;θ)=t=0∏P(st+1∣st;at)πθ(at∣st)
我们再把公式改写为 τ(i) 的形式,代表我们是从轨迹的第 i 步开始采样。
P(τ(i);θ)=μ(s0)t=0∏HP(st+1(i)∣st(i),at(i))πθ(at(i)∣st(i))
将结果代回 ∇θlogP(τ(i);θ):
∇θlogP(τ(i);θ)=∇θlog[μ(s0)t=0∏HP(st+1(i)∣st(i),at(i))πθ(at(i)∣st(i))]
这里就变成了数理统计中非常简单的取对数化简法,将对数连乘表示为对数连加:
∇θlogP(τ(i);θ)=∇θ[logμ(s0)+t=0∑HlogP(st+1(i)∣st(i),at(i))+t=0∑Hlogπθ(at(i)∣st(i))]
我们把括号拆开,分别对三个部分应用求导:
∇θlogμ(s0)+∇θt=0∑HlogP(st+1(i)∣st(i),at(i))+∇θt=0∑Hlogπθ(at(i)∣st(i))
注意到,前两个部分求导部分与参数 θ 无关,故为0。因此我们的式子就被化简如下:
∇θlogP(τ(i);θ)=∇θt=0∑Hlogπθ(at(i)∣st(i))
再把 ∇θlogP(τ(i);θ) 代回 ∇θJ(θ)=m1∑i=1m∇θlogP(τ(i);θ)R(τ(i)),我们就得到了策略梯度J(θ) 在采样估计下的表达式:
∇θJ(θ)=g^=m1i=1∑mt=0∑H∇θlogπθ(at(i)∣st(i))R(τ(i))
这个采样估计式所逼近的理论期望,就是策略梯度的精确表达式:
∇θJ(θ)=Eτ∼P(⋅;θ)[t=0∑H∇θlogπθ(at∣st)R(τ)]
也就是说,前者是用 m 条采样轨迹对后者做的 Monte Carlo 估计。它的直觉是:
- 如果一条轨迹回报高(R(τ) 大),就增大这条轨迹里所有动作的概率 → 让模型更倾向于重复这些动作
- 如果一条轨迹回报低(R(τ) 小或负),就减小这条轨迹里所有动作的概率 → 让模型避免这些动作
- ∇θlogπθ(at∣st) 是“增大动作 at 概率”的方向
- R(τ) 是权重,决定“这个方向要加多少”
一句话概括就是:好的轨迹,让它的动作更可能发生;坏的轨迹,让它的动作更不可能发生。
综上所述,我们可以总结出策略梯度定理 ∇θJ(θ)=Eτ∼P(⋅;θ)[∑t=0H∇θlogπθ(at∣st)R(τ)]。该定理给出了策略梯度的精确形式,但是期望难以计算,我们选择使用Reinforce算法(Monte Carlo策略梯度)去逼近结果
- 首先用当前策略走一条完整的轨迹
- 倒推计算这条轨迹中每个时间步的累计回报
- 相乘得到一条轨迹的梯度估计
- 沿着梯度上升的方向更新策略 θ←θ+αg^
- 重复上述步骤,直到策略收敛
