对策略本身求导 — 从 REINFORCE 到 PPO
这一章讲三件事: 策略梯度定理那一行式凭什么成立; REINFORCE 怎么拿整条轨迹把它落地,方差为什么大、基线怎么救; 从 SAC 到 TRPO 再到 PPO,这条线上的每个算法各自修的是哪个毛病。 读完你应能把第 06–08 章的「估值派」与本 章「直接学策略派」放在同一张地图上, 并能说出今天工业界首选的 PPO 到底在防什么。
1. 这一章讲什么
前面三章都走「先估值、再照着价值选动作」——值函数路线。 原书把另一条路线的材料拆散在各节:推导放在 DQN 节里,REINFORCE 放在章尾, SAC/DDPG/TRPO/PPO 各自一节1。我们按因果次序把它重排成一条链——
对策略求导(定理) → 落地采样(REINFORCE)
→ 毛病一:方差大 → 基线 / 优势 / 熵正则 / 自举(→ A2C、SAC)
→ 毛病二:一步迈太大、策略崩坏 → 确定性策略(DDPG/TD3)
→ 信赖域(TRPO)→ 裁剪(PPO)
为什么值得另开一条路?第 07 章的裂缝还在:值函数路线要挑「Q 最大的动作」, 动作连续时挑不了;而策略网络直接输出动作本身,没有这个死结。
2. 顶层全景:一行式 + 两个毛病
策略梯度定理(书里从期望回报 J(θ) 求导推出 [^2]):
∇J(θ) = E[ G(τ) · ∇ log π(动作 | 状态) ]
│ │
│ └── 「往提高这个动作概率的方向」
└── 这条轨迹最终拿到的回报,当权重
白话:回报高的轨迹,里面每个动作的概率都往上提;回报低(或为负)的往下压。
毛病一:G 是整条轨迹的真实回报——噪声巨大(方差大)
毛病二:每步更新迈多迈少没人管——步子一大,策略崩坏
→ 全家谱 就是对这两个毛病的一串手术。
主走查:一条 3 步轨迹把一行式算成具体数字;再用一对数看 PPO 的裁剪。
3. 核心原理
3.1 主走查(上):REINFORCE,一条轨迹算一遍
REINFORCE 是策略梯度定理的最直接实现:书里指出,过去的奖励不改变梯度方向, 于是每一步的权重可以用「从这步往后还能拿多少」(Gₜ)代替整条回报2; 它是蒙特卡罗式的——必须采完整条情节才有样本,书里原话「需要完整 episode」2。
拿 Pong 的一局走(γ=0.9;Q 值外全部数字为演示编的): 三步动作,前两步没得分、最后一步赢球 +10。
轨迹: a₀ ── a₁ ── a₂ ──► 赢(+10)
奖励: r₁=0 r₂=0 r₃=10
每步的「往后还能拿多少」:
G₀ = 0 + 0.9×(0 + 0.9×10) = 8.1
G₁ = 0 + 0.9×10 = 9.0
G₂ = 10
更新方向:三个动作的 log π 梯度,分别乘 8.1、9.0、10.0 后相加
→ 三个动作的概率全部上调,最后一步(离奖励最近)权重最大
看出毛病了吗?赢球靠的是最后一步,可前两步也被「灌了 8、9 分的水」一并上调—— 它们可能纯属瞎走。这就是书里说的:MCMC 采样方差很大,学得慢3。
3.2 基线:从「打了多少分」到「比平均好多少」
书里的修法一行:给 G 减一个基准 b。妙处在于可以证明 E[ b·∇log π ] = 0——减去任何与动作无关的常数,梯度期望不变(仍无偏), 而方差实打实降下来;书里推荐的好基准就是状态价值 V(s)4。
接上例:评论员估计 V ≈ 9.0(这个局面平均能拿 9 分)
修正后的权重:A₀ = 8.1−9.0 = −0.9 A₁ = 0 A₂ = +1.0
→ 第一步从「上调 8.1」变成「下调 0.9」:瞎走终于被认出来了
这正是第 08 章演员-评论员里那个「优势」——值函数路线与策略路线在这里握手: 评论员提供基准,演员按优势调概率。书里把这套组合的完整公式 (演员梯度、评论员的 MSE/Huber 目标)都给了5。
3.3 SAC:把「多试试」写进目标函数
第 04 章埋的「奖励+熵」配方在这里开工。SAC 的目标:最大化期望回报, 同时最大化策略的熵。书里给的理由原样保留:熵奖励鼓励探索、改善数据采集、 防止过早收敛到坏的局部最优**(卡在就近的一个不好不坏点上、再也跳不出去)**6。
机制上书里用的是软策略迭代:评估步——贝尔曼算子里加一项熵 (下一状态的价值里扣掉「策略有多随机」的对数项),反复迭代收敛到「软 Q」; 改进步——把新策略向「按软 Q 指数化」的分布靠,靠拢的程度用 KL 散度衡量并最小化7。 书里给出保证:表格情形下,这个交替单调改进7。 两个工程件:训练数据从回放池采(策略可以和采数据的策略不同); 熵前面挂一个系数 α(书里叫温度,「随机性值多少钱」的意思),书里原话: α 代表「策略的随机性与环境回报之间的权重」8,而且 α 自己也按目标梯度调 (目标里写死了你想要的最低熵)8。
3.4 DDPG/TD3:动作连续时,别采样了,直接给数
策略梯度的公式对随机策略求导;动作是连续的、策略确定(同一状态同一动作)时 怎么办? 书里的路数:想挑「Q 最大的动作」要对全空间搜索,计算上很难; 确定性策略梯度(DPG)干脆用函数近似器把这个 argmax 拟出来,神经网络的实现就是 DDPG9。
书里给它的三个标准件10:Q 学习用均方贝尔曼误差;目标网络算 y (y = r + γ·Q_target(s′, μ_target(s′)));目标网络按软更新 ρ 缓慢跟进主网络。 ——第 07 章欠的「目标网络」账,在这里正式入册。 TD3 是它的补丁包,书里列了三条,全部对着「高估」这个老病灶11: 学两个 Q、取较小的那个更新策略;策略与目标网络更新得比 Q 慢(延迟更新); 给目标动作加噪声(目标策略平滑),让策略难去钻「Q 被高估的动作」的空子。
3.5 TRPO → PPO:给步子上锁
策略梯度还有一个没人管的问题:这一步更新迈多大? 步子一大,新策略偏离旧策略太远, 采样数据全部作废,训练崩盘。书里这条线的两级解法:
TRPO(信赖域):书里的核心是带约束的优化——在「新策略离旧策略的 KL 散度 不超过 δ」的信赖域内,最大化优势加权的目标;几何上用共轭梯度解一个 二阶近似,再回溯线搜索找可行步长;书里给出承诺:假设满足时,策略单调改进12。 PPO:书里定位明确——同样想迈最大的一步,但只用一阶方法13。 两个变体:Penalty 版把 KL 当罚项、自动调系数;书里重点讲的是 Clip 版—— 不用任何 KL,直接把目标函数裁掉,消除「新策略跑远」的激励13。