为什么是优势函数

经过一段对强化学习相关工作的参与,对于强化学习算法中的优势函数在做什么事情有了一定的感知和理解,现记录于此防止本人鱼一般记忆带来的损失。
注:本文的讨论主要是针对policy-based的RL方法,对于Q-learning,DQN等直接输出value并且直接选择value大的作为输出的方法不予讨论

优化目标

对于一切的学习任务,首先都得从抽象的层面明确他的学习目标,然后再逐步将学习目标中的每一项具体化(准确值或估计),为了严谨地描述强化学习的学习目标,大家定义了动作空间,状态空间,状态转移方程等等概念,其实说白了就是一句话——得到一个模型,使其可以根据现在的状态找到一条奖励最高的动作轨迹。这样理解我们就可以抽象地定义强化学习的训练目标(也即需要最大化的值)了:

J(θ)=Eτθ(R(τ))J(\theta) = E_{\tau \sim \theta}(R(\tau))

其中τ\tau为轨迹。接下来我们考虑J(θ)J(\theta)的导数,也即梯度更新形式。

θJ(θ)=θτpθ(τ)R(τ)\nabla_{\theta} J(\theta) = \nabla_{\theta} \sum_{\tau}p_{\theta}(\tau)R(\tau)

其中pθ(τ)=Πt=0Tπθ(atst)p(st+1at,st)p_{\theta}(\tau)=\Pi_{t=0}^{T}\pi_{\theta}(a_t|s_t)p(s_{t+1}|a_t,s_t)是一个连乘的形式,并不方便进行求导,所以一般来说会用到log-trick来计算。因为

log(pθ(τ))=1pθ(τ)pθ(τ)\nabla log(p_{\theta}(\tau)) = \frac{1}{p_{\theta}(\tau)}\nabla p_{\theta}(\tau)

pθ(τ)=pθ(τ)log(pθ(τ))\nabla p_{\theta}(\tau)=p_{\theta}(\tau) \nabla log(p_{\theta(\tau)})

同时我们将R(τ)R(\tau)更换为R(a,s)R(a,s),也即更换一下均值的视角,从而我们可以将原式子替换为

J(θ)=E(tTlog(π(atst))R(at,st))\nabla J(\theta) = E(\sum_t^T\nabla log(\pi(a_t|s_t))R(a_t,s_t))

或者方便理解,依然表示成

J(θ)=E(log(π(τ))R(τ))\nabla J(\theta) = E(\nabla log(\pi(\tau))R(\tau))

而不同的强化学习算法本质上就是给出了对RR的不同估计,给出估计时会考虑无偏性,方差已经训练的稳定性等等因素.

对R的估计

上式子中概率可以直接由模型本身输出,那距离训练还差对RR的估计

R(τ)R(\tau),R(a,s)R(a,s),R(s)R(s)其实可以理解为是对同一件事情的不同表达,很容易将训练目标在三者之间进行转换,下文的理解主要是基于R(s)R(s)进行的

从蒙特卡洛开始

对R最直接的估计就是蒙特卡洛了(其实也就是REINFORCE算法),在数学上定义为

Gt=Rt+1+γRt+2+γ2Rt+3+...G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ...

他的均值就是强化学习对于状态价值的定义,所以我们说蒙特卡洛的方法是一个无偏的方法,但容易想到他的收敛性很大程度上与采样次数相关,是一个方差很大的方法。众多对于R的估计算法都是在是否有偏和方差大小上做权衡。

为了减少这种方差,最早的做法会通过在每一个时间步上减去一个b(st)b(s_t)来实现,

优势函数

如今我们最常用的对于R的估计其实就是优势函数(advantage),其最原本的定义为

Aπ(st,at)=Qπ(st,at)Vπ(st)A^\pi(s_t,a_t) = Q^\pi(s_t,a_t)-V^\pi(s_t)

其衡量的是动作ata_t相比于所有动作品骏水平的好坏。理论上我们仍可用Q或者V中的任何一个来作为对RR的估计,但是优势函数有着便于解释且方差较小等优势,所以成为了目前的主流。PPO,GRPO等算法做的事情其实就是对优势函数进行估计,估计时也同样考虑无偏性和方差大小的问题,对于PPO和GRPO的具体公式在次就不赘述。