深度确定性策略梯度(DDPG)

更新时间:2023-07-18 07:56:51 阅读: 评论:0

深度确定性策略梯度(DDPG )
Deep Deterministic Policy Gradient
⽂章⽬录
算法思想
在介绍DDPG之前,先来介绍⼏个概念:确定性策略是指某个状态执⾏的动作是⼀定的;随机性策略是指在某个状态得到的是执⾏动作的概率,可能执⾏不同的动作。确定性策略是和随机策略相对⽽⾔的,对于某⼀些动作集合来说,它可能是连续值,或者⾮常⾼维的离散值,这样动作的空间维度极⼤。如果我们使⽤随机策略,即像DQN⼀样研究它所有的可能动作的概率,并计算各个可能的动作的价值的话,那需要的样本量是⾮常⼤才可⾏的。于是有⼈就想出使⽤确定性策略来简化这个问题。
深度确定性策略梯度(DDPG)是基于Actor-Critic、off-pollicy,针对连续⾏为的策略学习⽅法,可以在连续空间中进⾏操作。可以直接以原始像素作为输⼊。
随着DQN的流⾏,使⽤神经⽹络来对action-value function进⾏估计⾮常常见,但是DQN只能解决离散以及低维的动作空间,但是真实的物理环境中,⼤部分的动作空间都是连续且⾼维的,在处理时,DQN是不适合的,因为它依赖于在每⼀次最优迭代中寻找最⼤化action-value function(表现为在Q神经⽹络中
输出每个动作的值函数),针对连续动作空间,DQN没有办法输出每个动作的动作值函数。解决连续问题的⼀个很简单的思路是将动作离散化,但是这个存在的⼀个问题是维度爆炸,随着⾃由度的提⾼,动作数量是指数增长的。并且直接的离散化会丢失action domain⾥的结构信息,这些信息可能对于解决问题是⾮常重要的。
对于某些问题,这种带有神经函数approximator的actor-critic⽅法的简单应⽤是不稳定的。DQN以⼀种稳定鲁棒的⽅式学习到function approximator,主要由于两个⽅⾯的创新:1、使⽤回放缓冲区(replay buffer)中的样本对⽹络进⾏训练,以最⼩化样本之间的相关性。
2、使⽤⽬标Q⽹络对⽹络进⾏训练,以便在备份期间提供⼀致的⽬标。
DDPG该⽅法的⼀个关键特征是其简单性:它只需要⼀个简单的AC体系结构和学习算法,只有很少的“moving parts”,使得它易于实现和扩展到更困难的问题和更⼤的⽹络。DDPG Innovation
target Q network 的复制
DDPG从当前⽹络到⽬标Q⽹络的复制和DQN不⼀样。在DQN中,我们是直接把将当前Q⽹络的参数复制到⽬标Q⽹络,即  DDPG 这⾥没有使⽤这种硬更新,⽽是使⽤了软更新,即每次参数只更新⼀点点,即:
其中  是更新系数,⼀般取的⽐较⼩,⽐如0.1或者0.01这样的值。 这意味着target value受到约束,这可能会减慢学习的速率,但这会极⼤提⾼学习的稳定性。缓解了学习action-value function相对不稳定的问题,与监督学习的情况更接近。
特征缩放
当从低维特征向量观察中学习时,观察可能有不同的物理单位(例如位置与速度)并且范围可跨越环境⽽变化。这使得⼈们难以对⽹络进⾏有效的学习,并且可能很难找到超越环境的泛化的超参数,因此解决⽅法是⼿动缩放特征。使⽤batch normalization exploration
在连续动作空间中学习的⼀个主要挑战是探索。DDPG离线策略算法的优势是我们可以将探索独⽴与学习算法之上。
ω=′ωω⟵γω+′(1−γ)ω′(1)
θ⟵γθ+′(1−γ)θ′
(2)
γ
这⾥使⽤的是Ornstein-Uhlenbeck⽅法
伪代码
算法实现
import tensorflow as tf
import numpy as np
import gym
import os
MAX_EPISODES =100
MAX_EP_STEPS =200
LR_A =0.001# learning rate for actor
LR_C =0.002# learning rate for critic
GAMMA =0.9# reward discount
TAU =0.01# soft replacement
MEMORY_CAPACITY =10000
BATCH_SIZE =32
RENDER =Fal
ALG_NAME ='DDPG'
ENV_NAME ='Pendulum-v0'
File ='DDPG1_1'
# DDPG
class DDPG(object):
def__init__(lf, a_dim, s_dim, a_bound,):
< = np.zeros((MEMORY_CAPACITY, s_dim *2+ a_dim +1), dtype=np.float32)        lf.pointer =0
lf.action_dim, lf.state_dim, lf.a_bound = a_dim, s_dim, a_bound,
lf.actor_model = lf.build_actor()
lf.target_actor = lf.build_actor()
lf.target_critic = lf.build_critic()
拼音enlf.update_target(lf.target_actor.variables, lf.actor_model.variables, TAU)
lf.update_target(lf.target_critic.variables, lf.critic_model.variables, TAU)
lf.optimizer_actor = tf.keras.optimizers.Adam(LR_A)
lf.optimizer_critic = tf.keras.optimizers.Adam(LR_C)
def choo_action(lf, s):
return lf.actor_model(waxis,:])[0]
def learn(lf):
# soft target replacement
lf.update_target(lf.target_actor.variables, lf.actor_model.variables, TAU)
剪纸步骤lf.update_target(lf.target_critic.variables, lf.critic_model.variables, TAU)
indices = np.random.choice(MEMORY_CAPACITY, size=BATCH_SIZE)
安防监控系统
bt = lf.memory[indices,:]
bs = bt[:,:lf.state_dim]
ba = bt[:, lf.state_dim: lf.state_dim + lf.action_dim]
br = bt[:,-lf.state_dim -1:-lf.state_dim]
bs_ = bt[:,-lf.state_dim:]
# Actor
with tf.GradientTape()as tape:
action = lf.actor_model(bs)
诚信的反义词
action = lf.actor_model(bs)
critic = lf.critic_model([bs, action])
a_loss =-tf.reduce_mean(critic)# maximize the q
actor_grad = adient(a_loss, lf.ainable_variables)
五年级下册语文生字组词lf.optimizer_actor.apply_gradients(zip(actor_grad, lf.ainable_variables))
钱柳吟# Critic
with tf.GradientTape()as tape:
q_target = br + GAMMA * lf.target_critic([bs_, lf.target_actor(bs_)])
# in the feed_dic for the td_error, the lf.a should change to actions in memory
td_error = tf.compat.an_squared_error(labels=q_target, itic_model([bs, ba]))        critic_grad = adient(td_error, lf.ainable_variables)
lf.optimizer_critic.apply_gradients(zip(critic_grad, lf.ainable_variables))
def update_target(lf, target_weights, weights, tau):
for(a, b)in zip(target_weights, weights):
a.assign(b * tau + a *(1- tau))# 替换参数 a
def store_transition(lf, s, a, r, s_):
transition = np.hstack((s, a,[r], s_))
index = lf.pointer % MEMORY_CAPACITY  # replace the old memory with new memory
<[index,:]= transition
lf.pointer +=1
def build_actor(lf):
input= tf.keras.layers.Input(shape=[None, lf.state_dim])
layer1 = tf.keras.layers.Den(units=30, lu)(input)
layer2 = tf.keras.layers.Den(units=lf.action_dim, anh)(layer1)
output = tf.multiply(layer2, lf.a_bound)
model = tf.keras.Model(input, output)
return model
def build_critic(lf):
state_input = tf.keras.layers.Input(shape=(lf.state_dim))
state_out = tf.keras.layers.Den(30, u_bias=Fal)(state_input)
action_input = tf.keras.layers.Input(shape=(lf.action_dim))
action_out = tf.keras.layers.Den(30, u_bias=True)(action_input)
out = lu(state_out + action_out)
out = tf.keras.layers.Den(1)(out)
model = tf.keras.Model([state_input, action_input], out)
return model
def saveModel(lf):
path = os.path.join('model','_'.join([File, ALG_NAME, ENV_NAME]))
if not ists(path):
os.makedirs(path)
lf.actor_model.save_weights(os.path.join(path,'actor.tf'), save_format='tf')
print('Saved weights.')
def loadModel(lf):
path = os.path.join('model','_'.join([File, ALG_NAME, ENV_NAME]))
if ists(path):
print('Load DDPG Network parametets ...')
lf.actor_model.load_weights(os.path.join(path,'actor.tf'))
print('Load weights!')
el:
print("No model file find, plea train ")
if __name__ =="__main__":
if __name__ =="__main__":
env = gym.make(ENV_NAME)
env = env.unwrapped
env.ed(1)
s_dim = env.obrvation_space.shape[0]
a_dim = env.action_space.shape[0]
a_bound = env.action_space.high
ddpg = DDPG(a_dim, s_dim, a_bound)
var =3# control exploration
for episode in range(MAX_EPISODES):
s = ()
ep_reward =0
for j in range(MAX_EP_STEPS):
if RENDER:
# Add exploration noi
日本性开放a = ddpg.choo_action(s)
a = np.clip(al(a, var),-2,2)# add randomness to action lection for exploration            s_, r, done, info = env.step(a)
ddpg.store_transition(s, a, r /10, s_)
if ddpg.pointer > MEMORY_CAPACITY:
var *=.9995# decay the action randomness
ddpg.learn()
s = s_
ep_reward += r
if j == MAX_EP_STEPS -1:
print('Episode:', episode,' Reward: %i'%int(ep_reward),'Explore: %.2f'% var,)
# if ep_reward > -300:RENDER = True
break
ddpg.saveModel()
附录
Ornstein-Uhlenbeck(奥恩斯坦-乌伦贝克)
⾼斯噪声
全国高速收费标准
贝尔曼⽅程
参考⽂献

本文发布于:2023-07-18 07:56:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1102724.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:动作   学习   可能
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图