莫烦强化学习笔记整理(九)DDPG

  • 1、DDPG 要点
  • 2、DDPG 算法
    • actor
    • critic
    • actor与critic结合
    • 类似于DQN的记忆库
    • 回合更新

链接: DDPG代码.

1、DDPG 要点

DDPG是Google DeepMind 提出的一种使用 Actor Critic 结构, 但是输出的不是行为的概率, 而是具体的行为, 用于连续动作的预测。

DDPG 结合了之前获得成功的 DQN 结构, 提高了 Actor Critic 的稳定性和收敛性。

2、DDPG 算法

actor


前半部分 grad[Q] 是从 Critic 获得:
Actor 的动作要怎么移动, 才能获得更大的 Q。
后半部分 grad[u] 是从 Actor 获得:
Actor 要怎么样修改自身参数, 使得 Actor 更有可能做这个动作。
两者合起来:
Actor 要朝着更有可能获取大 Q 的方向修改动作参数。

actor结构有双层网络,一层用于及时更新参数,一层不及时更新参数, 用于预测 Critic 的 Q_target 中的 action。最主要的两个参数是eval_nettarget_net

class Actor(object):def __init__(self):...with tf.variable_scope('Actor'):# 这个网络用于及时更新参数self.a = self._build_net(S, scope='eval_net', trainable=True)# 这个网络不及时更新参数, 用于预测 Critic 的 Q_target 中的 actionself.a_ = self._build_net(S_, scope='target_net', trainable=False)...

with tf.variable_scope('policy_grads'):# 这是在计算 (dQ/da) * (da/dparams)self.policy_grads = tf.gradients(ys=self.a, xs=self.e_params, # 计算 ys 对于 xs 的梯度grad_ys=a_grads # 这是从 Critic 来的 dQ/da)
with tf.variable_scope('A_train'):opt = tf.train.AdamOptimizer(-self.lr)  # 负的学习率为了使我们计算的梯度往上升, 和 Policy Gradient 中的方式一个性质self.train_op = opt.apply_gradients(zip(self.policy_grads, self.e_params)) # 对 eval_net 的参数更新

critic


借鉴了 DQN 和 Double Q learning 的方式, 有两个计算 Q 的神经网络, Q_target 中依据下一状态, 用 Actor 来选择动作, 而这时的 Actor 也是一个 Actor_target ,有着 Actor 很久之前的参数。

critic结构也有双层网络,一层用于及时更新参数,另一层不及时更新参数, 用于给出 Actor 更新参数时的 Gradient ascent 强度。最主要的两个参数也是eval_nettarget_net

class Critic(object):def __init__(self):with tf.variable_scope('Critic'):# 这个网络是用于及时更新参数self.a = a  # 这个 a 是来自 Actor 的, 但是 self.a 在更新 Critic 的时候是之前选择的 a 而不是来自 Actor 的 a.self.q = self._build_net(S, self.a, 'eval_net', trainable=True)# 这个网络不及时更新参数, 用于给出 Actor 更新参数时的 Gradient ascent 强度self.q_ = self._build_net(S_, a_, 'target_net', trainable=False)

# 计算 target Q
with tf.variable_scope('target_q'):self.target_q = R + self.gamma * self.q_    # self.q_ 根据 Actor 的 target_net 来的
# 计算误差并反向传递误差
with tf.variable_scope('TD_error'):self.loss = tf.reduce_mean(tf.squared_difference(self.target_q, self.q))  # self.q 又基于 Actor 的 target_net
with tf.variable_scope('C_train'):self.train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss)

actor与critic结合

actor = Actor(...)
critic = Critic(..., actor.a, actor.a_)  # 将 actor 同它的 eval_net/target_net 产生的 a/a_ 传给 Critic
actor.add_grad_to_graph(critic.a_grads) # 将 critic 产出的 dQ/da 加入到 Actor 的 Graph 中去

类似于DQN的记忆库

class Memory(object):def __init__(self, capacity, dims):"""用 numpy 初始化记忆库"""def store_transition(self, s, a, r, s_):"""保存每次记忆在 numpy array 里"""def sample(self, n):"""随即从记忆库中抽取 n 个记忆进行学习"""

回合更新

var = 3  # 这里初始化一个方差用于增强 actor 的探索性for i in range(MAX_EPISODES):...for j in range(MAX_EP_STEPS):...a = actor.choose_action(s)a = np.clip(np.random.normal(a, var), -2, 2) # 增强探索性s_, r, done, info = env.step(a)M.store_transition(s, a, r / 10, s_)   # 记忆库if M.pointer > MEMORY_CAPACITY: # 记忆库头一次满了以后var *= .9998    # 逐渐降低探索性b_M = M.sample(BATCH_SIZE)...   # 将 b_M 拆分成下面的输入信息critic.learn(b_s, b_a, b_r, b_s_)actor.learn(b_s)s = s_if j == MAX_EP_STEPS-1:break

莫烦强化学习笔记整理(九)DDPG相关推荐

  1. 莫烦pytorch学习笔记5

    莫烦pytorch学习笔记5 1 自编码器 2代码实现 1 自编码器 自编码,又称自编码器(autoencoder),是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器(autoencode ...

  2. 142页ICML会议强化学习笔记整理,值得细读

    作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...

  3. 斯坦福 cs234 强化学习笔记整理活动 | ApacheCN

    整体进度:https://github.com/apachecn/stanford-cs234-notes-zh/issues/1 贡献指南:https://github.com/apachecn/u ...

  4. 【莫烦强化学习】笔记之Q-Learning(一)

    Q-learning简介 行动准则:好的行为能够获得奖励,不好的行为会获得惩罚. 假设你有两个选择:写作业和看电视.你选择连续看电视,被爸妈发现打屁股.你吸取了惨痛的教训,第二次持续认真的写作业. Q ...

  5. TensorFlow 莫烦视频学习笔记例子二(一)

    注释链接 所有代码 # -*- coding: utf-8 -*- """ Created on Wed Apr 19 12:30:49 2017@author: lg同 ...

  6. 莫烦python学习笔记之numpy基本运算

    numpy 的一维矩阵的几种基本运算 import numpy as np a=np.array([10,20,30,40]) # array([10, 20, 30, 40]) b=np.arang ...

  7. 莫烦python学习笔记之numpy.array,dtype,empty,zeros,ones,arrange,linspace

    array:创建数组 dtype:指定数据类型 empty:创建数据接近0 zeros:创建数据全为0 ones:创建数据全为1 arrange:按指定范围创建数据 linspace:创建线段 imp ...

  8. 莫烦python学习笔记之全局,局部变量

    局部变量 在 def 中, 我们可以定义一个局部变量, 这个变量 a 只能在这个功能 fun 中有效, 出了这个功能, a 这个变量就不是那个局部的 a. APPLY = 100 # 全局变量 def ...

  9. 莫烦python学习笔记之tuple,list,字典

    tuple 用小括号.或者无括号来表述,是一连串有顺序的数字. a_tuple = (12, 3, 5, 15 , 6) another_tuple = 12, 3, 5, 15 , 6 list 以 ...

最新文章

  1. python 交互图形 bokeh学习总结
  2. 数据表迁移数据一致性验证
  3. OpenGL中glTranslate*(),glRotation*(),glScale*()函数的用法(*是参数数据类型)
  4. 解决安装svn后出现Unable to connect to a repository at URL以及认证失败
  5. SolrJ添加商品数据
  6. 策划文档html,html代码整理.doc
  7. 使用钉钉接收gitlab仓库的推送消息
  8. 装饰器模式 decorator
  9. java命令运行jar包出现返回值的乱码问题,设置启动编码方式
  10. Educational Codeforces Round 54 (Rated for Div. 2): D. Edge Deletion(最短路树)
  11. matpower安装问题
  12. 网络操作系统之VyOS部署
  13. AspNetPager 分页
  14. 【MATLAB】批量修改文件名
  15. CSS3实现旋转图片相册
  16. 亚马逊被人差评了怎么办?
  17. js 监听esc按键
  18. 【基于 STM32CubeMX + PWM + DMA驱动SW2812b全彩RGB灯】
  19. (VS)c++调用matlab函数
  20. (JAVASwing界面)java实现简单的人事管理系统(数据库原理课程设计)

热门文章

  1. win10提示“没有打开该文件的权限,请与文件所有者或管理员联系以获得相应权限”
  2. Linux的远程终端连不上,Linux系统远程连接终端连接不上怎么办
  3. AllWinner T113 DDR验证
  4. 深度学习框架(如:Pytorch、Tensorflow、Caffe...)
  5. 基于mschart控件,绘制工控采集类曲线,可对图像进行缩放,拖动滚动条显示放大后的图像
  6. 我为什么要做富文本编辑器【wangEditor5总结】
  7. PMP十五至尊图(第六版)
  8. java swing+access/mysql开发零件销售管理系统
  9. 浅谈视觉外观检测系统中存在哪几大技术难点?
  10. eclipse上搭建MyBatis环境