

前言#
需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!
开始#
我当年第一次从 Q-learning 切到策略梯度时,最大的爽点是:我终于不用再绕着 去“间接”得到策略了。
在策略梯度里,想法简单到近乎粗暴:
如果某条轨迹的回报是正的,就让这条轨迹里出现过的动作在对应的状态下更容易被采样到;反过来,如果回报是负的,就把这些动作的概率往下压。你可以把它理解成一种“事后表扬/批评”的机制:等整局结束再回头看,整体表现好的轨迹会把里面的决策都带着一起加分。
这一章我们就沿着文档的脉络,把这个想法落到可实现的形式:梯度上升、baseline、为每一步分配合适“分数”(credit assignment),以及最经典的 REINFORCE。
策略梯度的核心直觉#
文档里这段话很关键:在轨迹 中的某一步 ,如果最终发现轨迹奖励是正的,我们就增加在 执行 的概率;反之减少。
要把它变成可训练的东西,通常我们会:
实现上我们通常先用一个参数化策略 (神经网络输出一个动作分布)来表示“我在某个状态下倾向做什么”,再把目标写成最大化期望回报 ,然后用梯度上升去更新参数:
这里的 就是学习率(可以用 Adam / RMSProp)。
两个常用技巧:baseline 与 credit assignment#
技巧 1:添加基线(baseline)#
文档里提到一个看似反直觉的问题:有些动作没被采样到,并不代表它不好,但它的概率可能会被“挤下去”。更本质的说法是:
回报 的方差往往很大,而你又直接用 去乘 log_prob,这会让更新非常抖。baseline 相当于提供了一个参照系,让你关注“相对这条基线我到底赚没赚”,从而显著降低方差。
baseline 的作用就是“减去一个不影响期望但能降方差的量”。最经典的 baseline 就是状态价值 ,于是出现优势函数:
技巧 2:为每一步分配合适的分数#
同一局游戏里,早期动作可能决定路线,后期动作决定收尾。我们希望每一步都乘以不同的权重,反映“这一步对结果贡献有多大”。
最常见的做法就是用每一步的未来折扣回报:
这也直接引出 REINFORCE。
REINFORCE:蒙特卡洛策略梯度#
文档的描述很到位:REINFORCE 是回合更新的方式,先收集每一步 reward,再计算每一步 ,然后用它优化每一步动作输出。
用更“码农”的语言:
你可以把实现想象成一次非常朴素的采样-回传:先 rollout 一整个 episode,把 都记下来;然后从后往前把每一步的 算出来;最后把 loss 写成梯度下降形式去反向传播:
然后反向传播。
本章小结:先让策略“能学”#
策略梯度的魅力在于它很自然地处理连续动作,也能把探索写进分布本身。但它也更抖、更依赖工程细节。
下一章我们会进入一个在实战里更常用的版本:PPO。你可以把 PPO 当成“给策略梯度加上安全带”:让策略每次更新别跨太大步,这对稳定性是质变。