策略梯度
不学 Q 值,直接优化"做哪个动作的概率"——回报高的轨迹,就提高它的发生概率
01 核心原理(大白话版)
DQN 的思路是:先学会估计每个动作的"价值"(Q 值),再选价值最高的动作。这在离散动作空间下很好用,但连续动作空间(如机器人关节角度)就很难直接取 argmax。
策略梯度换了一个思路:直接用神经网络输出动作的概率 π_θ(a|s),然后通过梯度上升让好的轨迹更容易发生,坏的轨迹更难发生。
核心公式是策略梯度定理:∇J(θ) = E[G_t · ∇log π_θ(a_t|s_t)]。直觉就是:回报 G 高 → 梯度方向正确 → 提高这些动作的概率。
Value-based vs Policy-based
Value-based(DQN)
学 Q(s,a),策略 = argmax Q。需要离散动作,不能直接处理连续动作空间。
Policy-based(策略梯度)
直接学 π(a|s),可处理连续动作,能学到随机策略(探索)。但方差大,收敛慢。
REINFORCE 算法
θ ← θ + α · G_t · ∇log π_θ(a_t|s_t)
G_t = 从时刻 t 开始的折扣累计回报
用当前策略 π_θ 与环境交互,记录 (s₀,a₀,r₁,s₁,a₁,r₂,...) 一整条轨迹。
G_t = r_t + γr_{t+1} + γ²r_{t+2} + ...,越早的步骤看得越远。
G_t 越大 → 该时刻动作对应的 log π 梯度权重越大 → 该动作概率提高越多。
步骤1:策略 π(a|s) 是什么
步骤2:策略梯度定理——REINFORCE 核心公式
步骤3:方差问题与基线(Baseline)
REINFORCE 梯度估计方差很大,减去基线可显著降低方差而不影响期望:
步骤4:完整 REINFORCE 训练(GridWorld)
在 4×4 网格中训练,观察策略从随机到收敛的过程:
REINFORCE 的问题:需要等整条轨迹结束才能更新(Monte Carlo),方差大,样本效率低。解决方案:Actor-Critic(用 Critic 估计 V(s) 做基线)→ A2C/A3C → PPO。
02 代码
修改 LR、GAMMA、EPISODES,观察学习率和折扣因子对收敛速度的影响。
03 学术性讲解
策略梯度定理的推导直觉
目标函数 J(θ) = E_τ[R(τ)],对 θ 求梯度时,利用 log-导数技巧:∇p(τ) = p(τ)·∇log p(τ)。 轨迹概率 p(τ) = ∏π_θ(a_t|s_t)·P(s_{t+1}|s_t,a_t),取对数后环境转移项消失,只剩策略项。 这是策略梯度方法的数学基础——环境动力学不需要可微分,只需要能采样。
演进路线
REINFORCE (1992)
Williams 提出,Monte Carlo 回报,方差大,无 baseline。
Actor-Critic
Actor 输出策略,Critic 估计 V(s) 作为基线。TD 误差(Advantage)替代 G_t,方差更小。
PPO (2017)
在 Actor-Critic 基础上,加 Clip 约束防止策略更新步幅过大,是目前最常用的策略梯度算法。
策略梯度 vs Q-Learning
优先策略梯度
动作空间连续或高维、需要随机策略(探索)、策略本身结构有特殊约束时。
优先 Q-Learning/DQN
动作空间小且离散、样本效率要求高(可以用 Replay Buffer)、需要 off-policy 学习时。