You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于TensorFlow将VPG智能体扩展为离散动作空间的PPO智能体

嘿,我来帮你把VPG智能体改成适配离散动作空间的PPO,其实离散空间的PPO比连续的更直观,刚好能贴合你现有的代码逻辑!

核心思路:从VPG到PPO的关键变化

VPG的损失是直接最大化E[logπ(a|s) * A],而PPO的核心是通过Clip目标限制策略更新的幅度,避免单次更新过大导致性能崩溃。对于离散动作空间,我们不需要像连续空间那样处理高斯分布的参数,直接基于动作概率比值做限制就行。

第一步:修改数据收集逻辑

你之前收集的是状态、动作、优势值,现在需要额外保存旧策略下该动作的概率(记为p_old)。或者你也可以在训练前保存旧策略的参数,训练时用旧参数重新计算p_old——前者在收集数据时直接存,效率更高。

第二步:替换损失函数为PPO Clip目标

你原来的VPG损失是:

loss = -tf.reduce_sum(advantages * tf.log(ch_action_p_values))

改成PPO的Clip损失,只需要几步:

  1. 计算当前策略下对应动作的概率p_new(和VPG一样,用softmax输出后取对应动作的值)
  2. 计算新旧策略的概率比值r = p_new / p_old
  3. 用clip(r, 1-ε, 1+ε)限制比值的范围(ε通常取0.2)
  4. 取r*A和clip(r)*A中的较小值,再取负均值作为损失(因为TensorFlow是最小化损失,我们要最大化目标函数)

具体TensorFlow代码示例:

# 假设你有这些输入张量:
# action: [batch_size],每个样本的离散动作索引
# p_old: [batch_size],旧策略下对应动作的概率
# advantages: [batch_size],每个样本的优势值
# current_policy_output: [batch_size, num_actions],当前策略softmax后的动作概率分布

# 提取当前策略下对应动作的概率
p_new_selected = tf.gather(current_policy_output, action, batch_dims=1)
# 计算新旧策略的概率比值
r = p_new_selected / p_old
# 限制比值范围(ε=0.2)
clip_r = tf.clip_by_value(r, 0.8, 1.2)
# 计算两种情况的目标值
objective_unclipped = r * advantages
objective_clipped = clip_r * advantages
# 取最小的目标值,再取负均值作为损失
loss = -tf.reduce_mean(tf.minimum(objective_unclipped, objective_clipped))

关于你问的KL散度相关问题

  1. 是否需要用KL惩罚版本?:如果你看的文章里提到的第一种形式是带KL惩罚的PPO,那其实现在更常用的是Clip版本(就是上面的实现),不需要手动处理KL,省掉了调beta系数的麻烦,适合入门。
  2. KL散度的计算方式:如果一定要用KL惩罚版本,离散空间的KL是对每个样本的完整动作分布计算:
    # p_old_dist: [batch_size, num_actions],旧策略的完整动作概率分布
    # p_new_dist: [batch_size, num_actions],当前策略的完整动作概率分布
    kl_per_sample = tf.reduce_sum(p_old_dist * tf.log(p_old_dist / p_new_dist), axis=1)
    batch_kl = tf.reduce_mean(kl_per_sample)
    
    这里每个样本对应一个KL值,训练时取整个批次的均值作为监控指标,用来调整惩罚系数beta。
  3. *prob_s_a_的含义:prob_s_a_old是旧策略在状态s下选动作a的概率,prob_s_a_new是当前策略的对应值,两者的比值就是上面的r。

额外注意点

  • 旧策略的更新:PPO是每隔N步把当前策略的参数复制给旧策略,然后用收集到的数据训练当前策略多个epoch(比如10次)——这是PPO能重复利用数据的关键,比VPG的单次更新更高效。
  • 离散空间的优势:不需要处理连续空间的方差、熵正则(当然也可以加熵正则鼓励探索,不过不是必须的),直接用softmax输出的概率就行,逻辑和VPG高度兼容。

内容的提问来源于stack exchange,提问作者alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:39