
153、策略梯度REINFORCE:蒙特卡洛策略优化的实现与方差从一次诡异的训练发散说起上周调试一个机械臂抓取策略,用REINFORCE训练了2000个episode,reward曲线前期稳步上升,然后突然某一步开始断崖式下跌,loss直接冲到NaN。我盯着终端看了半天,第一反应是学习率太大,调小之后发现还是炸。后来把每个episode的return打印出来,发现有个episode的return是-500多,而其他都在-20左右——这个离群值直接把梯度炸飞了。这就是REINFORCE最经典的痛点:蒙特卡洛采样带来的高方差。今天这篇笔记,咱们就从代码层面把REINFORCE拆开揉碎,看看方差从哪来,又怎么治。策略梯度到底在优化什么先回到最朴素的设定。我们有一个策略网络π_θ(a|s),输入状态输出动作分布。目标是最大化期望回报J(θ)=E_τ[R(τ)],其中τ是轨迹。策略梯度定理告诉我们:∇J(θ) = E_τ[Σ_t ∇log π_θ(a_t|s_t) · R(τ)]注意这里用的是整条轨迹的return R(τ),不是单步奖励。REINFORCE就是直接用蒙特卡洛采样来估计这个期望——采样N条轨迹,求平均梯度。代码上就是:# 采样一条轨迹states,actions