参考资料:Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始
如果LaTeX挂了:
传统策略梯度算法
策略近似
设θ为神经网络参数,基于策略的强化学习用参数化概率分布πθ(a∣s)=P(a∣s;θ)确定策略,在返回的动作概率列表中对不同的动作进行抽样选择。
定义目标函数
目标就是找到那些可能获得更多奖励期望值的动作,使它们对应的概率更大,从而策略就更有可能选择这些动作。
定义的最大化目标函数:
θmaxJ(θ)=θmaxEτ∼πθ(R(τ))=θmaxτ∑P(τ;θ)R(τ)
其中τ是agent与环境交互产生的状态-动作轨迹τ=(s1,a1,…,sT,aT)。我们的目标是通过调整θ,使得获得更大奖励期望的轨迹出现的概率更高。
其中,轨迹τ在策略πθ(a∣s)下发生的概率为:
P(τ;θ)=[t=0∏TP(st+1∣st,at)⋅πθ(at∣st)]
实际枚举所有可能的轨迹是很困难的,基本都需要通过大量采样得到样本求期望值近似。
策略梯度
∇θJ(θ)=τ∑∇θP(τ;θ)⋅R(τ)=τ∑P(τ;θ)P(τ;θ)∇θP(τ;θ)R(τ)=τ∑P(τ;θ)⋅∇θlogP(τ;θ)⋅R(τ)
根据P(τ;θ)可得:
∇θlogP(τ;θ)=∇θ[t=0∑TlogP(st+1∣st,at)+t=0∑Tlogπθ(at∣st)]=t=0∑T∇θlogπθ(at∣st)
假设当前有m条轨迹的样本:
∇θJ(θ)≈m1i=1∑m∇θlogP(τ(i);θ)⋅R(τ(i))=m1i=1∑mt(i)=0∑T(i)∇θlogπθ(at(i)∣st(i))⋅R(τ(i))=n1i=1∑n∇θlogπθ(ai∣si)⋅R(τi)(n=i=1∑m(T(i)+1))
策略梯度的更新规则:
θ←θ+α⋅∇θJ(θ)
Softmax策略
对于离散动作空间:
πθ(a∣s)=∑a′∈Aeϕ(s,a′)Tθeϕ(s,a)Tθ
对应的策略梯度:
∇θlogπθ(a∣s)=∇θ(ϕ(s,a)Tθ−loga′∈A∑eϕ(s,a′)Tθ)=ϕ(s,a)−∑a′∈Aeϕ(s,a′)Tθ∑a′∈Aϕ(s,a′)⋅eϕ(s,a′)Tθ=ϕ(s,a)−a′∈A∑ϕ(s,a′)⋅πθ(a′∣s)
如果奖励信号很高并且观察到的向量与平均向量相差很大,就会有增加该动作概率的强烈趋势。
高斯策略
对于连续动作空间:
πθ(a∣s)=2πσθ1e−2σθ2(a−μθ)2
其中正态分布的均值μθ=ϕ(s,a)Tθ。
对应的策略梯度:
∇θlogπθ(a∣s)=∇θ(−21⋅log(2πσθ2)−2σθ2(a−μθ)2)=σθ2(a−μθ)ϕ(s,a)
在高回报的情况下,远离均值的动作会触发强烈的更新信号。
在实际任务中,我们没有必要手动计算偏导数,使用深度学习框架的自动求导。定义损失函数:
L(a,s,r)=−log(πθ(a∣s))r
即可让计算机自动求导。
算法实现
1 2 3 4 5 6
| Network: theta := R^(|theta|) for n = 1 to N: tau <- pi(theta) for t = 1 to T: R(tau | t) = R[t] + R[t + 1] + ... + R[T] theta <- theta - alpha * R(tau | t) * grad(theta, pi(theta, a | s))
|
这里对于一条路径,将路径上每一个状态都进行了计算,对信息的利用最大化。
自然策略梯度算法
传统策略梯度算法的缺陷
在传统的策略梯度算法中,权重更新会遇到两个问题:
- 过冲(Overshooting): 更新错过了奖励峰值并落入了次优策略区域
- 下冲(Undershooting): 在梯度方向上采取过小的更新步长会导致收敛缓慢
在监督学习问题中,overshooting不是什么问题,因为数据是固定的,我们可以在下一个epoch中重新纠正;但在强化学习问题中,如果因为overshooting陷入了一个较差的策略区域,则未来的样本批次可能不会提供太多有意义的信息,用较差的数据样本再去更新策略,从而陷入了糟糕的正反馈中无法恢复。较小的学习率可能会解决这个问题,但会导致收敛速度变慢的undershooting问题。
限制策略更新的差异
我们需要表示策略(分布)之间的差异,而不是参数本身的差异。计算两个概率分布之间的差异,最常见的是KL散度,也称为相对熵,描述了两个概率分布之间的距离:
DKL(πθ∣∣πθ+Δθ)=x∈X∑πθ(x)log(πθ+Δθ(x)πθ(x))
调整后的策略更新限制为:
Δθ∗=Δθ,DKL(πθ∣∣πθ+Δθ)≤ϵargmaxJ(θ+Δθ)
然而,计算KL散度需要遍历所有的状态-动作对,因此我们需要一些化简来处理现实的RL问题。
首先,我们使用拉格朗日松弛将原表达式的发散约束转化为惩罚项,得到一个更容易求解的表达式:
Δθ∗=ΔθargmaxJ(θ+Δθ)−λ(DKL(πθ∣∣πθ+Δθ)−ϵ)
用近似方法来化简。通过泰勒展开:
Δθ∗F(θ)≈ΔθargmaxJ(θ)+∇θJ(θ)⋅Δθ−21λ(ΔθTF(θ)Δθ)+λϵ≈Δθargmax∇θJ(θ)⋅Δθ−21λ(ΔθTF(θ)Δθ)=Eθ[∇θlogπθ(x)∇θlogπθ(x)T]
KL散度近似于二阶泰勒展开。用Fisher信息矩阵代替二阶导数,除了符号紧凑性外,还可以大大减少计算开销。
解决KL约束问题
对于近似简化后的表达式,可以通过将关于Δθ的梯度设置为0,来找到最优的权重更新Δθ:
0Δθ=∂Δθ∂(∇θJ(θ)Δθ−21λΔθTF(θ)Δθ)=∇θJ(θ)−21λF(θ)Δθ=−λ2F(θ)−1∇θJ(θ)
其中,λ是一个常数,可以吸收到学习率α中。根据DKL(πθ∣∣πθ+Δθ)≤ϵ,我们可以推出动态学习率:
α=∇J(θ)T2ϵF(θ)−1∇J(θ)
可以确保每次更新的KL散度(近似)等于ϵ。
自然策略梯度:
∇~J(θ)=F(θ)−1∇J(θ)
最终的权重更新方案为:
Δθ=∇J(θ)TF(θ)−1∇J(θ)2ϵ∇~J(θ)
该方案的强大之处在于,无论分布的表示如何,它总是以相同的幅度改变策略。
信赖域策略优化算法(TRPO)
自然策略梯度算法的缺陷
- 近似值可能会违反KL约束,从而导致分析得出的步长过大,超出限制要求
- 矩阵F的计算时间太长,是O(N3)复杂度的运算
- 我们没有检查更新是否真的改进了策略。由于存在大量的近似过程,策略可能并没有优化
算法理论
针对自然策略梯度算法的问题,我们希望可以对策略的优化进行量化,从而保证每次的更新一定是优化作用的。为此,我们需要计算两种策略之间预期回报的差异。这里采用的是原策略预期回报添加新策略预期优势的方式。该表达式在原策略下计算优势函数,无需重新采样:
J(πθ+Δθ)=J(πθ)+Eτ∼πθ+Δθt=0∑∞γtAπθ(st,at)
其中优势函数的定义为:
Aπθ(s,a)=E(Qπθ(s,a)−Vπθ(s))
由于时间范围是无限的,引入状态的折扣分布:
ρπ(s)=k=0∑∞γkP(sk=s)
原差异表达式可重新表示为:
J(πθ+Δθ)=J(πθ)+s∈S∑ρπθ+Δθ(s)a∈A∑πθ+Δθ(a∣s)Aπθ(s,a)
引入近似误差,使用当前策略近似:
J(πθ+Δθ)≈J(πθ)+s∈S∑ρπθ(s)a∈A∑πθ+Δθ(a∣s)Aπθ(s,a)
将状态分布求和替换为期望,方便实际计算时使用蒙特卡洛模拟进行采样,同时将动作求和替换为重要性采样。通过重要性采样,可以有效利用当前策略的行动期望,并针对新策略下的概率进行了修正:
J(πθ+Δθ)=J(πθ)+s∈S∑ρπθ+Δθ(s)a∈A∑πθ+Δθ(a∣s)Aπθ(s,a)=J(πθ)+Es∼ρπθ+Δθπθ+Δθ(a∣s)Aπθ(s,a)≈J(πθ)+Es∼ρπθπθ(a∣s)πθ+Δθ(a∣s)Aπθ(s,a)
描述更新策略相对于原策略的预期优势称为替代优势:
J(πθ+Δθ)−J(πθ)≈Es∼ρπθπθ(a∣s)πθ+Δθ(a∣s)Aπθ(s,a)=Lπθ(πθ+Δθ)
之前产生的近似误差可以用两种策略之间最坏情况的KL散度表示:
J(πθ+Δθ)−J(πθ)≥Lπθ(πθ+Δθ)−CDKLmax(πθ∣∣πθ+Δθ)
论文中推导出C的值以及目标函数改进的下限。如果我们改进右侧,可以保证左侧也得到改进。本质上,如果替代优势Lπθ(πθ+Δθ)超过最坏情况下的近似误差CDKLmax(πθ∣∣πθ+Δθ),我们一定会改进目标。
这就是单调改进定理。相应的过程是最小化最大化算法(MM)。即如果我们改进下限,我们也会将目标改进至少相同的量。
算法实现
在实际的算法实现方面,TRPO和自然策略梯度算法没有太大的区别。TRPO的核心是利用单调改进定理,验证更新是否真正改进了我们的策略。
咕咕咕