前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PPO算法离散动作空间、连续动作空间

PPO算法离散动作空间、连续动作空间

原创
作者头像
喏喏心
发布2024-11-21 09:48:55
发布2024-11-21 09:48:55
1.1K0
举报
文章被收录于专栏:强化学习强化学习

好事发生

文章推荐:MFC/C++学习系列之简单记录8——消息映射

文章链接:MFC/C++学习系列之简单记录8——消息映射-腾讯云开发者社区-腾讯云

文章简介:本文介绍了MFC的消息映射类,包括DoDataExchange 函数、BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏,并于WPF做对比,代码解释详细且包含代码实现后效果,适合初学者已经需要使用句柄的朋友!

前言

ppo算法通常用于离散动作的学习,但也可以实现连续动作学习。采用off-policy的更新策略,离散动作和连续动作的PPO算法网络结构分析,为使用PPO算法提供依据。

PPO介绍

PPO(Proximal Policy Optimization)强化学习算法通过限制策略更新的范围,实现了稳定且高效的策略优化,适合在复杂环境中执行连续动作的优化。

关于PPO网络actor层结构的解析

1、连续动作的actor层

代码语言:txt
复制
self.actor = nn.Sequential(
nn.Linear(state_dim, 64),
nn.Tanh(),
nn.Linear(64, 32),
nn.Tanh(),
nn.Linear(32, action_dim),
nn.Tanh())

2、离散动作的actor层

代码语言:txt
复制
self.action_layer = nn.Sequential(
nn.Linear(state_dim, n_latent_var),
nn.Tanh(),
nn.Linear(n_latent_var,
n_latent_var),
nn.Tanh(),
nn.Linear(n_latent_var, action_dim), nn.Softmax(dim=-1) )

为什么更改最后一层网络就能得到连续的结果?

在PPO算法中,网络结构的最后一层之所以能决定是连续动作还是离散动作,是因为最后一层的激活函数会直接影响输出的格式,以适应不同的动作空间需求。

1. 连续动作空间

对于连续动作空间(如 BipedalWalker 环境):

· 输出代表的是动作的均值,在连续动作空间中,动作不再是离散的类别,而是一个区间内的数值。网络输出后会用一个高斯分布来采样生成动作。

· 最后一层使用 Tanh 激活函数,将输出范围限制在 [-1 ,1 ]之间。通过这种方式,可以控制动作值在合理范围内。

· PPO中会使用该均值输出和一个固定的方差定义一个多元高斯分布,根据分布采样出具体动作。

2. 离散动作空间

对于离散动作空间(如 CartPole 环境):

· 输出代表每个动作的概率分布,离散动作空间中每个动作都是一个离散类别,因此需要得到每个动作的概率。

· 使用 Softmax 激活函数将输出转换成概率分布,每个输出的概率和为1。然后可以根据这些概率来采样动作。

总结

· 连续动作:使用 Tanh 限制输出范围,然后定义正态分布进行采样,得到连续值的动作。

· 离散动作:使用 Softmax 产生概率分布,然后根据该分布随机采样得到动作类别。

邀请人:升级打怪的菜鸟

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 好事发生
  • 前言
  • PPO介绍
  • 关于PPO网络actor层结构的解析
  • 为什么更改最后一层网络就能得到连续的结果?
    • 1. 连续动作空间
    • 2. 离散动作空间
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档