本章内容参考:【【强化学习的数学原理】课程:从零开始到透彻理解(完结)】

Policy Function Approximation

之前我们学了值函数近似,现在继续来学策略函数近似。本质上都是一回事——用神经网络去拟合一个连续函数,替代之前采用的策略表。

π(as,θ)\pi(a|s,\theta) 在状态 s 下选择动作 a 的概率,其中 θ\theta 为函数参数。

表格形式与函数形式会有哪些不同呢?

  • 首先,在如何定义最优策略上:表格形式的最优策略就是对应策略下的任一 state value 大于等于其他策略下的 state value;而函数形式需要用一个标量作为 metrics,最大化这个目标度量。

  • 第二,如何检索某状态下的策略:表格形式直接查表就好,现在还要把状态丢进模型里,算一下才能知道。

  • 第三:如何更新策略:表格形式下直接改表格中的元素就好了,而函数形式需要借助修改参数间接更新策略。

    但这样也有好处,更改策略具有一定泛化性。之前改状态-动作对的概率只能一个个改,现在为了更新某个状态下的某个动作去修改参数时,可能也会连带着影响到其他相关的状态-动作对。

1. 如何定义最优策略

第一种 metric 称为平均状态价值,or average value simply.

这种 metric 被定义为:$\bar{v}\pi = \sum{s\in S}d(s)v_\pi(s) $,其中 d(s)d(s) 表示状态出现的概率分布;亦可表示为 vˉπ=ESd[vπ(S)]\bar{v}_\pi =\mathbb{E}_{S\sim d}\left[v_\pi(S)\right],尝试理解一下;还可以表示为矩阵的形式:vˉπ=dTvπ\bar{v}_\pi = d^Tv_\pi,在求解梯度时会有用。

d(s)d(s) 与选取策略无关时,所以在求梯度的时候可以直接拎出来。至于如何选择初始的 d(s)d(s) 呢?最简单的就是均匀分布,每个状态出现概率一样;或者对于某些游戏来说,选择某种初始状态 s0s_0 可以保证价值最大,那我们初始就令 d(s0)=1d(s_0)=1,其他状态 d(s)=0d(s')=0 .

d(s)d(s) 与选取策略有关时,可以直接采用 d(s)d(s) 的静态分布,即:

dTPπ=dTd^TP_\pi = d^T

其中,PπP_\pi 为策略 π\pi 下的转移概率矩阵。采取这种 d(s)d(s) 可以使出现频率大的状态多分配一点权重。


第二种 metric 称为平均单步奖励,or average reward simply.

rˉπsSdπ(s)rπ(s)=E[rπ(S)]\bar{r}_\pi \doteq \sum_{s \in \mathcal{S}} d_\pi(s) r_\pi(s)=\mathbb{E}\left[r_\pi(S)\right]

where SdπS \sim d_\pi. Here,

rπ(s)aAπ(as)r(s,a)r_\pi(s) \doteq \sum_{a \in \mathcal{A}} \pi(a \mid s) r(s, a)

或者可以表示成另一种等价定义。

  • 假设 agent 遵从策略 π\pi,产生轨迹的 reward 为 (Rt+1,Rt+2,)\left(R_{t+1}, R_{t+2}, \ldots\right).
  • 那么该轨迹的平均奖励表示为:

limn1nE[Rt+1+Rt+2++Rt+nSt=s0]=limn1nE[k=1nRt+kSt=s0]=limn1nE[k=1nRt+k]\begin{aligned} & \lim _{n \rightarrow \infty} \frac1n \mathbb{E}\left[R_{t+1}+R_{t+2}+\cdots+R_{t+n} \mid S_t=s_0\right] \\ = & \lim _{n \rightarrow \infty} \frac1n \mathbb{E}\left[\sum_{k=1}^n R_{t+k} \mid S_t=s_0\right] = \lim _{n \rightarrow \infty} \frac1n \mathbb{E}\left[\sum_{k=1}^n R_{t+k} \right] \end{aligned}

最后一个等式告诉我们:当你已经跑了足够远,那么你从哪里开始就已经不重要了。

以上这两个 metric 都是受 π\pi —— 也就是参数 θ\theta 影响的,因此思路就是找到最优的参数,使这两个 metric 最大化。

这两个 metric 本质上是等价的。


2. 如何计算梯度?

Summary of the results about the gradients:

θJ(θ)=sSη(s)aAθπ(as,θ)qπ(s,a)\nabla_\theta J(\theta)=\sum_{s \in \mathcal{S}} \eta(s) \sum_{a \in \mathcal{A}} \nabla_\theta \pi(a \mid s, \theta) q_\pi(s, a)

where

  • J(θ)J(\theta) can be vˉπ,rˉπ\bar{v}_\pi, \bar{r}_\pi, or vˉπ0\bar{v}_\pi^0.
  • η\eta 是状态或者权重的某种分布.

我们针对上式做一些简单的推导。由 θlnπ(as,θ)=θπ(as,θ)π(as,θ)\nabla_\theta \ln \pi(a \mid s, \theta)=\frac{\nabla_\theta \pi(a \mid s, \theta)}{\pi(a \mid s, \theta)} 可知:

θJ=sd(s)aθπ(as,θ)qπ(s,a)=sd(s)aπ(as,θ)θlnπ(as,θ)qπ(s,a)=ESd[aπ(aS,θ)θlnπ(aS,θ)qπ(S,a)]=ESd,Aπ[θlnπ(AS,θ)qπ(S,A)]\begin{aligned} \nabla_\theta J & =\sum_s d(s) \sum_a \nabla_\theta \pi(a \mid s, \theta) q_\pi(s, a) \\ & =\sum_s d(s) \sum_a \pi(a \mid s, \theta) \nabla_\theta \ln \pi(a \mid s, \theta) q_\pi(s, a) \\ & =\mathbb{E}_{S \sim d}\left[\sum_a \pi(a \mid S, \theta) \nabla_\theta \ln \pi(a \mid S, \theta) q_\pi(S, a)\right] \\ & =\mathbb{E}_{S \sim d, A \sim \pi}\left[\nabla_\theta \ln \pi(A \mid S, \theta) q_\pi(S, A)\right]\end{aligned}

这样整理之后,就可以用采样的方式(随机梯度下降)把期望给摘掉。由于 ln 函数存在,需要对 π\pi 做归一化 (softmax)

其中 SdS\sim d 不太需要在意,因为 d 代表长期分布下的数据,一般情况下我们能有数据就不错了;Aπ(AS,θ)A\sim \pi(A|S,\theta) 代表这个方法是根据 π\pi 得到的,应该是 on-policy 方法。


3. REINFORCE

刚才我们已经把目标函数转化为:

θt+1=θt+αθlnπ(atst,θt)qπ(st,at)\theta_{t+1}=\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right) q_\pi\left(s_t, a_t\right)

然而 qπq_\pi 同样是未知的,需要进行采样近似。我们可以采用基于蒙特卡洛的方法进行采样:从 (s,a)(s,a) 出发得到一个轨迹,计算这个轨迹的 return qt(s,a)q_t(s,a). 用得到的 qtq_t 代替 qπq_\pi.

我们管这种方法叫做 REINFORCE.

其实 REINFORCE 方法还暗含了一种 “探索与利用” 的 trade-off 在里面。由于:

θlnπ(atst,θt)=θπ(atst,θt)π(atst,θt)\nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right)=\frac{\nabla_\theta \pi\left(a_t \mid s_t, \theta_t\right)}{\pi\left(a_t \mid s_t, \theta_t\right)}

改写算法可得:

θt+1=θt+αθlnπ(atst,θt)qt(st,at)=θt+α(qt(st,at)π(atst,θt))βtθπ(atst,θt)\begin{aligned} \theta_{t+1} & =\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right) q_t\left(s_t, a_t\right) \\ & =\theta_t+\alpha \underbrace{\left(\frac{q_t\left(s_t, a_t\right)}{\pi\left(a_t \mid s_t, \theta_t\right)}\right)}_{\beta_t} \nabla_\theta \pi\left(a_t \mid s_t, \theta_t\right) \end{aligned}

我们得到了另一个柿子:

θt+1=θt+αβtθπ(atst,θt)\theta_{t+1}=\theta_t+\alpha \beta_t \nabla_\theta \pi\left(a_t \mid s_t, \theta_t\right)

这个式子就可以看做是在梯度更新 θ\theta,使其朝着优化 π(atst)\pi(a_t|s_t) 的方向前进。

其中对 βt\beta_t 进行分析:

  • βt\beta_t 是正比于 qt(st,at)q_t(s_t,a_t) 的,因此 qt(atst)q_t(a_t|s_t) 值越大,算法倾向于给 ata_t 分配更大的值。
  • βt\beta_t 是反比于 π(atst)\pi(a_t|s_t) 的,因此 π(atst)\pi(a_t|s_t) 值越小,算法倾向于给 ata_t 分配更大的值。

第一步做到了 RL 中的 利用,而第二步做到了 RL 中的 探索


Actor-Critic

上一章我们已经把目标函数转化为:

θt+1=θt+αθlnπ(atst,θt)qπ(st,at)\theta_{t+1}=\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right) q_\pi\left(s_t, a_t\right)

当我们采用时序差分方法 (TD) 进行采样 qπq_\pi (拟合一个值函数来指导策略进行学习)时,这种方法就被称作 Actor-Critic.

9.5 节提到 REINFORCE 通过蒙特卡洛采样的方法对策略梯度的估计是无偏的,但是方差非常大。我们可以用形式(3)引入基线函数(baseline function)b(st)b(s_t) 来减小方差。

θJ(θ)=ESd,Aπ[θlnπ(AS,θ)(qπ(S,A)b(S))]\nabla_\theta J(\theta) = \mathbb{E}_{S \sim d, A \sim \pi}\left[\nabla_\theta \ln \pi(A \mid S, \theta) \left( q_\pi(S, A) - b(S) \right)\right]

可以验证,减去一个仅与 SS 有关的函数 b(S)b(S) 不会影响该优化目标,反而还能减小方差。 这样我们采样的时候,就可以减少采样误差。 一般我们令 b(S)=EAπ[q(s,A)]=vπ(s)b(S) = \mathbb{E}_{A\sim \pi}\left[ q(s,A)\right] = v_\pi(s),

进一步地,我们还可以用 TD Error 对 qπq_\pi 进行近似:

E[qπ(st,at)vπ(st)]=E[R+γvπ(st+1)vπ(st)]\mathbb{E}\left[q_\pi(s_t, a_t)- v_\pi(s_t)\right] = \mathbb{E}\left[R+\gamma v_\pi(s_{t+1})- v_\pi(s_t)\right]

Critic 价值网络可以采取时序差分残差的学习方式,定义如下价值函数的损失函数:

L(ω)=12(r+γVw(st+1)Vw(st))2L(\omega) = \frac12(r+\gamma V_w(s_{t+1})-V_w(s_t))^2

算法如下:

image-20250217211634955


Off-Policy 的 Actor-Critic

之前的课我们可知,由于目标函数 θJ(θ)=ESd,Aπ[]\nabla_\theta J(\theta) = \mathbb{E}_{S \sim d, A \sim \pi}[*] 中动作采样是要服从策略 π\pi 的,是我们的 Behavior Policy;同时, π\pi 也是我们要更新的 Target Policy. 因此这些算法都是 On-Policy 的。

如果想将策略梯度算法转换成 Off-Policy,去复用之前得到的经验,也是可以的。只需要用一种 Importance Sampling 即可。

假设我们在分布 p1p_1 下采了一些样本 {xi}\{x_i\},用以估计 EXp0[X]\mathbb{E}_{X\sim p_0} [X],我们就需要做一些权重的调整。

EXp0[X]=xp0(x)x=xp1(x)p0(x)p1(x)=EXp1[f(X)]\mathbb{E}_X \sim p_0 [ X ]=\sum_x p_0 ( x ) x=\sum_x p_1 ( x ) {\frac{p_0 ( x )} {p_1 ( x )}}=\mathbb{E}_{X \sim p_1} [ f ( X ) ]

这样,我们就可以用 p1p1 分布下的采样 EXp1[f(X)]\mathbb{E}_{X \sim p_{1}} [ f ( X ) ] 来估计 EXp0[X]\mathbb{E}_{X \sim p_{0}} [ X ] 了。其中 f(x)f(x) 本质上就是做了一个加权平均。分布 p1p1 是已知的,p0p0(其实就是 π\pi)是可以被计算得到的。这样就得到了 Off-policy 下的策略梯度定理:

θJ(θ)=ESρ,Aβ[π(AS,θ)β(AS)θlnπ(AS,θ)qπ(S,A)]=ESρ,Aβ[π(AS,θ)β(AS,θ)qπ(S,A)]\begin{aligned} \nabla_\theta J ( \theta) & = \mathbb{E}_{S \sim\rho, A \sim\beta} \left[ \frac{\pi( A | S, \theta)} {\beta( A | S )} \nabla_\theta \ln \pi( A | S, \theta) q_{\pi} ( S, A ) \right] \\ &= \mathbb{E}_{S \sim\rho, A \sim\beta} \left[ \frac{ \nabla\pi( A | S, \theta)} {\beta( A | S,\theta' )} q_\pi ( S, A ) \right] \end{aligned}

其中 β\beta 是 behavior policy,ρ\rho 是状态分布。这个 off-policy 还是挺好理解的,但是这两个策略 π\piβ\beta 不能相差太多,否则效果也会不好,因此就引入了 PPO.


PPO

我们引入 KL 散度,限制 π\piβ\beta 之间的差异,得到式子:

JPPOβ(θ)=Jβ(θ)βKL(θ,θ)where Jβ(θ)=E(st,at)β[pπ(atst)pβ(atst)Aβ(st,at)]\begin{aligned} J_{PPO}^\beta ( \theta) &=J^{\beta} ( \theta)-\beta K L ( \theta, \theta^\prime ) \\ \mathrm{where}~ J^{\beta} ( \theta) &= \mathbb{E}_{( s_t, a_t ) \sim\beta} \left[ \frac{p_\pi ( a_t | s_t )} {p_{\beta} ( a_t | s_t )} A^{\beta} ( s_t, a_t ) \right] \end{aligned}

实际上,“两个策略 π\piβ\beta 不能相差太多” 并不是指参数层面差太多,而是这两个策略导致的行为分布应该是差不多的(即在同一个 state 下,计算出 action 对应的分布,计算这两个之间的 KL 散度)。

PPO-截断

PPO 的另一种形式 PPO-截断(PPO-Clip)更加直接,它在目标函数中进行限制,
以保证新参数和旧参数所得到的策略差距不会太大,即:

argmaxθE(s,a)θk[min(πθ(as)πθk(as)Aπθk(s,a),clip(πθ(as)πθk(as),1ϵ,1+ϵ)Aπθk(s,a))]\arg \max_{\theta} \mathbb{E}_{(s,a) \sim \theta_k} \left[ \min \left( \frac{\pi_{\theta} ( a | s )} {\pi_{\theta_k} ( a | s )} A^{\pi_{\theta_{k}}} ( s, a ), \operatorname {clip} \left( \frac{\pi_{\theta} ( a | s )} {\pi_{\theta_{k}} ( a | s )}, 1-\epsilon, 1+\epsilon\right) A^{\pi_{\theta_k}} ( s, a ) \right) \right]

其中 clip(x,l,r):=max(min(x,r),l)\mathrm{c l i p} ( x, l, r ) :=\mathrm{m a x} ( \mathrm{m i n} ( x, r ), l ) ,即把 xx 限制在 [l,r][ l, r ] 内。上式中 ϵ\epsilon 是一个
超参数,表示进行截断(clip)的范围。

这个公式非常不易读,因此可以结合图像理解,令横轴表示 πθ(as)πθk(as)\frac{\pi_{\theta} ( a | s )} {\pi_{\theta_{k}} ( a | s )}

  • A>0A>0 时,即该 action 的价值为正,则将鼓励策略增加选择该 action 的几率;但是策略的比值应该小于 1+ϵ1+\epsilon (控制策略之间的差距),超过了则停止鼓励;
  • A<0A<0 时,则该 action 的价值为负,则将鼓励策略降低选择该 action 的几率;但是策略的比值应该大于 1ϵ1-\epsilon (控制策略之间的差距),越界了则停止鼓励;

这样可以控制两个策略差距不会过大,和之前的版本差不多,但更易于实现。

image-20250218201426758


DPO

1. 为什么选择相对奖励偏好,而非绝对的奖励打分?

人与人在分配绝对奖励方面没有校准,差别较大;相较之下,在两个回答中选择偏好的回答会容易得多。

2. 如何用训练一个奖励模型?

先从参考模型中生成一批样本:D={xi,ywi,yli}\mathcal{D}=\{x^{i}, y_{w}^{i}, y_{l}^{i} \} .
构建 Bradley-Terry Model 将偏好对与奖励联系起来:

p(ywylx)=σ(r(x,yw)r(x,yl))p ( y_{w} \succ y_{l} \mid x )=\sigma( r ( x, y_{w} )-r ( x, y_{l} ) )

通过最小化负对数似然损失,训练奖励模型:

LR(ϕ,D)=E(x,yw,yl)D[logσ(rϕ(x,yw)rϕ(x,yl))]\mathcal L_R ( \phi, \mathcal{D} )=-\mathbb{E}_{( x, y_w, y_l ) \sim\mathcal{D}} [ \log \sigma( r_{\phi} ( x, y_w )-r_{\phi} ( x, y_l ) ) ]

3. RM有了,如何学习策略?

假设奖励模型 rϕr_{\phi} 有了,我们要继续训练策略模型 πθ\pi_{\theta} 以实现更高的价值,从策略中采样 yy,得到第一版目标函数:

maxπθExD,yπθ(yx)[rϕ(x,y)]\max_{\pi_{\theta}} \mathbb{E}_{x \sim\mathcal{D}, y \sim\pi_{\theta} ( y | x )} \Big[ r_{\phi} ( x, y ) \Big]

然而,一昧按照这个目标函数优化是无意义的,因为 rϕr_\phi 只是在一个有限的数据集上训练的,只能在某些分布上给出指导,而在分布之外的数据无法泛化。

因此,我们得到了第二版目标函数,加上了 KL 散度的约束,使 πθ\pi_{\theta} 取得高奖励的同时也能和原模型的策略 πref\pi_{\mathrm{ref}} 相近。

maxπθExD,yπθ(yx)[rϕ(x,y)]βDKL[πθ(yx)πref(yx)]\max_{\pi_{\theta}} \mathbb{E}_{x \sim\mathcal{D}, y \sim\pi_{\theta} ( y | x )} \big[ r_{\phi} ( x, y ) \big]-\beta\mathbb{D}_{\mathrm{K L}} \big[ \pi_{\theta} ( y | x ) | | \pi_{\mathrm{r e f}} ( y | x ) \big]

4. 该求解最优策略了!

根据先前的经验,其实可以得到封闭最优策略的解:

π(yx)=1Z(x)πref(yx)exp(1βr(x,y))with Z(x)=yπref(yx)exp(1βr(x,y))\pi^{*} ( y \mid x )={\frac1 {Z ( x )}} \pi_{\mathrm{ref}} ( y \mid x ) \exp \left( {\frac1 {\beta}} r ( x, y ) \right) \\ \mathrm{with} ~ Z ( x )=\sum_y \pi_{\mathrm{ref}} ( y \mid x ) \exp \left( {\frac1 {\beta}} r ( x, y ) \right)

其中,Z(x)Z(x) 是某种分区函数,我们利用其进行归一化。对上式进行整理,我们可得:

r(x,y)= βlogπ(yx)πref(yx)+βlogZ(x)r ( x, y )=\ \beta\log \frac{\pi^{*} ( y \mid x )} {\pi_{\mathrm{r e f}} ( y \mid x )}+\beta\log Z ( x )

这意味着,如果 π\pi^* 倾向于输出某些相应,那么奖励函数的值就会分配的更高。

最后,我们把这个奖励函数代入原来的Loss Function,就得到了我们 DPO 算法:

image-20250218160052733

可以看到,不好看的 Z(x)Z(x) 就被消掉了,非常酷。

在实践中,PPO 和 DPO 的选择取决于具体任务的需求:

  • PPO 更加适合那些有明确奖励信号且需要稳定学习过程的任务,如游戏AI或机器人控制。而且由于其广泛适用性和相对成熟的方法论,PPO 在许多标准强化学习基准中表现良好。
  • DPO 则在需要高度对齐人类价值观和偏好的应用中表现出色,如自然语言处理中的文本生成任务。它能够快速适应人类反馈,但可能在数据稀缺或偏差时表现不稳定。