1 DDPG简介

  • 确定性策略梯度(Deterministic Policy Gradient,DPG):确定性策略是和随机策略相对而言的。作为随机策略,在同一个状态处,采用的动作是基于一个概率分布,即是不确定的。而确定性策略则决定简单点,只取最大概率的动作,去掉这个概率分布。作为确定性策略,在同一个状态处,动作是唯一确定的,即策略变成:

π θ ( s ) = a \pi_\theta(s)=a πθ​(s)=a

  • DDPG的提出其实是为了让DQN可以扩展到连续的动作空间
  • DDPG借鉴了DQN的两个技巧:经验回放 & 目标网络
  • DDPG使用策略网络直接输出确定性动作
  • DDPG使用了Actor-Critic的架构

2 DDPG原理

DDPG有四个网络:分别是 Actor当前网络Actor目标网络Critic当前网络Critic目标网络
Critic当前网络、Critic目标网络 和DDQN的当前Q网络、目标Q网络的功能定位类似,但是DDPG有自己的Actor策略网络,因此不需要 ϵ \epsilon ϵ-贪婪法这样的策略,这部分DDQN的功能到了DDPG可以在Actor当前网络完成。而对经验回放池中采样的下一状态 S ′ S^\prime S′使用贪婪法选择动作 A ′ A^\prime A′,这部分工作由于用来估计目标Q值,因此可以放到Actor目标网络完成。

基于经验回放池和目标Actor网络提供的 S ′ , A ′ S^\prime,A^\prime S′,A′计算目标Q值的一部分,这部分由于是评估,因此放到Critic目标网络完成。而Critic目标网络计算出目标Q值一部分后,Critic当前网络会计算目标Q值,并进行网络参数的更新,并定期讲网络参数复制到Critic目标网络。
此外,Actor当前网络也会基于Critic目标网络计算出的目标Q值,进行网络参数的更新,并定期将网络参数复制到Actor目标网络。

根据上面的思路,总结DDPG 4个网络的功能定位:

  1. Actor当前网络:负责策略网络参数 θ \theta θ的迭代更新,负责根据当前状态 S S S选择当前动作 A A A,用于和环境交互生成 S ′ , R S^\prime,R S′,R
  2. Actor目标网络:负责根据经验回放池中采样的下一状态 S ′ S^\prime S′选择最优下一动作 A ′ A^\prime A′。网络参数 θ ′ \theta^\prime θ′定期从 θ \theta θ复制。
  3. Critic当前网络:负责价值网络参数 w w w的迭代更新,负责计算当前Q值 Q ( S , A , w ) Q(S,A,w) Q(S,A,w)。目标Q值 y i = R + γ Q ′ ( S ′ , A ′ , w ′ ) y_i=R+\gamma Q^\prime (S^\prime,A^\prime,w^\prime) yi​=R+γQ′(S′,A′,w′)
  4. Critic目标网络:负责计算目标Q值中的 Q ′ ( S ′ , A ′ , w ′ ) Q^\prime (S^\prime,A^\prime,w^\prime) Q′(S′,A′,w′)部分。网络参数 w ′ w^\prime w′定期从 w w w复制。

此外,DDPG从当前网络到目标网络的复制和我们之前讲到了DQN不一样。回想DQN,我们是直接把将当前Q网络的参数复制到目标Q网络,即w′=w, DDPG这里没有使用这种硬更新,而是使用了软更新,即每次参数只更新一点点,即: w ′ ← τ w + ( 1 − τ ) w ′ w^\prime\leftarrow \tau w+(1-\tau)w^\prime w′←τw+(1−τ)w′ θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta^\prime\leftarrow \tau\theta+(1-\tau)\theta^\prime θ′←τθ+(1−τ)θ′其中τ是更新系数,一般取的比较小,比如0.1或者0.01这样的值。

同时,为了学习过程可以增加一些随机性,增加学习的覆盖,DDPG对选择出来的动作 A A A会增加一定的噪声 N \mathcal{N} N,即最终和环境交互的动作 A A A的表达式是: A = π θ ( S ) + N A=\pi_\theta(S)+\mathcal{N} A=πθ​(S)+N

3 DDPG 算法流程

输入: Actor当前网络 、Actor目标网络、Critic当前网络、Critic目标网络,参数分别为 θ , θ ′ , w , w ′ \theta,\theta^\prime,w,w^\prime θ,θ′,w,w′,衰减因子 γ \gamma γ,软更新系数 τ \tau τ,批量梯度下降的样本数 m m m,目标Q网络参数更新频率 C C C,最大迭代次数 T T T,随机噪声函数 N \mathcal{N} N
输出: 最优Actor当前网络参数 θ \theta θ,Critic当前网络参数 w w w

  1. 随机初始化 θ , w , w ′ = w , θ ′ = θ \theta,w,w^\prime=w,\theta^\prime=\theta θ,w,w′=w,θ′=θ。清空经验回放集 D D D
  2. for i from 1 to T,进行迭代:
    a) 初始化S为当前状态序列的第一个状态,拿到其特征向量 ϕ ( S ) \phi(S) ϕ(S)
    b) 在Actor当前网络基于状态 S S S得到动作 A = π θ ( ϕ ( S ) ) + N A=\pi_\theta(\phi(S))+\mathcal{N} A=πθ​(ϕ(S))+N
    c) 执行动作 A A A,得到新状态 S ′ S^\prime S′,奖励 R R R,是否终止状态 i s _ e n d is\_end is_end
    d) 将五元组 { ϕ ( S ) , A , R , ϕ ( S ′ ) , i s _ e n d } \left\{ \phi(S),A,R,\phi(S^\prime),is\_end\right\} {ϕ(S),A,R,ϕ(S′),is_end}存入经验回放集 D D D
    e) S = S ′ S=S^\prime S=S′
    f) 从经验回放集合 D D D中采样 m m m个样本 { ϕ ( S j ) , A j , R j , ϕ ( S j ′ ) , i s _ e n d j } , j = 1 , 2 , … , m \left\{ \phi(S_j),A_j,R_j,\phi(S_j^\prime),is\_end_j\right\},j=1,2,\dots,m {ϕ(Sj​),Aj​,Rj​,ϕ(Sj′​),is_endj​},j=1,2,…,m,计算当前目标Q值 y j y_j yj​: y j = { R j i s _ e n d i s t r u e R j + γ Q ′ ( ϕ ( S j ′ ) , π θ ′ ( ϕ ( S j ′ ) ) , w ′ ) i s _ e n d i s f a l s e y_j= \begin{cases} R_j & is\_end\ is\ true \\ R_j+\gamma Q^\prime(\phi(S_j^\prime),\pi_{\theta^\prime}(\phi(S^\prime_j)),w^\prime) & is\_end\ is\ false \end{cases} yj​={Rj​Rj​+γQ′(ϕ(Sj′​),πθ′​(ϕ(Sj′​)),w′)​is_end is trueis_end is false​
    g) 使用均方差损失函数 1 m ∑ j = 1 m ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 \frac{1}{m}\sum^m_{j=1}\left( y_j-Q(\phi(S_j),A_j,w)\right)^2 m1​∑j=1m​(yj​−Q(ϕ(Sj​),Aj​,w))2,通过神经网络的梯度反向传播来更新Critic当前网络参数 w w w
    h) 使用 J ( θ ) = − 1 m ∑ j = 1 m Q ( s i , a i , θ ) J(\theta)=-\frac{1}{m}\sum^m_{j=1}Q(s_i,a_i,\theta) J(θ)=−m1​∑j=1m​Q(si​,ai​,θ),通过神经网络的梯度反向传播来更新Actor当前网络参数 θ \theta θ
    i) 如果 t % C = 1 t\%C=1 t%C=1,则更新Critic目标网络和Actor目标网络参数: w ′ ← τ w + ( 1 − τ ) w ′ w^\prime\leftarrow \tau w+(1-\tau)w^\prime w′←τw+(1−τ)w′ θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta^\prime\leftarrow \tau\theta+(1-\tau)\theta^\prime θ′←τθ+(1−τ)θ′
    j) 如果 S ′ S^\prime S′为终止状态,当前episode迭代结束,否则转到步骤b

DDPG学习笔记参考刘建平:深度确定性策略梯度(DDPG)

【深度强化学习】DDPG算法相关推荐

  1. 深度强化学习-DDPG算法原理和实现

    全文共3077个字,8张图,预计阅读时间15分钟. 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作.如果我们省略中间的步骤,即直接根据当前的状态来选 ...

  2. 深度强化学习DDPG算法高性能Pytorch代码(改写自spinningup,低环境依赖,低阅读障碍)

    写在前面 DRL各种算法在github上各处都是,例如莫凡的DRL代码.ElegantDRL(推荐,易读性NO.1) 很多代码不是原算法的最佳实现,在具体实现细节上也存在差异,不建议直接用在科研上. ...

  3. 深度强化学习主流算法介绍(二):DPG系列

    之前的文章可以看这里 深度强化学习主流算法介绍(一):DQN系列 相关论文在这里 开始介绍DPG之前,先回顾下DQN系列 DQN直接训练一个Q Network 去估计每个离散动作的Q值,使用时选择Q值 ...

  4. 深度强化学习探索算法最新综述,近200篇文献揭示挑战和未来方向

    ©作者 | 杨天培.汤宏垚等 来源 | 机器之心 强化学习是在与环境交互过程中不断学习的,⽽交互中获得的数据质量很⼤程度上决定了智能体能够学习到的策略的⽔平.因此,如何引导智能体探索成为强化学习领域研 ...

  5. 深度强化学习-Actor-Critic算法原理和实现

    全文共2543个字,2张图,预计阅读时间15分钟. 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作.如果我们省略中间的步骤,即直接根据当前的状态来选 ...

  6. 深度强化学习——actor-critic算法(4)

    一.本文概要: actor是策略网络,用来控制agent运动,你可以把他看作是运动员,critic是价值网络,用来给动作打分,你可以把critic看作是裁判,这节课的内容就是构造这两个神经网络,然后通 ...

  7. 深度强化学习-D3QN算法原理与代码

    Dueling Double Deep Q Network(D3QN)算法结合了Double DQN和Dueling DQN算法的思想,进一步提升了算法的性能.如果对Doubel DQN和Duelin ...

  8. 深度强化学习——DQN算法原理

    DQN算法原理 一.DQN算法是什么 二.DQN训练过程 三.经验回放 (Experience Replay) 四.目标网络(Target Network) 1.自举(Bootstrapping) 2 ...

  9. 深度强化学习-DQN算法原理与代码

    DQN算法是DeepMind团队提出的一种深度强化学习算法,在许多电动游戏中达到人类玩家甚至超越人类玩家的水准,本文就带领大家了解一下这个算法,论文和代码的链接见下方. 论文:Human-level ...

  10. 深度强化学习-A3C算法

    论文地址:https://arxiv.org/pdf/1602.01783v1.pdf A3C(异步优势演员评论家)算法,设计该算法的目的是找到能够可靠的训练深度神经网络,且不需要大量资源的RL算法. ...

最新文章

  1. crontab中运行python程序出错,提示ImportError: No module named解决全过程
  2. 免费开源剪辑软件Shotcut推荐和使用教程
  3. python带我起飞_Python带我起飞:入门、进阶、商业实战
  4. 微课|玩转Python轻松过二级(1.3节):编码规范与代码优化建议1
  5. 【51Nod1773】A国的贸易 解题报告
  6. Android——RelativeLayout(相对布局)
  7. 青岛大学计算机科学与技术类专业,青岛大学2017年大类招生专业类代码及所含专业说明...
  8. CentOS 6.x通过yum安装php7.1及相关环境
  9. 软件测试和初级会计哪个简单,2018年初级会计app刷题哪个好?
  10. 《Adobe Flash CS6中文版经典教程》——第1课 Flash CS6快速入门1.1 启动Flash并打开文件...
  11. 计算机高级职称答辩ppt模板,毕业论文答辩PPT模板优秀 范例 11.ppt
  12. 信息系统监理师题库_软考信息系统监理师题库
  13. 超强大在线词频统计功能,从一篇文章到一个G的文本均可轻松统计
  14. CS224W图机器学习笔记8-图神经网络三大应用
  15. 微信小程序简单获取当前时间及日期
  16. 零基础如何入门学习电脑编程?
  17. Qt连接MySql数据库(本地和远程数据库均可)
  18. 【架构设计】作为架构师你应该掌握的画图技术
  19. c语言预处理命令12个,C语言编译预处理和预处理命令
  20. 使用natapp实现内网穿透详细教程

热门文章

  1. Logstash:你喜欢 Grok 吗?
  2. 【行业动态】特斯拉线圈如何撼动一个行业:秒开智能锁
  3. arch linux u盘安装,使用U盘安装Arch Linux系统步骤
  4. 毕业设计-基于微信小程序的装修服务系统
  5. Codeforces Round #143 (Div. 2)-D. Magic Box
  6. MagicBox Statistics
  7. 3.linux分区详解
  8. postgreSQL+数组及复合类型=王炸
  9. python 利用os库 读取、写入txt文本
  10. React中CodeMirror插件的使用及封装