【RL】Actor-Critic

强化学习的算法分为基于价值与基于策略两大类,这两大类在思想上是完全不同的。基于价值的算法目标是拟合隐藏在环境中的价值函数,而基于策略的算法则是不断地优化策略。所有强化学习的算法,基本的思想都不外乎于这两种。从这个角度上说,Actor-Critic算法本质上还是基于策略的方法,因为其算法的核心还是在不断地优化策略。虽然我们要训练价值网络,但是其目标也只是“辅佐”策略网络更好地训练。当我们学习VPG算法的时候,其理论与训练方式都与DQN完全不同,因为这本质上是两种不同的算法;而在下面的Actor-Critic算法中,却可以发现很多公式是从VPG的公式修改得到的,这正是因为AC以及其衍生出来的算法,都是基于策略的、都是在VPG算法上衍生出来的。

下面,如果没有特殊说明,我们仍旧和VPG一样,主要讨论状态连续、动作为有限个、环境随机且时齐的MDP。在这个设定下,我们的策略网络仍然会比较像我们熟悉的分类网络。

一 Actor-Critic的出发点

我们要考虑一个问题。如果一条 τ \tau τ上面有很多步“好棋”导致 r ( τ ) r(\tau) r(τ)比较高,同时也有几步“臭棋”,由于总体 r ( τ ) r(\tau) r(τ)不错,所以“臭棋”对应的决策概率也会增加;反之亦然。

从统计意义上来说,如果采样足够多的轨道并求平均得出策略梯度,则我们还是能够将每一步棋的好坏估计出来。但是在采样样本比较有限的情况下,这可能会导致巨大的均方误差

为了解决以上的问题,一个最自然的想法是,我们 不应该 将一个 τ \tau τ上所有 ( s , a ) (s, a) (s,a)编成一个batch,用一个统一的“权重” r ( τ ) r(\tau) r(τ)来衡量它们的好坏。而应该找出一个“权重”能够单独衡量每一个 ( s , a ) (s, a) (s,a)的好坏。训练策略就好像是用“带权重的数据集”去训练监督学习问题。但是问题在于我们应该给每一条数据集 ( s , a ) (s, a) (s,a)一个能衡量“好坏”的权重 v v v,让每一条 ( s , a , v ) (s,a,v) (s,a,v)作为基本的训练集,而不是将每一个轨道上的 s , a s,a s,a打包成一个batch用同一个权重 r ( τ ) r(\tau) r(τ)。我们要考虑如何将每一个单步决策 ( s , a ) (s, a) (s,a)所对应的“学习权重” v v v给算出来。这样,就可以避免差的 ( s , a ) (s,a) (s,a)混在好的 τ \tau τ之中“滥竽充数”。

例如,我们可以想象,如果让 w w w按照以下公式给出的梯度上升,应该可以提升策略 π w \pi_w πw的性能,因为它让优势 A π ( s , a ) A_{\pi}(s,a) Aπ(s,a)更大的 ( s , a ) (s,a) (s,a)有更多的概率出现:
w → w + α ∇ w log ⁡ π w ( a ∣ s ) A w ( s , a ) w \rightarrow w+\alpha \nabla_{w} \log \pi_{w}(a \mid s) A_{w}(s, a) ww+αwlogπw(as)Aw(s,a)
在VPG中将总的期望奖励看作是关于策略的函数 J ( π ) J(\pi) J(π)(或者 J ( w ) J(w) J(w)),并从中推出了策略梯度的公式。下面,让我们看看当 w w w沿着策略梯度上升的过程,等价于各步决策的条件概率 π w ( a ∣ s ) \pi_{w}(a \mid s) πw(as)按照何种权重梯度上升的过程。

二 策略梯度的公式化简

我们来推导Actor-Critic的公式,看看学习权重 v v v到底应该等于多少。

真正衡量 ( s , a ) (s,a) (s,a)的“好坏”的 v v v应该由如下式子所示:
( s , a )  对应的“学习权重"  v = E w , ( s , a ) ∈ τ [ r ( τ ) ] (s, a) \text { 对应的“学习权重" } v=E_{w,(s, a) \in \tau}[r(\tau)] (s,a) 对应的学习权重v=Ew,(s,a)τ[r(τ)]

下面将 r ( τ ) r(\tau) r(τ)展开为优势函数 A π ( s , a ) A_{\pi}(s,a) Aπ(s,a)的求和。
r ( τ ) = Σ i = 0 n γ i r i = Σ i = 0 n γ i ( r i + γ V π ( s i + 1 ) − V π ( s i ) ) + V ( s 0 ) − γ i V ( s n ) \begin{array}{c} r(\tau)=\Sigma_{i=0}^{n} \gamma^{i} r_{i}=\Sigma_{i=0}^{n} \gamma^{i}\left(r_{i}+\gamma V_{\pi}\left(s_{i+1}\right)-V_{\pi}\left(s_{i}\right)\right)+V\left(s_{0}\right)-\gamma^{i} V\left(s_{n}\right) \end{array} r(τ)=Σi=0nγiri=Σi=0nγi(ri+γVπ(si+1)Vπ(si))+V(s0)γiV(sn)
由于 A π ( s i , a i ) = r i + γ V π ( s i + 1 ) − V π ( s i ) A_{\pi}\left(s_{i}, a_{i}\right)=r_{i}+\gamma V_{\pi}\left(s_{i+1}\right)-V_{\pi}\left(s_{i}\right) Aπ(si,ai)=ri+γVπ(si+1)Vπ(si),并且终止后不再有后续奖励,所以 V ( s n ) = 0 V(s_{n})=0 V(sn)=0。将上述的等式对于环境求期望,得到以下的重要公式:
E π [ r ( τ ) ] = ∑ i = 0 n γ i A π ( s i , a i ) + V π ( s 0 ) E_{\pi}[r(\tau)]=\sum_{i=0}^{n} \gamma^{i} A_{\pi}\left(s_{i}, a_{i}\right)+V_{\pi}\left(s_{0}\right) Eπ[r(τ)]=i=0nγiAπ(si,ai)+Vπ(s0)
这条公式的含义是,我们最终能够获得奖励 r ( τ ) r(\tau) r(τ)的期望,就等于“先天的价值” V π ( s 0 ) V_{\pi}\left(s_{0}\right) Vπ(s0)加上每一步决策带来的“优势” A π ( s i , a i ) A_{\pi}(s_{i},a_{i}) Aπ(si,ai)乘以衰减项 γ i \gamma^i γi构成。这就好像说一个人最终能够取得的成就要根据其“家庭出身”与每一步“后天努力”带来的效果加和得到。当设定 γ i < 1 \gamma^i<1 γi<1的时候,则即使是同样的 ( s , a ) (s,a) (s,a)中发生在前面的会比较重要,因为早期的操作对于全局的影响更大。当然,如果设定 γ i = 1 \gamma^i=1 γi=1,则同样的 ( s , a ) (s,a) (s,a)无论发生在什么时候,对于全局的影响都是差不多的。

TODO

可以推出如下与策略梯度等价的公式:
∇ w J ( w ) = ∇ w [ Σ s ρ w ′ ( s ) Σ a π w ′ ( a ∣ s ) A w ( s , a ) ]  令  I w ( s ) = ρ w ( s ) P w ( s )  则  ∇ w J ( w ) = E w [ I w ( s ) A w ( s , a ) ∇ w log ⁡ π w ( a ∣ s ) ] \begin{array}{l} \nabla_{w} J(w)=\nabla_{w}\left[\Sigma_{s} \rho_{w^{\prime}}(s) \Sigma_{a} \pi_{w^{\prime}}(a \mid s) A_{w}(s, a)\right] \\ \text{ 令 } I_{w}(s)=\frac{\rho_{w}(s)}{P_{w}(s)} \\ \text { 则 } \nabla_{w} J(w)=E_{w}\left[I_{w}(s) A_{w}(s, a) \nabla_{w} \log \pi_{w}(a \mid s)\right] \end{array} wJ(w)=w[Σsρw(s)Σaπw(as)Aw(s,a)]  Iw(s)=Pw(s)ρw(s)  wJ(w)=Ew[Iw(s)Aw(s,a)wlogπw(as)]
上面的公式中出现了一个 I w ( s ) I_{w}(s) Iw(s),我们可以想象其代表一个状态出现的“早晚”。根据定义,“早晚” I w ( s ) I_{w}(s) Iw(s)的取值在0与1之间。当 s s s倾向于更早出现的时候,它更接近1,而当 s s s倾向于更晚出现的时候,它则接近于0。上面的推导意味着,如果用当前策略 π w \pi_{w} πw采样很多条轨道 τ \tau τ,并将其拆分为许多条单步决策 ( s , a ) (s,a) (s,a)并为每一条单步决策 ( s , a ) (s,a) (s,a)赋予“学习权重” v = I w ( s ) A w ( s , a ) v=I_{w}(s) A_{w}(s, a) v=Iw(s)Aw(s,a),使得 ( s , a , v ) (s,a,v) (s,a,v)成为一条数据集。以这样的“早晚 优势的权重”去训练策略网络,应该完全等价于策略梯度算法。不过,在VPG算法中,同一轨道上的所有 ( s , a ) (s,a) (s,a)被赋予统一的权重 r ( τ ) r(\tau) r(τ),无法区分每一步具体的好坏,只能靠着大量的数据使其收敛到“早晚 优势的权重”平均。而如果采用上述的算法,则意味着每一步[ ( s , a ) (s,a) (s,a)有独属于自己的、能够衡量具体这一步的“好坏”以及“需要被学习的紧迫度”的权重。如果我们能算出 I w ( s ) A w ( s , a ) I_{w}(s) A_{w}(s, a) Iw(s)Aw(s,a)作为权重标记在每一条产生的数据集 ( s , a ) (s,a) (s,a)上面,用这样的数据去训练策略网络无疑会使得估计的方差大大地减少、训练效率显著得到提升。

如果将 γ \gamma γ设定为1,则会导致衡量“早晚”的 I w ( s ) I_{w}(s) Iw(s)恒为1,这也就意味着策略梯度的公式等价于 E w [ A w ( s , a ) ∇ w log ⁡ π w ( a ∣ s ) ] E_{w}\left[ A_{w}(s, a) \nabla_{w} \log \pi_{w}(a \mid s)\right] Ew[Aw(s,a)wlogπw(as)],这也就是Actor-Critic算法更新的公式。

三 AC的基本思想

上文中我们说,如果将 γ \gamma γ设定为1,则会导致衡量“早晚”的 I w ( s ) I_{w}(s) Iw(s)恒为1。

我们便有了Actor-Critic算法的基本思路,即拟合一个能够计算 A w ( s , a ) A_{w}(s, a) Aw(s,a)的函数。当MDP比较复杂时,由于估计的均方误差更小,这种方法效率会比VPG算法更高。用统计学的话来总结,VPG方法对于策略梯度是一个“无偏差但是高方差的估计”,而Actor-Critic算法对于策略梯度是一个“有偏差但是低方差”的估计。

AC算法的大体框架是这样的:我们定义两个神经网络:一个是用来计算 A w ( s , a ) A_{w}(s, a) Aw(s,a)(或 Q w ( s , a ) Q_{w}(s, a) Qw(s,a)也行,二者效果差不多)的价值网络,另一个则是策略。我们用策略网络与环境交互产生许多数据集,并用这些数据集同时训练两个网络,提升网络的性能。
在这里插入图片描述
为这个算法做一个形象的比喻,策略网络和价值网络之间的关系就好像演员与批评家之间的关系。策略网络就像一个演员,在努力表演,而价值网络则像一个批评家,对策略网络的表演中哪里演得好、哪里演得差进行点评。一开始,演员的演技很差,批评家的点评鉴赏能力也很差。在训练中,演员在批评家的指点下提升自己的演技,而批评家也通过观看更多的表演来提升自己的鉴赏水平。最后,演员的演技变得炉火纯青,而批评家的评论也变得一针见血。这时候,我们就可以让演员来为我们奉上精彩的表演了。所以,我们将这个算法称作Actor-Critic,简称为AC算法。

四 单步更新与回合更新

在这里,我们便能看清楚“单步更新”与“回合更新”之间的核心区别:“回合更新”意味着我们需要标注每一步在回合中出现的位置,而“单步更新”意味着我们可以将数据集拆散为许多步transition。在DQN中或是在AC中,我们用来训练的数据是 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s)形式的transition,甚至可以完全打乱顺序训练。这意味着我们只用到了transition的内容,而不需要记录其在轨道中的位置。换句话说,AC的训练集中不包含各步在轨道中出现“早晚”的信息;而在VPG中,我们用来训练的数据是整条轨道的数据,训练集中自然就包含了各步在轨道中“早晚”的信息。这便是“单步更新”与“回合更新”的本质区别。

“单步更新”与“回合更新”的核心区别在于训练集基本单位的不同,是单个transition还是一整条轨道。二者的区别在于“能不能每走一步就更新一次”,而不在于“是不是真的要走一步就更新一次”。如果究其本质,二者的区别在于需不需要用到各个步在整个轨道上位置的信息。在现实中,无论是“单步更新”还是“回合更新”的算法,我们在每一次训练中都会用到大量的数据(即用当前网络产生一批数据,然后用这批数据来指导网络的更新)。对于神经网络这样的模型,单单用一条数据来训练显然是不合理的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值