莫烦强化学习笔记整理(九)DDPG
莫烦强化学习笔记整理(九)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_net和target_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_net和target_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相关推荐
- 莫烦pytorch学习笔记5
莫烦pytorch学习笔记5 1 自编码器 2代码实现 1 自编码器 自编码,又称自编码器(autoencoder),是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器(autoencode ...
- 142页ICML会议强化学习笔记整理,值得细读
作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...
- 斯坦福 cs234 强化学习笔记整理活动 | ApacheCN
整体进度:https://github.com/apachecn/stanford-cs234-notes-zh/issues/1 贡献指南:https://github.com/apachecn/u ...
- 【莫烦强化学习】笔记之Q-Learning(一)
Q-learning简介 行动准则:好的行为能够获得奖励,不好的行为会获得惩罚. 假设你有两个选择:写作业和看电视.你选择连续看电视,被爸妈发现打屁股.你吸取了惨痛的教训,第二次持续认真的写作业. Q ...
- TensorFlow 莫烦视频学习笔记例子二(一)
注释链接 所有代码 # -*- coding: utf-8 -*- """ Created on Wed Apr 19 12:30:49 2017@author: lg同 ...
- 莫烦python学习笔记之numpy基本运算
numpy 的一维矩阵的几种基本运算 import numpy as np a=np.array([10,20,30,40]) # array([10, 20, 30, 40]) b=np.arang ...
- 莫烦python学习笔记之numpy.array,dtype,empty,zeros,ones,arrange,linspace
array:创建数组 dtype:指定数据类型 empty:创建数据接近0 zeros:创建数据全为0 ones:创建数据全为1 arrange:按指定范围创建数据 linspace:创建线段 imp ...
- 莫烦python学习笔记之全局,局部变量
局部变量 在 def 中, 我们可以定义一个局部变量, 这个变量 a 只能在这个功能 fun 中有效, 出了这个功能, a 这个变量就不是那个局部的 a. APPLY = 100 # 全局变量 def ...
- 莫烦python学习笔记之tuple,list,字典
tuple 用小括号.或者无括号来表述,是一连串有顺序的数字. a_tuple = (12, 3, 5, 15 , 6) another_tuple = 12, 3, 5, 15 , 6 list 以 ...
最新文章
- python 交互图形 bokeh学习总结
- 数据表迁移数据一致性验证
- OpenGL中glTranslate*(),glRotation*(),glScale*()函数的用法(*是参数数据类型)
- 解决安装svn后出现Unable to connect to a repository at URL以及认证失败
- SolrJ添加商品数据
- 策划文档html,html代码整理.doc
- 使用钉钉接收gitlab仓库的推送消息
- 装饰器模式 decorator
- java命令运行jar包出现返回值的乱码问题,设置启动编码方式
- Educational Codeforces Round 54 (Rated for Div. 2): D. Edge Deletion(最短路树)
- matpower安装问题
- 网络操作系统之VyOS部署
- AspNetPager 分页
- 【MATLAB】批量修改文件名
- CSS3实现旋转图片相册
- 亚马逊被人差评了怎么办?
- js 监听esc按键
- 【基于 STM32CubeMX + PWM + DMA驱动SW2812b全彩RGB灯】
- (VS)c++调用matlab函数
- (JAVASwing界面)java实现简单的人事管理系统(数据库原理课程设计)
热门文章
- win10提示“没有打开该文件的权限,请与文件所有者或管理员联系以获得相应权限”
- Linux的远程终端连不上,Linux系统远程连接终端连接不上怎么办
- AllWinner T113 DDR验证
- 深度学习框架(如:Pytorch、Tensorflow、Caffe...)
- 基于mschart控件,绘制工控采集类曲线,可对图像进行缩放,拖动滚动条显示放大后的图像
- 我为什么要做富文本编辑器【wangEditor5总结】
- PMP十五至尊图(第六版)
- java swing+access/mysql开发零件销售管理系统
- 浅谈视觉外观检测系统中存在哪几大技术难点?
- eclipse上搭建MyBatis环境