查看“︁A3C”︁的源代码
←
A3C
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{Multiple issues| {{Cleanup rewrite|time=2022-05-15T02:26:38+00:00}} {{Cleanup-jargon|time=2022-05-15T02:26:38+00:00}} }} A3C(Asynchronous Advantage Actor-Critic)是由[[Google DeepMind]]团队于2016年提出的一种基于异步梯度的深度强化学习框架(Asynchronous Methods for Deep Reinforcement Learning),利用了多线程同时并行运行的特点,让多个Actor(演员)并行训练而定期与全局参数同步。该方法在Atari游戏和3D迷宫等方面都有不错的效果。 === 符号 === {| class="wikitable" !符号 !含义 |- |<math>s\in S</math> |状态。 |- |<math>a\in A</math> |动作。 |- |<math>r\in R</math> |回报。 |- |<math>S_t,A_t,R_t</math> |一个轨迹中第个时间步对应的状态、动作以及回报。偶尔使用<math>s_t,a_t,r_t</math>代替。 |- |<math>\gamma</math> |折扣因子;用于惩罚未来回报中的不确定性。 |- |<math>G_t</math> |累积回报;或者说累积折扣回报。 |- |<math>P(s',r|s,a)</math> |在当前状态下采取动作后转移到下一个状态并得到回报的概率。 |- |<math>\pi(a|s)</math> |随机策略(智能体行为逻辑);<math>\pi_\theta(.)</math>代表由参数化的策略。 |- |<math>\mu(s)</math> |确定性策略;虽然也可以把确定性策略记为<math>\pi(s)</math>,但是采用一个不同的字母可以让我们更容易分辨一个策略到底是确定性的还是随机的。<math>\pi</math>或者<math>\mu</math>都是强化学习算法要学习的目标。 |- |<math>V(s)</math> |状态-值函数衡量状态的期望累积回报;<math>V_\omega(.)</math>代表由ω参数化的状态-值函数。 |- |<math>V^{\pi}(s)</math> |当智能体遵循策略时状态的期望累积回报;。<math>V(\pi)(s)=\mathbb{E}_{a\sim\pi}[G_t|S_t = s]</math> |- |<math>Q(s,a)</math> |动作-值函数,与状态-值函数类似,但是它衡量在状态下采取动作后的期望累积回报;代表由参数化的动作-值函数。 |- |<math>Q^{\pi}(s,a)</math> |与<math>V^{\pi}(s)</math>类似,当智能体遵循策略<math>\pi</math>时,在状态<math>s</math>下采取动作<math>a</math>后的期望累积回报; <math>Q^\pi(s,a)=\mathbb{E}_{a\sim\pi}[G_t|S_t=s,A_t=a]</math>。 |- |<math>A(s,a)</math> |优势函数,;<math>A(s,a)=Q(s,a)-V(s)</math>可以认为优势函数是加强版本的动作-值函数,但是由于它采用状态-值函数作为基准使得它具有更小的方差。 |} <ref>{{Cite web|title=策略梯度方法|url=http://yoursite.com/2019/04/14/策略梯度方法/index.html|access-date=2022-05-14|work=Abracadabra|language=en}}</ref> === 优势函数 === 由<math>A(s,a)=Q(s,a)-V(s)=r(s,a)+\gamma \mathbb{E}_{s'\sim p(s'|s,a)}[V^(s')-V^(s)]\simeq r(s,a)+\gamma(V(s')-V(s))</math>。 当选取k步TD后,在A3C中由于有参数<math>\theta,\theta_v</math>,优势函数可改写为: <math>A(s_t,a_t;\theta ,\theta_v) = \sum^{k-1}_{i=0} \gamma^i r_{t+i} + \gamma^k V(s_{t+k};\theta_v)-V(s_t;\theta_v)</math><ref>{{Cite web|title=Asynchronous Methods for Deep Reinforcement Learning|url=https://arxiv.org/pdf/1602.01783.pdf|access-date=2022-05-15|archive-date=2022-06-22|archive-url=https://web.archive.org/web/20220622083641/https://arxiv.org/pdf/1602.01783.pdf|dead-url=no}}</ref> === 算法流程 === 异步优势Actor-Critic - 每个Actor-Learner线程的伪代码如下: # 定义全局参数向量<math>\theta</math>和<math>\theta_v</math>以及全局计数器<math>T=0</math> # 定义线程自身参数向量<math>\theta'</math>和<math>\theta'_v</math>,初始化线程步数计数器<math>t\leftarrow 1</math> # 当<math>T\leqq T_{max}</math>: ## 重置梯度:<math>d\theta \leftarrow 0 </math> 和<math>d \theta' _v \leftarrow 0</math> ## 将线程自身的参数向量与全局参数向量同步:<math>\theta' = \theta</math>,<math>\theta'_v = \theta_v</math> ## 令线程计数器<math>t_{start} =t</math>并随机采样一个初始状态<math>s_t</math> ## 当(<math>s_t !=</math>终止状态)且<math>t-t_{start}\leqq t_{max}</math>: ### 根据当前线程的策略选择当前执行的动作<math>a_t \sim \pi_{\theta '}(a_t|s_t)</math>执行动作后接受回报<math>r_t</math>并转移到下一个状态<math>s_{t+1}</math>。 ### 更新t以及<math>T:t=t+1</math>并且<math>T=T+1</math> ## 初始化保存累积回报估计值的变量:<math>R = \begin{cases} 0, & \text{if }s=s_{terminal}\\V(s_t,\theta'_v), & \text{non-terminal }s_t \end{cases}</math> ## 对于<math>i \in \{t-1,...,t_{start}\}</math>,执行: ### <math>R \leftarrow r_i +\gamma R</math> ### 累积关于参数<math>\theta'</math>的梯度:<math>d\theta\leftarrow d\theta +\nabla_{\theta'}\log\pi(a_i|s_i;\theta')(R-V(s_i;\theta_v'))</math> ### 累积关于参数<math>\theta'_v</math>的梯度:<math>d\theta_v \leftarrow d\theta_v+{\partial(R-V(s_i;\theta_v'))^2\over\partial \theta_v'}</math> ## 分别使用<math>d\theta</math>和<math>d\theta_v</math>异步更新<math>\theta</math>和<math>\theta_v</math> <ref>{{Cite web|title=策略梯度方法|url=http://yoursite.com/2019/04/14/策略梯度方法/index.html|access-date=2022-05-15|work=Abracadabra|language=en}}</ref> === 改进 === 在[https://arxiv.org/pdf/1602.01783.pdf Asynchronous Methods for Deep Reinforcement Learning] {{Wayback|url=https://arxiv.org/pdf/1602.01783.pdf |date=20220622083641 }}中作者还将熵(<math>H(\pi(s_t,\theta'))</math>)加到目标函数中以避免收敛到次优确定性解,这是由于在最大化熵的过程中会避免分布过于集中,包含熵在内的完整目标函数梯度如下<ref>{{Cite web|title=A3C - 搜索结果 - 知乎|url=https://www.zhihu.com/search?type=content&q=A3C|access-date=2022-05-15|work=www.zhihu.com|archive-date=2022-05-15|archive-url=https://web.archive.org/web/20220515022115/https://www.zhihu.com/search?type=content&q=A3C|dead-url=no}}</ref> <math>\nabla_{\theta'}\log\pi(a_t|s_t;\theta')(R_t-V(s_t;\theta_v))+\beta\nabla_\theta'H(\pi(s_t;\theta'))</math> 其中H为熵函数,<math>\beta</math>是用于控制熵正则化项的超参数。 === 论文 === [https://arxiv.org/abs/1602.01783] {{Wayback|url=https://arxiv.org/abs/1602.01783 |date=20220108120027 }} === 代码实现=== [https://github.com/uvipen/Super-mario-bros-A3C-pytorch] {{Wayback|url=https://github.com/uvipen/Super-mario-bros-A3C-pytorch |date=20220515023622 }} ==参考资料==
该页面使用的模板:
Template:Cite web
(
查看源代码
)
Template:Multiple issues
(
查看源代码
)
Template:Wayback
(
查看源代码
)
返回
A3C
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息