
😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本文讲解【强化学习】数学推导专题,20W字总结(十五),期待与你一同探索、学习、进步,一起卷起来叭!
🎯 把我的博客装进你的 Claude Code,它就是你的 AI 学习搭子想随时搜我的文章、让 AI 帮你深度讲解甚至出面试题?复制下面这段提示词丢进你的 Claude Code------它会自动生成一个本地 SKILL,之后你直接说「搜一下强化学习的文章」就行。RSS 自动同步最新内容,不用手动存任何文件。
text请为这个 CSDN 博客创建一个本地 SKILL(存到 .claude/skills/csdn-blog/SKILL.md): RSS 源:https://rss.csdn.net/m0_51517236/rss/map 支持三件事:① 列出最新文章(标题+链接+摘要);② 按关键词搜索; ③ 抓取指定文章全文,作为 AI 学习助手 / 面试官深度讲解并出题考核我。 SKILL.md 里写清楚 RSS URL、调用方式和示例。生成完就能用自然语言搜文章了。一键订阅,长期可用。🚀
目录
-
- [1. 策略梯度定理:log 梯度技巧](#1. 策略梯度定理:log 梯度技巧)
- [2. 基线为什么不偏](#2. 基线为什么不偏)
- [3. 广义优势估计 GAE](#3. 广义优势估计 GAE)
- [4. 重要性采样 & KL 散度](#4. 重要性采样 & KL 散度)
- 小结
番外二。前面十三篇正篇里,我们用了一堆公式------策略梯度定理、PPO 的 clip、GAE、KL 约束......但多数时候是"直接给出结论用"。这篇把背后的核心数学推导补全。四个推导,串起整个系列的数学地基。

1. 策略梯度定理:log 梯度技巧
一切的地基。目标函数 J ( θ ) = E τ ∼ π θ G ( τ ) J(\theta) = \mathbb{E}{\tau \sim \pi\theta}G(\\tau) J(θ)=Eτ∼πθG(τ),要对 θ \theta θ 求梯度。麻烦在于:期望里的概率 Pr ( τ ∣ θ ) \Pr(\tau|\theta) Pr(τ∣θ) 依赖 θ \theta θ,直接求导很乱。
推导的关键一步,是 log 梯度技巧:
∇ θ Pr ( τ ∣ θ ) = Pr ( τ ∣ θ ) ⋅ ∇ θ log Pr ( τ ∣ θ ) \nabla_\theta \Pr(\tau|\theta) = \Pr(\tau|\theta) \cdot \nabla_\theta \log \Pr(\tau|\theta) ∇θPr(τ∣θ)=Pr(τ∣θ)⋅∇θlogPr(τ∣θ)
这是机器学习里的常用变形,本质就是导数公式 d d x log f ( x ) = f ′ ( x ) f ( x ) \frac{d}{dx}\log f(x) = \frac{f'(x)}{f(x)} dxdlogf(x)=f(x)f′(x)。
把它代进梯度的展开式(注意 G ( τ ) G(\tau) G(τ) 不依赖 θ \theta θ,所以 ∇ θ G ( τ ) = 0 \nabla_\theta G(\tau) = 0 ∇θG(τ)=0):
∇ θ J ( θ ) = ∑ τ G ( τ ) Pr ( τ ∣ θ ) ∇ θ log Pr ( τ ∣ θ ) = E τ ∼ π θ G ( τ ) ∇ θ log Pr ( τ ∣ θ ) \nabla_\theta J(\theta) = \sum_\tau G(\tau) \Pr(\tau|\theta) \nabla_\theta \log \Pr(\tau|\theta) = \mathbb{E}{\tau \sim \pi\theta}G(\\tau) \\nabla_\\theta \\log \\Pr(\\tau\|\\theta) ∇θJ(θ)=τ∑G(τ)Pr(τ∣θ)∇θlogPr(τ∣θ)=Eτ∼πθG(τ)∇θlogPr(τ∣θ)
再把轨迹概率 Pr ( τ ∣ θ ) = p ( S 0 ) ∏ t π θ ( A t ∣ S t ) p ( S t + 1 ∣ S t , A t ) \Pr(\tau|\theta) = p(S_0) \prod_t \pi_\theta(A_t|S_t) p(S_{t+1}|S_t,A_t) Pr(τ∣θ)=p(S0)∏tπθ(At∣St)p(St+1∣St,At) 取 log 求梯度------只有 π θ \pi_\theta πθ 依赖 θ \theta θ,其余项梯度为 0,于是:
∇ θ log Pr ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log π θ ( A t ∣ S t ) \nabla_\theta \log \Pr(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(A_t|S_t) ∇θlogPr(τ∣θ)=t=0∑T∇θlogπθ(At∣St)
代回去,就得到了策略梯度定理:
∇ θ J ( θ ) = E τ ∼ π θ ∑ t = 0 T G ( τ ) ∇ θ log π θ ( A t ∣ S t ) \boxed{\nabla_\theta J(\theta) = \mathbb{E}{\tau \sim \pi\theta}\left\\sum_{t=0}\^T G(\\tau)\\, \\nabla_\\theta \\log \\pi_\\theta(A_t\|S_t)\\right} ∇θJ(θ)=Eτ∼πθt=0∑TG(τ)∇θlogπθ(At∣St)
💡 一句话:用 log 梯度技巧,把"对概率求导"转化成"对 log 概率求导",于是能用采样近似期望------这就是策略梯度能跑起来的根本原因。
2. 基线为什么不偏
第 4 篇我们说"减去基线不改变梯度期望,只降方差"。证明其实很短,核心是这条等式:
E x ∼ P θ ∇ θ log P θ ( x ) = 0 \mathbb{E}{x \sim P\theta}\\nabla_\\theta \\log P_\\theta(x) = 0 Ex∼Pθ∇θlogPθ(x)=0
为什么?因为概率分布总和为 1: ∑ x P θ ( x ) = 1 \sum_x P_\theta(x) = 1 ∑xPθ(x)=1,两边求梯度得 ∇ θ ∑ x P θ ( x ) = 0 \nabla_\theta \sum_x P_\theta(x) = 0 ∇θ∑xPθ(x)=0,再用 log 梯度技巧展开就是上面那条等式。
把它套到策略梯度里:基线 b ( S t ) b(S_t) b(St) 只依赖状态、不依赖动作 A t A_t At,所以:
E A t ∼ π θ b ( S t ) ⋅ ∇ θ log π θ ( A t ∣ S t ) = 0 \mathbb{E}{A_t \sim \pi\theta}b(S_t) \\cdot \\nabla_\\theta \\log \\pi_\\theta(A_t\|S_t) = 0 EAt∼πθb(St)⋅∇θlogπθ(At∣St)=0
注意:回报 G t G_t Gt 依赖动作 A t A_t At,所以 G t G_t Gt 不能随便当基线;但 b ( S t ) b(S_t) b(St) 不依赖动作,可以。
既然这一项期望为 0,那在权重里加加减减都不影响梯度期望------基线纯粹是降噪,不引入偏差。这就是带基线 REINFORCE 和 Actor-Critic 的理论基础。
3. 广义优势估计 GAE
PPO、GRPO 实战里都在用的优势估计。起点是单步 TD 误差:
δ t = R t + γ V ( s t + 1 ) − V ( s t ) \delta_t = R_t + \gamma V(s_{t+1}) - V(s_t) δt=Rt+γV(st+1)−V(st)
多步优势是 TD 误差的累加(看 k k k 步):
A t ( k ) = ∑ l = 0 k − 1 γ l δ t + l A_t^{(k)} = \sum_{l=0}^{k-1} \gamma^l \delta_{t+l} At(k)=l=0∑k−1γlδt+l
GAE(广义优势估计) 把不同步数的优势做指数加权平均,引入超参数 λ ∈ 0 , 1 \lambda \in 0,1 λ∈0,1:
A t G A E = ∑ l = 0 ∞ ( γ λ ) l δ t + l A_t^{GAE} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} AtGAE=l=0∑∞(γλ)lδt+l
λ \lambda λ 在偏差和方差之间调平衡:
- λ = 0 \lambda = 0 λ=0: A t G A E = δ t A_t^{GAE} = \delta_t AtGAE=δt(单步 TD,偏差大、方差小)
- λ = 1 \lambda = 1 λ=1: A t G A E = ∑ γ l R t + l − V ( s t ) A_t^{GAE} = \sum \gamma^l R_{t+l} - V(s_t) AtGAE=∑γlRt+l−V(st)(蒙特卡洛,偏差小、方差大)
- 中间值(如 0.95):两者的折中
GAE 有个漂亮的递推形式,逆序一遍就算完(实战里就这么写):
A t = δ t + γ λ A t + 1 A_t = \delta_t + \gamma\lambda\, A_{t+1} At=δt+γλAt+1
python
def compute_advantage(gamma, lmbda, td_delta):
advantage = 0.0
advantage_list = []
for delta in td_delta[::-1]: # 逆序遍历
advantage = gamma * lmbda * advantage + delta
advantage_list.append(advantage)
advantage_list.reverse()
return torch.tensor(advantage_list, dtype=torch.float)
💡 这就是第 7、13 篇代码里那个 compute_advantage 的来历------一个递推搞定所有步的优势。
4. 重要性采样 & KL 散度
最后两个概念,是 PPO 那套 ratio + 约束的理论支撑。
重要性采样 :想用"旧策略 π o l d \pi_{old} πold 采的样本"去估计"新策略 π θ \pi_\theta πθ 的期望",得给每个样本乘一个重要性权重(概率比):
E x ∼ π θ f ( x ) = E x ∼ π o l d π θ ( x ) π o l d ( x ) f ( x ) \mathbb{E}{x \sim \pi\theta}f(x) = \mathbb{E}{x \sim \pi{old}}\left\\frac{\\pi_\\theta(x)}{\\pi_{old}(x)} f(x)\\right Ex∼πθf(x)=Ex∼πoldπold(x)πθ(x)f(x)
PPO 里那个 ratio = π_θ/π_old 就是它------让旧数据能被新策略复用(on-policy 的数据多轮用)。代价是 ratio 太大会方差爆炸,所以 PPO 用 clip 把它限制住。
KL 散度 D K L ( P ∥ Q ) \mathbb{D}_{KL}(P \| Q) DKL(P∥Q):衡量两个概率分布 P P P 和 Q Q Q 的差异, P = Q P=Q P=Q 时为 0,否则为正。RLHF/DPO 里用它当约束------惩罚新策略偏离参考模型太远,防止模型为刷分学歪。

小结
| 推导 | 解决什么 | 出现在 |
|---|---|---|
| 策略梯度定理(log 技巧) | 策略梯度为什么能算 | 所有策略梯度法 |
| 基线无偏 | 减基线为何不偏 | REINFORCE、Actor-Critic |
| GAE | 多步优势的偏差/方差平衡 | PPO、GRPO |
| 重要性采样 | 旧数据被新策略复用 | PPO 的 ratio |
| KL 散度 | 约束策略别偏离 | RLHF、DPO |
一句话记:log 梯度技巧让策略梯度可算,基线让它在降噪中不偏,GAE 让优势估得稳,重要性采样+KL 让旧数据安全复用。这套数学,撑起了从 REINFORCE 到 GRPO 的全部算法。
下一篇番外,上面试题精选。
📌 笔者 文艺倾年
📃 更新 2026.06.14
❌ 勘误 /* 暂无 */
📜 声明 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!
