一.前言
这里记录一下我学习强化学习的一些知识,并希望在今后可以通过仿真成功验证算法,如果时间允许的情况下希望可以结合到真实机械臂上。
二.学习过程
机械臂强化学习实战(stable baselines3+panda-gym)
这里我先用anaconda创建了一个虚拟环境rl
环境:Linux,Python 3.10.14。
安装stb3
Stable Baselines3(SB3)是一个建立在PyTorch之上的强化学习库,旨在提供清晰、简单且高效的强化学习算法实现。
以下是Stable Baselines3的一些主要特点:
- 算法实现: SB3将一些先进的强化学习算法进行了打包,用户可以直接使用这些预训练的模型而无需从头开始编写网络架构和训练过程。
- 易于使用: 通过SB3,用户只需要定义环境和算法,然后便可以优雅地完成训练和评估。例如,使用现成的RL算法和Gym环境,可以通过简单的一行代码进行训练。
- 支持多种输入: SB3为图像输入(CnnPolicies)、其他类型的输入特征(MlpPolicies)以及多个不同输入(MultiInputPolicies)提供了策略网络(policy networks)。
- 改进自OpenAI Baselines: SB3由OpenAI Baselines改进而来,它在主体结构上进行了重塑,并对代码进行了清理,使得算法结构更为统一。
- 适用于研究和开发: 对于希望在强化学习项目中轻松使用现代深度强化学习算法的研究人员和开发者来说,SB3是一个极为有用的工具。
综上所述,Stable Baselines3是一个强大的强化学习库,它简化了强化学习项目的实现过程,并有助于推广强化学习技术的应用和发展。
安装完成后运行如下代码,可检查是否正常:
通过比较不同迭代轮数的统计数据,我们可以分析模型训练过程中的变化情况。以下是对给定数据的具体分析:
1. **平均回合长度(`ep_len_mean`)和平均奖励值(`ep_rew_mean`):**
- 在第一轮迭代中,平均回合长度为26,平均奖励值为26。
- 第二轮迭代时,这两个值分别增加到了37.1。
- 第三轮迭代时,平均回合长度和平均奖励值再次增加,达到了48.9。
- 第四轮迭代时,这两个值进一步增加到了63.5。
这表明随着训练的进行,智能体在每个回合中生存的时间变长,获得的奖励也相应增加,这可能是由于智能体学习到了更好的策略。
2. **时间统计(`time_elapsed` 和 `fps`):**
- 每秒帧数(`fps`)在所有迭代中保持不变,为45。
- 随着迭代次数的增加,`time_elapsed` 也在逐渐增加,从89秒到179秒再到223秒。
这意味着随着训练的进行,每个迭代所需的时间在增加,这可能是因为随着智能体策略的改进,每个时间步的决策变得更加复杂。
3. **训练统计(`loss`, `policy_gradient_loss`, `value_loss`):**
- `loss` 从第一轮的8.17增加到第四轮的32.7,这表明随着训练的进行,总损失在增加。
- `policy_gradient_loss` 从-0.0122变化到-0.0195,表明策略梯度损失略有增加,但变化不大。
- `value_loss` 从47.6显著增加到62.7,表明价值损失有较大的增长。
损失的增加可能是由于智能体在探索更复杂的策略,或者是因为智能体开始过拟合训练数据。
4. **其他统计信息(`approx_kl`, `clip_fraction`, `entropy_loss`, `explained_variance`, `learning_rate`):**
- `approx_kl` 从0.008182803逐渐增加到0.010889582,这表明随着训练的进行,策略之间的KL散度有所增加,但整体上仍然较小,说明策略更新相对稳定。
- `clip_fraction` 从0.0751逐渐减少到0.0545,然后又增加到0.0867,最后又略微减少到0.0867。这表明梯度裁剪的比例有所波动,但整体上保持在合理范围内。
- `entropy_loss` 从-0.687变化到-0.604,表明熵损失(即随机性的惩罚)有所减少,这可能是智能体策略变得更加确定的信号。
- `explained_variance` 从0.000582增加到0.305,这表明价值函数对状态价值的预测能力有所提高。
- `learning_rate` 在所有迭代中保持恒定,为0.0003,这表明学习率没有变化。
总结来说,随着训练的进行,智能体的性能似乎有所提高,表现为平均回合长度和平均奖励值的增加。然而,总损失和价值损失的增加可能表明智能体在训练过程中遇到了一些挑战,可能需要进一步调整训练策略或增加训练时间以改善性能。
安装panda-gym
panda-gym 基于 PyBullet 引擎开发,围绕 panda 机械臂封装了 reach、push、slide、pick&place、stack、flip 等 6 个任务,主要也是受 OpenAI Fetch 启发,发表在了 NeurIPS 2021 的 workshop 上。
测试panda-gym是否安装成功
这段代码是使用gymnasium库和panda_gym库创建一个名为PandaPush-v3的环境,并使用随机动作进行1000次迭代。在每次迭代中,从环境的动作空间中随机选择一个动作,并将该动作传递给环境的step方法。如果环境终止或截断,则重置环境。最后关闭环境。
开始训练
以 PandaReach-v3任务为例,训练 DDPG/TD3/SAC/HER 算法,方便做横向对比。
reach 任务比较简单,要求机械臂到达指定位置,误差在一定范围之内即代表成功,默认采用稀疏奖励。
运行上面代码后会生成以下目录
查看训练过程
安装一下tensorboard帮助我们之后看训练过程
TensorBoard是TensorFlow的官方数据可视化工具套件。
它的主要目的是提供一个直观的界面,用于监控、调试和优化TensorFlow程序。以下是TensorBoard的几个关键功能:
1. **模型架构可视化**:通过TensorBoard可以清晰地展示神经网络的结构和各层之间的连接情况。
2. **跟踪训练指标**:它能记录关键的性能指标,如损失(loss)和准确率(accuracy),并在训练过程中实时更新这些数据。
3. **张量分布与直方图**:TensorBoard能展示张量的分布情况,以直方图的形式呈现,帮助用户理解权重、偏差等变量在训练过程中的变化。
4. **高维数据投影**:对于高维数据,TensorBoard可以将它们映射到低维空间以便更直观地查看和分析。
5. **非表格数据展示**:TensorBoard还支持图像、文本和音频等非表格数据的显示,这对于处理复杂数据非常有帮助。
此外,TensorBoard的使用通常包括启动一个本地服务器,监听指定的端口(默认为6006),并通过网页浏览器访问该端口来查看可视化结果。
综上所述,TensorBoard是一个强大的工具,它不仅可以帮助研究人员和开发人员更好地理解他们的模型和数据,还可以提高机器学习工作流程的效率和透明度。
运行完毕后,终端输入命令
在浏览器打开链接
查看训练出的模型的真实效果
逐步搭建机器人(机械臂)强化学习环境 Pybullet + Gym + Stable Baselines3
机械臂强化学习抓取
目录结构
测试代码Fr5_test.py
这段代码是一个使用Stable Baselines 3库训练和测试强化学习模型的示例。