daydayup
一份伏特加,加一点青柠,姜汁,啤酒,最重要的是,还有一点爱
发布于

Unity ML-agents | | 强化学习 | | 交流 | | 求助

评论(13)
  • SolidMind

    我也表示很困惑!

  • YanSong
    YanSong 回复
    DrDoggo DrDoggo 2021-10-14 14:23:22

    Unity ML-agents 我前段时间也在研究,发现它的架构包裹得较为复杂,也是感觉很头疼。它搞得这么复杂主要是为了将多智能体训练和 selfplay 等也兼容到这个框架里面。我个人阅读以后做了些笔记,首先是参数设置方面。可以参考我的这篇笔记。上面有详细讲了 ppo 算法的参数设置问题。
    关于如何修改代码,我这边不建议你直接上手改他的代码,因为他的架构极为复杂。如果你仅仅是处于学习使用的目的,或者单纯想学习 ppo 的架构。更加建议你看 openai baseline 的 ppo 实现,那个要更加清楚一些,虽然工程化很糟糕。
    但你如果是需要在 unity mlagents 的源码上进行二次开发,那么下面这些 tips 或许对你有用。
    首先,实现 ppo 本身的那些更新策略和网络并不难,你只要查看 ml-agents/mlagents/trainers/ppo/trainer.py 这一个文件就能明白了。process_trajectory 主要是处理收集到的 trajectories,然后计算 gae。
    然后就是下面的 update policy 函数,这边其实从 194 行开始到函数结束,就是我们常见的 ppo 的一个实现。如果你看过 openai baseline 的实现,就不难看懂这部分。你可以先去研究一下。下面的 create policy 就是创建你的 actor 和 critic 网络的地方。要修改网络架构就朝着这个方向看就行了。 另外也可以看一下同一路径下面的 optimizer_torch.py,里面主要是用来调用的各种 evaluate 和 get action 函数。
    当然,上面的流程看似简单,但是是忽略了最大的问题就是收集数据上面的。这个方面恰恰是各个框架实现起来最复杂的地方。训练流程的控制和数据收集,代码主要在 trainer_controller.py 里面。
    总之,如果你只想了解 ppo 算法流程,rlchina 的代码库是个不错的上手途径。这篇 medium 上的文章详细的引导了你怎么实现一个 ppo,也可以参考下。不过 rlchina 的库我也看过,似乎没有 gae 的模块。所以建议你还是把 opeanai baseline 的 ppo 实现看一下。 差不多就这些吧。有问题再交流

    赞 👍

  • daydayup
    daydayup 回复
    DrDoggo DrDoggo 2021-10-14 14:23:22

    Unity ML-agents 我前段时间也在研究,发现它的架构包裹得较为复杂,也是感觉很头疼。它搞得这么复杂主要是为了将多智能体训练和 selfplay 等也兼容到这个框架里面。我个人阅读以后做了些笔记,首先是参数设置方面。可以参考我的这篇笔记。上面有详细讲了 ppo 算法的参数设置问题。
    关于如何修改代码,我这边不建议你直接上手改他的代码,因为他的架构极为复杂。如果你仅仅是处于学习使用的目的,或者单纯想学习 ppo 的架构。更加建议你看 openai baseline 的 ppo 实现,那个要更加清楚一些,虽然工程化很糟糕。
    但你如果是需要在 unity mlagents 的源码上进行二次开发,那么下面这些 tips 或许对你有用。
    首先,实现 ppo 本身的那些更新策略和网络并不难,你只要查看 ml-agents/mlagents/trainers/ppo/trainer.py 这一个文件就能明白了。process_trajectory 主要是处理收集到的 trajectories,然后计算 gae。
    然后就是下面的 update policy 函数,这边其实从 194 行开始到函数结束,就是我们常见的 ppo 的一个实现。如果你看过 openai baseline 的实现,就不难看懂这部分。你可以先去研究一下。下面的 create policy 就是创建你的 actor 和 critic 网络的地方。要修改网络架构就朝着这个方向看就行了。 另外也可以看一下同一路径下面的 optimizer_torch.py,里面主要是用来调用的各种 evaluate 和 get action 函数。
    当然,上面的流程看似简单,但是是忽略了最大的问题就是收集数据上面的。这个方面恰恰是各个框架实现起来最复杂的地方。训练流程的控制和数据收集,代码主要在 trainer_controller.py 里面。
    总之,如果你只想了解 ppo 算法流程,rlchina 的代码库是个不错的上手途径。这篇 medium 上的文章详细的引导了你怎么实现一个 ppo,也可以参考下。不过 rlchina 的库我也看过,似乎没有 gae 的模块。所以建议你还是把 opeanai baseline 的 ppo 实现看一下。 差不多就这些吧。有问题再交流

    ML-agents各种文件确实复杂XD,难得大佬有清晰的理解 我如果再有一些问题还需要请教 谢谢!👍
  • DrDoggo
    DrDoggo 回复

    Unity ML-agents 我前段时间也在研究,发现它的架构包裹得较为复杂,也是感觉很头疼。它搞得这么复杂主要是为了将多智能体训练和 selfplay 等也兼容到这个框架里面。我个人阅读以后做了些笔记,首先是参数设置方面。可以参考我的这篇笔记。上面有详细讲了 ppo 算法的参数设置问题。
    关于如何修改代码,我这边不建议你直接上手改他的代码,因为他的架构极为复杂。如果你仅仅是处于学习使用的目的,或者单纯想学习 ppo 的架构。更加建议你看 openai baseline 的 ppo 实现,那个要更加清楚一些,虽然工程化很糟糕。
    但你如果是需要在 unity mlagents 的源码上进行二次开发,那么下面这些 tips 或许对你有用。
    首先,实现 ppo 本身的那些更新策略和网络并不难,你只要查看 ml-agents/mlagents/trainers/ppo/trainer.py 这一个文件就能明白了。process_trajectory 主要是处理收集到的 trajectories,然后计算 gae。
    然后就是下面的 update policy 函数,这边其实从 194 行开始到函数结束,就是我们常见的 ppo 的一个实现。如果你看过 openai baseline 的实现,就不难看懂这部分。你可以先去研究一下。下面的 create policy 就是创建你的 actor 和 critic 网络的地方。要修改网络架构就朝着这个方向看就行了。 另外也可以看一下同一路径下面的 optimizer_torch.py,里面主要是用来调用的各种 evaluate 和 get action 函数。
    当然,上面的流程看似简单,但是是忽略了最大的问题就是收集数据上面的。这个方面恰恰是各个框架实现起来最复杂的地方。训练流程的控制和数据收集,代码主要在 trainer_controller.py 里面。
    总之,如果你只想了解 ppo 算法流程,rlchina 的代码库是个不错的上手途径。这篇 medium 上的文章详细的引导了你怎么实现一个 ppo,也可以参考下。不过 rlchina 的库我也看过,似乎没有 gae 的模块。所以建议你还是把 opeanai baseline 的 ppo 实现看一下。 差不多就这些吧。有问题再交流

  • daydayup
    daydayup 回复
    YanSong YanSong 2021-10-03 13:08:13

    好的明白,可以看一下咱们及第的代码库 https://github.com/jidiai/ai_lib/tree/master/examples/algo/ppo ,源代码相对的更友好点,关于 PPO 的接口也好理解;还有关于 PPO 的文档介绍 http://www.jidiai.cn/ppo :)

    谢谢 :D

  • YanSong
    YanSong 回复
    daydayup daydayup 2021-10-02 14:49:02

    你好,谢谢你的回答

    在 Unity 官方的仓库里只给出了所有的代码文件,而没有一些关于其 PPO 算法在代码中实现过程的帮助文档,也就是说想要理解它所采用的 PPO 算法需要去阅读源码本身,整个项目的源码让我短时间内在理解上遇到了困难

    另外,及第平台非常棒,谢谢!

    好的明白,可以看一下咱们及第的代码库 https://github.com/jidiai/ai_lib/tree/master/examples/algo/ppo ,源代码相对的更友好点,关于 PPO 的接口也好理解;还有关于 PPO 的文档介绍 http://www.jidiai.cn/ppo :)

  • Waterking
    Waterking 回复

    顶一下!有同样的困惑,支持!

  • daydayup
    daydayup 回复
    vinbo vinbo 2021-10-01 22:18:19

    1.你别光把具体问题写在回复里,主帖也改一下,然后等大佬回答
    2.第二个问题好像比较简单,有 rlchina 推荐的 jidiai 啦,清华的 tianshou 啦,等等,大家继续补充~

    好的,谢谢

  • daydayup
    daydayup 回复
    YanSong YanSong 2021-10-02 11:13:26

    https://github.com/Unity-Technologies/ml-agents/tree/main/ml-agents/mlagents/trainers/ppo 你大概找的是这个吧我猜。 第二个问题就像 vinbo 讲的咱们自己的测试平台 Jidi: http://www.jidiai.cn/homepage

    你好,谢谢你的回答

    在 Unity 官方的仓库里只给出了所有的代码文件,而没有一些关于其 PPO 算法在代码中实现过程的帮助文档,也就是说想要理解它所采用的 PPO 算法需要去阅读源码本身,整个项目的源码让我短时间内在理解上遇到了困难

    另外,及第平台非常棒,谢谢!

  • YanSong
    YanSong 回复
    daydayup daydayup 2021-10-01 22:01:17

    你好,其实我主要想问的是 ML-agents 当中 PPO 算法具体输入、具体数据处理、输出都分别在工具包中哪些文件中体现的,目前我感觉这方面的资料比较少;

    还有一个问题,算法的仿真平台除了 gym & Unity,还有哪些可供方便的验证各种算法的平台呢?

    希望有大佬解答/抱拳

    https://github.com/Unity-Technologies/ml-agents/tree/main/ml-agents/mlagents/trainers/ppo 你大概找的是这个吧我猜。 第二个问题就像 vinbo 讲的咱们自己的测试平台 Jidi: http://www.jidiai.cn/homepage

  • vinbo
    vinbo 回复
    daydayup daydayup 2021-10-01 22:01:17

    你好,其实我主要想问的是 ML-agents 当中 PPO 算法具体输入、具体数据处理、输出都分别在工具包中哪些文件中体现的,目前我感觉这方面的资料比较少;

    还有一个问题,算法的仿真平台除了 gym & Unity,还有哪些可供方便的验证各种算法的平台呢?

    希望有大佬解答/抱拳

    1.你别光把具体问题写在回复里,主帖也改一下,然后等大佬回答
    2.第二个问题好像比较简单,有 rlchina 推荐的 jidiai 啦,清华的 tianshou 啦,等等,大家继续补充~

  • daydayup
    daydayup 回复
    vinbo vinbo 2021-10-01 17:20:20

    视频不错,谢谢。
    另外,你的问题,需要再具体一点才可能得到回答吧

    你好,其实我主要想问的是 ML-agents 当中 PPO 算法具体输入、具体数据处理、输出都分别在工具包中哪些文件中体现的,目前我感觉这方面的资料比较少;

    还有一个问题,算法的仿真平台除了 gym & Unity,还有哪些可供方便的验证各种算法的平台呢?

    希望有大佬解答/抱拳

  • vinbo
    vinbo 回复

    视频不错,谢谢。
    另外,你的问题,需要再具体一点才可能得到回答吧