MorvanZhou / Reinforcement-learning-with-tensorflow

Simple Reinforcement learning tutorials, 莫烦Python 中文AI教学
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/
MIT License
8.92k stars 5.01k forks source link

DPPO完全写错了,worker推送的是梯度而不是样本 #165

Closed GIS-PuppetMaster closed 4 years ago

GIS-PuppetMaster commented 4 years ago

论文地址 https://arxiv.org/pdf/1707.02286.pdf Scalable reinforcement learning with Distributed PPO 这部分说了,还说同步更新梯度比异步的效果要好。

MorvanZhou commented 4 years ago

@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 的代码.

总结一下我是怎么写的.

我使用的代码框架和自己的 A3C 框架有点像. 这个 DPPO 具体的代码我不会在这边描述了, 请直接看到我写的代码吧.

不过有些细节我想提前提一下, 方便你们看代码:

GIS-PuppetMaster commented 4 years ago

其实用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 4 years ago

话说大佬有空能不能出一个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.