4

论文笔记:DDPG算法结构

 3 years ago
source link: https://www.enoch2090.me/ddpg-algorithm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

论文笔记:DDPG算法结构

2021 年 3 月 24 日
实验室最近有个项目可能要用上一些强化学习和GNN相关的东西,只好疯狂看论文了。
这篇文章是DeepMind开发的面向连续动作空间控制的RL算法。
  • DQN:Q-function(状态价值函数)
    • 输入→状态,输出→动作空间的预期奖励
    • 输入→状态、动作对,输出→这个动作的预期奖励
notion image
问题:只能应用于动作空间离散化的问题,否则Q函数计算量会极大。
  • DDPG提出的解决方案:
    • 使用actor-critic双网络。算上训练过程,实际上共有四个网络:
      • Actor current network,负责策略网络参数θ\thetaθ的更新,并且根据环境给出动作。
      • Actor target network,参数θ′\theta^{ \prime }θ′定期从θ\thetaθ复制。从replay buffer里采样的状态生成对应的动作。
      • Critic current network,负责价值网络参数www的迭代更新,并且给出当前的Q(S,A,w)Q ( S , A , w )Q(S,A,w)。
      • Critic target network,参数w′w^{\prime}w′定期从www复制,计算目标Q(S,A,w)Q ( S , A , w )Q(S,A,w)
      • target-current的机制是为了防止参数爆炸,将两个网络固定作为目标进行训练,然后定期复制训练中网络的参数(但是DDPG中不是直接复制,是用软更新)到目标网络上。
    • 损失函数:DDPG的策略是确定性的,所以不需要对动作空间作积分来取期望。对于Actor网络,原文定义的损失梯度是
∇θμμ∣si≈1N∑i∇aQ(s,a∣w)∣s=si,a=μ(si)∇θμ(s∣θ)∣si(1)\left. \left. \left. \nabla _ { \theta ^ { \mu } } \mu \right| _ { s _ { i } } \approx \frac { 1 } { N } \sum _ { i } \nabla _ { a } Q \left( s , a \mid w \right) \right| _ { s = s _ { i } , a = \mu \left( s _ { i } \right) } \nabla _ { \theta } \mu \left( s \mid \theta \right) \right| _ { s _ { i } }(1)∇θμ​μ∣si​​≈N1​∑i​∇a​Q(s,a∣w)∣∣∣​s=si​,a=μ(si​)​∇θ​μ(s∣θ)∣∣∣∣​si​​(1)
对于Critic网络,用的是均方差损失
L=1N∑i(yi−Q(si,ai∣θQ)2)(2)L = \frac { 1 } { N } \sum _ { i } \left( y _ { i } - Q \left( s _ { i } , a _ { i } \mid \theta ^ { Q } \right) ^ { 2 } \right)(2)L=N1​∑i​(yi​−Q(si​,ai​∣θQ)2)(2),其中
yi=ri+γQ′(si+1,μ′(si+1∣θμ′)∣θQ′)y _ { i } = r _ { i } + \gamma Q ^ { \prime } \left( s _ { i + 1 } , \mu ^ { \prime } \left( s _ { i + 1 } \mid \theta ^ { \mu ^ { \prime } } \right) \mid \theta ^ { Q ^ { \prime } } \right)yi​=ri​+γQ′(si+1​,μ′(si+1​∣θμ′)∣θQ′)
是用从replay buffer采样的一组(si,ai,ri,si+1)\left( s _ { i } , a _ { i } , r _ { i } , s _ { i + 1 } \right)(si​,ai​,ri​,si+1​)算出来的。
  • DDPG使用的特殊机制
    • 类似DQN的Replay Buffer机制:用一个队列作为缓存,设定固定大小,维护(st,at,rt,st+1)\left( s _ { t } , a _ { t } , r _ { t } , s _ { t + 1 } \right)(st​,at​,rt​,st+1​)。每次从这个队列里采样一个mini-batch进行训练。
    • Soft target update软更新:不直接把更新后的权重赋值到网络里,而是创建actor和critic的拷贝,用拷贝计算目标进行训练,训练后的权重用 θ′←τθ+(1−τ)θ′\theta ^ { \prime } \leftarrow \tau \theta + ( 1 - \tau )\theta^{ \prime }θ′←τθ+(1−τ)θ′ 的方法(τ≪1\tau \ll 1τ≪1)更新回去。
    • 随机化探索策略:通过用A=πθ(S)+NA = \pi _ { \theta } ( S ) + \mathcal { N }A=πθ​(S)+N取代原本的动作AAA。
      • 原文中用奥恩斯坦-乌伦贝克过程过程生成噪声N\mathcal { N }N。OU过程在时序上具备很好的相关性,可以使agent很好的探索具备动量属性的环境,表达式为dxt=θ(μ−xt)dt+σdWd x _ { t } = \theta \left( \mu - x _ { t } \right) d t + \sigma d Wdxt​=θ(μ−xt​)dt+σdW,其中xtx_txt​是我们使用的变量,μ\muμ是这个变量的均值,WWW表示维纳过程(一维下的概率密度函数:fWt(x)=12πte−x2/2tf _ { W _ { t } } ( x ) = \frac { 1 } { \sqrt { 2 \pi t } } e ^ { - x ^ { 2 } / 2 t }fWt​​(x)=2πt​1​e−x2/2t,数学期望为0,方差为t),σ\sigmaσ是维纳过程(其实就是布朗运动)带来的噪声的权重。
      • 这个方法在惯性系统上(例如Pendulum)会提升探索效率。
  • 完整的算法过程:
输入:
  • 四个初始化的网络,分别使用参数θ,θ′,w,w′\theta,\;\theta^{\prime},\;w,\;w^{\prime}θ,θ′,w,w′
  • 衰减因子γ\gammaγ
  • 软更新系数τ\tauτ
  • 从Replay Buffer采样的批量mmm
  • 最大迭代次数TTT
  • Episode的数量MMM
  • 两个网络的更新频率fff
输出:
  • 训练完成的Actor和Critic网络,分别使用θ\thetaθ和www。
过程:
  1. 初始化四个网络和Replay Buffer RRR
  1. for i = 1, MMM do
    1. 初始化一个随机过程N\mathcal{N}N,获取一个随机的初始状态s1s_1s1​
    2. for t = 1, TTT do
      1. 使用当前的Actor生成一个动作at=μ(st∣θ)+Nta_t =\mu \left( s _ { t } \mid \theta \ \right) + \mathcal { N } _ { t }at​=μ(st​∣θ )+Nt​
      2. 执行ata_tat​,从环境获取st+1s_{t+1}st+1​和rtr_trt​,将(st,at,rt,st+1)\left( s _ { t } , a _ { t } , r _ { t } , s _ { t + 1 } \right)(st​,at​,rt​,st+1​)放入RRR
      3. 从RRR里采样大小为mmm的minibatch,分别计算对应的yiy_iyi​,然后用这些值去计算Loss(2),更新Critic current
      4. 用损失梯度(1)更新Actor current
      5. 用软更新方法更新3和4中得到的参数到Actor target和Critic target中

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK