DDPG(deep deterministic policy gradient)——连续控制的深度确定性策略梯度

DDPG(deep deterministic policy gradient)——连续控制的深度确定性策略梯度

学习记录,有错误感谢指出

基本概念


       深度确定性策略梯度(DDPG)是当前最常用的连续控制方法. ”深度“表明其使用了深度神经网络,”确定性“表明其输出的是确定的动作。

在这里插入图片描述

DDPG属于一种actor-critic的方法,它有一个策略网络(actor)和一个价值网络(critic).

  • 策略网络控制agent,它基于状态s输出动作a.
  • 价值网络不控制agent,它只是基于状态s对动作a打分,从而指导策略网络做出改进.

相关定义:
  1. 确定性策略网络μ:定义为一个函数,每一步的action可以通过at=μ(st)a_{t}=\mu(s_{t})at=μ(st),其参数为θμ\theta^\muθμ

  2. 行为策略 behavior policyβbehavior\ policy \betabehavior policyβ:在RL训练过程中,为了同时兼顾 exploration和exploitation,采用异策略方法,即行为策略可以不同于目标策略.

    • 目标策略(target policy):确定性策略网络μ(s;θnew)\mu(s;\theta_{new})μ(s;θnew),其中θnew\theta_{new}θnew是策略网络最新的参数.

    • 行为策略(behavior policy):为行为策略加入随机噪声:a=μ(s;θold)+ϵa=\mu(s;\theta_{old})+\epsilona=μ(s;θold)+ϵ.

    • 异策略的好处是可以把收集经验与训练神经网络分开进行;将根据behavior policy收集的经验存放至replay buffer,在训练target policy的时候,重复利用收集到的经验,如下图所示:

在这里插入图片描述

​       利用behavior policy与环境进行交互,将agent的轨迹整理成(st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})(st,at,rt,st+1)这样的四元组存放在经验回放缓存(replay buffer)中. 在训练的时候,随机从缓存中取出四元组进行训练.

DDPG网络框架


       DDPG是actor-critic的结构,同时引入DQN的思想(online和target 网络)

       如果对actor和critic只使用Q神经网络的话,学习过程不稳定,这是由bootstrapping带来的问题(Q神经的参数在被更新的同时,又用于计算Q网络和策略网络的gradient)

       所以,DDPG分别为策略网络和价值网络各创建了两个神经网络的拷贝,一个叫online,一个叫target:

在这里插入图片描述

       在训练完一个batch后,SGD算法实时更新online网络的参数,随后再通过soft update算法更新target网络的参数.

在这里插入图片描述

  • 优点:target网络参数变化小,用于在训练过程中计算online网络的gradient,比较稳定,训练易于收敛。
  • 缺点:参数变化小,学习过程变慢。

训练流程


下面以四元组$(s_t, a_t, r_t, s_{t+1})$为例,介绍训练流程.
1.更新价值网络(Critic)

       训练价值网络q(s,a;w)q(s,a;w)q(s,a;w)时,需要用到 四元组的st,at,rt,st+1s_t, a_t, r_t, s_{t+1}st,at,rt,st+1全部四个元素.

​ 1)首先计算TD Target

       ①由 Target 策略网络预测 st+1s_{t+1}st+1对应的下一动作: a^t+1=μ(st+1;θ−)\hat a_{t+1}=\mu(s_{t+1};\theta^-)a^t+1=μ(st+1;θ)

       ②由 Target 价值网络计算 TD Target: y^t=rt+γ⋅q(st+1,a^t+1;w−)\hat y_t=r_t+\gamma·q(s_{t+1},\hat a_{t+1};w^-)y^t=rt+γq(st+1,a^t+1;w)

​ 2)让 online 价值对状态 (st,at)(s_t,a_t)st,at) 预测action value的值
q^t=q(st,at;w) \hat q_t=q(s_t,a_t;w) q^t=q(st,at;w)
​ TD Error为: δt=q^t−y^t\delta_t=\hat q_t-\hat y_tδt=q^ty^t

​ 3)对N个样本计算误差的平均值,进行梯度下降更新参数

        价值网络的loss定义:类似于监督学习,定义loss为MSE损失( mean squared error):
Loss=1N∑i(q^i−y^i)2 Loss =\frac{1}{N}\sum\limits_i {}(\hat q_i-\hat y_i)^2 Loss=N1i(q^iy^i)2
注意:TD Target y^i\hat y_iy^i 的计算使用的是target策略网络 和 target价值网络,这样做是为了使学习更加稳定,易于收敛.

2.更新策略网络(Actor)

       训练策略网络μ(s;θ)\mu(s;\theta)μ(s;θ)时,只需要用到四元组中的状态sts_tst.

       输入状态sts_tst,策略网络会输出一个动作at=μ(st)a_{t}=\mu(s_{t})at=μ(st),将这个动作输入价值网络,得到该动作的打分:q^=q(s,a;w){\rm{\hat q = q(s,a;w)}}q^=q(s,a;w). 策略网络的参数θ\thetaθ通过影响 ata_tat 进而影响 Critic 的打分q^\hat qq^. 因此分数q^\hat qq^可以反映θ\thetaθ的好坏. 所以令分数q^\hat qq^作为目标函数,通过对θ\thetaθ进行梯度上升来改进Actor.

       训练策略网络(Actor)的目的就是让它迎合价值网络(Critic),使其输出的action可以得到更高的分数,即选择更好的动作.

推导过程

       对于状态sts_tst,可以经过策略网络和价值网络后,可以得到打分为:
q(s,μ(s;θ);w) q(s,\mu(s;\theta);w) q(s,μ(s;θ);w)
       我们希望打分的期望值尽量高,故将目标函数定义为打分的期望:
J(θ)=ES[q(s,μ(S,θ);w)] J(\theta)=E_S[q(s,\mu(S,\theta);w)] J(θ)=ES[q(s,μ(S,θ);w)]
       上式关于状态S求期望,消除了S的影响. 即不管面对什么样的状态S,策略网络Actor都应该输出较好的动作,使得平均分J(θ)J(\theta)J(θ)尽量高. 策略网络的学习可以建模成最大化问题:
max⁡θJ(θ) \mathop {\max }\limits_\theta J(\theta ) θmaxJ(θ)
注意:这里我们只训练策略网络(Actor),所以在最大化过程中我们优化的变量只是策略网络的参数θ\thetaθ,即价值网络的参数www被固定住了,不会被更新.

       在真实训练过程中,我们用随机梯度上升进行训练. 即每次用随机变量 S 的一个观测值sjs_jsj来计算J(θ)J(\theta)J(θ)的梯度:
gj=▽θq(s,μ(sj,θ);w) g_j = \bigtriangledown_{\theta}q(s,\mu(s_j,\theta);w) gj=θq(s,μ(sj,θ);w)
gjg_jgj叫做确定性策略梯度(DPG)

​ 下面再用链式法则计算出gjg_jgj,即:
δqδθ=∂q∂a⋅∂a∂θ \frac{{\delta q}}{{\delta \theta }} = \frac{{\partial {\rm{q}}}}{{\partial a}}{\rm{\cdot}}\frac{{\partial {\rm{a}}}}{{\partial \theta }} δθδq=aqθa

应用链式法则可以求得最终的确定性策略梯度
▽θq(s,μ(sj,θ);w)=▽θμ(sj;θ)⋅▽aq(sj,aj^;w),其中aj^=μ(sj;θ) \bigtriangledown_{\theta}q(s,\mu(s_j,\theta);w)=\bigtriangledown_{\theta}\mu(s_j;\theta)· \bigtriangledown_{a}q(s_j,\hat {a_j};w), 其中\hat {a_j}=\mu(s_j;\theta) θq(s,μ(sj,θ);w)=θμ(sj;θ)aq(sj,aj^;w),其中aj^=μ(sj;θ)

       由此,我们最终得到更新θ\thetaθ的算法. 即每次从 replay buffer中随机抽取一个状态,记作sjs_jsj. 计算策略网络做出的动作aj^=μ(sj;θ)\hat {a_j}=\mu(s_j;\theta)aj^=μ(sj;θ). 用梯度上升更新一次θ\thetaθ.
θ←θ+β⋅▽θμ(sj;θ)⋅▽aq(sj,aj^;w). \theta\leftarrow\theta+\beta·\bigtriangledown_{\theta}\mu(s_j;\theta)· \bigtriangledown_{a}q(s_j,\hat {a_j};w). θθ+βθμ(sj;θ)aq(sj,aj^;w).
此处的β\betaβ是学习率.

总结


1.DDPG使用的是actor-critic的网络结构;

2.使用了target网络 和 online网络,两个结构完全相同的拷贝神经网络,在一定程度上避免了一个网络的bootstrapping带来的高估问题,使收敛更有保障;

3.DDPG使用了experience replay memory:通过behavior policy与环境进行交互时,产生的transition在时间序列上是高度关联的,如果这些数据序列直接用于训练,会导致神经网络的overfit,不易收敛。DDPG的actor将transition数据先存入experience replay buffer, 然后在训练时,从experience replay buffer中随机采样batch的数据,可以消除样本间的关联性.

Reference:

https://blog.youkuaiyun.com/kenneth_yu/article/details/78478356

《深度强化学习》——王树森;黎彧君;张志华

05-14
### DDPG算法简介 DDPGDeep Deterministic Policy Gradient)是一种用于连续动作空间的深度强化学习算法[^1]。它的核心思想是结合了Q-learning的价值函数估计和策略梯度法的策略优化,通过两个神经网络分别表示价值函数(critic network)和策略函数(actor network)。这种设计使DDPG能够在复杂的高维状态和动作空间中表现良好。 #### 原理详解 DDPG的核心机制包括以下几个方面: - **Actor-Critic架构**:DDPG采用双网络结构,其中`Actor`负责生成策略π(a|s),即根据当前状态s选择动作a;`Critic`则评估这个动作的好坏,计算Q值Q(s,a)[^4]。 - **经验回放(Experience Replay)**:为了打破数据之间的关联性和提高样本利用率,DDPG引入了经验回放缓冲区存储交互经历,并从中随机采样进行训练[^1]。 - **目标网络(Target Network)**:为了避免参数更新过程中的不稳定现象,DDPG维护了一组独立的目标网络,这些网络定期软更新以保持稳定[^3]。 ```python import torch import torch.nn as nn import torch.optim as optim class Actor(nn.Module): def __init__(self, state_dim, action_dim): super(Actor, self).__init__() self.fc1 = nn.Linear(state_dim, 256) self.fc2 = nn.Linear(256, 128) self.fc3 = nn.Linear(128, action_dim) def forward(self, state): x = torch.relu(self.fc1(state)) x = torch.relu(self.fc2(x)) return torch.tanh(self.fc3(x)) class Critic(nn.Module): def __init__(self, state_dim, action_dim): super(Critic, self).__init__() self.fc1 = nn.Linear(state_dim + action_dim, 256) self.fc2 = nn.Linear(256, 128) self.fc3 = nn.Linear(128, 1) def forward(self, state, action): x = torch.cat([state, action], dim=1) x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) return self.fc3(x) ``` 以上代码展示了如何定义`Actor`和`Critic`网络。 #### 实现细节 在实际实现过程中需要注意以下几点: - 初始化权重时应遵循特定分布,例如Xavier初始化或正态分布[^4]。 - 使用探索噪声(Exploration Noise),通常选用Ornstein-Uhlenbeck进程来增加稳定性。 - 调整超参数如学习率、折扣因子γ、批量大小batch size等对于获得良好的性能至关重要。 #### 应用场景 DDPG广泛应用于机器人控制领域和其他涉及连续动作的任务当中。以下是几个典型的应用实例: - **机械臂轨迹跟踪控制**:通过模拟环境训练智能体完成指定路径追踪任务[^2]。 - **倒立摆控制系统**:利用DDPG调节平衡车或者单级/多级倒立摆姿态角速度等物理量达到预期效果[^2]。 - **自动驾驶汽车导航规划**:借助虚拟驾驶平台开发自主避障及泊车位寻找等功能模块。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值