Deep Deterministic Policy Gradient (DDPG)
切换视频源:

Deep Deterministic Policy Gradient (DDPG)

作者: 莫烦 编辑: 莫烦 发布于: 2017-04-22

学习资料:

要点

一句话概括 DDPG: Google DeepMind 提出的一种使用 Actor Critic 结构, 但是输出的不是行为的概率, 而是具体的行为, 用于连续动作 (continuous action) 的预测. DDPG 结合了之前获得成功的 DQN 结构, 提高了 Actor Critic 的稳定性和收敛性.

因为 DDPGDQN 还有 Actor Critic 很相关, 所以最好这两者都了解下, 对于学习 DDPG 很有帮助. 我的教程链接都能在上面的学习资料中找到.

下面是这节内容的效果提前看:

算法

DDPG 的算法实际上就是一种 Actor Critic, 我在上一篇中简短地介绍了 Actor Critic 的算法. 不太清楚的同学先去看看上一篇吧.

6-2-0.png

关于 Actor 部分, 他的参数更新同样会涉及到 Critic, 上面是关于 Actor 参数的更新, 它的前半部分 grad[Q] 是从 Critic 来的, 这是在说: 这次 Actor 的动作要怎么移动, 才能获得更大的 Q, 而后半部分 grad[u] 是从 Actor 来的, 这是在说: Actor 要怎么样修改自身参数, 使得 Actor 更有可能做这个动作. 所以两者合起来就是在说: Actor 要朝着更有可能获取大 Q 的方向修改动作参数了.

6-2-1.png

上面这个是关于 Critic 的更新, 它借鉴了 DQNDouble Q learning 的方式, 有两个计算 Q 的神经网络, Q_target 中依据下一状态, 用 Actor 来选择动作, 而这时的 Actor 也是一个 Actor_target (有着 Actor 很久之前的参数). 使用这种方法获得的 Q_target 能像 DQN 那样切断相关性, 提高收敛性.

主结构

注意, 录视频的时候代码有个地方有小错误, 以下部分和视频中有些地方不同, 特别是计算 Actor 更新的时候. 所以请以文字描述中的为准.

我们用 Tensorflow 搭建神经网络, 主结构可以见这个 tensorboard 的出来的图.

6-2-2.png

看起来很复杂吧, 没关系, 我们一步步来, 拆开来看就容易了. 首先看看 ActorCritic 中各有什么结构.

6-2-3.png

其搭建的代码部分在这 (如果想一次性看全部, 请去我的Github):

Actor Critic

有了对 Actor Critic 每个里面各两个神经网络结构的了解, 我们再来具体看看他们是如何进行交流, 传递信息的. 我们从 Actor 的学习更新方式开始说起.

6-2-4.png

这张图我们就能一眼看穿 Actor 的更新到底基于了哪些东西. 可以看出, 它使用了两个 eval_net, 所以 Actor class 中用于 train 的代码我们这样写:

同时下面也提到的传送给 Actora_grad 应该用 Tensorflow 怎么计算. 这个 a_gradCritic class 里面的, 这个 a 是来自 Actor 根据 S 计算而来的:

而在 Critic 中, 我们用的东西简单一点.

6-2-5.png

下面就是 Critic 更新时的代码了.

最后我们建立并把 ActorCritic 融合在一起的时候是这样写的.

同样, 如果你觉得只看部分代码不舒服, 这里有全部代码.

记忆库 Memory

以下是关于类似于 DQN 中的记忆库代码, 我们用一个 class 来建立. 关于 Memory 的详细算法, 请直接去我的 Github 中看, 这样更简单.

每回合算法

这里的回合算法只提到了最重要的部分, 省掉了一些没必要的, 有助理解. 如果想一次性看到全部代码, 请去我的 Github

我也用这套 DDPG 测试过自己写的机器手臂的环境, 发现效果也还行. 有兴趣的朋友可以看到这里.

有很多人留言说想要我做一个关于这个机器手臂的教程, 不负众望, 你可以在这里 看到我怎么从零开始, 手写环境, debug 测试, 来制作一个强化学习的机器手臂.

简化版代码(录完视频后发现了小错误, 重写了代码)

后来我在回过头来看代码, 结果发现计算 Actor 更新时有点小问题, 所以就修改了之前的代码. 但是修改后我觉得.. 代码变得累赘了, 所以我觉得再重写一个, 简化所有流程. 能看到这一个板块的朋友们有没有感到绝望(MD 看了那么久上面的代码, 结果有个更简单的). 哈哈,没关系. 学习代码和技术不要嫌多. 所以代码就直接看吧, 相信有了上面的了解, 看这份代码会比较容易.


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat