DPPO完全写错了,worker推送的是梯度而不是样本
GIS-PuppetMaster opened this issue · comments
GIS-PuppetMaster commented
论文地址
https://arxiv.org/pdf/1707.02286.pdf
Scalable reinforcement learning with Distributed PPO 这部分说了,还说同步更新梯度比异步的效果要好。
Morvan commented
@zkx741481546
Please refer to here https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/6-4-DPPO/#Distributed-PPO
Google DeepMind 提出来了一套和 A3C (A3C 教程见这里) 类似的并行 PPO 算法. 看了他们 paper 中的这个 DPPO 算法后, 我觉得….不好编! 取而代之, 我觉得如果采用 OpenAI 的思路, 用他那个 “简陋” 伪代码, 但是弄成并行计算倒是好弄点. 所以我就结合了 DeepMind 和 OpenAI, 取他们的精华, 写下了这份 DPPO 的代码.
总结一下我是怎么写的.
- 用 OpenAI 提出的 Clipped Surrogate Objective
- 使用多个线程 (workers) 平行在不同的环境中收集数据
- workers 共享一个 Global PPO
- workers 不会自己算 PPO 的 gradients, 不会像 A3C 那样推送 Gradients 给 Global net
- workers 只推送自己采集的数据给 Global PPO
- Global PPO 拿到多个 workers 一定批量的数据后进行更新 (更新时 worker 停止采集)
- 更新完后, workers 用最新的 Policy 采集数据
我使用的代码框架和自己的 A3C 框架有点像. 这个 DPPO 具体的代码我不会在这边描述了, 请直接看到我写的代码吧.
不过有些细节我想提前提一下, 方便你们看代码:
- 我用到了 python threading 当中的 Event 功能, 用来控制 PPO 的更新时间和 worker 停止工作的时间
- 使用了 threading 中的 Queue 来存放 worker 收集的数据, 发现用 python 的列表也可以达到一样效果, 计算时间上没太多差别.
- 更新 PPO 的时候, 我采用的是 DeepMind 的 for loop 形式.
GIS-PuppetMaster commented
其实用tensorflow distribution 就可以了,简单的ps-worker结构,给ppo加几行代码开个多进程就搞定了
发送自 Windows 10 版邮件应用
发件人: Morvan
发送时间: 2020年3月11日 8:43
收件人: MorvanZhou/Reinforcement-learning-with-tensorflow
抄送: zkx741481546; Mention
主题: Re: [MorvanZhou/Reinforcement-learning-with-tensorflow] DPPO完全写错了,worker推送的是梯度而不是样本 (#165)
@zkx741481546
Please refer to here https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/6-4-DPPO/#Distributed-PPO
Google DeepMind 提出来了一套和 A3C (A3C 教程见这里) 类似的并行 PPO 算法. 看了他们 paper 中的这个 DPPO 算法后, 我觉得….不好编! 取而代之, 我觉得如果采用 OpenAI 的思路, 用他那个 “简陋” 伪代码, 但是弄成并行计算倒是好弄点. 所以我就结合了 DeepMind 和 OpenAI, 取他们的精华, 写下了这份 DPPO 的代码.
总结一下我是怎么写的.
• 用 OpenAI 提出的 Clipped Surrogate Objective
• 使用多个线程 (workers) 平行在不同的环境中收集数据
• workers 共享一个 Global PPO
• workers 不会自己算 PPO 的 gradients, 不会像 A3C 那样推送 Gradients 给 Global net
• workers 只推送自己采集的数据给 Global PPO
• Global PPO 拿到多个 workers 一定批量的数据后进行更新 (更新时 worker 停止采集)
• 更新完后, workers 用最新的 Policy 采集数据
我使用的代码框架和自己的 A3C 框架有点像. 这个 DPPO 具体的代码我不会在这边描述了, 请直接看到我写的代码吧.
不过有些细节我想提前提一下, 方便你们看代码:
• 我用到了 python threading 当中的 Event 功能, 用来控制 PPO 的更新时间和 worker 停止工作的时间
• 使用了 threading 中的 Queue 来存放 worker 收集的数据, 发现用 python 的列表也可以达到一样效果, 计算时间上没太多差别.
• 更新 PPO 的时候, 我采用的是 DeepMind 的 for loop 形式.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
GIS-PuppetMaster commented
话说大佬有空能不能出一个D4PG的教程
发送自 Windows 10 版邮件应用
发件人: Morvan
发送时间: 2020年3月11日 8:43
收件人: MorvanZhou/Reinforcement-learning-with-tensorflow
抄送: zkx741481546; Mention
主题: Re: [MorvanZhou/Reinforcement-learning-with-tensorflow] DPPO完全写错了,worker推送的是梯度而不是样本 (#165)
@zkx741481546
Please refer to here https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/6-4-DPPO/#Distributed-PPO
Google DeepMind 提出来了一套和 A3C (A3C 教程见这里) 类似的并行 PPO 算法. 看了他们 paper 中的这个 DPPO 算法后, 我觉得….不好编! 取而代之, 我觉得如果采用 OpenAI 的思路, 用他那个 “简陋” 伪代码, 但是弄成并行计算倒是好弄点. 所以我就结合了 DeepMind 和 OpenAI, 取他们的精华, 写下了这份 DPPO 的代码.
总结一下我是怎么写的.
• 用 OpenAI 提出的 Clipped Surrogate Objective
• 使用多个线程 (workers) 平行在不同的环境中收集数据
• workers 共享一个 Global PPO
• workers 不会自己算 PPO 的 gradients, 不会像 A3C 那样推送 Gradients 给 Global net
• workers 只推送自己采集的数据给 Global PPO
• Global PPO 拿到多个 workers 一定批量的数据后进行更新 (更新时 worker 停止采集)
• 更新完后, workers 用最新的 Policy 采集数据
我使用的代码框架和自己的 A3C 框架有点像. 这个 DPPO 具体的代码我不会在这边描述了, 请直接看到我写的代码吧.
不过有些细节我想提前提一下, 方便你们看代码:
• 我用到了 python threading 当中的 Event 功能, 用来控制 PPO 的更新时间和 worker 停止工作的时间
• 使用了 threading 中的 Queue 来存放 worker 收集的数据, 发现用 python 的列表也可以达到一样效果, 计算时间上没太多差别.
• 更新 PPO 的时候, 我采用的是 DeepMind 的 for loop 形式.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.