十三:强化学习:策略梯度、REINFORCE 与 Actor-Critic¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483978&idx=1&sn=24f8cc4b25243bc33bcec1ea0c61c258&chksm=f01eb133c7693825308b453eda1dfdc7bce0c14162c0375e3d7d86a61ad8212f8e48d953e7b2#rd
1. 学习定位¶
前几天主要学习值函数方法:Sarsa、Q-learning、DQN。它们的核心是先学习 Q(s,a),再通过 argmax 选择动作。策略梯度方法则直接优化策略参数:
policy-based methods
-> objective J(theta)
-> trajectory probability
-> log-derivative trick
-> policy gradient theorem
-> REINFORCE
-> baseline and advantage
-> Actor-Critic
-> TD critic / GAE
-> entropy regularization
-> TRPO trust region
2. 值函数方法与策略方法¶
值函数方法:
策略方法: 策略方法的优势: - 可以自然表示随机策略。-
适合连续动作空间。
-
对高维动作分布更直接。
-
与可微神经网络输出概率分布天然匹配。
局限: - 梯度估计方差高。
-
样本效率通常较低。
-
训练稳定性依赖 baseline、advantage、trust region 等技术。
3. 随机策略参数化¶
离散动作策略通常用 softmax:
连续动作策略常用高斯分布:
在 LLM 中,策略是词表分布:
轨迹概率由每步策略概率和环境转移共同决定:
环境转移不依赖 theta,策略梯度主要作用在 pi_theta 上。
4. 策略目标函数¶
策略优化目标通常写成期望回报:
也可以写成:
其中 d^pi 是策略诱导的状态访问分布。策略梯度的目标是计算或估计:
深度学习框架通常默认做梯度下降,因此实际代码里会最小化负目标。
5. Log-derivative Trick¶
策略梯度推导的关键是 log-derivative trick:
把对概率的梯度,变成 “概率 × 对数概率的梯度” 于是:
-
原来没法求导的期望梯度
-
现在变成了可以采样估算的表达式!
对轨迹分布使用这个技巧:
由于环境转移不依赖策略参数:
得到:用整条轨迹的总收益(G_0),去缩放整条轨迹所有动作的梯度。 - G_0>0(整局赚了正奖励):权重为正 → 顺着梯度更新,
放大所有动作概率,鼓励复现本轨迹的全部行为; - G_0<0(整局亏损、负奖励):权重为负 → 梯度反向,
压低轨迹里所有动作概率,避免再踩同样操作。 这就是 REINFORCE 的基础。
6. Policy Gradient Theorem¶
更常用的策略梯度形式是:
直觉:
策略梯度不需要对环境转移概率求导,因此可以用于未知环境,只需要采样轨迹。7. REINFORCE 算法¶
REINFORCE 是最基础的 Monte Carlo policy gradient 方法。 更新方向:
算法流程:
for each episode:
generate trajectory using pi_theta
compute return G_t for each timestep
update theta by:
theta <- theta + alpha * sum_t grad log pi_theta(A_t|S_t) * G_t
最小化这个 loss 等价于最大化期望回报。
8. Baseline¶
REINFORCE 方差高。可以减去一个不依赖动作的 baseline:
常用 baseline 是状态价值函数:
减 baseline 不改变梯度期望,但可以显著降低方差。原因是:
减去 Baseline 不改变梯度方向,只降低波动!
前提是 b(s) 不依赖当前动作 a。
9. Advantage Function¶
当 baseline 取 V^pi(s) 时:
策略梯度变成:
优势函数表示动作相对该状态平均动作的好坏:
- A > 0:增加该动作概率。
A < 0:降低该动作概率。
优势比原始回报更适合训练,因为它去掉了状态本身好坏造成的公共偏移。
10. Reward-to-go¶
原始 REINFORCE 可用整条轨迹回报 G_0 乘所有动作的 log prob。但某个动作不应该为它发生之前的奖励负责。因此常用 reward-to-go:
当前动作,只对未来奖励负责,不对过去的奖励负责! 更新:
这减少了无关奖励带来的方差。
11. Actor-Critic¶
Actor-Critic 同时学习:
Actor 用 critic 提供的价值或优势来更新策略:Critic 用 TD target 更新价值:
常见 actor update:
其中 TD error 可以作为 advantage 的估计。
12. A2C 与 A3C¶
A2C(Advantage Actor-Critic)通常指同步采样多个环境,计算 advantage 后更新 actor 和 critic。 A3C(Asynchronous Advantage Actor-Critic)使用多个 worker 异步与环境交互并更新全局参数。它通过并行采样降低样本相关性。 二者的核心都是:
policy loss: -log pi(a|s) * advantage
value loss: value prediction 与 return/TD target 的差
entropy loss: 鼓励探索
13. GAE¶
GAE(Generalized Advantage Estimation)用多步 TD error 加权估计 advantage:
delta_t = r_t + gamma V(s_{t+1}) - V(s_t)
A_t^GAE
= delta_t + gamma lambda delta_{t+1}
+ (gamma lambda)^2 delta_{t+2} + ...
lambda 控制 bias-variance 权衡:
- lambda=0 接近一步 TD,方差低但 bias 高。
lambda=1接近 Monte Carlo,bias 低但方差高。
GAE 是 PPO 等算法中非常常见的 advantage 估计方法。 - gamma折扣因子只管reward远近价值 - GAE的lambda则负责:要不要把后面几步的 TD 误差拿来一起估算 A
14. Entropy Regularization¶
策略梯度训练可能过早收敛到确定性策略,探索不足。熵正则鼓励策略保持一定随机性:
常见目标:
在 loss 中通常写为: 熵系数太大,策略会过度随机;太小,探索不足。15. TRPO 的信赖域思想¶
普通策略梯度如果步子太大,策略分布会剧烈变化,导致性能崩坏。TRPO(Trust Region Policy Optimization)限制新旧策略之间的 KL 散度:
核心直觉: TRPO 理论优雅但实现复杂,涉及二阶近似和共轭梯度。PPO 后续用 clipping 或 KL penalty 近似 TRPO 的信赖域思想。16. 实现细节¶
离散动作策略常见实现:
logits = policy_net(states)
dist = Categorical(logits=logits)
actions = dist.sample()
log_probs = dist.log_prob(actions)
entropy = dist.entropy()
-
advantage 常做 normalization。
-
return/advantage 的时间维索引要正确。
-
log prob 必须对应采样时的动作。
-
连续动作要正确计算高斯分布 log probability。
17. 策略梯度的优缺点¶
优点: - 直接优化策略。
-
适合随机策略和连续动作。
-
能与深度网络自然结合。
-
与 LLM token 分布形式一致。
缺点: - 样本效率低。
-
梯度方差高。
-
对 reward scale、advantage 估计、学习率敏感。
-
更新过大可能导致策略崩坏。
18. 与 LLM、RLHF 的联系¶
LLM 的生成过程可以看成策略:
一条输出序列是 trajectory。奖励可以来自人类偏好、奖励模型、规则判分或任务结果。策略梯度更新的核心形式仍然是: PPO、RLHF-PPO、GRPO 都是在这个基础上加入 KL 约束、ratio clipping、group advantage 等稳定化设计。19. 常见误区¶
误区一:策略梯度需要知道环境转移概率。 实际推导中环境转移项不依赖策略参数,不需要对其求导。 误区二:baseline 会改变最优策略。 只要 baseline 不依赖动作,它不改变梯度期望,只降低方差。 误区三:REINFORCE 和 Actor-Critic 没有关系。 Actor-Critic 可以看成用 critic 估计 return/advantage 的策略梯度方法。 误区四:advantage 越大越好。 advantage 尺度过大可能导致更新过猛,通常需要归一化或裁剪。 误区五:TRPO/PPO 是完全不同于策略梯度的算法。 它们仍是策略梯度思想,只是限制策略更新幅度。
20. 核心总结¶
第十三天需要掌握的最小闭环:
Policy:
pi_theta(a|s)
Objective:
J(theta) = E_tau[G_0]
Log-derivative trick:
grad p = p grad log p
Policy gradient:
grad J ∝ E[grad log pi(a|s) Q^pi(s,a)]
REINFORCE:
loss = -log pi(a|s) * G_t
Baseline:
G_t - V(s)
Advantage:
A(s,a) = Q(s,a) - V(s)
Actor-Critic:
actor updates policy
critic estimates value/advantage
TRPO:
restrict policy update by KL trust region
21. 参考资料¶
-
CSDN:策略梯度和 REINFORCE 算法:https://blog.csdn.net/qq_64671439/article/details/137026601
-
CSDN:多种 Actor-Critic 讲解:https://blog.csdn.net/qq_64671439/article/details/137611583
-
动手学强化学习:策略梯度算法:http://hrl.boyuai.com/chapter/2/%E7%AD%96%E7%95%A5%E6%A2%AF%E5%BA%A6%E7%AE%97%E6%B3%95/
-
动手学强化学习:Actor-Critic 算法:http://hrl.boyuai.com/chapter/2/actor-critic%E7%AE%97%E6%B3%95/
-
动手学强化学习:TRPO 算法:http://hrl.boyuai.com/chapter/2/trpo%E7%AE%97%E6%B3%95/
-
Williams, REINFORCE algorithm:https://link.springer.com/article/10.1007/BF00992696
-
Sutton and Barto, Reinforcement Learning: An Introduction, Chapter 13:http://incompleteideas.net/book/RLbook2020.pdf
-
Trust Region Policy Optimization:https://arxiv.org/abs/1502.05477
-
High-Dimensional Continuous Control Using Generalized Advantage Estimation:https://arxiv.org/abs/1506.02438
预览时标签不可点<div class="