强化学习算法:AC系列详解

文章目录

AC

Actor-Critic算法分为两部分,actor的前身是policy gradient,它可以轻松地在连续动作空间内选择合适的动作,value-based的Q-learning只能解决离散动作空间的问题。但是又因为Actor是基于一个episode的return来进行更新的,所以学习效率比较慢。这时候我们发现使用一个value-based的算法作为Critic就可以使用TD方法实现单步更新,这其实可以看做是拿偏差换方差。这样两种算法相互补充就形成了我们的Actor-Critic。

Actor 基于概率分布选择行为, Critic 基于 Actor 生成的行为评判得分, Actor 再根据 Critic 的评分修改选行为的概率。

  • 优点:可以进行单步更新,不需要跑完一个episode再更新网络参数,相较于传统的PG更新更快。传统PG对价值的估计虽然是无偏的,但方差较大,AC方法牺牲了一点偏差,但能够有效降低方差;
  • 缺点:Actor的行为取决于 Critic 的Value,但是因为 Critic本身就很难收敛和actor一起更新的话就更难收敛了。(为了解决收敛问题, Deepmind 提出了 Actor Critic 升级版 Deep Deterministic Policy Gradient,后者融合了 DQN 的一些 trick, 解决了收敛难的问题)。

算法流程图如下所示:
在这里插入图片描述

AC算法与策略梯度法在第一步生成样本和第三步策略改进上并没有显著区别,主要区别在于第二步:我们现在尝试去拟合一个值函数(Q,V,A都行),以期能得到一个更好的梯度估计。我们真正从policy gradient的“估计收益”变为了“拟合模型”。

Q函数取决于状态和行为两个维度,因此输入是对应两个空间的笛卡尔积。但是维度越大,同样的样本数估计的方差越大。给定当前的状态和行为,当前的收益就确定了,可以把当前的收益提出来:
Q π ( s t , a t ) = r ( s t , a t ) + ∑ t ′ = t + 1 T E π θ [ r ( s t ′ , a t ′ ) ∣ s t , a t ] Q^\pi(s_t,a_t)=r(s_t,a_t)+\sum_{t'=t+1}^T\mathbb{E}_{\pi_\theta}[r(s_{t'},a_{t'})|s_t,a_t] Qπ(st,at)=r(st,at)+t=t+1TEπθ[r(st,at)st,at]

而后边那块求和项其实就是值函数的期望:
E s t + 1 ∼ p ( s t + 1 ∣ s t , a t ) [ V π ( s t + 1 ) ] \mathbb{E}_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}[V^\pi(s_{t+1})] Est+1p(st+1st,at)[Vπ(st+1)]

如果我们愿意做一点近似,用轨迹样本来估计这个期望——此时不是使用整条轨迹,而仅仅是看一步以后的状态,那么我们的Q函数可以近似为:
Q π ( s t , a t ) ≈ r ( s t , a t ) + V π ( s t + 1 ) Q^\pi(s_t,a_t)\approx r(s_t,a_t)+V^\pi(s_{t+1}) Qπ(st,at)r(st,at)+Vπ(st+1)

与此同时,优势函数也可以被近似为:
A π ( s t , a t ) ≈ r ( s t , a t ) + V π ( s t + 1 ) − V π ( s t ) A^\pi(s_t,a_t)\approx r(s_t,a_t)+V^\pi(s_{t+1})-V^\pi(s_{t}) Aπ(st,at)r(st,at)+Vπ(st+1)Vπ(st)

这么一来,其实我们只要去拟合值函数V就好,其他的都可以被近似表示,这样拟合神经网络的维度的输入空间就只需要是状态空间了。因为实用性和便利性,绝大多数的AC算法都是仅训练一个critic神经网络V(而非Q+V),使得输入状态为 s s s,输出给定策略下值函数的估计量 V ^ π ( s ) \hat{V}^\pi(s) V^π(s)

critic网络的训练数据与损失如下:
在这里插入图片描述
在这里插入图片描述
批量和在线的AC算法流程图如下所示,注意这两个都是on-policy算法:
在这里插入图片描述

A2C

上述AC方法中,使用状态价值函数作为baseline的方法,即使用优势函数 A A A代替累积收益 G G G(或是行为价值函数 Q Q Q),称之为Advantage Actor-Critic (A2C)(AC部分最后的算法图其实就是A2C)。优势函数还有一个好处, Q − V Q-V QV可以反应当前状态下某一行为下的价值相对于平均价值的好坏,从而使得结果有正有负,梯度更新后会使得更新后的策略尽量避免选择这些结果为负的形态行为对,使得更新后的策略分布方差更小。

注意:REINFORECE等很多policy-based算法也会去估计值函数,但它们不是actor-critic方法,因为其中的价值函数网络并没有作为策略网络更新的目标,而仅仅是作为baseline出现的。只要价值函数网络以任何形式出现在目标中(即原来 G t G_t Gt的位置上),都是actor-critic方法,下图列出了各种不同actor-critic方法用到的策略梯度。
在这里插入图片描述

A3C

A3C是异步版本的A2C算法,其异步的方法是使用带不同探索参数的不同的CPU来采样,每个CPU上的采样积累到一定的数量之和再一起拿去更新网络参数。具体的示意图和算法如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
A3C有一个主网络,n个worker线程,每个线程里有和公共的主网络一样的网络,也是一个A2C网络,每个线程会独立的和环境进行交互得到经验数据,这些线程之间互不干扰,独立运行。从伪代码中可以看出A3C主要包括如下几个部分:

  • 将主网络参数复制到n个子网络中;
  • 子网络与环境交互产生样本;
  • 抽取样本,计算子网络(策略网络与价值网络)的梯度并累积求和(与A2C方法一致);
  • 使用得到的累积梯度更新主网络(策略网络与价值网络),回到步骤1进入下一个loop。

其实从伪代码可以看出A3C和A2C在更新参数的时候并不太一样,A3C是一种n-step的方法(降低方差的同时也降低了偏差),而A2C是一种1-step方法。

A3C的优点:

  • 强化学习算法不稳定很大程度上是由于强化学习得到一连串的数据之间具有相关性,只有打破只有的相关性才能得到一个稳定的算法。前面了解到的DQN就是使用了经验池的方法来打破数据时间的相关性,通过从经验池里面采样,使得相关性较低的样本能够在同一个batch里面用来更新价值函数。这里使用了异步的方法来打破数据之间的相关性,多个actor探索到的经历不同,这样actor之间的样本相关性就降低了,从而稳定了算法。而且经验池的使用要求使用off-policy的方法,而采取异步的方法则可以使用更稳定的on-policy方法。
  • 在不同的actor上能够分别采用不同的探索参数(如果不同actor探索参数不一致,感觉就得采用off-policy了),从而增加全局探索的多样性;同时,实际上不同的actor也能够去探索环境的不同部分。

注意本篇博客所讲算法都是on-policy的。

最后对于AC方法心里有个小疑问:在AC方法更新策略网络和价值网络时(例如A3C伪代码的倒数第四第五行),如果没有target价值网络的话,更新公式中它们都会包含 ( R − V ( s i ∣ θ v ′ ) ) (R-V(s_i|\theta_v')) (RV(siθv)),价值网络的梯度更新会倾向于使这一项为0,而策略网络需要使用这一项的值来计算梯度,这会不会导致网络难收敛等问题。
一点想法 ( R − V ( s i ∣ θ v ′ ) ) (R-V(s_i|\theta_v')) (RV(siθv))会得到当前行状态为价值相对于平均状态价值的好坏,我们希望策略梯度往 ( R − V ( s i ∣ θ v ′ ) ) (R-V(s_i|\theta_v')) (RV(siθv))大的方向更新;在计算价值网络梯度时,在当前策略下, V ( s i ∣ θ v ′ ) V(s_i|\theta_v') V(siθv)应该等于 R R R,因此更新梯度,希望使得 R − V ( s i ∣ θ v ′ ) = 0 R-V(s_i|\theta_v')=0 RV(siθv)=0。即整个流程都是按Bellman期望方程更新的。
(感觉还是有点迷迷糊糊,希望大家能指正。)

References

[1] CSDN:【强化学习】Actor-Critic算法详解
[2] 知乎:【强化学习入门 3】强化学习策略梯度类方法
[3] CDSN:深度强化学习8——Actor-Critic(AC、A2C、A3C)

  • 11
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
A2C(Advantage Actor-Critic)算法是一种常用的强化学习算法,旨在通过同时训练一个策略网络(Actor)和一个价值网络(Critic)来实现优化。 在A2C算法中,Actor网络用于学习动作策略,而Critic网络用于评估状态的价值。Actor网络根据当前状态选择一个动作,并生成一个策略分布。Critic网络根据当前状态估计该状态的价值。这两个网络共同工作,通过优化目标函数来提高策略和价值的准确性。 A2C算法的训练过程可以分为两个步骤:生成样本和更新参数。生成样本时,Actor网络根据当前状态生成动作,并与环境进行交互,得到下一个状态和奖励。然后,使用这些样本计算出优势函数,即当前状态的动作价值与预期价值之间的差异。 更新参数时,使用生成的样本来计算Actor和Critic网络的损失函数。Actor损失函数一般使用策略梯度方法,通过最大化优势函数来更新策略网络的参数。Critic损失函数一般使用均方误差损失,通过最小化实际价值与预期价值之间的差异来更新价值网络的参数。这两个网络的参数可以使用梯度下降法进行更新。 与A3C(Asynchronous Advantage Actor-Critic)算法不同,A2C算法是一种1-step方法,即每次更新只考虑当前的状态和动作。而A3C算法是一种n-step方法,考虑了未来多个状态和动作的影响。因此,A3C相比于A2C在更新参数的方式上有所不同,但都是基于Actor-Critic的思想。 总结来说,A2C算法是一种结合了Actor和Critic网络的强化学习算法,通过不断生成样本和更新网络参数来提高策略和价值的准确性。它是一种1-step方法,与A3C算法相比,在更新参数的方式上有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [强化学习算法AC系列详解](https://blog.csdn.net/qq_29176963/article/details/104975905)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值