OpenAI Gym学习(三):Mujoco训练REINFORCE(一种早期的策略梯度方法)

时间:2023-08-08 00:14:43     来源:哔哩哔哩

MuJoCo是一个免费开源的物理引擎,旨在促进机器人、生物力学、图形和动画以及其他需要快速准确模拟的领域的研究和开发。


(资料图片)

MuJoCo提供了速度、精度和建模能力的独特组合,但它不仅仅是一个更好的模拟器。相反,它是第一个从头开始设计的全功能模拟器,用于基于模型的优化,特别是通过接触进行优化。

MuJoCo使优化控制、物理一致状态估计、系统识别和自动机构设计等计算密集型技术得以扩展,并将其应用于具有丰富接触行为的复杂动力系统。它还具有更传统的应用,如在物理机器人上部署之前测试和验证控制方案、交互式科学可视化、虚拟环境、动画和游戏。

本教程有两个目的:

1、了解如何从零开始实现强化学习算法以解决Mujoco的倒立式InvertedPendulum-v4

2、利用Gymnasium +step()函数实现深度强化学习算法

我们将使用最早的策略梯度方法之一。与先学习一个价值函数,然后从中推导出一个策略不同,REINFORCE直接优化了策略。换句话说,它被训练为最大化蒙特卡洛回归的概率。稍后会详细介绍。

Inverted Pendulum倒立摆是Mujoco版本的cartpole,但现在由Mujoco物理模拟器驱动,该模拟器可以进行更复杂的实验(例如改变重力的影响)。这种环境包括一个可以线性移动的推车(Cart),一端固定一根杆子,另一端自由。推车(Cart)可以向左或向右推动,目的是通过在推车上施加力来平衡推车顶部的杆子。有关环境的更多信息,请访问/environments/mujoco/inverted_pendulum/

Training Objectives:平衡推车顶部的杆(倒立摆)

Action:agent采用1D矢量进行动作。动作空间是[-3,3]中的连续(动作),其中动作表示施加到推车上的数值力(大小表示力的大小,符号表示方向)

Approach,方法:我们使用PyTorch从头开始对REINFORCE进行编码,以训练掌握倒立摆的神经网络策略。

Gymnasium +()函数的一个解释

step(A)允许我们在当前环境“env”中执行操作“A”。然后,环境执行该操作并返回五个变量:

next_obs: 这是代理在执行操作后将收到的观察结果。

reward: 这是代理在执行操作后将收到的观察结果。

terminated: 这是一个布尔变量,指示环境是否已终止

truncated: 这是一个布尔变量,还指示事件是否以提前截断结束,即达到时间限制。

info: 这是一个字典,可能包含有关环境的其他信息。

Policy Network

我们首先建立一个策略,代理将使用钢筋学习。策略是从当前环境观察到要采取的行动的概率分布的映射。教程中使用的策略由神经网络参数化。它由两个线性层组成,在预测平均值和标准差之间共享。此外,使用单个单独的线性层来估计平均值和标准偏差。Tanh被用作隐藏层之间的非线性算子。以下函数估计正态分布的平均值和标准偏差,从中对动作进行采样。因此,预计该政策将根据当前观察结果学习输出均值和标准差的适当权重。

Building an agent

既然我们已经完成了策略的制定,让我们开发增强型,为策略网络注入活力。REINFORCE的算法可以在上面找到。如前所述,REINFORCE旨在最大化蒙特卡洛回报。

有趣的事实:REINFOCE是“RE”ward“I increment”N on negative“F”actor times“O’ffset”R“inforcement times”C“haracteristic”E“igibility”的缩写

注意:超参数的选择是为了训练一个性能良好的agent。没有进行广泛的超参数调整。

现在让我们使用REINFORCE来训练策略来掌握倒立摆的任务。

以下是训练程序的概览

注意:在许多常见的用例中,Deep RL在随机种子方面相当脆弱(/en/latest/spinningup/)。因此,测试各种种子是很重要的,我们将要这样做。

Plot learning curve

References

[1] Williams, Ronald J.. “Simple statistical gradient-following algorithms for connectionist reinforcement learning.” Machine Learning 8 (2004): 229-256.

标签:

最新文章推荐