论文笔记:DDPG算法结构

date
Mar 24, 2021
slug
ddpg-algorithm
status
Published
tags
ReinforcementLearning
DeepLearning
summary
type
Post
实验室最近有个项目可能要用上一些强化学习和GNN相关的东西,只好疯狂看论文了。
这篇文章是DeepMind开发的面向连续动作空间控制的RL算法。
  • DQN:Q-function(状态价值函数)
    • 输入→状态,输出→动作空间的预期奖励
    • 输入→状态、动作对,输出→这个动作的预期奖励
      • notion image
    • 问题:只能应用于动作空间离散化的问题,否则Q函数计算量会极大。
  • DDPG提出的解决方案:
    • 使用actor-critic双网络。算上训练过程,实际上共有四个网络:
      • Actor current network,负责策略网络参数的更新,并且根据环境给出动作。
      • Actor target network,参数定期从复制。从replay buffer里采样的状态生成对应的动作。
      • Critic current network,负责价值网络参数的迭代更新,并且给出当前的
      • Critic target network,参数定期从复制,计算目标
      • target-current的机制是为了防止参数爆炸,将两个网络固定作为目标进行训练,然后定期复制训练中网络的参数(但是DDPG中不是直接复制,是用软更新)到目标网络上。
    • 损失函数:DDPG的策略是确定性的,所以不需要对动作空间作积分来取期望。对于Actor网络,原文定义的损失梯度是
      • 对于Critic网络,用的是均方差损失
        ,其中
        是用从replay buffer采样的一组算出来的。
  • DDPG使用的特殊机制
    • 类似DQN的Replay Buffer机制:用一个队列作为缓存,设定固定大小,维护。每次从这个队列里采样一个mini-batch进行训练。
    • Soft target update软更新:不直接把更新后的权重赋值到网络里,而是创建actor和critic的拷贝,用拷贝计算目标进行训练,训练后的权重用 的方法()更新回去。
    • 随机化探索策略:通过用取代原本的动作
      • 原文中用奥恩斯坦-乌伦贝克过程过程生成噪声。OU过程在时序上具备很好的相关性,可以使agent很好的探索具备动量属性的环境,表达式为,其中是我们使用的变量,是这个变量的均值,表示维纳过程(一维下的概率密度函数:,数学期望为0,方差为t),是维纳过程(其实就是布朗运动)带来的噪声的权重。
      • 这个方法在惯性系统上(例如Pendulum)会提升探索效率。
  • 完整的算法过程:
    • 输入:
      • 四个初始化的网络,分别使用参数
      • 衰减因子
      • 软更新系数
      • 从Replay Buffer采样的批量
      • 最大迭代次数
      • Episode的数量
      • 两个网络的更新频率
      输出:
      • 训练完成的Actor和Critic网络,分别使用
      过程:
      1. 初始化四个网络和Replay Buffer
      1. for i = 1, do
        1. 初始化一个随机过程,获取一个随机的初始状态
        2. for t = 1, do
          1. 使用当前的Actor生成一个动作
          2. 执行,从环境获取,将放入
          3. 里采样大小为的minibatch,分别计算对应的,然后用这些值去计算Loss(2),更新Critic current
          4. 用损失梯度(1)更新Actor current
          5. 用软更新方法更新3和4中得到的参数到Actor target和Critic target中
       

© Phillip Gu 2021