| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Proximal Policy Optimization(PPO)算法实现gym连续动作空间任务Pendulum-v0(pytorch) -> 正文阅读 |
|
[人工智能]Proximal Policy Optimization(PPO)算法实现gym连续动作空间任务Pendulum-v0(pytorch) |
目录 1.ppo算法概述
? ? ? ? ?视频参考李宏毅强化学习课程:李宏毅深度强化学习(国语)课程(2018)_哔哩哔哩_bilibili? ? ? ?? ? ? ? ? 上图表示actor与环境交互的一次经过,从开始的状态s1,actor输出a1到环境状态变为s2...直到st环境判断一次游戏结束。我们收集到了一次的游戏轨迹称为一个episode。 ? ? ? ? 那么我们可以计算完成这次episode的概率为: ???????? ????????? ????????序列τ所获得的奖励为每个阶段所得到的奖励的和,称为R(τ)。因此,在Actor的策略为π的情况下,所能获得的期望奖励为: ???????? ????????? ????????而我们的期望是调整Actor的策略π,使得期望奖励最大化,于是我们有了策略梯度的方法,既然我们的期望函数已经有了,我们只要使用梯度提升的方法更新我们的网络参数θ(即更新策略π)就好了,所以问题的重点变为了求参数的梯度。梯度的求解过程如下: ???????? ???????? ????????上面的过程中,我们首先利用log函数求导的特点进行转化,随后用N次采样的平均值来近似期望,最后,我们将pθ展开,将与θ无关的项去掉,即得到了最终的结果。 所以,一个PG方法的完整过程如下: ? ? ? ? 2.ppo ? ? ? ? ? ? ? ? ppo是再PG算法的基础上加了策略更新的限制,即不允许下一次更新与上一次的策略相差太大。具体不在这赘述详细可以去看上面连接的李宏毅老师的视频。 ? ? ? ? ? ? ? ? 下面代码的实现是采用clip ppo的方式。 2.Pendulum-v0????????倒立摆摆摆问题是控制文献中的经典问题。在这个问题的版本中,钟摆从一个随机位置开始,目标是向上摆动,使其保持直立。 ? ? ? ? ? ? ? ? ?动作空间: ? ? ? ? ? ? ? ? -2到2之间连续动作空间,表示向左或向右的方向和力度 ???????? ? ? ? ? ?输出的状态s: ????????????????这些观测值对应于摇锤末端的x-y坐标及其角速度。例:[x, y, Angular Velocity] ? ? 3.代码实现? ? ? ? 代码使用pytorch框架,采用AC结构 ? ? ? ? 1.引用的库
? ? ? ?2.超参数 ????????
? ? ?3.程序主干 ? ? ? ? ps :reward进行了修正目的是为了加速模型收敛
? ? ? ? 4.pi网络和v网络搭建: ?????????
? ? ? ? 这里要注意的是我们输出的动作是一个连续的动作,所以我们让神经网络输出期望(mu)和方差(sigma)根据mu和sigma使用torch.distributions.normal.Normal(mu, sigma)来构建一个正态分 布然后从中采用得出一个再-2到2之间的值。正因为我们要输出的动作大小有限制所以我们输出mu应当在-2到2之间。所以我们将输出的mu值经过tanh映射到-1到1之间再乘以2。同理由于方差为正所以让输出的方差经过softplus(RLUE的升级版)再加一个偏置就恒大于0了
? ? ? ? ?4.构建agent ? ? ? ? ?
? ? ? ? 一些注意的点: ? ? ? ? ? ? ? ? 计算价值网络的损失值我们需要真实的价值值,真实的价值值当前动作的回报加上放缩因子gamma乘以旧价值网络估计的下一次状态的价值量(设置新旧的网络是为了使target固定一段时间加速收敛和DQN的原理一样)。然后得到target我们就可以用MSE计算损失来更新价值网络的参数了! ? ? ? ? ? ? ? ? 更新策略网络,我们需要优势函数A和新旧策略得出的动作的概率的的比值ratio。优势函数A是通过计算上面的target和旧价值网络预测的当前状态的差所得来的。但是我们这里对A做了些“手脚”即将所算出来的差值再从后面累加。因为当前动作所带来的优势是下面所有动作的优势的总和所以可以做个累加,具体看上面代码比较好理解。ratio的计算就是用oldpi和新的pi得出的分布,分别取出action的概率log值(原因是pytorch的方法就是输出概率的log值)得到log值后我们用torch.exp(old - new)的到新旧概率的比值。然后计算ratio*A和torch.clamp(ratio, 1-clip, 1+clip)*A的值(clamp是使ratio限制在1-clip到1+clip之间,即为了不让更新的差异前后过大)然后再去其中的最小值求平均。而我们的目的是使下次计算的到的A越大越好。所以应当加-号。最后让优化器更新网络。 ? ? ? ? 5.最终效果: ???????? ? ? ? ? ?训练了大概6000局分数还在不断上升后面得分会越来越高。 ? ? ? ? ?训练10000局的结果 ? ? ? ? ? ? ? ? ?倒立摆终于立起来啦!! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:24:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |