想象你是深夜山林里的一位寻宝者。山体漆黑一片,地形高低起伏,你只有一盏只能照亮脚下几步的灯。你有一套固定的“步伐习惯”,用一串数字 θ 描述——心情低落时步子偏大,遇到陡坡时爱往左绕。每次进山,你都会走出不同的路线,站到不同的海拔上,而海拔高低就是这一趟的回报。你可以反复进山,但山总在变:落石、风向、土质都会捣乱。所以单次走得高不算本事,真正重要的是“长期平均下来你能站多高”。 现在向导递来一张数学地图,上面写着一个叫“策略梯度定理”的结论。它回答的问题非常具体:我怎么根据已经走过的路,调整步伐参数 θ,让长期平均海拔涨得最快? 整张地图的路线是先写下“平均收获”的数学表达式,再用一把叫“对数导数”的扳手把藏在概率乘积里的梯度一寸寸撬出来,最后惊喜地发现——环境的地质细节全被消掉了,只剩“把每一步动作的对数概率往高回报轨迹的方向推一推”。这就是 REINFORCE 的来历,也是 PPO 等现代强化学习算法的理论地基。

岗位关联

学懂这段推导,你就拿到了强化学习策略优化方法的“源代码”:REINFORCE、Actor-Critic、PPO 不再需要死记公式,而是能顺着数学逻辑自己推出来。

目录
  1. 可视化演示
  2. 目标函数建立
  3. 轨迹概率拆解
  4. 对数导数技巧
  5. 期望梯度化简
  6. 回报加权梯度
  7. 基线降方差
  8. PPO更新关联
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

Step 1: 期望回报的微分 梯度与积分交换 → 对概率密度求导 将梯度算子移入积分号内,对概率密度求导 Step 2: 轨迹联合概率分解 J(θ) = ∫ p(τ;θ) · R(τ) dτ 期望回报 = 所有轨迹的概率 × 回报 的积分 策略梯度定理推导可视...

目标函数建立

想象你是深夜山林里的一位寻宝者。山体漆黑一片,地形高低起伏,你手里有一盏只能照亮几步路的灯。你有一套固定的“步伐习惯”,用一串数字 θ 描述:心情低落时步伐稍大,地形陡峭时爱往左绕。每次进山,你都会因为这套习惯走出各种路线,最后站在不同海拔上——海拔的高低就是这次“寻宝”的回报。山上总有落石、风向等随机因素,所以单次走得高不算本事,真正重要的是“长期平均下来你能站多高”。

这个“长期平均海拔”就是强化学习里的期望回报 J(θ)。策略 π_θ(a|s) 是你在状态 s 下选择动作 a 的概率分布,θ 是策略网络的权重。一条完整的轨迹 τ = (s₀, a₀, s₁, a₁, …, s_T) 记录了你从起点到终点的全部经历。期望回报就是对所有可能轨迹的“概率 × 回报”加权和:

问题来了:J(θ) 是一个积分,θ 藏在内层概率密度里。我们不能直接对积分号外的 J 求导,只能想办法把对 θ 的求导“穿过”积分。整篇文章就是围绕“如何安全地把梯度搬进期望”展开的:先拆开轨迹概率,再用对数导数搬动梯度,最后化简成能采样的形式。

寻宝者像是在问向导:“我该往左挪还是往右挪?”——但这个问题的答案藏在所有可能路线的加权和之中,无法一眼看穿。策略梯度定理就是这位向导即将递来的地图。

J(θ)=Eτ∼pθ(τ)[R(τ)]=∫pθ(τ) R(τ) dτJ(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)}[R(\tau)] = \int p_\theta(\tau)\,R(\tau)\,\mathrm{d}\tau
平均海拔 = 每种路线的概率 × 该路线终点海拔,对全部路线累加。
  1. 期望符号$\mathbb{E}_{\tau \sim p_\theta(\tau)}[\cdot]$ 表示轨迹 $\tau$ 按概率密度 $p_\theta(\tau)$ 随机抽样后的平均。
    Eτ∼pθ(τ)[R(τ)]\mathbb{E}_{\tau \sim p_\theta(\tau)}[R(\tau)]
  2. 积分展开把期望展开成轨迹空间上的积分,积分核是“轨迹概率 × 回报”。
    ∫pθ(τ) R(τ) dτ\int p_\theta(\tau)\,R(\tau)\,\mathrm{d}\tau

轨迹概率拆解

一条路线不是瞬间生成的。回想你进山的每一步:起点入口由山林随机决定;站在某个位置 s_t,你按习惯迈出一步 a_t;这一步踩下后,地形(泥土松软、岩石光滑)把你带到新位置 s_{t+1};然后你继续迈步……整条路就是“你——山——你——山”交替出来的。每一步只取决于当前的脚印和这一步的选择,不回头看更早的历史——这就是马尔可夫链的结构。

把这段直觉写成数学,轨迹的联合概率 p_θ(τ) 能拆成三块相乘:初始状态分布 p(s₀)、策略项 π_θ(a_t|s_t)(你,含参数 θ)、状态转移项 p(s_{t+1}|s_t,a_t)(山,不含 θ):

这个分解是整个推导的地基:它告诉我们 θ 只出现在每步的 π_θ 因子中。环境项虽然影响轨迹的分布,但不直接贡献对 θ 的梯度——这为后面的“消去”埋下伏笔。

寻宝者把走过的每一步都记在账本上,标清“哪一步是自己选的、哪一步是地形推的”。这份账本,正是下一节要对它求导的原料。

pθ(τ)=p(s0)∏t=0T−1πθ(at∣st)  p(st+1∣st,at)p_\theta(\tau) = p(s_0)\prod_{t=0}^{T-1}\pi_\theta(a_t|s_t)\;p(s_{t+1}|s_t,a_t)
轨迹概率 = 起点概率 × 沿途每个“你的动作概率” × “山的反馈概率”的连乘。
  1. 初始状态分布轨迹第一个状态 $s_0$ 由环境的初始分布决定,与策略无关。
    p(s0)p(s_0)
  2. 策略项每一步在状态 $s_t$ 选择动作 $a_t$ 的概率,包含全部参数 $\theta$。
    ∏t=0T−1πθ(at∣st)\prod_{t=0}^{T-1}\pi_\theta(a_t|s_t)
  3. 转移项地形把 $(s_t,a_t)$ 变成 $s_{t+1}$ 的概率,即环境模型。
    ∏t=0T−1p(st+1∣st,at)\prod_{t=0}^{T-1}p(s_{t+1}|s_t,a_t)
  4. 连乘结构三部分相乘构成完整的轨迹概率链,是马尔可夫决策过程的直接体现。
    p(s0)∏tπθ(at∣st) p(st+1∣st,at)p(s_0)\prod_{t}\pi_\theta(a_t|s_t)\,p(s_{t+1}|s_t,a_t)

对数导数技巧

现在你盯着账本上的连乘式发愁:直接对一大串乘积求导,会拖出又长又乱的表达式。但你发现账本的每一行都能取“对数”——对数有个神奇特性:把乘法变成加法。一串数的乘积取对数,就是每位对数相加。而导数就像个“灵敏度探测器”,加总结构的灵敏度显然比连乘结构好算得多。

数学上这招叫对数导数。对任意正函数 f 有 f'/f = (log f)'。所以概率的梯度可以改写为:

从目标函数视角看,原本“对积分内的 p_θ(τ) 求导”被换成了“对 log p_θ(τ) 求导后乘回 p_θ(τ)”。前者难算,后者却因为 log 能拆连乘而变得可行。这个技巧在统计里被称为得分函数(score function),核心思想是“用对数概率的梯度去表示概率本身的梯度”。

寻宝者手里多了一把“对数钥匙”——用这把钥匙,锁在乘积里的决策灵敏度会一道一道被拧开。

∇θpθ(τ)=pθ(τ)  ∇θlog⁡pθ(τ)\nabla_\theta p_\theta(\tau) = p_\theta(\tau)\;\nabla_\theta \log p_\theta(\tau)
概率本体的梯度 = 概率本体 × 对数概率的梯度。这就是后续一切化简的扳手。
  1. 对数求导公式因为 $\frac{\mathrm{d}}{\mathrm{d}\theta}\log f(\theta) = \frac{f'(\theta)}{f(\theta)}$,把 $f(\theta) = p_\theta(\tau)$ 代入。
    ∇θlog⁡pθ(τ)=∇θpθ(τ)pθ(τ)\nabla_\theta\log p_\theta(\tau) = \frac{\nabla_\theta p_\theta(\tau)}{p_\theta(\tau)}
  2. 两侧同乘概率将分母 $p_\theta(\tau)$ 乘到等号另一边,得到梯度的改写式。
    ∇θpθ(τ)=pθ(τ) ∇θlog⁡pθ(τ)\nabla_\theta p_\theta(\tau) = p_\theta(\tau)\,\nabla_\theta\log p_\theta(\tau)

期望梯度化简

钥匙已经插进锁里。现在把对数导数搬进 J(θ) 的梯度:原来积分号外面求导,导数必须攻击整块概率;替换后,攻击目标变成 log 轨迹概率,而原概率被“转指”为采样的权重。这样梯度就钻进了期望内部,变成“采样后取平均”的形式。

对 J(θ) 求梯度,再把上一节的等式代入:

接着展开 $\nabla_\theta\log p_\theta(\tau)$:连乘取对数变连加,然后逐项求导。真正精彩的时刻来了——初始分布和转移概率都不依赖 θ,求导后等于零:

“环境模型消失”是整个推导最常被误解的地方。注意:被消掉的是“环境模型的梯度”,不是环境模型的概率。我们依然要在真实环境里跑轨迹来采样,只是计算梯度时不需要知道转移概率的解析形式——这正是策略梯度方法能用于机器人、游戏等黑盒环境的根本原因。

寻宝者发现:原来优化步伐根本不需要知晓山体的完整地质图!只要把自己每一步动作的对数灵敏度记录下来就够了。

∇θJ(θ)=Eτ∼pθ(τ)[∇θlog⁡pθ(τ)  R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\nabla_\theta \log p_\theta(\tau)\;R(\tau)\right]
∇θlog⁡pθ(τ)=∑t=0T−1∇θlog⁡πθ(at∣st)\nabla_\theta \log p_\theta(\tau) = \sum_{t=0}^{T-1}\nabla_\theta \log\pi_\theta(a_t|s_t)
轨迹概率的对数梯度,最后只剩下“每一步动作的对数概率梯度之和”。
  1. 梯度搬入期望把 $\nabla_\theta p_\theta(\tau)$ 替换为 $p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)$,原积分重写为期望。
    ∇θJ(θ)=Eτ[∇θlog⁡pθ(τ) R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_\tau\left[\nabla_\theta\log p_\theta(\tau)\,R(\tau)\right]
  2. 对数展开轨迹$\log p_\theta(\tau)$ 拆成三段对数之和。
    log⁡p(s0)+∑tlog⁡πθ(at∣st)+∑tlog⁡p(st+1∣st,at)\log p(s_0) + \sum_t\log\pi_\theta(a_t|s_t) + \sum_t\log p(s_{t+1}|s_t,a_t)
  3. 无关项求导归零不含 θ 的项对 θ 求导均为 0。
    ∇θlog⁡p(s0)=0,∇θlog⁡p(st+1∣st,at)=0\nabla_\theta\log p(s_0)=0,\quad\nabla_\theta\log p(s_{t+1}|s_t,a_t)=0
  4. 求和保留策略项只剩 $\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)$。
    ∑t=0T−1∇θlog⁡πθ(at∣st)\sum_{t=0}^{T-1}\nabla_\theta\log\pi_\theta(a_t|s_t)

回报加权梯度

把前两节拼起来,定理终于露出全貌。寻宝者手里握着一份“动作灵敏度清单”(每一步的对数概率梯度),还有每条路线的海拔回报。两者相乘、再做期望——于是路线海拔高,清单上的每个动作都会被向上推;路线海拔低,清单上的动作就被向下压。这就是策略梯度定理的标准形式:

由于期望无法解析计算,REINFORCE 算法用蒙特卡洛采样来估计这个梯度:跑 N 条轨迹,取平均:

直观解释:如果某条轨迹回报很高,说明这条轨迹上的动作“值得多做”,于是沿 $\nabla_\theta\log\pi_\theta$ 上升让这些动作概率变大;回报为负则反向。注意 $R(\tau)$ 在采样后是常数,不参与对 θ 的求导——这一点常被初学者搞混。

回到深夜山林:走完几十条路线后,寻宝者把脚印、动作和最终海拔一起汇总,高原之路上的每个步伐都被加强,低谷之路上的步伐被削弱——下一次进山,他就自然地更贴近金矿了。

∇θJ(θ)=Eτ[∑t=0T−1∇θlog⁡πθ(at∣st)  R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_\tau\left[\sum_{t=0}^{T-1}\nabla_\theta \log\pi_\theta(a_t|s_t)\;R(\tau)\right]
g^=1N∑i=1N(∑t=0T−1∇θlog⁡πθ(at(i)∣st(i)))R(τ(i))\hat{g} = \frac{1}{N}\sum_{i=1}^{N}\left(\sum_{t=0}^{T-1}\nabla_\theta\log\pi_\theta\left(a_t^{(i)}\big|s_t^{(i)}\right)\right)R\left(\tau^{(i)}\right)
用一批真实轨迹的加权平均去近似“期望回报的梯度”,这就是 REINFORCE。
  1. 定理形式把上一节化简结果代回期望梯度,得到回报加权式。
    Eτ[∑t∇θlog⁡πθ(at∣st)R(τ)]\mathbb{E}_\tau\left[\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)\right]
  2. 梯度上升更新参数沿估计梯度方向移动,$\alpha$ 为学习率。
    θ←θ+α g^\theta \leftarrow \theta + \alpha\,\hat{g}
  3. 采样平均估计用 N 条轨迹的样本均值来近似数学期望。
    g^=1N∑i=1N∑t∇θlog⁡πθ(at(i)∣st(i))R(τ(i))\hat{g} = \frac{1}{N}\sum_{i=1}^{N}\sum_t\nabla_\theta\log\pi_\theta(a_t^{(i)}|s_t^{(i)})R(\tau^{(i)})
  4. 概率推动直觉高回报轨迹的 $\log\pi$ 梯度方向被放大,低回报被抑制。

基线降方差

直接用海拔当权重有个麻烦。山里起雾、风向突变都可能让某条路虚高,而一条本不错的路线也可能因为一块滚石跌入低谷。这些纯运气成分会放大梯度估计的噪声,让寻宝者忽左忽右。解决办法是找一个“参考海拔线”:从每条轨迹的回报里减掉这条基线,剩下“比起平均情况多出来的部分”。

基线 b(s_t) 可以依赖于当前状态 s_t,但绝不能依赖当前动作 a_t。于是新的梯度估计为:

为什么减掉基线不改变期望?因为对所有动作求和时,概率分布的总和是 1,梯度之和为 0:

基线不只是理论把戏。REINFORCE with baseline 在实践中让方差成倍下降,训练曲线平滑许多。带基线的式子再进一步,就是 Actor-Critic 家族的基础:用一个神经网络估计 V(s) 作为基线,同时学策略。这也是通往现代算法的桥梁。

有了参考海拔线,寻宝者不再被一时运气牵着走——他看的是“这条路比通常的路线高多少”,而不是“路的绝对海拔是多少”。真正的宝藏之路,就这样从噪声中浮现出来。

∇θJ(θ)=Eτ[∑t=0T−1∇θlog⁡πθ(at∣st)(R(τ)−b(st))]\nabla_\theta J(\theta) = \mathbb{E}_\tau\left[\sum_{t=0}^{T-1}\nabla_\theta\log\pi_\theta(a_t|s_t)\left(R(\tau) - b(s_t)\right)\right]
E[∇θlog⁡πθ(a∣s) b(s)]=∑sp(s)b(s)∑a∇θπθ(a∣s)=∑sp(s)b(s)∇θ1=0\mathbb{E}\left[\nabla_\theta\log\pi_\theta(a|s)\,b(s)\right] = \sum_s p(s)b(s)\sum_a\nabla_\theta\pi_\theta(a|s) = \sum_s p(s)b(s)\nabla_\theta 1 = 0
基线项在期望意义下恒为零,所以无偏;选得好的基线还能大幅降低方差。
  1. 权重改写把 $R(\tau)$ 换成 $R(\tau)-b(s_t)$,代回定理。
    ∑t∇θlog⁡πθ(at∣st)(R(τ)−b(st))\sum_t\nabla_\theta\log\pi_\theta(a_t|s_t)\left(R(\tau)-b(s_t)\right)
  2. 动作求和消零对动作空间求和时 $\sum_a\nabla_\theta\pi_\theta(a|s) = \nabla_\theta 1 = 0$,所以基线项期望为零。
    ∑a∇θπθ(a∣s)=∇θ1=0\sum_a\nabla_\theta\pi_\theta(a|s) = \nabla_\theta 1 = 0
  3. 优势函数最常用的基线是状态价值 $V(s_t)$,于是权重成为优势。
    A^t=R(τ)−V(st)\hat{A}_t = R(\tau) - V(s_t)

PPO更新关联

裸 REINFORCE 还有一个隐患:步子太大容易在黑夜中踩空。每轮更新如果直接把策略权重推得太远,可能让模型立刻崩溃。PPO 给出的解法像个“安全围栏”:更新时只允许新步伐与旧步伐保持接近,用重要性采样的比值作为桥梁,再对比值进行裁剪,防止单次更新越界。

PPO 先收集旧策略 π_θk 的样本,然后用重要性采样比 r_t(θ) = π_θ(a_t|s_t) / π_θk(a_t|s_t) 衡量新旧策略的偏离程度,目标是最大化带裁剪的期望:

策略梯度定理是 PPO 的引擎,重要性采样和裁剪是它的安全装置。现代的 RLHF、游戏 AI 训练几乎都跑在 PPO 上,而它的理论基础,就是我们从 J(θ) 出发一步步搬出来的这个梯度表达式。

寻宝者终于配齐了装备:策略梯度给了方向,基线给了清晰度,PPO 的裁剪则给了安全感。深夜山林里,他可以放开脚步向金矿冲刺了。

LCLIP(θ)=Et[min⁡(rt(θ)A^t, clip(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \mathbb{E}_t\left[\min\left(r_t(\theta)\hat{A}_t,\ \mathrm{clip}\left(r_t(\theta), 1-\epsilon, 1+\epsilon\right)\hat{A}_t\right)\right]
当新策略偏离旧策略太远时,clip 会把这个偏离截住,保证更新平稳。
  1. 重要性采样比$r_t(\theta)$ 衡量新旧策略在动作 $a_t$ 上的概率比值。
    rt(θ)=πθ(at∣st)πθk(at∣st)r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_k}(a_t|s_t)}
  2. 优势加权比值乘以优势 $\hat{A}_t$,方向与策略梯度一致。
    rt(θ)A^tr_t(\theta)\hat{A}_t
  3. 裁剪限幅将比值限制在 $[1-\epsilon, 1+\epsilon]$,超出部分被截断。
    clip(rt(θ),1−ϵ,1+ϵ)\mathrm{clip}(r_t(\theta),1-\epsilon,1+\epsilon)
  4. 保守取小min 选取原始值与裁剪值中较保守的一个,保证更新不过冲。
    min⁡(rt(θ)A^t, clip(rt(θ))A^t)\min\left(r_t(\theta)\hat{A}_t,\ \mathrm{clip}(r_t(\theta))\hat{A}_t\right)

AI 应用场景

游戏 AI 训练(Dota 2 / 围棋)

阶段:策略优化与样本效率改进

解决的问题:传统规则 AI 靠人工设计行为逻辑,无法应对高维动作空间;策略梯度让 AI 直接从对局胜负中学习“哪类动作值得加强”,而不需要人工标注每步的好坏。

具体案例:OpenAI Five 早期用带基线的策略梯度(对应正文第 6 节)训练,在 Dota 2 中通过对局采样估计梯度,逐步提高胜率。每条对局是一条轨迹,胜利与否是回报,策略梯度告诉模型每个操作该被加强还是削弱。

大语言模型 RLHF 对齐

阶段:奖励建模后的策略更新

解决的问题:监督微调只能模仿人类回答风格,无法直接优化“人类满意度”;依赖策略梯度类方法(PPO)把奖励信号传导到生成概率上。

具体案例:InstructGPT / ChatGPT 对齐阶段用 PPO 更新语言模型,生成一个 token 相当于动作,整句回答是一条轨迹,人类偏好模型的打分是回报。策略梯度定理保证了“把高分回答中的 token 概率调高”这一操作在数学上是合理的。

自动驾驶决策策略学习

阶段:连续控制策略优化

解决的问题:换道、超车等决策动作是连续的,基于价值的算法在高维连续动作中失效;高斯策略 + 策略梯度天然适合连续动作空间。

具体案例:仿真环境中用带基线策略梯度训练换道模型,每条完整驾驶轨迹的到达效率作为回报,更新策略均值。正文第 6 节的基线和第 7 节的 PPO 裁剪,帮助训练在复杂路况中保持稳定。

Python 演示

python30 行
import mathimport random  def terrain(x):    """双峰地形函数, 在 x=0.70 附近主峰最高(金矿)"""    return (0.10            + 0.55 * math.exp(-((x - 0.70) / 0.10) ** 2)            + 0.25 * math.exp(-((x - 0.30) / 0.16) ** 2))  def reinforce(num_episodes=800, lr=0.05, sigma=0.18):    center = 0.30    for ep in range(num_episodes):        actions = [random.gauss(center, sigma) for _ in range(24)]        rewards = [terrain(a) for a in actions]        baseline = sum(rewards) / len(rewards)        grad = 0.0        for a, r in zip(actions, rewards):            grad += (r - baseline) * (a - center) / (sigma ** 2)        center += lr * grad / len(actions)        if ep % 100 == 0:            avg = sum(rewards) / len(rewards)            print("episode %d, center=%.3f, avg_reward=%.3f" % (ep, center, avg))    return center  if __name__ == "__main__":    final_center = reinforce()    print("learned center: %.3f (target 0.700)" % final_center)
目的:用带基线的 REINFORCE 在双峰地形上学习“往哪个方向走”,验证策略中心从 0.30 逐步逼近金矿 0.70。
  1. actions = [random.gauss(center, sigma) for _ in range(24)]高斯策略:一批采样 24 个动作,模拟策略 π_θ。
  2. rewards = [terrain(a) for a in actions]与环境交互:每个动作获得地形高度回报,对应 R(τ)。
  3. baseline = sum(rewards) / len(rewards)用本批均值做基线,对应正文第 6 节的降方差技巧。
  4. grad += (r - baseline) * (a - center) / (sigma ** 2)对数概率梯度乘优势累加,正是定理的蒙特卡洛估计。
  5. center += lr * grad / len(actions)梯度上升更新策略参数,对应 $θ ← θ + α·ĝ$。

常见误区

误区“推导里环境概率项都被消掉了,说明策略梯度算法不需要环境,直接在脑子里算梯度就行。”

正解消掉的是环境模型的“导数”,不是环境模型的“概率”。采样得到的轨迹仍然由转移概率决定,你依然要在真实环境里跑数据。就像寻宝者不需要山的施工图,但必须亲自踩在山上才能记下路线。梯度表达式里没有 ∂p/∂θ,但期望本身仍按环境的轨迹分布取样。

为何常见:看到推导中环境项求导归零,就误以为环境连采样都不需要了,把“不需要模型梯度”偷换成了“不需要模型”。

误区“回报是动作产生的,所以回报也要对策略参数求导,梯度里应该出现 ∂R/∂θ。”

正解在 REINFORCE 中,被采样的 R(τ) 当作常数,不参与对 θ 的求导。真正的梯度是对期望(积分)求导,期望里的概率密度是 θ 的函数,而回报函数 R(τ) 完全由环境给定,不依赖 θ。如果把 R 也求导,等于把环境梯度硬塞进来,反而违背了推导的初衷。

为何常见:直觉上觉得“动作影响回报”,就容易把回报也求导,混淆了“轨迹分布”与“回报函数”对 θ 的依赖关系。

误区“我随便给回报减一个常数,比如 10,也能降低方差。”

正解任何与当前动作无关的基线都不改变期望(无偏),但方差可能降低也可能升高。只有贴近该状态下回报期望的基线(如 V(s))才能有效压噪声。一个离群的常数可能反而加大波动,就像减错海拔参考线,让本来就模糊的路径信号更乱。

为何常见:只记住了“基线不改变期望”的证明,忽略方差分析,把“不偏”和“一定降方差”画了等号。

误区“梯度方向是上升方向,更新后 J(θ) 必然增加,训练曲线必然一路向上。”

正解梯度上升只保证无穷小步长下单调。实际用蒙特卡洛估计梯度,本身带随机噪声,步长稍大就可能让回报下降。这正是 PPO 加裁剪、保守更新存在的原因——寻宝者单次迈步可能踩空,护栏的意义就在于此。

为何常见:高数里“梯度方向函数增长最快”的直觉被过度外推,忽略了随机估计误差和有限步长的影响。

面试题

Q1. 策略梯度优化的目标函数通常是?

单选题 · easy

  • A.状态价值的期望和
  • B.策略参数的期望回报← 正确答案
  • C.动作价值函数的最大
  • D.状态动作对的收益总和

答案:B。策略梯度优化的对象是“期望回报” J(θ)=E[R(τ)],它是以策略参数 θ 为自变量的函数。A 是价值函数而非目标,C 是贪婪策略选动作的方式,D 描述的是 Q 值。就像寻宝者追求的是长期平均海拔,而不是某一步踩得有多高。

Q2. 对数导数技巧的核心等式是?

单选题 · mid

  • A.∇p = p∇logp← 正确答案
  • B.∇logp = p∇p
  • C.∇p = logp∇p
  • D.∇logp = ∇p·logp

答案:A。由链式法则 $\nabla\log p = \nabla p / p$,两边乘 p 得 ∇p = p∇log p。它把“乘积概率的梯度”改写成“概率乘对数梯度”,这正是给锁在乘法链条里的 θ 装上钥匙的过程。其余选项方向或变量位置不对。

Q3. 轨迹联合概率中与策略参数无关的是?

单选题 · mid

  • A.动作选择的概率分布
  • B.初始状态的分布概率← 正确答案
  • C.累计回报的最终数值
  • D.策略网络的输出概率

答案:B。轨迹概率 $p_\theta(\tau)=p(s_0)\prod\pi_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t)$ 中,初始状态分布 p(s0) 和转移概率都不含 θ。动作选择概率和策略网络输出都依赖 θ。就像起点入口和地形反应不由你的步伐习惯决定。

Q4. REINFORCE 估计期望梯度使用的方法是?

单选题 · mid

  • A.时序差分误差收敛
  • B.蒙特卡洛采样平均← 正确答案
  • C.贝尔曼方程迭代回溯
  • D.动态规划全空间搜索

答案:B。REINFORCE 直接采样 N 条完整轨迹,用 $\frac{1}{N}\sum\nabla\log\pi·R$ 近似期望梯度。TD 和动态规划都需要价值函数迭代,而 REINFORCE 不需要环境模型,只靠轨迹样本平均,对应寻宝者用走过的路统计最优方向。

Q5. 以下哪些操作可以降低策略梯度的方差?

多选题 · mid

  • A.使用优势函数作为权重← 正确答案
  • B.增加每次采样的轨迹数量← 正确答案
  • C.对回报做低通滤波
  • D.引入状态相关的基线← 正确答案

答案:ABD。优势函数(回报减基线)是标准降方差手段;增加样本量直接减小蒙特卡洛方差;状态相关基线正是正文第 6 节的核心。低通滤波回报会引入偏差且不属于策略梯度常规做法。就像多走几条路、去掉天气虚高,才能看清真正的高产路线。

Q6. 基线函数不引入偏差的充要条件是?

单选题 · hard

  • A.与当前动作无关的任意函数← 正确答案
  • B.必须是状态价值的精确值
  • C.必须是动作价值的估计值
  • D.只能取固定的正数常数

答案:A。只要基线不依赖当前动作 a_t,对动作求和时 $\sum_a\nabla\pi_\theta(a|s)=0$,基线项期望必为零。它可以是任意与动作无关的函数,不限于 V(s) 正数常数。就像参考海拔线放在山的任何位置都不改变“相对高度差”的含义。

Q7. 策略梯度算法的典型特点包括以下哪些?

多选题 · mid

  • A.参数空间内直接优化策略← 正确答案
  • B.无需建立环境转移模型← 正确答案
  • C.更新依赖完整轨迹样本← 正确答案
  • D.保证每轮回报单调递增

答案:ABC。策略梯度直接在参数空间优化 π_θ,推导中环境梯度被消掉所以无需环境模型,REINFORCE 用完整轨迹做蒙特卡洛更新。但受采样噪声影响,并不保证每轮回报单调递增,D 不选。

Q8. 推导中环境模型消失的准确含义是?

单选题 · hard

  • A.完全不需要环境交互学习
  • B.转移概率梯度不会出现← 正确答案
  • C.状态空间信息被完全忽略
  • D.回报函数无需任何设计

答案:B。消失的是 $\nabla_\theta\log p(s_{t+1}|s_t,a_t)$ 这一环境梯度项,转移概率本身仍参与轨迹采样。不与环境交互就无法获得数据,所以 A 错;状态信息仍用于决策,C 错;回报设计始终必要,D 错。

Q9. 策略梯度更新时梯度方向取决于什么?

单选题 · easy

  • A.回报加权后的概率梯度← 正确答案
  • B.状态转移矩阵的逆变换
  • C.回报函数的二阶导数项
  • D.动作空间内的随机游走

答案:A。策略梯度方向是 $\sum\nabla\log\pi_\theta(a_t|s_t)·R(\tau)$,即“回报加权的对数概率梯度”。它告诉参数朝哪个方向移动能让高回报动作更可能发生。转移矩阵逆、二阶导和随机游走都与定理形式无关。

Q10. PPO 相比原始 REINFORCE 的改进措施是?

多选题 · hard

  • A.使用重要性采样比值← 正确答案
  • B.对新旧比值进行裁剪← 正确答案
  • C.改用值函数迭代更新
  • D.限制策略更新的步幅← 正确答案

答案:ABD。PPO 用新旧策略比值 r_t(θ) 做重要性采样,用 clip 将比值限制在 [1-ε, 1+ε],从而限制单步更新幅度。它仍然是策略梯度家族而非值迭代,所以 C 不选。就像给寻宝者装上护栏,既指对方向又限制步子别迈太大。