强化学习之AC、A2C和A3C

news/2024/12/21 20:52:34/

阅读本文可参考我以前的文章《强化学习实践教学》https://tianjuewudi.gitee.io/2021/07/16/qiang-hua-xue-xi-shi-jian-jiao-xue/#toc-heading-29,其中的连续动作空间上求解RL章节是本文的基础,其中的DDPG和Actor-Critic除了Target网络外其余都一致。

首先,A2C的全称是Advantage Actor Critic,而A3C是Asynchronous Advantage Actor Critic,A2C源自A3C。

Actor Critic

首先解释一下Actor Critic的概念,Q-learning是一种价值迭代法,而policy gradient是一种策略迭代法,Actor Critic同时使用了这两种方法。

Actor直接负责输出每个Action的概率,有多少个Action就有多少个输出。Critic输出的是动作价值Q。这是两个神经网络。在Policy Gradient中,一个episode的累计Reward就像是一个Critic,决定了Actor的学习方向,使得Actor倾向于学习Critic累计Reward更高的逻辑。因此策略梯度可写作:
g = E [ ∑ t = 0 ∞ ψ t ∇ θ l o g π θ ( a t ∣ s t ) ] g = E[\sum_{t=0}^{\infty}\psi_t \nabla_{\theta}log \pi_{\theta}(a_t|s_t)] g=E[t=0ψtθlogπθ(atst)]
其中这里的π就是actor,ψ就是critic,这是一个广义的框架。

critic有多种形式:

  1. 一个轨迹中的Reward相加。
  2. 一个轨迹中后面某部分的Reward相加。
  3. 相加后的Reward减去一个baseline。
  4. 采用行为价值函数Q代替。
  5. 采用优势函数A,即Q-V。
  6. 采用TD-error,计算新的状态价值减去原本的状态价值。

经典的AC方法使用的是4-6。

权重更新公式为:
w = w + β ψ ∇ W v ^ ( S t , w ) w = w + \beta \psi \nabla_W \hat v(S_t,w) w=w+βψWv^(St,w)


以下是重点

在两个神经网络中,我们一般用 π ( a ∣ s ; θ ) \pi (a|s;\theta) π(as;θ)表示策略网络actor,θ代表其中的参数, q ( s , a ; w ) q(s,a;w) q(s,a;w)代表价值网络critic,w代表其中的参数。注意这里actor网络只需要输入状态,而critic网络则需要输入状态和动作,两个网络往往可以共用前一部分。

actor网络的更新参数的目标是让critic网络的输出值越大越好。当确定状态s的情况下,如何选取动作action来使得critic的值最大就是actor网络需要优化的目标。而更新Critic的参数是为了让其的打分更精准,训练的依据就是环境给的reward

下面讲解如何更新Critic参数,依靠的是常用的TD算法:

在这里插入图片描述

下面是更新Actor参数的方法:

在这里插入图片描述

下面做一个总结:

在这里插入图片描述

由于实际操作中我们不可能得出期望值,因此直接做蒙泰卡罗近似,每个episode拿一次的采样值来更新一点点 ,使得采样到的action得到的动作价值尽可能增大即可,操作比critic要简单得多。

Advantage Actor Critic

​ A2C的出现是为了解决AC的高方差问题。在所有行为的得分为正的情况下不代表所有的行为都是正确的,我们必须有选择地学习更好的行为。因此我们会在原有Reward基础上减去一个常数,这个数的计算方式就是Advantage。这是因为我们对于输入的同一个状况,由于输出要具有一定随机性的存在,那么其实这些所有可能所能获得的Reward的平均值就是Vθ,这就是Critic的含义。我们用来更新参数的At是用Reward减去这个平均值,也就是如果对于一个状况的行为的得分比我们critic预测的要高,则采纳,反之舍弃

​ Advantage学习是使用两步以上的奖励来更新Q函数。这个步数需要自己设置合理,以下举例两步:
Q ( s t , a t ) → R ( t + 1 ) + γ R ( t + 2 ) + γ 2 m a x a Q ( s t + 2 , a ) Q(s_t,a_t) \rightarrow R(t+1) + \gamma R(t+2) + \gamma^2 max_a Q(s_{t+2},a) Q(st,at)R(t+1)+γR(t+2)+γ2maxaQ(st+2,a)


以下是重点

A2C于AC的不同之处在于给Q值增加了一个baseline,我们用Q值减去这个baseline来判断当前逻辑的好坏,这个baseline通常由 V t V_t Vt来担任。那么原来更新的Q值被替换为:
Q ( s t , a t ) − V ( s t ) Q(s_t,a_t) - V(s_t) Q(st,at)V(st)
而Q值我们通常用的是一个回合随机出来的特殊值。我们想要采用期望值,这个期望值的计算方式是 r t + γ V ( s t + 1 ) r_t + \gamma V(s_{t+1}) rt+γV(st+1),这是因为执行一个动作的下一回合必定更新到 s t + 1 s_{t+1} st+1的状态,在加上本回合获得的Reward就是Q的期望值 。这样我们就可以得到最后的价值公式:
r t + γ V ( s t + 1 ) − V ( s t ) r_t+ \gamma V(s_{t+1}) - V(s_t) rt+γV(st+1)V(st)
其中大于0时我们倾向于采用,反之亦然。

这样的好处是我们现在只用计算V不用计算Q了,这是Critic的不同之处。

Asynchronous Advantage Actor Critic

A3C全称为异步优势动作评价算法(Asynchronous advantage actor-critic)。

然而经验回放机制存在两个问题:

  1. agent 与环境的每次实时交互都需要耗费很多的内存和计算力;
  2. 经验回放机制要求 agent 采用离策略(off-policy)方法来进行学习,而off-policy方法只能基于旧策略生成的数据进行更新;

前文讲到,神经网络训练时,需要的数据是独立同分布的,为了打破数据之间的相关性,DQN和DDPG的方法都采用了经验回放的技巧。然而经验回放需要大量的内存,打破数据的相关性,经验回放并非是唯一的方法。另外一种是异步的方法,所谓异步的方法是指数据并非同时产生,A3C的方法便是其中表现非常优异的异步强化学习算法。

A3C模型如下图所示,每个Worker直接从Global Network中拿参数,自己与环境互动输出行为。利用每个Worker的梯度,对Global Network的参数进行更新。每一个Worker都是一个A2C。A3C主要有两个操作,一个是pull,一个是push:
pull:把主网络的参数直接赋予Worker中的网络
push:使用各Worker中的梯度,对主网络的参数进行更新

在这里插入图片描述

在这里插入图片描述

这种异步更新的方法在多种算法中都适用。所有的异步agent执行完后再用累计的梯度信息更新网络参数。其中n-step的算法(后两个)需要每个异步agent复制一份子网络,每个anget执行n步后倒退算出每步的总回报和相关梯度,用累计梯度更新主网络参数。


M Babaeizadeh等人提出了一种混合CPU/GPU版的A3C,并提供开源代码https://github.com/NVlabs/GA3C。

具体地,GA3C主要分为:

Agent,和A3C功能一样,收集样本,但是不需要各自复制一份模型,只需要在每次选择Action前,将当前的State作为请求加入 Prediction Queue;执行动作n步后倒退算出每步的总回报,得到的n个(st,at,R,st+1)(st,at,R,st+1)加入 Trainning Queue;
Predictor,将 Prediction Queue 中的请求样本出队作为minibatch填入GPU的网络模型中,将模型预测的Action返回给各自的Agent,为减少延迟,可以使用多线程并行多个predictiors;
Trainer,将 Trainning Queue 的样本出队作为minibatch填入GPU的网络模型中,训练更新模型,同样,为减少延迟,可以使用多线程并行多个trainers;

参考文献:

1.深度强化学习——A3C

2.强化学习AC、A2C、A3C算法原理与实现


http://www.ppmy.cn/news/297917.html

相关文章

深度强化学习系列(14): A3C算法原理及Tensorflow实现

在DQN、DDPG算法中均用到了一个非常重要的思想经验回放,而使用经验回放的一个重要原因就是打乱数据之间的相关性,使得强化学习的序列满足独立同分布。 本文首先从Google于ICML2016顶会上发的论文《Asynchronous Methods for Deep Reinforcement Learnin…

Android 热修复方案--阿里百川HotFix

概述 我们都知道一旦我们的应用被发布到各大平台上面之后修复bug是一件很麻烦的事情,如果要重新发布审核周期之长,用户肯定不接受,虽然也可以在应用中自检更新,但是一个小小的bug动辄就更新应用实在是大材小用,但是不更新用户怎么…

强化学习的A3C算法应用(训练Atari游戏)

A3C算法的全称是Asynchronous Advantage Actor-Critic,异步优势执行者/评论者算法。这个算法和优势执行者/评论者算法的区别在于,在执行过程中不是每一步都更新参数,而是在回合结束后用整个轨迹进行更新。因此可以让多个Worker来进行轨迹的搜…

【强化学习】A3C原理

先解释一下什么叫异步、什么叫并发: **异步:**和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异…

java实现手机尾号评分

30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。 这个程序的目的就是&#xff1a…

基于RK3288 平台 Simple card声卡添加及调试

基于RK3288 平台 Simple card声卡添加及调试Simple card即简单通用的machine driver, 如果simple-card框架足够满足需求,建议优先使用simple card框架,简单,方便,且易用.一、 添加声卡 1. 添加codec driver&#xff0c…

M1卡操作

原文传送门:https://www.cnblogs.com/ivantang/p/3904025.html M1卡介绍 本文整理自网络。 M1卡是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,目前都有国产芯片与其兼容&#xff0…

SIM卡在手机中的主要作用

SIM卡在手机中的主要作用 SIM卡作为智能卡的一种,其作用依旧被限定在数据存储和加解密处理方面。 在移动通讯初期没有SIM卡的概念,当时采用的是机号一体的方式(后来对于CDMA技术而言出现了机卡分离和机卡一体的说法,早期还没有SIM…