
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解【强化学习】数学推导专题,20W字总结(十五),期待与你一同探索、学习、进步,一起卷起来叭!
🎯 把我的博客装进你的 Claude Code,它就是你的 AI 学习搭子
想随时搜我的文章、让 AI 帮你深度讲解甚至出面试题?复制下面这段提示词丢进你的 Claude Code——它会自动生成一个本地 SKILL,之后你直接说「搜一下强化学习的文章」就行。RSS 自动同步最新内容,不用手动存任何文件。
请为这个 CSDN 博客创建一个本地 SKILL(存到 .claude/skills/csdn-blog/SKILL.md):
RSS 源:https://rss.csdn.net/m0_51517236/rss/map
支持三件事:① 列出最新文章(标题+链接+摘要);② 按关键词搜索;
③ 抓取指定文章全文,作为 AI 学习助手 / 面试官深度讲解并出题考核我。
SKILL.md 里写清楚 RSS URL、调用方式和示例。生成完就能用自然语言搜文章了。
一键订阅,长期可用。🚀
目录
-
- 1. 策略梯度定理:log 梯度技巧
- 2. 基线为什么不偏
- 3. 广义优势估计 GAE
- 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
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 ❌ [ 勘误 ] /* 暂无 */ 📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免, 本人也很想知道这些错误,恳望读者批评指正!






