训练RL智能体后选用何种策略?以SAC Minitaur为例
TensorFlow Agents SAC Minitaur教程策略文件解析与推理阶段指南
各策略文件的核心作用
- collect_policy:用于采集训练数据的探索策略,SAC作为离策略算法,该策略会从动作分布中采样(带随机噪声),保证智能体对环境的探索能力,采集到的经验会存入回放池供训练使用。
- greedy_policy:用于评估的确定性最优策略,直接输出动作分布的均值(无探索噪声),训练过程中会定期用它评估智能体的性能,验证训练效果。
- policy:智能体的核心策略网络实例,是collect_policy和greedy_policy的基础。SAC的核心策略包含actor(输出动作分布)和critic(评估动作价值)网络,另外两个策略都是基于这个核心网络衍生的变体——collect_policy加入了采样逻辑,greedy_policy则是取分布均值的确定性输出逻辑。
策略更新的逻辑说明
- checkpoints:持续更新是因为它存储的是核心
policy的模型变量权重,训练过程中每一步权重都会更新,所以检查点会持续保存最新的模型状态,用于后续恢复训练。 - collect_policy、greedy_policy、policy的更新:这三个策略共享核心的模型变量,当checkpoints里的权重更新时,三者的实际行为会同步更新。你看到的“仅在训练启动时更新”是因为它们的结构逻辑(比如采样、确定性输出规则)是初始化时就固定的,后续只是共享的权重在变化,所以文件本身不会频繁修改,但运行时的策略行为是随权重动态更新的。
推理阶段的策略选型与加载步骤
选型建议
推理阶段要获得稳定的最优效果,应选用greedy_policy,它输出的是无探索噪声的确定性最优动作,适合部署时的推理场景。
加载方法
- 初始化与教程一致的策略结构:先构建和训练时相同的SAC智能体及关联策略。
- 加载检查点权重:从
/tmp/policies/checkpoints目录下读取最新的检查点,将权重恢复到核心policy中。 - 直接使用greedy_policy:由于greedy_policy是核心policy的变体,权重恢复后,它会自动使用最新的最优权重进行推理。
示例代码:
# 初始化与训练时一致的智能体和策略 agent = sac_agent.SacAgent( time_step_spec=env.time_step_spec(), action_spec=env.action_spec(), actor_network=actor_net, critic_network=critic_net, # 其他参数与教程保持一致 ) greedy_policy = agent.greedy_policy # 加载最新检查点 checkpoint_dir = "/tmp/policies/checkpoints" checkpoint = tf.train.Checkpoint(agent=agent) latest_checkpoint = tf.train.latest_checkpoint(checkpoint_dir) if latest_checkpoint: checkpoint.restore(latest_checkpoint).expect_partial() # 推理时使用greedy_policy observation = env.reset() # 环境观测输入 action = greedy_policy.action(observation)
内容的提问来源于stack exchange,提问作者Daniel von Eschwege
相关产品推荐
相关产品推荐

