马尔可夫决策过程(MDP)

MDP 由元组 ( S , A , P , R , γ ) (S, A, P, R, \gamma) (S,A,P,R,γ) 描述,分别表示有限状态集、有限动作集、状态转移概率、回报函数、折扣因子 。与马尔可夫过程不同,MDP的状态转移概率是包含动作的,即
P s s ′ a = P [ S t + 1 = s ′ ∣ s t = s , A t = a ] P_{ss'}^a = P[S_{t+1} = s' | s_t = s, A_t = a] Pss′a​=P[St+1​=s′∣st​=s,At​=a]
强化学习的目标是给定一个MDP,寻找最优策略,即每个状态动作的概率分布 π \pi π。

累计回报在状态 s 处的期望定义为状态-值函数
v ( s ) = E [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] v(s) = E[\sum_{k=0}^\infty\gamma^k R_{t+k+1}|S_t = s] v(s)=E[k=0∑∞​γkRt+k+1​∣St​=s]
这里衰减因子 γ \gamma γ 的道理是我们认为距离当前动作越远的将来发生的事情和这个动作的关系越小。类似的,状态-行为值函数定义为
q ( s , a ) = E [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] q(s,a) = E[\sum_{k=0}^\infty\gamma^k R_{t+k+1}|S_t = s,A_t = a] q(s,a)=E[k=0∑∞​γkRt+k+1​∣St​=s,At​=a]
可以分别得到其贝尔曼方程:
v ( s ) = E [ R t + 1 ∣ S t = s ] + γ E [ v ( S t + 1 ) ∣ S t = s ] q ( s , a ) = E [ R t + 1 ∣ S t = s , A t = a ] + γ E [ q ( S t + 1 , A t + 1 ) ∣ S t = s , A t = a ] v(s) = E[R_{t+1}|S_t=s] + \gamma E[v(S_{t+1}) | S_t = s]\\ q(s,a) = E[R_{t+1}|S_t=s, A_t=a] + \gamma E[q(S_{t+1},A_{t+1}) | S_t = s, A_t = a] v(s)=E[Rt+1​∣St​=s]+γE[v(St+1​)∣St​=s]q(s,a)=E[Rt+1​∣St​=s,At​=a]+γE[q(St+1​,At+1​)∣St​=s,At​=a]

Importance Sampling

蒙特卡洛积分中,如果在 f ( x ) f(x) f(x) 对积分贡献大的区域进行相对密集的采样,可以在采样数不变的情况下增加准确度,减少方差。

换句话说,如果我们对 x 的采样本身就满足一个分布 p ( x ) p(x) p(x),那么 p ( x ) p(x) p(x) 和 f ( x ) f(x) f(x) 越接近,统计量的方差就越小。

蒙特卡洛积分与重要性采样详解 - 烈日行者 - 博客园 (cnblogs.com)

Stochastic Policy Gradient(SPG)

一种基于策略的算法,不依赖价值函数。输入状态,输出动作的概率分布。对于策略 π θ \pi_\theta πθ​,枚举一轮完整的游戏轨迹 τ \tau τ,计算期望奖励(省略 θ \theta θ 下标):

R ‾ = ∑ τ R ( τ ) p ( τ ) \overline{R}=\sum_\tau R(\tau)p(\tau) R=τ∑​R(τ)p(τ)

对 θ \theta θ 求梯度:
∇ R ‾ = ∑ τ R ( τ ) ∇ p ( τ ) = ∑ τ R ( τ ) p ( τ ) ∇ log ⁡ p ( τ ) = E τ ∼ p ( τ ) [ R ( τ ) ∇ log ⁡ p ( τ ) ] = 1 N ∑ n = 1 N R ( τ n ) ∇ log ⁡ p ( τ n ) = 1 N ∑ n = 1 N R ( τ n ) ∑ t = 1 T n ∇ log ⁡ p ( a t n ∣ s t n ) \begin{aligned} \nabla \overline{R}&=\sum_\tau R(\tau)\nabla p(\tau)\\ &=\sum_\tau R(\tau)p(\tau)\nabla\log p(\tau)\\ &=E_{\tau\sim p(\tau)}[R(\tau)\nabla\log p(\tau)]\\ &=\frac 1N\sum_{n=1}^N R(\tau^n)\nabla\log p(\tau^n)\\ &=\frac 1N\sum_{n=1}^NR(\tau^n)\sum_{t=1}^{T_n}\nabla\log p(a_t^n|s_t^n) \end{aligned} ∇R​=τ∑​R(τ)∇p(τ)=τ∑​R(τ)p(τ)∇logp(τ)=Eτ∼p(τ)​[R(τ)∇logp(τ)]=N1​n=1∑N​R(τn)∇logp(τn)=N1​n=1∑N​R(τn)t=1∑Tn​​∇logp(atn​∣stn​)​
注意到以下两个问题:

  1. 对这个式子来说,如果某个 τ \tau τ 对应的奖励是正的,就要增加对应的一连串 p ( a t ∣ s t ) p(a_t|s_t) p(at​∣st​) 的几率。这其实对于奖励都为正的游戏这就不合理了,因为采样到的动作概率都会被提高。在采样足够均匀且大量的情况下也可以收敛,但在实践中这不可取。我们想要的是奖励有正有负;

  2. 同时,一个动作不是跟整个 τ \tau τ 中获得的奖励都有关,而只是和它后面获得的奖励有关。

再考虑上面提到的衰减因子,我们得到这个式子:

∇ R ‾ = 1 N ∑ n = 1 N ∑ t = 1 T n ( ∑ t ′ = t T n γ t ′ − t r t ′ n − b ) ∇ log ⁡ p ( a t n ∣ s t n ) \nabla\overline{R}=\frac 1N\sum_{n=1}^N\sum_{t=1}^{T_n}\big(\sum_{t'=t}^{T_n}\gamma ^{t'-t}r_{t'}^n-b\big)\nabla\log p(a_t^n|s_t^n) ∇R=N1​n=1∑N​t=1∑Tn​​(t′=t∑Tn​​γt′−trt′n​−b)∇logp(atn​∣stn​)
其中 b b b 应当与 R ( τ ) R(\tau) R(τ) 期望值相关。

注意到,由于采样 τ \tau τ 要服从 p θ p_\theta pθ​,因此这是一个 on-policy 的做法,即策略更新后,就要用新策略采样,这样每一个样本只能用一次,效率较低。如何变成 off-policy 的做法?需要引入重要性采样:
∇ R θ ‾ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] = E τ ∼ p θ ′ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) p θ ( τ ) p θ ′ ( τ ) ] \nabla\overline{R_\theta}=E_{\tau\sim p_\theta(\tau)}[R(\tau)\nabla\log p_\theta(\tau)]\\ =E_{\tau\sim p_{\theta'}(\tau)}[R(\tau)\nabla\log p_\theta(\tau)\frac{p_\theta(\tau)}{p_{\theta'}(\tau)}]\\ ∇Rθ​​=Eτ∼pθ​(τ)​[R(τ)∇logpθ​(τ)]=Eτ∼pθ′​(τ)​[R(τ)∇logpθ​(τ)pθ′​(τ)pθ​(τ)​]
这样可以重复利用 agent 和环境互动的数据。

实践中,我们采用下面的式子进行计算:
∇ R θ ‾ = E ( s , a ) ∼ π θ [ A θ ′ ( s , a ) ∇ p θ ( a ∣ s ) p θ ( a ∣ s ) p θ ′ ( a ∣ s ) ] \nabla\overline{R_\theta}=E_{(s,a)\sim\pi_\theta}[A_{\theta'}(s,a)\nabla p_\theta(a|s)\frac{p_\theta(a|s)}{p_{\theta'}(a|s)}] ∇Rθ​​=E(s,a)∼πθ​​[Aθ′​(s,a)∇pθ​(a∣s)pθ′​(a∣s)pθ​(a∣s)​]
其中 A ( s , a ) A(s, a) A(s,a) 表示 Advantage function,对应 ∑ t ′ = t T n γ t ′ − t r t ′ n − b \sum_{t'=t}^{T_n}\gamma ^{t'-t}r_{t'}^n-b ∑t′=tTn​​γt′−trt′n​−b,体现在某个状态执行某个动作的好坏,也可以使用神经网络来计算。

Actor-Critic

上面的 SPG 很容易就可以变成 Actor-Critic 的方法。Advance function 里面的 ∑ t ′ = t T n γ t ′ − t r t ′ \sum_{t'=t}^{T_n}\gamma ^{t'-t}r_{t'} ∑t′=tTn​​γt′−trt′​ 其实就是 q ( s t , a t ) q(s_t, a_t) q(st​,at​),b 其实就是 v ( s t ) v(s_t) v(st​),我们可以分别使用神经网络去估计他们。但其实我们不想用两个神经网络来分别估计 q q q 和 v v v,因为这样大大增加了训练收敛的难度。注意到 q ( s t , a t ) = E [ r t + v ( s t + 1 ) ] q(s_t, a_t)=E[r_t+v(s_{t+1})] q(st​,at​)=E[rt​+v(st+1​)],在确定性环境中这个期望直接可以去掉,而在不确定环境中也把期望去掉来做近似(a proper approximation),那么 Advantage function 就是 r t + v ( s t + 1 ) − v ( s t ) r_t+v(s_{t+1})-v(s_t) rt​+v(st+1​)−v(st​)。当然,也可以令 v ( s t ) = max ⁡ q ( s t , a t ) v(s_t)=\max q(s_t, a_t) v(st​)=maxq(st​,at​),只计算一个 q 网络。

那 v ( s ) , q ( s , a ) v(s), q(s, a) v(s),q(s,a) 怎么求?

一是 Monte-Carlo 的方法,即让 agent 不断和环境做互动,观察从 s 出发的累计奖励

二是 Temporal Diffierence 的方法, v ( s t ) = γ v ( s t + 1 ) + r t v(s_t)=\gamma v(s_{t+1}) + r_t v(st​)=γv(st+1​)+rt​,也就是 DQN 采用的方法。

MC的方法方差比较大,但比较精确。TD方差较小,但忽略了(可能的)相邻状态奖励值的影响。

【强化学习】随机策略梯度算法(stochastic-policy-gradient)_贰锤的博客-CSDN博客_随机性策略梯度

Deep Deterministic Policy Gradient(DDPG)

直接写神经网络+AC的版本。由于策略是确定的,它天然就是 off-policy 的,也就不需要重要性采样。

是一个 actor critic 的方法。首先使用 TD 之类的方法训练一个 critic 成为 q w ( s , a ) q_w(s,a) qw​(s,a),然后要训练一个确定性策略 μ θ ( s ) \mu_\theta(s) μθ​(s),使得 q w ( s , μ θ ( s ) ) q_w(s,\mu_\theta(s)) qw​(s,μθ​(s)) 最大。

和DQN 的比较

DDPG训练时,Actor 根据当前的 s 选择一个a,然后Critic可以根据 state-action 计算一个Q值,作为对Actor动作的反馈。

事实上,我认为 DDPG 和 DQN 的关系更为紧密。DQN 的关键在于Q。根据一个策略计算q,根据Q可以导出一个策略 π \pi π。算法的核心在于q估计的准不准。

DDPG很类似,它的critic 对应于q,但不能根据q导出策略,而是用神经网络估计一个策略。这个策略的目标同样是使得q值最大。

DQN 的 argmax 没法求?

DPG 却不需要。因此在动作空间很大的时候类似于 DQN 中用神经网络拟合 Q 函数的技巧应用到 DPG 中。

MADDPG

从代码到论文理解并复现MADDPG算法(基于飞桨的强化学习套件PARL)_Mr.郑先生_的博客-CSDN博客_maddpg算法

DQN 或者 DDPG 都不适用于多智能体环境,主要的问题是在训练过程中每个智能体的策略都在变化,因此从每个智能体的角度来看,环境变得十分不稳定。即对于同一个 observation,执行相同的 action 得到的 reward 不同,环境的真实状态可能天差地别,进而导致 q 值的估计很不稳定,也就不能给出 action 的正确梯度。

我们想要让 Critic 的评判更全面,就需要给它更多的信息,比如其他智能体的状态和动作等,让对于某个 agent 的环境变成完全可观察的。MADDPG 的思想就是每个 agent 的 Critic 部分能够获取其余所有 Agent 的动作信息,进行中心化训练和非中心化执行,即在训练的时候,引入可以观察全局的 Critic 来指导 Actor 训练,对 Critic 来说,所有智能体的动作、全局状态都是可知的;而测试的时候,每个智能体观察到的状态是受限的,智能体不知道其他智能体的行为。也就是集中训练,分布执行,训练和执行的信息不对等。直觉上来说,相当于每一个 agent 都有一个上帝视角的 Critic 来指导它的行为。

需要注意的是,合作行为并不是通过引入 MADDPG 才产生的。合作行为的产生应当来源于 reward 的设定,如果奖励设定正确,那么单纯的 DDPG 也可以产生合作行为。MADDPG 只是起到了消除环境不确定性进而加速收敛的作用。因为在 MADDPG 训练时,虽然 q 网络接收了别的智能体的信息,但是每个智能体只能优化自己的 reward 最大。所以论文中的实现就是(也只能是)使得 sigma(第i个智能体的reward)不断变大。

可以发现按照这个思路,是不会有 “MADQN” 这种算法的,因为DQN训练和预测是同一个网络,二者的输入信息必须保持一致,我们不能只在训练阶段加入其他智能体的信息。除非使用 Actor-Critic 的方法,这就是 QMIX 之类的东西了。

类似 DQN,为了训练稳定性,对于每个 agent 都有 4 个网络,q target 采用软更新的方法。

感觉这个方法还可以用在单智能体环境不完全可观察的情况下,道理是一样的。

论文中给出的伪代码,其中 x x x 就是 ( o 1 , o 2 , . . . , o n ) (o_1, o_2, ..., o_n) (o1​,o2​,...,on​),表示感知信息:

强化学习:Actor-Critic、SPG、DDPG、MADDPG相关推荐

  1. 强化学习之SAC和DDPG内容大汇总

    强化学习之SAC和DDPG内容大汇总 一.SAC SAC相关博客汇总: https://blog.csdn.net/qq_38587510/article/details/104970837 最前沿: ...

  2. dqn在训练过程中loss越来越大_深度强化学习——从DQN到DDPG

    想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...

  3. 深度强化学习——连续动作控制DDPG、NAF

    联系方式:860122112@qq.com 传统的DQN只适用于离散动作控制,而DDPG和NAF是深度强化学习在连续动作控制上的拓展. 一.存在的问题 DQN是一个面向离散控制的算法,即输出的动作是离 ...

  4. 深度增强学习--Actor Critic

    Actor Critic value-based和policy-based的结合 实例代码 1 import sys 2 import gym 3 import pylab 4 import nump ...

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

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

  6. 强化学习之Actor-Critic

    强化学习 Actor Critic 1.概念 2.优缺点 3.原理 4.公式原理 5.代码实现 附完整代码 Actor Critic 1.概念 Actor是一个神经网络 Critic也是一个神经网络, ...

  7. 多智能体强化学习之MADDPG

    论文原文:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 论文翻译:MADDPG翻译 阅读本文需要强化学 ...

  8. 用多智能体强化学习算法MADDPG解决“老鹰捉小鸡“问题

    点击左上方蓝字关注我们 [飞桨开发者说]郑博培:北京联合大学机器人学院2018级自动化专业本科生,深圳市柴火创客空间认证会员,百度大脑智能对话训练师,百度强化学习7日营学员 MADDPG算法是强化学习 ...

  9. 强化学习6大前沿算法复现 | 乘风破浪,热情不减

    点击左上方蓝字关注我们 学习成就梦想,AI遇见未来.作为国内AI行业的重要一员,百度不仅在人工智能的研究应用上做出了巨大贡献,还致力于培养和选拔最具核心竞争力的AI人才. 强化学习作为人工智能的热门研 ...

  10. 强化学习分类与汇总介绍

    1.强化学习(Reinforcement Learning, RL) 强化学习把学习看作试探评价过程,Agent选择一个动作用于环境,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给 ...

最新文章

  1. Zookeeper迁移(扩容/缩容)
  2. CSS 布局:40个教程、技巧、例子和最佳实践
  3. Redis分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!!!
  4. 什么是交换(Swap)与伪交换(Pseudo swap)
  5. easyui datagrid checkbox的相关属性整理
  6. oracle 窗口函数over
  7. [转]几句不可不看的经典人生语句
  8. Linux命令应用大词典-第36章 密码和证书管理
  9. 主题等.ppt及活动内容.ppt文档规范要求
  10. eXeScope 提取.exe/.dll中的图片资源
  11. 苏州大学计算机考研复试机试,2014年苏州大学计算机考研经验
  12. Scrapy 爬取链家租房价格信息
  13. 【C语言代码写圣诞节程序】别再画圣诞树了,看都看腻了
  14. python中append函数什么意思_在python中append()函数的作用是什么
  15. HelloWorld Detail Earth 3D Engine(二)城市渲染
  16. android手机连接esp32视频
  17. 繁星课堂oracle,《繁星》课堂实录及点评
  18. 想要搭建自己的腾讯云服务器怎么做
  19. everything changes so quietly
  20. 评分卡模型开发(六)--WOE值计算

热门文章

  1. 基于微信小程序二手跳蚤市场系统设计与实现毕业设计论文
  2. 使用python进行视频截取
  3. 51nod 1597 有限背包计数问题 DP 根号分治
  4. 怎么回答TCP的三次握手问题
  5. 关于css设置第n个元素
  6. 交换机access trunk hybrid模式详解
  7. 小学二年级计算机组成选择题,小学二年级数学第二学期期末试卷
  8. Python探索性数据分析
  9. 一只小北极熊(结构体
  10. 一篇文章带你了解Nodejs