经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练
来源:cnblogs  作者:华为云开发者联盟  时间:2024/4/29 9:25:57  对本文有异议

本文分享自华为云社区《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公式:
  1. # Proximal Policy Optimization (PPO) Algorithm
  2. ## 1. Sampling
  3. 采样当前策略的数据,包括状态 $ s $、动作 $ a $、奖励 $ r $ 和下一个状态 $ s' $。
  4. ## 2. Calculating Targets
  5. 使用目标策略计算目标价值函数,并计算目标策略的KL散度。
  6. ## 3. Updating Policy
  7. 使用重要性采样技巧和clipping技巧更新策略。
  8. ## 4. Updating Value Function
  9. 使用策略梯度方法更新价值函数。
  10. ## 重复步骤1-4,实现策略和价值的共同优化。

这个公式是一个简化的版本,实际上PPO算法还包括了许多其他细节和技巧,如经验回放、动态调整学习率等。

  1. import argparse
  2. import os
  3. from mindspore import context
  4. from mindspore import dtype as mstype
  5. from mindspore.communication import get_rank, init
  6. import mindspore_rl.distribution.distribution_policies as DP
  7. from mindspore_rl.algorithm.ppo import config
  8. from mindspore_rl.algorithm.ppo.ppo_session import PPOSession
  9. from mindspore_rl.algorithm.ppo.ppo_trainer import PPOTrainer
  10. parser = argparse.ArgumentParser(description="MindSpore Reinforcement PPO")
  11. parser.add_argument("--episode", type=int, default=650, help="total episode numbers.")
  12. parser.add_argument(
  13. "--device_target",
  14. type=str,
  15. default="Auto",
  16. choices=["Ascend", "CPU", "GPU", "Auto"],
  17. help="Choose a device to run the ppo example(Default: Auto).",
  18. )
  19. parser.add_argument(
  20. "--precision_mode",
  21. type=str,
  22. default="fp32",
  23. choices=["fp32", "fp16"],
  24. help="Precision mode",
  25. )
  26. parser.add_argument(
  27. "--env_yaml",
  28. type=str,
  29. default="../env_yaml/HalfCheetah-v2.yaml",
  30. help="Choose an environment yaml to update the ppo example(Default: HalfCheetah-v2.yaml).",
  31. )
  32. parser.add_argument(
  33. "--algo_yaml",
  34. type=str,
  35. default=None,
  36. help="Choose an algo yaml to update the ppo example(Default: None).",
  37. )
  38. parser.add_argument(
  39. "--enable_distribute",
  40. type=bool,
  41. default=False,
  42. help="Train in distribute mode (Default: False).",
  43. )
  44. parser.add_argument(
  45. "--worker_num", type=int, default=2, help="Worker num (Default: 2)."
  46. )
  47. parser.add_argument(
  48. "--graph_op_run", type=int, default=1, help="Run kernel by kernel (Default: 1)."
  49. )
  50. options, _ = parser.parse_known_args()`
  1. wget https://www.roboti.us/download/mujoco200_linux.zip
  2. mv mujoco200_linux ~/.mujoco/mujoco200
  3. wget https://www.roboti.us/file/mjkey.txt
  4. cp mjkey.txt /home/kewei/.mujoco/mjkey.txt
  5. wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm
  6. yum localinstall patchelf-0.12-1.el7.x86_64.rpm
  7. pip install 'mujoco_py==2.0.2.13'

第一次编译mujoco会有一点久

image.png

在bashrc加入如下内容:

  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin
  2. export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
  3. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin
  4. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia

然后就可以开启训练了。使用上一节的with保留输入。

  1. # dqn_session.run(class_type=DQNTrainer, episode=episode)
  2. with RealTimeCaptureAndDisplayOutput() as captured_new:
  3. ppo_session.run(class_type=PPOTrainer, episode=episode, duration=duration)

 

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

 

原文链接:https://www.cnblogs.com/huaweiyun/p/18164996

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号