MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练

mindspore,ppo,halfcheetah,v2 · 浏览次数 : 3

小编点评

**MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练** **环境介绍** * Half Cheetah是一个基于MuJoCo的强化学习环境。 * 环境中的半猎豹是一个由9个链接和8个关节组成的 2D 机器人,包括两个爪子。 * 目标是通过施加扭矩在关节上使猎豹尽可能快地向前(向右)奔跑,正向移动则会得到负向奖励。 **PPO 算法** PPO 是一种用于强化学习的策略优化方法,它通过引入剪切技巧和重要性采样技巧来减少计算梯度时的方差,提高算法的收敛速度和稳定性。 **算法步骤** 1. **采样**:从当前策略中采样数据,包括状态、动作、奖励和下一个状态。 2. **计算目标**:使用目标策略计算目标价值函数,并计算目标策略的KL 散度。 3. **更新策略**:根据目标价值函数和 KL 散度,更新策略。 4. **训练器**:训练一个 PPO 训练器,根据策略更新。 **参数** * `--episode`:训练总回合数。 * `--device_target`:训练设备目标(可选)。 * `--precision_mode`:精度模式(可选)。 * `--env_yaml`:环境 YAML 文件路径(可选)。 * `--algo_yaml`:算法 YAML 文件路径(可选)。 * `--enable_distribute`:是否使用分布式训练(默认不启用)。 * `--worker_num`:训练进程数量(默认 2)。 * `--graph_op_run`:运行图操作(默认 1)。 **注意** * 该代码需要下载并安装一些库。 * 使用上一节的代码保留输入。

正文

本文分享自华为云社区《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/

image.png

这个比很多环境都要复杂。

不过没关系,我们有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会有一点久

image.png

在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)

 

点击关注,第一时间了解华为云新鲜技术~

 

与MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练相似的内容:

MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练

本文分享自华为云社区《MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练》,作者: irrational。 半猎豹(Half Cheetah)是一个基于MuJoCo的强化学习环境,由P. Wawrzyński在“A Cat-Like Robot Real-Time L

Win11系统下的MindSpore环境搭建

本文介绍了一个在Win11系统下,通过WSL2+Docker+VSCode的方案搭建了一个mindspore-gpu的编程环境。这种方案既可以实现Linux系统编程以及部署的便捷性,又可以兼顾Windows系统强大的办公软件生态,甚至还可以借助Docker达到一定的软件可迁移性和可复制性。

大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET

摘要:本文介绍大模型低参微调套件——MindSpore PET。 本文分享自华为云社区《大模型高效开发的秘密武器——大模型低参微调套件MindSpore PET篇》,作者:yd_280874276 。 人工智能进入“大模型时代”。大模型具备更强泛化能力,在各垂直领域落地时,只需要进行参数微调,就可以

昇腾开发全流程 之 MindSpore华为云模型训练

学会如何安装配置华为云ModelArts、开发板Atlas 200I DK A2, 并打通一个训练到推理的全流程思路。 > 在本篇章,首先我们开始进入训练阶段!

MindSpore梯度进阶操作

这篇文章主要介绍了mindspore深度学习框架中基于InsertGradientOf算子的进阶梯度操作。InsertGradientOf算子的功能跟此前介绍过的bprop功能有些类似,也是自定义梯度,但bprop更倾向于计算梯度,而InsertGradientOf算子更倾向于修改梯度,这里介绍了一...

MindSpore反向传播配置关键字参数

继上一篇文章从Torch的两个Issue中找到一些类似的问题之后,可以发现深度学习框架对于自定义反向传播函数中的传参还是比较依赖于必备参数,而不是关键字参数,MindSpore深度学习框架也是如此。但是我们可以使用一些临时的解决方案,对此问题进行一定程度上的规避,只要能够自定义的传参顺序传入关键字参...

基于MindSpore实现BERT对话情绪识别

本文分享自华为云社区《【昇思25天学习打卡营打卡指南-第二十四天】基于 MindSpore 实现 BERT 对话情绪识别》,作者:JeffDing。 模型简介 BERT全称是来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Trans

教你基于MindSpore用DCGAN生成漫画头像

本文分享自华为云社区《【昇思25天学习打卡营打卡指南-第二十天】DCGAN生成漫画头像》,作者:JeffDing。 DCGAN生成漫画头像 在下面的教程中,我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中,使用的动漫头像数据集共有70,17

一文教你在MindSpore中实现A2C算法训练

文中的配置定义了 Actor-Critic 算法在 MindSpore 框架中的具体实现,包括 Actor 和 Learner 的设置、策略和网络的参数,以及训练和评估环境的配置。

这是你没见过的MindSpore 2.0.0 for Windows GPU版

摘要:一文带你看看MindSpore 2.0.0 for Windows GPU版。 本文分享自华为云社区《MindSpore 2.0.0 for Windows GPU泄漏版尝鲜》,作者:张辉 。 在看了MindSpore架构师王磊老师的帖子( https://zhuanlan.zhihu.com