上一篇:强化学习RL学习笔记8-策略梯度(Policy Gradient)
下一篇:持续创作中…
强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题 。
本文是笔者对强化学习的一点学习记录,成文于笔者刚开始接触强化学习期间,主要内容参考LeeDeepRL-Notes,学习期间很多概念和理论框架还很不成熟,若文中存在错误欢迎批评指正,也欢迎广大学习者沟通交流、共同进步。
Policy gradient 是 on-policy 的做法,因为在做 policy gradient 时, agent 先去跟环境互动搜集资料,搜集很多的 τ \tau τ,根据搜集到的资料,会按照 policy gradient 的式子去更新 policy 的参数从而优化 agent 。所以 policy gradient 是一个 on-policy 的算法。
近端策略优化(Proximal Policy Optimization,简称 PPO) 是 policy gradient 的一个变形,是现在 OpenAI 默认的强化学习算法。
∇ R ˉ θ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log p θ ( τ ) ] \nabla \bar{R}_{\theta}=E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] ∇Rˉθ=Eτ∼pθ(τ)[R(τ)∇logpθ(τ)]
直接使用上式更新梯度的 policy gradient 问题在于每次 sample 的轨迹用于更新一次 policy 之后, θ \theta θ 发生改变,sample 的轨迹便不能再被使用,需要重新 sample 进一步更新 policy。这是 on-policy 的弊端。
而若使用 off-policy 的策略,用 θ′ 跟环境做互动。用 θ′ 收集到的数据去训练 θ。这意味着可以把 θ′ 收集到的数据用非常多次,可以使用同样的 sample 执行梯度上升 (gradient ascent) 数次,这样会提升执行的效率。
具体使用 off-policy 的方法是 importance sampling(重要性采样)。
假设有一个函数 f ( x ) f(x) f(x),要计算从 p 这个分布采样 x,再把 x 带到 f 里面,得到 f ( x ) f(x) f(x)。可以从 p 这个分布去采样一些数据 x i x^i xi 。把 x i x^i xi 代到 f ( x ) f(x) f(x) 里面,然后取平均值,就可以近似 f ( x ) f(x) f(x) 的期望值。如下式所示:
E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) E_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^N f(x^i) Ex∼p[f(x)]≈N1i=1∑Nf(xi)
因为现在要做 off-policy ,采样的所以做一个修正,修正是这样的。期望值 E x ∼ p [ f ( x ) ] E_{x \sim p}[f(x)] Ex∼p[f(x)] 其实就是 ∫ f ( x ) p ( x ) d x \int f(x) p(x) dx ∫f(x)p(x)dx ,对其做如下的变换:
∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \int f(x) p(x) d x=\int f(x) \frac{p(x)}{q(x)} q(x) d x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}] ∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex∼q[f(x)q(x)p(x)]
即可以在 q ( x ) q(x) q(x) 分布下采样数据,根据上式通过计算 f ( x ) p ( x ) q ( x ) f(x){\frac{p(x)}{q(x)}} f(x)q(x)p(x) 的期望从而得到 E x ∼ p [ f ( x ) ] E_{x \sim p}[f(x)] Ex∼p[f(x)]。
重要性采样有一些问题。虽然理论上可以把 p 换成任何的 q。但是在实现上, p 和 q 不能差太多。差太多会有一些问题。
E x ∼ p [ f ( x ) ] = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim p}[f(x)]=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼p[f(x)]=Ex∼q[f(x)q(x)p(x)]
虽然上式成立,但两个随机变量的期望一样,并不代表方差一样。也就是说,只要对 p 这个分布采样够多次,q 这个分布采样够多,得到的结果会是一样的。但是如果采样的次数不够多,因为它们的方差差距是很大的,所以就有可能得到非常大的差别。
举个例子,当 p(x) 和 q(x) 差距很大的时候,会发生什么样的问题。
假设蓝线是 p ( x ) p(x) p(x) 的分布,绿线是 q ( x ) q(x) q(x) 的分布,红线是 f ( x ) f(x) f(x) 。
如果我们要计算 f ( x ) f(x) f(x) 的期望值,从 p ( x ) p(x) p(x) 这个分布做采样的话,那显然 E x ∼ p [ f ( x ) ] E_{x \sim p}[f(x)] Ex∼p[f(x)] 是负的,因为左边那块区域 p ( x ) p(x) p(x) 的概率很高,所以大部分采样都会采样到这个地方,而 f ( x ) f(x) f(x) 在这个区域是负的, 所以理论上这一项算出来会是负。
同理,若在 q ( x ) q(x) q(x) 采样,少量采样时得到的 f ( x ) f(x) f(x) 值都会是正的,若某次采样到概率较小的左侧区域还是有机会使 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼q[f(x)q(x)p(x)] 变负,但采样较少的情况下会出现 E x ∼ p [ f ( x ) ] E_{x \sim p}[f(x)] Ex∼p[f(x)] 为负, E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] Ex∼q[f(x)q(x)p(x)] 为正的不合理情况。
通过使用重要性采样,可以将 on-policy 训练的算法改为 off-policy 的情况。
之前我们是拿 θ \theta θ 这个 policy 去跟环境做互动,采样出轨迹 τ \tau τ,然后计算 R ( τ ) ∇ log p θ ( τ ) R(\tau) \nabla \log p_{\theta}(\tau) R(τ)∇logpθ(τ) 。现在我们不用 θ \theta θ 去跟环境做互动,假设有另外一个 policy θ ′ \theta' θ′,我们现在的 τ \tau τ 是从 θ ′ \theta' θ′ 采样出来的,是拿 θ ′ \theta' θ′ 去跟环境做互动,要补上一个重要性权重 p θ ( τ ) p θ ′ ( τ ) \frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)} pθ′(τ)pθ(τ) 。这个重要性权重就是某一个轨迹 τ \tau τ 用 θ \theta θ 算出来的概率除以这个轨迹 τ \tau τ 用 θ ′ \theta' θ′ 算出来的概率。
off-policy 的好处在于θ 可以更新参数很多次,一直到 θ \theta θ 训练到一定的程度,更新很多次以后, θ ′ \theta' θ′ 再重新去做采样。
如上篇博客所说,实际在做 policy gradient 的时候,并不是给整个轨迹 τ \tau τ 一样的分数,而是每一个状态-动作的对会分开来计算。实际上更新 gradient 的时候,如下式所示:
∇ R ˉ θ ≈ E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ log p θ ( a t n ∣ s t n ) ] \nabla \bar{R}_{\theta}\approx E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] ∇Rˉθ≈E(st,at)∼πθ[Aθ(st,at)∇logpθ(atn∣stn)]
其中 A θ ( s t , a t ) A^{\theta}\left(s_{t}, a_{t}\right) Aθ(st,at) 是累积奖励的值减掉 baseline,即:
A θ ( s t , a t ) = ∑ t ′ = t T n γ t ′ − t r t ′ n − b A^{\theta}\left(s_{t}, a_{t}\right)=\sum_{t'=t}^{T_n}\gamma ^{t'-t}r^n_{t'} - b Aθ(st,at)=t′=t∑Tnγt′−trt′n−b
现在用了重要性采样的技术把 on-policy 变成 off-policy,就从 θ \theta θ 变成 θ ′ \theta' θ′ 。所以现在 s t s_t st、 a t a_t at 是 θ ′ \theta' θ′ 即另一个 actor 跟环境互动以后所采样到的数据。 但是拿来训练要调整参数是模型 θ \theta θ。因为 θ ′ \theta' θ′ 跟 θ \theta θ 是不同的模型,所以需要修正项。这项修正项,就是用重要性采样的技术,把 s t s_t st、 a t a_t at 用 θ \theta θ 采样出来的概率除掉 s t s_t st、 a t a_t at 用 θ ′ \theta' θ′ 采样出来的概率。
E ( s t , a t ) ∼ π θ ′ [ P θ ( s t , a t ) P θ ′ ( s t , a t ) A θ ( s t , a t ) ∇ log p θ ( a t n ∣ s t n ) ] E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{P_{\theta}\left(s_{t}, a_{t}\right)}{P_{\theta^{\prime}}\left(s_{t}, a_{t}\right)} A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] E(st,at)∼πθ′[Pθ′(st,at)Pθ(st,at)Aθ(st,at)∇logpθ(atn∣stn)]
拆解 p θ ( s t , a t ) p_{\theta}\left(s_{t}, a_{t}\right) pθ(st,at) 和 p θ ′ ( s t , a t ) p_{\theta'}\left(s_{t}, a_{t}\right) pθ′(st,at) 即
p θ ( s t , a t ) = p θ ( a t ∣ s t ) p θ ( s t ) p θ ′ ( s t , a t ) = p θ ′ ( a t ∣ s t ) p θ ′ ( s t ) \begin{aligned} p_{\theta}\left(s_{t}, a_{t}\right)&=p_{\theta}\left(a_{t}|s_{t}\right) p_{\theta}(s_t) \\ p_{\theta'}\left(s_{t}, a_{t}\right)&=p_{\theta'}\left(a_{t}|s_{t}\right) p_{\theta'}(s_t) \end{aligned} pθ(st,at)pθ′(st,at)=pθ(at∣st)pθ(st)=pθ′(at∣st)pθ′(st)
于是得到下式:
E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) p θ ( s t ) p θ ′ ( s t ) A θ ′ ( s t , a t ) ∇ log p θ ( a t n ∣ s t n ) ] E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} \frac{p_{\theta}\left(s_{t}\right)}{p_{\theta^{\prime}}\left(s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)pθ′(st)pθ(st)Aθ′(st,at)∇logpθ(atn∣stn)]
假设模型 θ \theta θ 时看到 s t s_t st 的概率,和模型 θ ′ \theta' θ′ 的时候看到 s t s_t st 的概率是差不多的,即 p θ ( s t ) = p θ ′ ( s t ) p_{\theta}(s_t)=p_{\theta'}(s_t) pθ(st)=pθ′(st) 因为它们是一样的,所以可以把这一项比值删掉,即
E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ∇ log p θ ( a t n ∣ s t n ) ] (1) E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]\tag{1} E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)∇logpθ(atn∣stn)](1)
上述假设成立的原因是会看到什么状态往往和会采取什么样的动作是没有太大关系的,而且 s t s_ t st 出现的概率很难算,所以忽略这个问题。
现在得到一个新的目标函数:
J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta^{\prime}}(\theta)=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right] Jθ′(θ)=E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)]
当使用重要性采样的时候,要优化的目标函数就是这样,把它写作 J θ ′ ( θ ) J^{\theta^{\prime}}(\theta) Jθ′(θ)。这个括号里 θ \theta θ 代表要优化的参数。 θ ′ \theta' θ′ 是说拿 θ ′ \theta' θ′ 做示范,即真正在跟环境互动的是 θ ′ \theta' θ′ 。因为 θ \theta θ 不跟环境做互动,是 θ ′ \theta' θ′ 在跟环境互动。
实际上在更新参数的时候,就是按照式(1) 来更新参数。
在 off-policy 的方法里要优化的是 J θ ′ ( θ ) J^{\theta^{\prime}}(\theta) Jθ′(θ) ,但是这个目标函数又牵涉到重要性采样。在做重要性采样时, p θ ( a t ∣ s t ) p_{\theta}\left(a_{t} | s_{t}\right) pθ(at∣st) 不能跟 p θ ′ ( a t ∣ s t ) p_{\theta'}\left(a_{t} | s_{t}\right) pθ′(at∣st) 差太多。所以在训练的时候,多加一个约束(constrain)。这个约束是 θ \theta θ 跟 θ ′ \theta' θ′ 输出的动作的 KL 散度(KL divergence),简单来说,这一项就是要衡量 θ \theta θ 跟 θ ′ \theta' θ′ 有多像。
下式即 Proximal Policy Optimization (PPO) 公式:
J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta^{\prime}}(\theta)=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right] Jθ′(θ)=E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)]
J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta^{\prime}}_{PPO}(\theta)=J^{\theta^{\prime}}(\theta)-\beta KL(\theta,\theta') JPPOθ′(θ)=Jθ′(θ)−βKL(θ,θ′)
PPO 有一个前身叫做信任区域策略优化(Trust Region Policy Optimization,TRPO),TRPO 的式子如下式所示。
J T R P O θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] K L ( θ , θ ′ ) < δ \begin{aligned} J_{T R P O}^{\theta^{\prime}}(\theta)=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)\right] \\ \\ \mathrm{KL}\left(\theta, \theta^{\prime}\right)<\delta \end{aligned} JTRPOθ′(θ)=E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)]KL(θ,θ′)<δ
TRPO 与 PPO 不一样的地方是约束的位置不一样,PPO是直接把约束放到要优化的式中,然后就可以用梯度上升的方法最大化该式。但 TRPO 是把 KL 散度当作约束,它希望 θ \theta θ 跟 θ ′ \theta' θ′ 的 KL 散度小于 δ \delta δ。如果使用的是基于梯度的优化时,有约束是很难处理的,所以 PPO 在实现上比 TRPO 容易的多。
==所谓的 KL 散度并不是参数的距离,而是动作的距离。==假设有一个模型,有一个 actor 是 θ \theta θ,另外一个 actor 的参数是 θ ′ \theta' θ′ ,所谓参数上的距离就是这两组参数有多像。行为距离就是给定同样的状态时输出动作之间的差距。
PPO 算法有两个主要的变种:PPO-Penalty 和 PPO-Clip。
首先是 PPO1 的算法,即 PPO-Penalty。
先初始化一个 policy 的参数 θ 0 \theta^0 θ0。然后在每一个迭代中,用参数 θ k \theta^k θk , θ k \theta^k θk 就是在前一个训练的迭代得到的 actor 的参数,用 θ k \theta^k θk 跟环境做互动,采样到一大堆状态-动作的对。采样到这组数据以后,可以让 θ \theta θ 更新很多次,想办法去最大化目标函数。
J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta^{\prime}}_{PPO}(\theta)=J^{\theta^{\prime}}(\theta)-\beta KL(\theta,\theta') JPPOθ′(θ)=Jθ′(θ)−βKL(θ,θ′)
上式中 β \beta β 要设成多少,这里介绍一个动态调整 β \beta β 的方法:adaptive KL divergence
如果觉得算 KL 散度 很复杂,有 PPO2,PPO2 即 PPO-Clip。PPO2 要去最大化的目标函数如下式所示,式子里没有 KL 散度 。
J P P O 2 θ k ( θ ) ≈ ∑ ( s t , a t ) min ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) , clip ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ε , 1 + ε ) A θ k ( s t , a t ) ) \begin{aligned} J_{P P O 2}^{\theta^{k}}(\theta) \approx \sum_{\left(s_{t}, a_{t}\right)} \min &\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right),\operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) A^{\theta^{k}}\left(s_{t}, a_{t}\right)\right) \end{aligned} JPPO2θk(θ)≈(st,at)∑min(pθk(at∣st)pθ(at∣st)Aθk(st,at),clip(pθk(at∣st)pθ(at∣st),1−ε,1+ε)Aθk(st,at))
上图的横轴是 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(at∣st)pθ(at∣st) ,纵轴是 clip 函数的输出。
如果 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(at∣st)pθ(at∣st) 大于 1 + ε 1+\varepsilon 1+ε,输出就是 1 + ε 1+\varepsilon 1+ε。
如果小于 1 − ε 1-\varepsilon 1−ε, 它输出就是 1 − ε 1-\varepsilon 1−ε。
如果介于 1 + ε 1+\varepsilon 1+ε 跟 1 − ε 1-\varepsilon 1−ε 之间, 就是输入等于输出。
p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(at∣st)pθ(at∣st) 是绿色的线;
clip ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ε , 1 + ε ) \operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) clip(pθk(at∣st)pθ(at∣st),1−ε,1+ε) 是蓝色的线;
在绿色的线跟蓝色的线中间,要取一个最小的。假设两项前面乘的项 A是大于 0 的话,取最小的结果,就是红色的这一条线。
若 A 小于 0 ,取较小的后,就得到红色的这一条线。
这个式子想做的事就是使 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 跟 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 在优化后差距不要太大,也就是你拿来做示范的模型跟你实际上学习的模型在优化以后不要差距太大。
如果 A > 0,也就是某一个状态-动作对是好的,那我们希望增加这个状态-动作对的概率。也就是说,我们想让 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 越大越好,但它跟 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 的比值不可以超过 1 + ε 1+\varepsilon 1+ε。如果超过 1 + ε 1+\varepsilon 1+ε ,就没有 benefit 了。红色的线就是我们的目标函数,我们希望目标越大越好,我们希望 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 越大越好。但是 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(at∣st)pθ(at∣st) 只要大过 1 + ε 1+\varepsilon 1+ε,就没有 benefit 了。所以在训练的时候,当 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 被训练到 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) > 1 + ε \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}>1+\varepsilon pθk(at∣st)pθ(at∣st)>1+ε 时,它就会停止。假设 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 比 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 还要小,并且这个 advantage 是正的。因为这个动作是好的,当然希望这个动作被采取的概率越大越好,即希望 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 越大越好。所以假设 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 还比 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 小,那就尽量把它挪大,但只要大到 1 + ε 1+\varepsilon 1+ε 就好。
如果 A < 0,也就是某一个状态-动作对是不好的,我们希望把 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 减小。如果 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 比 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 还大,那你就尽量把它压小,压到 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)} pθk(at∣st)pθ(at∣st) 是 1 − ϵ 1-\epsilon 1−ϵ 的时候就停了,就不要再压得更小。
这样的好处就是,你不会让 p θ ( a t ∣ s t ) p_{\theta}(a_{t} | s_{t}) pθ(at∣st) 跟 p θ k ( a t ∣ s t ) p_{\theta^k}(a_{t} | s_{t}) pθk(at∣st) 差距太大。
上一篇:强化学习RL学习笔记8-策略梯度(Policy Gradient)
下一篇:持续创作中…