【深度学习】强化学习(三)目标函数的梯度优化与策略提升
1. 目标函数与策略优化的核心关系在强化学习中目标函数 J(θ) 是策略优化的指南针。它量化了策略 πθ 的优劣程度本质上反映了智能体在长期交互中能获得的期望回报。我刚开始研究时常常困惑为什么不能直接用累计奖励作为目标后来发现直接使用轨迹的原始回报会导致训练极不稳定因为不同轨迹的长度和奖励规模差异巨大。目标函数的数学定义看起来简单J(θ) E_{τ∼πθ}[Σγ^t r_t]但这个公式背后隐藏着几个关键设计折扣因子γ控制未来奖励的权重γ接近1时更关注长期收益期望运算E需要对所有可能轨迹求平均这是计算难点策略参数θ通常指神经网络的权重决定了动作选择概率实际项目中我发现目标函数的设计直接影响训练效果。比如在机器人控制任务中当我把γ从0.9调整到0.99时智能体开始学会未雨绸缪会主动避开可能导致未来跌倒的动作。2. 策略梯度定理的推导与实践策略梯度定理是理解策略优化的钥匙。第一次看到这个定理时我被其优雅性震撼——它告诉我们不需要知道环境动力学只需通过采样就能估计梯度。定理的核心结论是∇J(θ) E[∇logπ(a|s) * Q(s,a)]这个公式的实践意义在于对数概率技巧将梯度计算转化为可采样的形式Q值作为权重好的动作会被加强差的动作会被抑制无偏估计只需足够多的样本就能逼近真实梯度在PyTorch中实现时有个细节容易出错# 正确实现 log_prob torch.log(policy_net(state).gather(1, action)) loss -log_prob * Q_value # 负号因为要最大化 # 常见错误忘记取对数或符号错误3. REINFORCE算法的实现细节REINFORCE是最基础的策略梯度算法我在CartPole环境中实现时踩过不少坑。完整流程包括轨迹收集运行当前策略与环境交互states, actions, rewards [], [], [] state env.reset() while not done: prob policy_net(state) action torch.multinomial(prob, 1).item() next_state, reward, done, _ env.step(action) states.append(state) actions.append(action) rewards.append(reward) state next_state回报计算需要从后往前计算折扣回报returns [] G 0 for r in reversed(rewards): G r gamma * G returns.insert(0, G) returns torch.tensor(returns)梯度更新关键是要对回报进行标准化returns (returns - returns.mean()) / (returns.std() 1e-8) loss -torch.mean(log_probs * returns) optimizer.zero_grad() loss.backward() optimizer.step()实际调试时发现如果不做回报标准化训练很容易发散。此外batch size过小会导致方差过大一般至少需要10条完整轨迹。4. 梯度优化的进阶技巧基础策略梯度方法存在高方差问题我在实践中总结了几个有效技巧基线方法用状态值函数作为基线减少方差∇J(θ) E[∇logπ(a|s) * (Q(s,a)-V(s))]优势函数结合TD误差估计优势delta r gamma * V(s) - V(s) advantage discount_cumsum(delta, gamma*lambda)熵正则化防止策略过早收敛probs policy_net(state) entropy -torch.sum(probs * torch.log(probs)) loss -log_prob * advantage - 0.01 * entropy在Atari游戏实验中加入这些技巧后训练稳定性显著提升。特别是熵正则化能有效缓解智能体过早固定策略的问题。5. 策略提升的理论保证策略迭代理论告诉我们策略评估策略改进的循环能保证策略单调提升。但在函数逼近情况下这个保证可能失效。这时需要关注策略性能边界J(π) - J(π) ≥ A(π)/(1-γ) - 2εγ/(1-γ)^2其中ε是优势函数的近似误差。信任域方法通过KL散度约束更新幅度# TRPO的核心约束 kl torch.distributions.kl.kl_divergence(old_policy, new_policy) loss - (advantages * new_probs).mean() constraint kl.mean() delta在机械臂控制任务中使用TRPO后策略更新更平稳避免了普通策略梯度中常见的性能崩溃问题。6. 实战中的挑战与解决方案在真实项目中遇到的主要挑战和应对策略稀疏奖励问题采用基于好奇心的内在奖励设计分层强化学习架构使用逆向强化学习从专家示范中学习奖励函数高维动作空间对连续动作使用高斯策略混合离散-连续动作表示动作分解为多个子动作训练不稳定使用PPO的clip目标函数ratio new_prob / old_prob surr1 ratio * advantage surr2 torch.clamp(ratio, 1-ε, 1ε) * advantage loss -torch.min(surr1, surr2).mean()实现梯度裁剪使用学习率调度器在无人机导航项目中结合PPO和课程学习后训练效率提升了3倍以上。7. 策略梯度与值函数方法的融合Actor-Critic架构结合了两种方法的优势Actor策略网络负责生成动作Critic值函数网络提供评估信号实现时的关键点# 双网络结构 class ActorCritic(nn.Module): def __init__(self): super().__init__() self.actor nn.Sequential(...) # 输出动作概率 self.critic nn.Sequential(...) # 输出状态值 def forward(self, x): return self.actor(x), self.critic(x) # 更新逻辑 values critic(states) advantages returns - values.detach() actor_loss -(log_probs * advantages).mean() critic_loss F.mse_loss(values, returns)在股票交易策略优化中这种架构相比纯策略梯度方法收敛更快最终收益提高了15%。8. 现代深度策略优化算法近年来出现的几种重要算法PPO通过clip机制约束更新clip_ratio 0.2 ratio new_probs / old_probs clip_adv torch.clamp(ratio, 1-clip_ratio, 1clip_ratio) * adv loss -torch.min(ratio * adv, clip_adv).mean()SAC最大熵框架下的离线算法# 温度参数自动调整 alpha_loss -(log_alpha * (log_probs target_entropy).detach()).mean()MPO基于期望最大化的策略搜索# E-step拟合非参数化策略 # M-step投影回参数化策略在模拟机器人 locomotion 任务中SAC 表现出卓越的样本效率能在100万步内学会复杂步态。