论文笔记:DDPG算法结构
date
Mar 24, 2021
slug
ddpg-algorithm
status
Published
tags
ReinforcementLearning
DeepLearning
summary
type
Post
实验室最近有个项目可能要用上一些强化学习和GNN相关的东西,只好疯狂看论文了。
这篇文章是DeepMind开发的面向连续动作空间控制的RL算法。
- DQN:Q-function(状态价值函数)
- 输入→状态,输出→动作空间的预期奖励
- 输入→状态、动作对,输出→这个动作的预期奖励
- 问题:只能应用于动作空间离散化的问题,否则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网络,分别使用和。
- 初始化四个网络和Replay Buffer
- for i = 1, do
- 初始化一个随机过程,获取一个随机的初始状态
- for t = 1, do
- 使用当前的Actor生成一个动作
- 执行,从环境获取和,将放入
- 从里采样大小为的minibatch,分别计算对应的,然后用这些值去计算Loss(2),更新Critic current
- 用损失梯度(1)更新Actor current
- 用软更新方法更新3和4中得到的参数到Actor target和Critic target中
输入:
输出:
过程: