771 words
4 minutes
RLHF理论基础:策略梯度

1. 为什么需要策略梯度#

为什么我们需要 Policy-based,Value-based的局限在哪?

Value-based 核心做法是先学一个价值函数 Q(s,a)Q(s,a),再用 arg⁡max⁡aQ(s,a)\arg\max_a Q(s,a) 选动作。它的局限主要在某些场景里会变得很别扭。

一个是动作空间一旦是连续的或很大的离散空间,arg⁡max⁡aQ(s,a)\arg\max_a Q(s,a) 就成了硬伤。离散动作还可以枚举,但动作维度一高就爆了。比如机器人的抬手角度就不是一个离散的值,我们没法对角度进行打分。

另一个是 Value-based 像先给每个动作打分,再选最高分,Policy-based 像直接学怎么出手,以及出手的概率。问题出在现实里不一定总是选唯一最高分这么简单。Value-based 本质上是一个确定性策略,比如在石头剪刀布的时候如果出石头赢过几次,石头的分就会很高,就会一直出石头。但是我们都知道最佳策略是各占 13\frac{1}{3} 随机出。

而 Policy-based:不学打分直接学怎么做。他天然支持连续动作、策略直接、能随机、更适合复杂真实任务。

2. Policy-based#

Policy-based 直接优化策略,不再学习值函数去打分。

我们将策略参数化写成:

πθ(a∣s)\pi_\theta(a|s)

意思是在在状态 ss 下,采取动作 aa 的概率是多少。也就是说,策略网络输出的不是一个分数,而是一整个动作概率分布。

然后定义一个目标函数

J(θ)J(\theta)

表示当前策略 πθ(a∣s)\pi_\theta(a|s) 的表现(通常是期望累计回报),然后沿着让 J(θ)J(\theta) 变大的方向更新参数。

3.策略梯度#

与让损失函数下降的梯度下降方法相反,我们想让 J(θ)J(\theta) 变大就可以使用梯度上升的方法,这个就叫策略梯度。

OK,既然知道了我们的方法,我们定义我们的 J(θ)J(\theta) 为:

J(θ)=Eτ∼πθ[R(τ)]J(\theta)=\mathbb{E}_{\tau\sim \pi_\theta}[R(\tau)]

按当前策略 πθ\pi_\theta 去跑轨迹 τ\tau,得到一个总回报 R(τ)R(\tau),J(θ)J(\theta) 就是这些总回报期望。

参考 东川路第一可爱猫猫虫 的公式可能更好理解一些(这里致谢一下):

J(θ)=∑τP(τ;θ) R(τ)J(\theta) = \sum_{\tau} P(\tau;\theta)\, R(\tau)

也就是说采用 θ\theta 策略时走轨迹 τ\tau 的概率乘上走轨迹 τ\tau 的累加奖励求和,其实跟上面是一样的。

要做梯度上升我们要先对他求个梯度:

∇θJ(πθ)=∇θ Eτ∼πθ[R(τ)]=∇θ∫τP(τ∣θ) R(τ)=∫τ∇θP(τ∣θ) R(τ)=∫τP(τ∣θ) ∇θlog⁡P(τ∣θ) R(τ)=Eτ∼πθ ⁣[∇θlog⁡P(τ∣θ) R(τ)]\begin{aligned} \nabla_{\theta} J(\pi_{\theta}) &= \nabla_{\theta}\,\mathbb{E}_{\tau \sim \pi_{\theta}}[R(\tau)] \\ &= \nabla_{\theta} \int_{\tau} P(\tau \mid \theta)\,R(\tau) \\ &= \int_{\tau} \nabla_{\theta} P(\tau \mid \theta)\,R(\tau) \\ &= \int_{\tau} P(\tau \mid \theta)\,\nabla_{\theta}\log P(\tau \mid \theta)\,R(\tau) \\ &= \mathbb{E}_{\tau \sim \pi_{\theta}}\!\left[\nabla_{\theta}\log P(\tau \mid \theta)\,R(\tau)\right] \end{aligned}∴  ∇θJ(πθ)=Eτ∼πθ ⁣[∑t=0T∇θlog⁡πθ(at∣st) R(τ)]\therefore\; \nabla_{\theta} J(\pi_{\theta}) = \mathbb{E}_{\tau \sim \pi_{\theta}}\!\left[ \sum_{t=0}^{T} \nabla_{\theta}\log \pi_{\theta}(a_t \mid s_t)\,R(\tau) \right]

4. Reinforce算法(蒙特卡罗策略梯度)#

我们有了梯度,就可以根据这个梯度做梯度上升:

∇θJ(πθ)=Eτ∼πθ ⁣[∑t=0T∇θlog⁡πθ(at∣st) R(τ)]\nabla_{\theta} J(\pi_{\theta}) = \mathbb{E}_{\tau \sim \pi_{\theta}}\!\left[ \sum_{t=0}^{T} \nabla_{\theta}\log \pi_{\theta}(a_t \mid s_t)\,R(\tau) \right]

上面的梯度是一个期望,实际中我们用当前策略跑若干条轨迹,用样本均值近似这个期望:

g^=1N∑i=1N∑t=0Ti∇θlog⁡πθ ⁣(at(i)∣st(i)) R(τi)\hat{g} = \frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T_i} \nabla_{\theta}\log \pi_{\theta}\!\left(a_t^{(i)} \mid s_t^{(i)}\right)\, R(\tau_i)

然后按梯度上升更新参数:

θ←θ+αg^\theta \leftarrow \theta + \alpha \hat{g}

直到收敛。

RLHF理论基础:策略梯度
https://fuwari.vercel.app/posts/note/policybased/
Author
P19E99
Published at
2026-02-22
License
CC BY-NC-SA 4.0