专业的建设网站,网页版免费,不一样的婚恋网站怎么做,wordpress手机端底部添加导航菜单深度强化学习算法#xff1a;PPO
1. Importance Sampling
先说一下什么是采样#xff1a;对于一个随机变量#xff0c;我们通常用概率密度函数来描述该变量的概率分布特性。具体来说#xff0c;给定随机变量的一个取值#xff0c;可以根据概率密度函数来计算该值对应的概…深度强化学习算法PPO
1. Importance Sampling
先说一下什么是采样对于一个随机变量我们通常用概率密度函数来描述该变量的概率分布特性。具体来说给定随机变量的一个取值可以根据概率密度函数来计算该值对应的概率密度。反过来也可以根据概率密度函数提供的概率分布信息来生成随机变量的一个取值这就是采样。
现在假设需要对一个变量 X 的值进行估计这个变量在真实环境中有一个分布 p 那么在这个分布下可以获取到它的采样值 x i {x_i} xi 由于 x i 和 X x_i和X xi和X是同分布的即 E [ x i ] E [ X ] E[x_i]E[X] E[xi]E[X] 则可以利用大数定理来求解变量X的估计值 E [ x i ] 1 2 ∑ i 1 n x i E [ X ] (1) E[x_i] \frac{1}{2}\sum^n_{i1}x_i E[X] \tag{1} E[xi]21i1∑nxiE[X](1) 当获取的采样值数量n增加估计值越来越趋近于真实值。蒙特卡洛也会这样不是吗。
但是现在有一个新的情况假如变量 X 的分布为 p 而获取的采样值的分布为 q 则此时 E [ x i ] ≠ E [ X ] E[x_i] \neq E[X] E[xi]E[X] 那么便无法通过大数定理来估计了。但是现在的情况是我们不能从分布 p 采样数据只能从分布 q 采样数据q可以是任何分布。这时候就要用到重要性采样了。 E x ∼ p [ f ( x ) ] E x ∼ q [ f ( x ) p ( x ) q ( x ) ] (2) E_{x \sim p}[f(x)] E_{x \sim q}[f(x) \frac{p(x)}{q(x)}] \tag{2} Ex∼p[f(x)]Ex∼q[f(x)q(x)p(x)](2) 我们从 q 里面采样 x 再计算 f ( x ) p ( x ) q ( x ) f(x) \frac{p(x)}{q(x)} f(x)q(x)p(x) 再取期望值。所以就算我们不能从 p 里面采样数据但只要从 q 里面采样数据就可以计算从 p 采样 x 代入 f 之后的期望值了。这里需要乘上一个重要性权重 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x) 来修正这两个分布的差异。 q ( x ) q(x) q(x) 可以是任何分布唯一的限制就是 q ( x ) q(x) q(x) 的概率是 0 的时候 p ( x ) p(x) p(x) 的概率不为 0 不然会没有定义。
尽管上面提到分布 q 可以是任何分布但是仍有限制就是分布 q 不能和分布 p 的差距太多两个分布需要差不多的只有这样两个分布的方差 V a r x ∼ p [ f ( x ) ] 和 V a r x ∼ p [ f ( x ) p ( x ) q ( x ) ] Var_{x \sim p}[f(x)] 和 Var_{x \sim p}[f(x)\frac{p(x)}{q(x)}] Varx∼p[f(x)]和Varx∼p[f(x)q(x)p(x)]才会没有太多的差距。
分别把 f ( x ) f(x) f(x) 和 f ( x ) p ( x ) q ( x ) f(x)\frac{p(x)}{q(x)} f(x)q(x)p(x) 代入方差的公式 V a r [ X ] E [ X 2 ] − ( E [ x ] ) 2 Var[X]E[X^2] - (E[x])^2 Var[X]E[X2]−(E[x])2可得 V a r x ∼ p [ f ( x ) ] E x ∼ p [ f ( x ) 2 ] − ( E x ∼ p [ f ( x ) ] ) 2 V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] E x ∼ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x ∼ q [ f ( x ) p ( x ) q ( x ) ] ) 2 E x ∼ q [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x ∼ p [ f ( x ) ] ) 2 (3) Var_{x \sim p}[f(x)] E_{x \sim p}[f(x)^2] - (E_{x \sim p}[f(x)])^2 \tag{3}\\ Var_{x \sim q}[f(x)\frac{p(x)}{q(x)}]E_{x\sim q}[(f(x)\frac{p(x)}{q(x)})^2] - (E_{x \sim q}[f(x)\frac{p(x)}{q(x)}])^2\\ E_{x\sim q}[f(x)^2\frac{p(x)}{q(x)}] - (E_{x \sim p}[f(x)])^2 Varx∼p[f(x)]Ex∼p[f(x)2]−(Ex∼p[f(x)])2Varx∼q[f(x)q(x)p(x)]Ex∼q[(f(x)q(x)p(x))2]−(Ex∼q[f(x)q(x)p(x)])2Ex∼q[f(x)2q(x)p(x)]−(Ex∼p[f(x)])2(3) 可以看到两者方差的差别在第一项 V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] Var_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Varx∼q[f(x)q(x)p(x)] 的第一项多乘了 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(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) 中采样由于 q ( x ) q(x) q(x) 在右边区域的概率比较高所以更倾向于在右侧这个区域采样那么 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)] 就可能是正的。虽然左侧概率很低但是也有可能被采样到。如果 f ( x ) f(x) f(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) 的期望值还是负的。
那么之前的同策略式(4)就换成了异策略式(5)。 ∇ R θ ˉ E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log p θ ( τ ) ] (4) \nabla \bar{R_\theta} E_{\tau \sim p_\theta(\tau)}[R(\tau)\nabla \log p_\theta(\tau)] \tag{4} ∇RθˉEτ∼pθ(τ)[R(τ)∇logpθ(τ)](4) ∇ R θ ˉ E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ R ( τ ) ∇ log p θ ( τ ) ] (5) \nabla \bar{R_\theta} E_{\tau\sim p_{\theta^{}(\tau)}}[\frac{p_\theta (\tau)}{p_{\theta^{}}}R(\tau) \nabla \log p_\theta (\tau)] \tag{5} ∇RθˉEτ∼pθ′(τ)[pθ′pθ(τ)R(τ)∇logpθ(τ)](5)
于是可得 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 ) ] (6) E_{(s_t,a_t)\sim\pi_{\theta^{}}}[\frac{p_\theta(a_t|s_t)}{p_{\theta^{}}(a_t|s_t)}A^{\theta^{}}(s_t,a_t) \nabla \log p_\theta(a_t^n|s_t^n)] \tag{6} E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)∇logpθ(atn∣stn)](6) 那么基于重要性采样的目标函数为 J θ ′ ( θ ) E ( s t , a t ) ∼ π θ ′ [ p θ ( a t , s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] (7) J^{\theta^{}}(\theta) E_{(s_t,a_t)\sim \pi_{\theta^{}}}[\frac{p_\theta(a_t,s_t)}{p_{\theta^{}}(a_t|s_t)}A^{\theta^{}}(s_t,a_t)] \tag{7} Jθ′(θ)E(st,at)∼πθ′[pθ′(at∣st)pθ(at,st)Aθ′(st,at)](7) 上式中 J θ ′ ( θ ) J^{\theta^{}}(\theta) Jθ′(θ) 中的 θ \theta θ 是我们要去优化的参数 θ ′ \theta^{} θ′ 是我们用来做示范也就是真正与环境交互的策略。 A A A 是优势函数。
2. Proximal Policy Optimization
在重要性采样中有一个关键性问题 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)不能相差太多否则重要性采样的结果就会不好。至于如何做到这一点就要用到 PPO 了。
要使得 p θ ′ ( a t ∣ s t ) p_{\theta^{}}(a_t|s_t) pθ′(at∣st) 不能相差太多就应该加上一个约束这个约束可以是 θ \theta θ 与 θ ′ \theta^{} θ′ 输出动作的 KL 散度 KL divergence这一项用来衡量两个策略的相似程度。两个策略越相似越好如果不相似那么最后的结果就会不太好。 J P P O θ ′ ( θ ) J θ ′ ( θ ) − β K L ( θ , θ ′ ) (8) J_{PPO}^{\theta^{}}(\theta)J^{\theta^{}}(\theta) - \beta KL(\theta, \theta^{}) \tag{8} JPPOθ′(θ)Jθ′(θ)−βKL(θ,θ′)(8) 其中的 J θ ′ ( θ ) J^{\theta^{}}(\theta) Jθ′(θ) 就是式(7) 。
需要注意的是虽然 PPO 的优化目标涉及到了重要性采样但是只用到了上一轮策略 θ ′ \theta^{} θ′ 的数据。PPO 目标函数中加入了 KL 散度的约束行为策略 θ ′ \theta^{} θ′ 和目标策略 θ \theta θ 非常相近所以 PPO 的行为策略和目标策略可认为是同一个策略因此 PPO 是同策略算法。
这时候可能会有疑问重要性采样用的是两个策略但是 PPO 又是同策略那为什么还要用重要性策略呢这时可以再想想重要性采样的作用是什么其要解决的问题又是什么。在重要性采样中我们用 θ ′ \theta^{} θ′ 采样解决 θ \theta θ 的问题不需要再像之前那样采集一次数据学习一次而是可以从另一个分布中采样数据进行学习并且这些数据可以多次利用也就是 θ \theta θ 可以进行多次更新一直到 θ \theta θ 训练到一定的程度之后再让 θ ′ \theta^{} θ′ 重新采样这样训练就会更有效率。
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 ( θ , θ ′ ) δ (9) J_{TRPO}^{\theta^{}}(\theta) E_{(s_t,a_t) \sim \pi_{\theta^{}}}[\frac{p_\theta(a_t|s_t)}{p_{\theta^{}}(a_t|s_t)}A^{\theta^{}}(s_t,a_t)], KL(\theta,\theta^{}) \delta \tag{9} JTRPOθ′(θ)E(st,at)∼πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)],KL(θ,θ′)δ(9) TRPO 的核心思想是当策略网络是深度模型时直接沿着策略梯度更新参数可能会导致策略更新幅度过大从而显著降低策略的性能影响训练效果。为了避免这种情况 TRPO 在更新参数时引入了信任区域的概念通过限制新旧策略之间的KL 散度使策略更新控制在一个安全范围内从而保证更新后的策略不会偏离得太远。这种做法有效提高了训练的稳定性。但是 TRPO 需要求解一个带约束的优化问题通常通过共轭梯度法实现实现较为复杂且对超参数敏感。 PPO 对此进行了改进通过引入**裁剪(Clipping)**策略或者额外的 KL 散度惩罚项简化了约束优化过程同时保留了对策略更新幅度的限制。
通过式(8) 和式(9) 两个目标函数可以看到 TRPO 与 PPO 不一样的地方是约束所在的位置不一样PPO 直接将约束放到要优化的式子里面这样就可以用梯度上升的方法去最大化式(8)。 而 TRPO 是把 KL 散度当作约束其希望 θ \theta θ 与 θ ′ \theta^{} θ′ 的 KL 散度小于 δ \delta δ 。
上面提到 PPO 通过引入裁剪或 KL 散度惩罚简化了约束优化过程接下来就看一下 PPO 算法的这两个变种近端策略优化惩罚(PPO-penalty) 和 近端策略优化裁剪(PPO-clip)。
3. PPO-Penalty
近端策略优化惩罚算法使用拉格朗日乘数法将 KL 散度的约束转换为目标函数中的惩罚项变成了一个无约束的优化问题。在目标函数中加入 KL 散度惩罚项后算法会在迭代过程中动态调整惩罚系数(KL 散度前的系数比如式(8)中的 β \beta β) 以控制策略更新幅度。如果 KL 散度过大增大惩罚系数从而限制更新幅度如果 KL 散度过小则减小惩罚系数允许更积极地更新。这样即保留了 PPO 的更新稳定性又显著简化了优化过程。
具体实现是先初始化一个策略的参数 θ 0 \theta^{0} θ0 。在每一个迭代里面我们用前一个训练的迭代得到的演员的参数 θ k \theta^{k} θk 与环境交互采样到大量状态-动作对。根据 θ k \theta^{k} θk 交互的结果我们估测 A θ k ( s t , a t ) A^{\theta^k}(s_t,a_t) Aθk(st,at) 。这里使用 PPO 的优化公式但与原来的策略梯度不一样原来的策略梯度只能更新一次参数更新完以后我们就要重新采样数据。但是现在不同我们用 θ k \theta^k θk 与环境交互采样到这组数据以后我们可以让 θ \theta θ 更新很多次并最大化目标函数。
此外还有一个自适应 KL 散度(adaptive KL divergence) 。这里的自适应要解决的问题是 β \beta β 应该设置为多少。这里可以动态调整先设一个可以接受的 KL 散度的最大值。如果优化完式(8) 之后 KL 散度的值太大这就代表后面惩罚的项 β K L ( θ , θ k ) \beta KL(\theta, \theta^{k}) βKL(θ,θk) 没有发挥作用此时需要将 β \beta β 增大另外再设一个 KL 散度的最小值。如果做完目标函数优化之后KL 散度的值比最小值还要小那么就说明后面这一项的效果太强了担心优化时只优化后一项使得 θ \theta θ 与 θ k \theta^k θk 一样所以需要减小 β \beta β 。由于 β \beta β 是可以动态调整的所以称之为自适应KL惩罚(adaptive KL penalty)。
如果 K L ( θ , θ k ) K L m a x KL(\theta,\theta^k) KL_{max} KL(θ,θk)KLmax增大 β \beta β如果 K L ( θ , θ k ) K L m i n KL(\theta,\theta^k) KL_{min} KL(θ,θk)KLmin减小 β \beta β。
近端策略惩罚优化可表示为 J P P O θ k ( θ ) J θ k ( θ ) − β K L ( θ , θ k ) J θ k ( θ ) ≈ ∑ ( s t , a t ) p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) (10) J_{PPO}^{\theta^{k}}(\theta)J^{\theta^{k}}(\theta) - \beta KL(\theta, \theta^{k}) \\ J^{\theta^k}(\theta) \approx \sum_{(s_t,a_t)}\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t) \tag{10} JPPOθk(θ)Jθk(θ)−βKL(θ,θk)Jθk(θ)≈(st,at)∑pθk(at∣st)pθ(at∣st)Aθk(st,at)(10)
4. PPO-Clip
近端策略优化裁剪的目标函数中没有 KL 散度其要最大化的目标函数为 J P P O − c l i p θ k ( θ ) ≈ ∑ ( s t , a t ) m i n ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) , c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 ϵ ) A θ k ( s t , a t ) ) (11) J^{\theta^{k}}_{PPO-clip}(\theta) \approx \sum_{(s_t,a_t)}min \Big(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t), clip(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)},1-\epsilon,1\epsilon)A^{\theta^k}(s_t,a_t)\Big) \tag{11} JPPO−clipθ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))(11)
$\epsilon $ 是一个超参数
PPO-Clip 直接在目标函数中进行限制确保新旧策略差距不会过大其核心思想是通过裁剪(clipping)的方式限制策略更新的幅度从而在提高性能的同时避免策略更新过渡导致的不稳定性。 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(at∣st)pθ(at∣st) 这一项是重要性采样可以将它看作优势函数 A θ k ( s t , a t ) A^{\theta^k}(s_t,a_t) Aθk(st,at) 的比例因子 r θ r_\theta rθ 它反映了前后两个策略在某个动作上的相对变化。裁剪操作会限制 r θ r_\theta rθ 的范围防止某个动作的概率发生过大的相对变化。这种局部限制有助于间接控制新旧策略在整体分布上的差异幅度从而避免策略更新过度导致训练不稳定裁剪(clip)操作的具体实现为 clip ( r θ , 1 − ϵ , 1 ϵ ) { 1 − ϵ i f r θ 1 − ϵ , r θ i f 1 − ϵ ≤ r θ ≤ 1 ϵ , 1 ϵ i f r θ 1 ϵ . (12) \operatorname{clip}(r_\theta,1-\epsilon,1\epsilon) \begin{cases} 1-\epsilon \mathrm{if} \ r_\theta1-\epsilon, \\ r_\theta \mathrm{if} \ 1-\epsilon\leq r_\theta\leq1\epsilon, \\ 1\epsilon \mathrm{if} \ r_\theta1\epsilon. \end{cases} \tag{12} clip(rθ,1−ϵ,1ϵ)⎩ ⎨ ⎧1−ϵrθ1ϵif rθ1−ϵ,if 1−ϵ≤rθ≤1ϵ,if rθ1ϵ.(12) 从式(11)中可以看出 PPO-clip 中的目标函数的关键是 m i n min min 操作 m i n ( r θ A θ k ( s t , a t ) , c l i p ( r θ , 1 − ϵ , 1 ϵ ) A θ k ( s t , a t ) ) (13) min\Big(r_\theta A^{\theta^k}(s_t,a_t), clip(r_\theta,1-\epsilon,1\epsilon)A^{\theta^k}(s_t,a_t)\Big) \tag{13} min(rθAθk(st,at),clip(rθ,1−ϵ,1ϵ)Aθk(st,at))(13) r θ A θ k ( s t , a t ) r_\theta A^{\theta^k}(s_t,a_t) rθAθk(st,at) 是未加限制的目标直接用重要性采样因子 r θ r_\theta rθ 来放大或缩小优势函数的作用 c l i p ( r θ , 1 − ϵ , 1 ϵ ) A θ k ( s t , a t ) clip(r_\theta,1-\epsilon,1\epsilon)A^{\theta^k}(s_t,a_t) clip(rθ,1−ϵ,1ϵ)Aθk(st,at) 是经过裁剪的版本来限制 r θ r_\theta rθ 的变化范围防止策略更新幅度过大。 如上图(a)所示如果 A0 ,取最小的结果即红色的线如上图(b)所示如果 A0 取最小的结果也就是取 r θ r_\theta rθ 最大的结果即红色的线。
优势函数 A 表示在某个状态下某个动作相对基线的好坏如果 A0 也就是该状态-动作对是好的那么就可以增大这个状态-动作对的概率也就是让 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 越大越好一直大到 1 ϵ 1\epsilon 1ϵ 最大如果 A0 也就是该状态-动作对是不好的那么就应该减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 一直减到 1 − ϵ 1-\epsilon 1−ϵ 最小。
相比于 PPO-penalty PPO-clip 不需要动态调整 KL 散度的惩罚系数 β \beta β 而是直接通过裁剪实现对策略更新幅度的控制所以其计算效率更高仅需要简单的比较运算而 PPO-penalty 需要动态监控 KL 散度大小并调整惩罚系数。
在具体实现时优势函数可以使用 广义优势估计(GAE)。 参考 1.李宏毅老师的课程的文字整理《强化学习教程》 2.张伟楠老师的书《动手学强化学习》