

论文笔记:DDPG算法结构
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.

论文笔记:DDPG算法结构
- DQN:Q-function(状态价值函数)
- 输入→状态,输出→动作空间的预期奖励
- 输入→状态、动作对,输出→这个动作的预期奖励

- 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网络,原文定义的损失梯度是
- 使用actor-critic双网络。算上训练过程,实际上共有四个网络:
- 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πt1e−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。
- 初始化四个网络和Replay Buffer RRR
- for i = 1, MMM do
- 初始化一个随机过程N\mathcal{N}N,获取一个随机的初始状态s1s_1s1
- for t = 1, TTT do
- 使用当前的Actor生成一个动作at=μ(st∣θ)+Nta_t =\mu \left( s _ { t } \mid \theta \ \right) + \mathcal { N } _ { t }at=μ(st∣θ )+Nt
- 执行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
- 从RRR里采样大小为mmm的minibatch,分别计算对应的yiy_iyi,然后用这些值去计算Loss(2),更新Critic current
- 用损失梯度(1)更新Actor current
- 用软更新方法更新3和4中得到的参数到Actor target和Critic target中
Recommend
-
28
论文笔记整理:窦春柳,天津大学硕士,方向:自然语言处理 链接: https://arxiv.org/pdf/1503.00075.pdf...
-
29
本文源码: GitHub·点这里 || GitEE·点这里 一、队列结构 1、基础...
-
36
一、链表简介 1、链表概念 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,节点可以在运行时动态生成,节点包括...
-
18
本文源码:GitHub·点这里||GitEE·点这里一、链表简介1、链表概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个是存储数据元...
-
23
本文源码: GitHub·点这里 || GitEE·点这里 一、递归算法 递归就是...
-
39
本文源码:GitHub·点这里||GitEE·点这里一、递归算法递归就是方法自己调用自己,每次调用时传入不同的变量,可以让代码变得简洁。递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法,递归式方法可以被用于解决很多的计算机科学问题,...
-
8
论文推荐 | 图结构数据表征学习方法的综合分类法、香港理工最新 GAN 综述论文; 9个月前...
-
5
A2C & A3C(续) AC vs. GAN 《Connecting Generative Adversarial Networks and Actor-Critic Methods》 左图是GAN,右图是AC。
-
9
1.训练环境如何正确编写 强化学习里的 env.reset() env.step() 就是训练环境。其编写流程如下: 1.1 初始阶段: 先写一个简化版的训练环境。把任务难度降到最低,确保一定能正常训练。记录正常训练的智能体的分数,与随机...
-
10
1.训练环境如何正确编写 强化学习里的 env.reset() env.step() 就是训练环境。其编写流程如下: 1.1 初始阶段: 先写一个简化版的训练环境。把任务难度降到最低,确保一定能正常训练。记录正...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK