MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练
本文分享自华为云社区《MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练》,作者: irrational。
半猎豹(Half Cheetah)是一个基于MuJoCo的强化学习环境,由P. Wawrzyński在“A Cat-Like Robot Real-Time Learning to Run”中提出。这个环境中的半猎豹是一个由9个链接和8个关节组成的2D机器人(包括两个爪子)。在这个环境中,目标是通过施加扭矩在关节上使猎豹尽可能快地向前(向右)奔跑,正向奖励基于前进的距离,而向后移动则会得到负向奖励。猎豹的躯干和头部是固定的,扭矩只能施加在前后大腿、小腿和脚上。
动作空间是一个Box(-1, 1, (6,), float32)
,其中每个动作代表链接之间的扭矩。观察空间包含猎豹不同身体部位的位置值和速度值,其中所有位置值在前,所有速度值在后。默认情况下,观察不包括猎豹质心x坐标,可以通过在构建时传递exclude_current_positions_from_observation=False
来包括它。如果包括,观察空间将有18个维度,其中第一个维度代表猎豹质心的x坐标。
奖励分为两部分:向前奖励和控制成本。向前奖励是根据动作前后x坐标的变化计算的,控制成本是为了惩罚猎豹采取过大动作的成本。总奖励是向前奖励减去控制成本。
每个状态的开始是在状态(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,)上添加噪声以增加随机性。前8个值是位置值,最后9个值是速度值。位置值添加均匀噪声,而初始速度值(全为零)添加标准正态噪声。
当一个剧集的长度超过1000时,该剧集将被截断。
该环境的详细信息可以参考:https://www.gymlibrary.dev/environments/mujoco/half_cheetah/
这个比很多环境都要复杂。
不过没关系,我们有ppo算法,这个算法可以跑强化学习,甚至大语言模型。
PPO(Proximal Policy Optimization)算法是一种用于强化学习的策略优化方法,它旨在解决传统策略梯度方法(如TRPO,Trust Region Policy Optimization)中的信任区域问题
PPO算法通过引入clipping技巧和重要性采样技巧来减少计算梯度时的方差,从而提高算法的收敛速度和稳定性。
在PPO算法中,有两个关键概念:
- 策略(Policy):策略是一个函数,它定义了在给定状态s时采取动作a的概率分布。
- 价值函数(Value Function):价值函数估计了在给定策略下,从状态s出发,到达某个特定状态或终端时所能获得的期望回报。
PPO算法的主要步骤包括:
- 采样(Sampling):从当前策略中采样数据,包括状态、动作、奖励和下一个状态。
- 计算目标(Calculating Targets):使用目标策略计算目标价值函数,并计算目标策略的KL散度。
- 更新策略(Updating Policy):使用重要性采样技巧和clipping技巧更新策略。
- 更新价值函数(Updating Value Function):使用策略梯度方法更新价值函数。
PPO算法的核心思想是交替更新策略和价值函数,以实现策略和价值的共同优化。这种方法可以有效减少计算梯度时的方差,提高算法的收敛速度和稳定性。
以下是PPO算法的一个简化的Markdown公式:
# Proximal Policy Optimization (PPO) Algorithm ## 1. Sampling 采样当前策略的数据,包括状态 $ s $、动作 $ a $、奖励 $ r $ 和下一个状态 $ s' $。 ## 2. Calculating Targets 使用目标策略计算目标价值函数,并计算目标策略的KL散度。 ## 3. Updating Policy 使用重要性采样技巧和clipping技巧更新策略。 ## 4. Updating Value Function 使用策略梯度方法更新价值函数。 ## 重复步骤1-4,实现策略和价值的共同优化。
这个公式是一个简化的版本,实际上PPO算法还包括了许多其他细节和技巧,如经验回放、动态调整学习率等。
import argparse import os from mindspore import context from mindspore import dtype as mstype from mindspore.communication import get_rank, init import mindspore_rl.distribution.distribution_policies as DP from mindspore_rl.algorithm.ppo import config from mindspore_rl.algorithm.ppo.ppo_session import PPOSession from mindspore_rl.algorithm.ppo.ppo_trainer import PPOTrainer parser = argparse.ArgumentParser(description="MindSpore Reinforcement PPO") parser.add_argument("--episode", type=int, default=650, help="total episode numbers.") parser.add_argument( "--device_target", type=str, default="Auto", choices=["Ascend", "CPU", "GPU", "Auto"], help="Choose a device to run the ppo example(Default: Auto).", ) parser.add_argument( "--precision_mode", type=str, default="fp32", choices=["fp32", "fp16"], help="Precision mode", ) parser.add_argument( "--env_yaml", type=str, default="../env_yaml/HalfCheetah-v2.yaml", help="Choose an environment yaml to update the ppo example(Default: HalfCheetah-v2.yaml).", ) parser.add_argument( "--algo_yaml", type=str, default=None, help="Choose an algo yaml to update the ppo example(Default: None).", ) parser.add_argument( "--enable_distribute", type=bool, default=False, help="Train in distribute mode (Default: False).", ) parser.add_argument( "--worker_num", type=int, default=2, help="Worker num (Default: 2)." ) parser.add_argument( "--graph_op_run", type=int, default=1, help="Run kernel by kernel (Default: 1)." ) options, _ = parser.parse_known_args()`
wget https://www.roboti.us/download/mujoco200_linux.zip mv mujoco200_linux ~/.mujoco/mujoco200 wget https://www.roboti.us/file/mjkey.txt cp mjkey.txt /home/kewei/.mujoco/mjkey.txt wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm yum localinstall patchelf-0.12-1.el7.x86_64.rpm pip install 'mujoco_py==2.0.2.13'
第一次编译mujoco会有一点久
在bashrc加入如下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH} export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
然后就可以开启训练了。使用上一节的with保留输入。
# dqn_session.run(class_type=DQNTrainer, episode=episode) with RealTimeCaptureAndDisplayOutput() as captured_new: ppo_session.run(class_type=PPOTrainer, episode=episode, duration=duration)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2023 年 Google Play 拒绝了 228 万款有风险的 Android 应用
谷歌报告称,该公司在 2023 年共阻止了 228 万款违反政策的 Android 应用在 Google Play 上架。以及发现并屏蔽了 333,000 个上传恶意软件、欺诈性应用程序或多次严重违反政策的 Google Play 帐户。 相较之下,在 2022 年谷歌共封杀了 150 万个"不良"应用,并封禁了 17.3 万个严重违反商店政策的开发者账户。 该公司强调,他们的审查和安全举措都是基于 SAFE 原则所实施的,即:(S) 保护用户、(A) 倡导开发者保护、(F) 加强负责任的创新、(E) 推动平台防御。 今年还在此基础上,进行了改进并推出了新措施,加强了对恶意提交内容的识别和删除 Google Play 上已有的危险内容的能力,其中包括: 更严格的开发者注册和身份验证流程。 引入针对 Android VPN 应用程序的独立 security reviews 和 badges。 增加实时扫描功能,阻止恶意软件执行。 固件强化 ,使 SoC 级缺陷更难被利用。 扩展 SDK 索引 (现已覆盖 600 万个应用),帮助开发者为其项目选择安全的 SDK。 除了屏蔽近 230 万个...
- 下一篇
带你开发一个视频动态手势识别模型
本文分享自华为云社区《CNN-VIT 视频动态手势识别【玩转华为云】》,作者: HouYanSong。 CNN-VIT 视频动态手势识别 人工智能的发展日新月异,也深刻的影响到人机交互领域的发展。手势动作作为一种自然、快捷的交互方式,在智能驾驶、虚拟现实等领域有着广泛的应用。手势识别的任务是,当操作者做出某个手势动作后,计算机能够快速准确的判断出该手势的类型。本文将使用ModelArts开发训练一个视频动态手势识别的算法模型,对上滑、下滑、左滑、右滑、打开、关闭等动态手势类别进行检测,实现类似华为手机隔空手势的功能。 算法简介 CNN-VIT 视频动态手势识别算法首先使用预训练网络InceptionResNetV2逐帧提取视频动作片段特征,然后输入Transformer Encoder进行分类。我们使用动态手势识别样例数据集对算法进行测试,总共包含108段视频,数据集包含无效手势、上滑、下滑、左滑、右滑、打开、关闭等7种手势的视频,具体操作流程如下: 首先我们将采集的视频文件解码抽取关键帧,每隔4帧保存一次,然后对图像进行中心裁剪和预处理,代码如下: def load_video(fi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19