上一篇对Actor-Critic算法的学习,了解Actor-Critic的流程,但由于普通的Actor-Critic难以收敛,需要一些其他的优化。而Asynchronous Advantage Actor-Critic(A3C)就是其中较好的优化算法。

A3C Introduction

为了打破数据之间的相关性,DQN和DDPG的方法都利用了经验回放的技巧。然而,打破数据的相关性,经验回放并非是唯一的方法。另外一种方法是异步的方法。比如,学习下棋,总是和同一个人下,期望提高棋艺,但到一定程度就难以提高了,此时最好的方法就是另寻高手切磋。
A3C的思路也是如此,它利用多线程的方法,同时在多个线程里面分别与环境进行交互学习,每个线程都把学习的成果汇总起来,整理保存在一个公共的地方。并且,定期从公共的地方把大家的齐心学习的成果拿回来,指导自己和环境后面的学习交互。
这样,A3C避免了经验回放相关性过强的问题,同时做到了异步并发的学习模型。

A3C的算法优化

相比Actor-Critic,A3C的优化主要有3点,分别是异步训练框架,网络结构优化,Critic评估点的优化。其中异步训练框架是最大的优化。

1. 首先来看这个异步训练框架:

  • Global Network就是上一节说的共享的公共部分,主要是一个公共的神经网络模型,这个神经网络包括Actor网络和Critic网络两部分的功能。
  • 下面有n个worker线程,每个线程里有和公共的神经网络一样的网络结构,每个线程会独立的和环境进行交互得到经验数据,这些线程之间互不干扰,独立运行。
  • 每个线程和环境交互到一定量的数据后,就计算自己线程里的神经网络损失函数的梯度,但是这些梯度并不更新自己线程里的神经网络,而是去更新公共的神经网络。也就是n个线程会独立的使用累积的梯度分别更新公共部分的神经网络模型参数。
  • 每隔一段时间,线程会将自己的神经网络的参数更新为公共神经网络的参数,进而指导后面的环境交互。

可见,公共部分的网络模型就是我们要学习的模型,而线程里的网络模型主要是用于和环境交互使用的,这些线程里的模型可以帮助线程更好的和环境交互,拿到高质量的数据帮助模型更快收敛。

2. 第二个优化:网络结构的优化

  • 在Actor-Critic中,使用了两个不同的网络Actor和Critic。
  • 在A3C中,把两个网络放到了一起,即输入状态SSS,输出状态价值VVV,和对应的策略π\piπ。当然,我们仍可以把Actor和Critic看作独立的两块,分别处理,如下图:

3. Critic评估点的优化

  • 在Actor-Critic算法中,讨论了不同的Critic评估点的选择,其中优势函数AAA作为Critic评估点,优势函数AAA在时刻ttt不考虑参数的默认表达式:
    A(S,A,t)=Q(S,A)−V(S)A\left(S,A,t\right)=Q\left(S,A\right)-V\left(S\right)A(S,A,t)=Q(S,A)−V(S)
    Q(S,A)Q\left(S,A\right)Q(S,A)的值一般可以通过单步采样近似估计,即:
    Q(S,A)=R+γV(S′)Q\left(S,A\right)=R+\gamma V\left(S^{\prime}\right)Q(S,A)=R+γV(S′)
    这样优势函数去掉动作可表达为:

A(S,t)=R+γV(S′)−V(S)A\left(S,t\right)=R+\gamma V\left(S^{\prime}\right)-V\left(S\right)A(S,t)=R+γV(S′)−V(S)

其中V(S)V\left(S\right)V(S)的值通过Critic网络来学习得到。

在A3C中,采样更进一步,使用了N步采样,以加速收敛。则A3C中的优势函数表达为:
A(S,t)=Rt+γRt+1+⋯+γn−1Rt+n−1+γnV(S′)−V(S)A\left(S,t\right)=R_t+\gamma R_{t+1}+\dots +\gamma^{n-1}R_{t+n-1}+\gamma^nV(S^\prime)-V(S)A(S,t)=Rt​+γRt+1​+⋯+γn−1Rt+n−1​+γnV(S′)−V(S)

对于Actor和Critic的损失函数部分,和Actor-Critic基本相同。有一个小的优化点就是在Actor-Critic策略函数的损失函数中,加入了策略π的熵项,系数为c, 即策略参数的梯度更新和Actor-Critic相比变成了这样:
θ=θ+α▽θlog⁡πθ(st,at)A(S,t)+c▽θH(π(St,θ))\theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)A\left(S,t \right) +c\bigtriangledown_\theta H(\pi(S_t,\theta))θ=θ+α▽θ​logπθ​(st​,at​)A(S,t)+c▽θ​H(π(St​,θ))

A3C算法流程

由于A3C是异步多线程的,这里给出任意一个线程的算法流程。

输入: 公共部分的A3C神经网络结构,对应参数θ\thetaθ,www,本线程的A3C神经网络结构,对应参数θ′\theta^\primeθ′,w′w^\primew′,全局共享的迭代轮数TTT,全局最大迭代次数TmaxT_{max}Tmax​,线程内单次迭代时间序列最大长度TlocalT_{local}Tlocal​,状态特征维度nnn,动作集AAA,步长α\alphaα,β\betaβ,熵系数ccc,衰减因子γ\gammaγ
输出: 公共部分的A3C神经网络参数θ\thetaθ,www

1. 更新时间序列t=1t=1t=1
2. 重置Actor和Critic的梯度更新量:dθ←0,dw←0d\theta\leftarrow 0,dw\leftarrow 0dθ←0,dw←0
3. 从公共部分的A3C神经网络同步参数到本线程的神经网络:θ′=θ\theta^\prime=\thetaθ′=θ,w′=ww^\prime =ww′=w
4. tstart=tt_{start}=ttstart​=t,初始化状态sts_tst​
5. 基于策略π(at∣st;θ)\pi(a_t\mid s_t;\theta)π(at​∣st​;θ)选择动作ata_tat​
6. 执行动作ata_tat​得到奖励rtr_trt​和新状态st+1s_{t+1}st+1​
7. t←t+1,T←T+1t\leftarrow t+1, T\leftarrow T+1t←t+1,T←T+1
8. 如果sts_tst​是终止状态,或t−tstart==tlocalt-t_{start}==t_{local}t−tstart​==tlocal​,则进入步骤9,否则回到步骤5
9. 计算最后一个时间序列位置sts_tst​的Q(s,t)Q(s,t)Q(s,t):
Q(s,t)={0terminalstateV(st,w′)noneterminalstate,bootstrappingQ(s,t)= \begin{cases} 0 & terminal\ state \\ V(s_t,w^\prime) & none\ terminal\ state, bootstrapping\end{cases}Q(s,t)={0V(st​,w′)​terminal statenone terminal state,bootstrapping​
10. for i∈(t−1,t−2,…,tstart)i \in (t-1,t-2,\dots,t_{start})i∈(t−1,t−2,…,tstart​)
  a) 计算每个时刻的Q(s,i)Q(s,i)Q(s,i):Q(s,i)=ri+γQ(s,i+1)Q(s,i)=r_i+\gamma Q(s,i+1)Q(s,i)=ri​+γQ(s,i+1)
  b) 累计Actor的本地梯度更新:

dθ=dθ+▽θ′log⁡πθ′(si,ai)(Q(s,i)−V(Si,w′))+c▽θ′H(π(si,θ′))d\theta = d\theta + \bigtriangledown_{\theta^\prime}\log\pi_{\theta^\prime}\left(s_i,a_i\right)(Q\left(s,i \right)-V(S_i,w^\prime) )+c\bigtriangledown_{\theta^\prime}H(\pi(s_i,\theta^\prime))dθ=dθ+▽θ′​logπθ′​(si​,ai​)(Q(s,i)−V(Si​,w′))+c▽θ′​H(π(si​,θ′))
  c) 累计Critic的本地梯度更新:

dw←dw+∂(Q(s,i)−V(Si,w′))2∂w′dw\leftarrow dw+\frac{\partial(Q(s,i)-V(S_i,w^\prime))^2}{\partial w^\prime}dw←dw+∂w′∂(Q(s,i)−V(Si​,w′))2​

11. 更新全局神经网络的模型参数:

θ=θ−αdθ,w=w−βdw\theta=\theta-\alpha d\theta,w=w-\beta dwθ=θ−αdθ,w=w−βdw

12. 如果T>TmaxT>T_{max}T>Tmax​,则算法结束,输出公共部分的A3C神经网络参数θ\thetaθ,www,否则进入步骤3


笔记参考刘建平Pinard博客

【深度强化学习】A3C相关推荐

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

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

  2. 【李宏毅深度强化学习笔记】6、Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient

    [李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...

  3. 如何运用深度强化学习,让机器人运动更灵活智能?

    对大脑的工作领域,我们知之甚少,但是我们知道的是,大脑能够通过反复尝试来学习知识.当我们做了合适的选择时,大脑就会给我们奖励,但当我们做了错误的抉择时,大脑就会惩罚我们.如果我们可以利用强大的计算能力 ...

  4. 《强化学习周刊》第33期:UdeM | 基于不确定性估计的样本高效深度强化学习

    No.33 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  5. 17种深度强化学习算法用Pytorch实现(附链接)

    来源:新智元 本文约1300字,建议阅读5分钟. 本文为你介绍一个用PyTorch实现了17种深度强化学习算法的教程和代码库,帮助大家在实践中理解深度RL算法. [ 导读 ]深度强化学习已经在许多领域 ...

  6. 最前沿:大规模深度强化学习的发展

    关注上方"深度学习技术前沿",选择"星标公众号", 精选干货,第一时间送达! 作者:Flood Sung 知乎链接:https://zhuanlan.zhihu ...

  7. 深度强化学习入门到精通--资料综述

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 人工智能是21世纪最激动人心的技术之一.人工智能,就是像人一样的智能,而人的智能包 ...

  8. 几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库

    2019-11-11 16:37:04 机器之心发布 机器之心编辑部 强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法.深度强化学习由于其可扩展性,受到科 ...

  9. 中科院自动化所介绍深度强化学习进展:从AlphaGo到AlphaGo Zero

    来源:德先生 概要:2016年初,AlphaGo战胜李世石成为人工智能的里程碑事件.其核心技术深度强化学习受到人们的广泛关注和研究,取得了丰硕的理论和应用成果. 深度强化学习进展:  从AlphaGo ...

  10. 深度强化学习_深度学习理论与应用第8课 | 深度强化学习

    本文是博雅大数据学院"深度学习理论与应用课程"第八章的内容整理.我们将部分课程视频.课件和讲授稿进行发布.在线学习完整内容请登录www.cookdata.cn 深度强化学习是一种将 ...

最新文章

  1. 6个步骤,告诉你如何用树莓派和机器学习DIY一个车牌识别器!(附详细分析)...
  2. 最全的MAC端截图工具推荐,寻找适合自己的截图工具
  3. android x86 按键精灵,界面版按键精灵的使用【包含内置浏览器、打开程序的方法】...
  4. 大学计算机英语句子,大学英语作文万能句子
  5. 重磅:Elasticsearch上市!市值近50亿美元
  6. [转载]MIT牛人解说数学体系
  7. 前端学习(1797):前端调试之html/css介绍
  8. 学python能做什么类型的工作-学点Python,让你的求职简历更有含金量!
  9. git 小乌龟代码回退
  10. 一台变两台,电脑也分身
  11. 一般进入服务器系统的密码,如何查看远程服务器的密码是什么
  12. linux读取触摸屏事件数据
  13. L9110H电机驱动模块 Arduino 小水泵小风扇
  14. 测试三星手机性能软件,一加三星小米华硕4部手机性能测试:一加手机6T仍是机皇...
  15. Vistor-访问者模式
  16. UE4如何贴混合贴图_UE4助力高品质移动游戏(1)-优化篇
  17. PhotoShop CS6实现照片背景虚化效果
  18. 选择模型 _ 审查回归算法
  19. 远端rlogin服务
  20. KIngcms 5.1版本增加站内链接功能自动给指定关键词加上链接

热门文章

  1. pdf打印机怎么把PDF文件打印成JPG
  2. Python自动化办公:xlwt万字教程
  3. python xlwt_Python中xlwt解析
  4. 联想d30做文件服务器,应对极限运算挑战 联想D30工作站评测
  5. Android 接入阿里云推送com.aliyun.ams:alicloud-android-push:3.7.4步骤(二)
  6. 三菱Q系列总线型项目程序全套,三菱PLC程序+proface触摸屏双屏
  7. 关于腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP完美搭建教程附带工具
  8. LoRa网关实现水表抄表无线远程数采方案
  9. Python pyserial 串口开发
  10. 公私钥保存成PEM文件