1. 策略梯度方法的核心原理
在强化学习中,策略梯度方法直接对策略进行参数化,通过梯度上升来优化策略参数θ。与基于价值函数的方法不同,策略梯度不需要维护价值函数表,特别适用于高维或连续动作空间。
1.1 策略参数化与轨迹概率
假设我们有一个参数为θ的策略网络πθ(a|s),它输出在状态s下采取动作a的概率。当agent与环境交互时,会产生一条轨迹τ=(s1,a1,r1,s2,a2,r2,...,sT,aT,rT)。这条轨迹出现的概率可以分解为:
pθ(τ) = p(s1)∏πθ(at|st)p(st+1|st,at)
其中p(s1)是初始状态分布,p(st+1|st,at)是环境的状态转移概率。值得注意的是,我们只能控制策略πθ(at|st),而无法改变环境动态p(st+1|st,at)。
1.2 期望回报的数学表达
强化学习的目标是最大化期望回报:
J(θ) = Eτ~pθ(τ)[R(τ)] = ∫pθ(τ)R(τ)dτ
其中R(τ)=∑r_t是轨迹τ的总回报。为了优化这个目标,我们需要计算其梯度∇θJ(θ)。
关键理解:策略梯度方法的核心思想是通过改变策略参数θ来增加高回报轨迹的概率,同时减少低回报轨迹的概率。
2. 策略梯度定理与推导
2.1 梯度推导过程
通过对期望回报求梯度,我们得到:
∇θJ(θ) = ∇θ∫pθ(τ)R(τ)dτ
= ∫∇θpθ(τ)R(τ)dτ
= ∫pθ(τ)∇θlogpθ(τ)R(τ)dτ
= Eτ~pθ(τ)[∇θlogpθ(τ)R(τ)]
进一步展开logpθ(τ):
logpθ(τ) = logp(s1) + ∑logπθ(at|st) + ∑logp(st+1|st,at)
求梯度时,只有策略项πθ(at|st)与θ相关,因此:
∇θlogpθ(τ) = ∑∇θlogπθ(at|st)
最终得到策略梯度表达式:
∇θJ(θ) = Eτ~pθ(τ)[(∑∇θlogπθ(at|st))(∑r_t)]
2.2 蒙特卡洛策略梯度实现
在实际操作中,我们通过采样N条轨迹来估计梯度:
∇θJ(θ) ≈ 1/N ∑(∑∇θlogπθ(at|st))(∑r_t)
更新规则为:
θ ← θ + α∇θJ(θ)
其中α是学习率。这就是著名的REINFORCE算法。
3. 策略梯度的改进技巧
3.1 添加基线(Baseline)
原始策略梯度方法存在高方差问题,一个有效的改进是引入基线b(s):
∇θJ(θ) = E[(∑∇θlogπθ(at|st))(R(τ)-b(s))]
基线b(s)通常选择状态值函数V(s),这样A(s,a)=Q(s,a)-V(s)称为优势函数。
实践经验:基线选择不当反而会增加方差。建议开始时使用简单移动平均作为基线,稳定后再尝试学习的状态值函数。
3.2 信用分配问题
整条轨迹的回报R(τ)用于评估每个动作是不合理的,更好的方式是使用从当前时刻开始的回报:
Gt = ∑γ^(k-t)r_k
其中γ是折扣因子。这样更新变为:
∇θJ(θ) ≈ 1/N ∑∑∇θlogπθ(at|st)Gt
3.3 重要性采样与离策略
原始策略梯度是on-policy的,为了重用旧数据,可以使用重要性采样:
∇θJ(θ) = Eτ~q[(pθ(τ)/q(τ))∇θlogpθ(τ)R(τ)]
其中q是行为策略。这需要谨慎处理,因为重要性权重可能带来数值不稳定。
4. 策略梯度的实际应用
4.1 连续控制问题
策略梯度特别适合连续控制任务。例如机械臂控制,策略网络可以直接输出关节力矩:
πθ(a|s) = N(μθ(s),Σθ(s))
其中μθ(s)是均值网络,Σθ(s)通常设为对角协方差矩阵。
4.2 离散动作空间
对于离散动作如游戏控制,策略网络输出每个动作的概率:
πθ(a|s) = softmax(fθ(s))
训练时使用分类交叉熵损失,加权于优势函数。
4.3 并行采样加速训练
策略梯度需要大量轨迹样本,可以通过并行多个环境来加速:
- 创建多个环境实例
- 同步策略参数到各worker
- 并行收集轨迹
- 集中计算梯度更新
5. 常见问题与调试技巧
5.1 训练不稳定问题
策略梯度容易因高方差导致训练不稳定,解决方法包括:
- 减小学习率
- 增加批量大小
- 使用更稳定的优势估计(如GAE)
- 添加梯度裁剪
5.2 探索不足
策略可能过早收敛到局部最优,改进方法:
- 添加熵正则项:-βH(π(·|s))
- 使用随机策略
- 设置最小探索概率
5.3 超参数调优
关键超参数及其影响:
- 学习率:太大导致不稳定,太小收敛慢
- 折扣因子γ:接近1考虑长期回报,接近0关注即时奖励
- 批量大小:越大方差越小,但计算成本高
6. 策略梯度与其他方法的结合
6.1 Actor-Critic架构
结合值函数和策略梯度:
- Critic学习V(s)或Q(s,a)作为基线
- Actor更新策略参数
- 两者可以共享部分网络结构
6.2 信任域方法
如TRPO和PPO,限制策略更新幅度:
maxθ E[πθ(a|s)/πold(a|s)A(s,a)]
s.t. KL(πold||πθ) < δ
这显著提高了训练稳定性。
6.3 逆向强化学习
从专家示范中学习奖励函数,再应用策略梯度:
- 收集专家轨迹
- 学习奖励函数r(s,a)
- 用策略梯度优化策略
7. 实战建议与经验分享
在实际项目中应用策略梯度时,有几个关键点需要注意:
-
监控关键指标:除了回报曲线,还应跟踪策略熵、梯度大小、优势估计的方差等。
-
网络架构选择:对于视觉输入,CNN是标配;对于物理控制,MLP通常足够。注意最后一层的激活函数选择。
-
奖励工程:策略梯度对奖励尺度敏感,建议标准化奖励:
r' = (r - μ)/σ -
并行化实现:使用Ray或MPI实现高效的并行采样,可以显著缩短训练时间。
-
调试技巧:当训练失败时,可以:
- 检查梯度是否合理
- 可视化策略行为
- 简化问题测试算法
8. 策略梯度的理论保证
策略梯度方法有几个重要的理论性质:
-
策略提升定理:在合适的条件下,策略梯度更新保证期望回报不下降。
-
收敛性:对于表格型策略和适当的学习率,策略梯度收敛到局部最优。
-
兼容性条件:当价值函数估计满足特定条件时,策略梯度估计是无偏的。
理解这些理论有助于更好地应用和调整算法。
