RL笔记 · 五
PPO的前身:TRPO 直观理解与算法理论
TRPO
TRPO算法的全称是:Trust Region Policy Optimization,翻译一下就是置信域策略优化。
什么是置信域呢?就是旧策略的邻域。
邻域的概念学过数学分析的话应该都很熟悉,就是样本点附近的一小块区域。在二维数轴,可以表示为(x−δ,x+δ),δ是一个很小的实数;在三维空间中,则可以理解为以样本点为中心,半径很小的一个球;多维空间中依此类推。
那么置信域策略优化,顾名思义,就是在旧策略的邻域里优化策略。我们用KL散度来衡量新旧策略的远近,并将其限制在阈值内。关于KL散度的具体信息会在后续介绍。
TRPO最突出的一点在于,它从理论上证明了自己是单调改进的。之前我们学习的很多算法,不管是Q-learning还是QAC,在进行梯度下降/上升时如果更新步长/步子迈得太大的话,是有可能越过极值点导致性能下降的。而TRPO从数学上证明,这套算法的更新改进一定是上升的,这无疑是一块里程碑式的成就。
接下来我们来详细讲解TRPO的推导过程。
推导流程
首先,我们需要知道我们的优化目标是什么,在TRPO中,我们的优化目标是新旧策略的期望回报。
期望回报
我们定义策略 π 的期望回报为:
η(π)=Es0,a0,⋯[t=0∑∞γtr(st)]
这个式子不难理解,内部其实就是discounted return折扣回报,外部对其求一次期望。新旧策略的期望是有一个差值的,Kakade & Langford, 2002的工作证明了
新策略的期望回报=旧策略的期望回报+新策略在旧策略优势函数上的累计期望
用数学公式表达如下:
η(π~)=η(π)+Es0,a0,⋯∼π~[t=0∑∞γtAπ(st,at)]
对于第二项中的Aπ(st,at),这就是我们先前在Actor-Critic算法中引入的优势函数,其含义是在采取策略π时,执行动作at带来的动作价值与状态st下采取所有动作a的加权平均值之差,也可以表达为Q(st,at)−V(s),用于衡量当前动作优于平均表现的程度。
我们知道,期望具有线性性质。若级数收敛,则求期望和求无穷级数可以交换顺序,因此我们可以得到:
Es0,a0,⋯∼π~[t=0∑∞γtAπ(st,at)]=t=0∑∞γt⋅Es0,a0,⋯∼π~[Aπ(st,at)]
在继续推导TRPO前,这里我们先引入一个概念:折扣访问频率(状态占据度量)
ρπ(s)=P(s0=s)+γP(s1=s)+γ2P(s2=s)+⋯
它其实就是把策略π下的每个状态出现频率前乘以一个对应的折扣率γ,表示状态 s 在策略 π 下的长期权重
我们把经过 t 步后处于状态 s 的折扣概率求和,就得到这么一个式子:
ρπ~(s)=t=0∑∞γt⋅Ps0∼d,π~[st=s]
如果我们将 Aπ(st,at) 视为随机变量,则它的期望可以分解为:
Es0,a0,⋯∼π~[Aπ(st,at)]=s∑a∑Aπ(s,a)⋅Ps0,a0,⋯∼π~(st=s,at=a)
对求和部分的第二项,我们把联合概率拆成边缘概率与条件概率的乘积:
P[st=s,at=a]=P[st=s]⋅P[at=a∣st=s]
由于强化学习是马尔可夫链,即动作选择仅依赖当前状态,我们尽量用初状态和策略去表示。先说P[at=a∣st=s],它其实可以直接用策略函数来表示:
P[at=a∣st=s]=π~(a∣s)
我们把P[st=s,at=a]用马尔科夫链的形式表达为Ps0,a0,⋯∼π~(st=s,at=a),再代入上式,就得到了:
Ps0,a0,⋯∼π~(st=s,at=a)=Ps0,a0,⋯∼π~(st=s)⋅π~(a∣s)
把这个式子代回Aπ(st,at)优势函数的期望表达式中,就得到了:
Es0,a0,⋯∼π~[Aπ(st,at)]=s∑a∑Aπ(s,a)⋅Ps0,a0,⋯∼π~(st=s)⋅π~(a∣s)
把折扣因子加上,就得到了完整的新策略在旧策略优势函数上的累计期望:
Es0,a0,⋯∼π~[γtAπ(st,at)]=γt⋅(s∑a∑Aπ(s,a)⋅P(st=s)⋅π~(a∣s))
我们把得到的期望关于t求和,就得到了:
t=0∑∞s∑a∑γt⋅Aπ(s,a)⋅P(st=s)⋅π~(a∣s)
我们交换一下求和顺序,把关于t求和的无穷级数放在里面,得到:
s∑a∑(t=0∑∞γt⋅P(st=s))⋅π~(a∣s)⋅Aπ(s,a)
注意到(∑t=0∞γt⋅P(st=s))就是我们之前定义的折扣访问频率ρπ~(s),将其代入,得到:
s∑ρπ~(s)a∑π~(a∣s)Aπ(s,a)
因此,新策略的期望回报可以表示为:
η(π~)=η(π)+s∑ρπ~(s)a∑π~(a∣s)Aπ(s,a)
但这个式子依旧是不可计算的,因为公式的第二项中包含新策略本身π~,我们只能用旧策略π来计算。因此,我们引入一个代理函数
Lπ(π~)=η(π)+s∑ρπ(s)a∑π~(a∣s)Aπ(s,a)
代理函数
这个代理函数的实质就是把新策略的折扣访问频率ρπ~(s)替换为旧策略的折扣访问频率ρπ(s),只保留了新策略的动作分布 π~(a∣s)。也就是把折扣访问频率当作固定的(用旧策略算),只让动作选择随着新策略变。这么做是因为折扣访问频率/状态分布对策略的变化不敏感,而动作分布直接决定了优势函数怎么被加权。
注意到,当 π~=π 时:
Lπ(π)=η(π)+s∑ρπ(s)a∑π(a∣s)Aπ(s,a)
而
a∑π(a∣s)Aπ(s,a)=a∑π(a∣s)(Qπ(s,a)−Vπ(s))=Vπ(s)−Vπ(s)=0
所以:
Lπ(π)=η(π)
说明在旧策略处,代理函数的值等于真实目标函数的值。
对 π~ 求梯度,在 π~=π 处:
∇π~Lπ(π~)∣∣∣∣∣π~=π=∇π~η(π~)∣∣∣∣∣π~=π
也就是说,在旧策略 π 处,Lπ 和 η 的值相同且一阶梯度相同。那么在旧策略附近优化 Lπ,就近似于优化 η。
KL散度与TV散度
我们在上文提到,要在旧策略附近优化 Lπ,才能近似于优化 η。如何定义这个“附近”呢?这里我们需要引入一个概念:KL散度。
对于两个离散的概率分布p和q,KL散度的定义为:
DKL(P∣∣Q)=Ep[logQ(x)P(x)]=i∑pilogqipi
它用于衡量两个概率分布的远近,表示用q来近似p时的信息损失。
注意这里我们用词是“远近”而不是“距离”,因为“距离”一般需要满足两边之和大于第三边等定义,而对于概率分布来说并没有这种定义,所以用户“远近”表述更加得体。
除此之外,还有TV散度:
DTV(P∣∣Q)=21i∑∣pi−qi∣
根据Pinsker不等式
∥Q−P∥TV≤21DKL(Q∥P)
将该不等式两边分别平方化简,就得到了
DTV(p∥q)2≤DKL(p∥q)
论文证明了代理函数 Lπ 和真实的性能 η 存在一个误差下界:
η(πnew)≥Lπold(πnew)−(1−γ)24ϵγα2
其中 ϵ 为优势函数 Aπ(s,a) 在各个 s 与 a 上的最大值。
ϵ=s,amax∣Aπ(s,a)∣
而 α 为新旧两个策略在所有状态下的最大总变差散度,就是KL散度。我们把 (1−γ)24ϵγ 视为一个常数 C,就得到了:
η(π~)≥Lπ(π~)−C⋅DKLmax(π,π~)
MM算法
我们把刚刚得到的不等式右边作为新策略的性能下界,就有:
M(π)=Lπ(π~)−C⋅DKLmax(π,π~)
那么,只要我们提升 M(π),或者说最大化 M(π),就能保证 η 的性能单调上升。通过不断提高下界的方式去优化目标函数,这种思想在VAE中也有体现。
这种算法叫做Minorization-Maximization,简称MM算法。它的做法就是每次迭代找到目标函数的一个下界函数,并且不断求这个下界函数的最大值。此时目标函数的性能一定是上升的,因为它必须要大于下界函数。
置信域
在下界函数中,我们追求 Lπ(π~) 更大,C⋅DKLmax(π,π~) 可被视为一个惩罚项。
但是,这个下界函数还是有一个问题。我们知道,C=(1−γ)24ϵγ,分母中含有 (1−γ)2 。这就导致 C 通常很大,也就是惩罚项的权重过高。它会大幅度抑制 DKLmax(π,π~) 的更新,让每一轮的参数更新幅度过小。
我们的做法是将惩罚项改为置信域。将原来的问题:
θmaximize[Lθold(θ)−C⋅DKLmax(θold,θ)]
变成:
θmaximizesubject toLθold(θ)DKLρθold(θold,θ)≤δ
同样是让 Lθold(θ) 最大,我们将其变为了一个带约束条件的最大化问题。这里我们让KL散度小于等于一个阈值 δ,同时把最大KL散度 DKLmax,变为了平均KL散度 DKLρθold。
之所以这么做,是因为给最大KL散度做约束的话,要求所有状态的KL散度都小于某个值,这是难以实现的。而平均KL散度实际上约束的是旧策略访问到的状态的平均KL散度,相对于最大KL散度的约束没有那么高。平均KL散度的表示如下:
DKLρ(θ1,θ2):=Es∼ρ[DKL(πθ1(⋅∣s)∥πθ2(⋅∣s))]
它代表 πθ1 与 πθ2 在 ρ 这么一个状态占据度量(即折扣访问频率)上,对它们的KL散度求期望。
重要性采样
这里又引入一个新概念:重要性采样
如果我们想计算 EX∼q[f(X)],但是从q上采样可能并不方便。那么,我们可以做一些手脚:
EX∼q[f(X)]=∫f(x)q(x)dx=∫f(x)⋅p(x)q(x)⋅p(x)dx=EX∼p[f(X)⋅p(x)q(x)]
这样X 就变成了从p上采样,其中 p(x)q(x) 称为重要性权重。将求期望的函数乘以一个重要性权重,我们就能把从 p(x) 采样的样本修正到 q(x) 分布下的期望估计。
而对于我们研究的问题
θmaximizesubject toLθold(θ)DKLρθold(θold,θ)≤δLθold(θ)=Es∼ρθold,a∼πθ[Aπθold(s,a)]
注:η(π) 与这里研究的 θ 无关,所以我们将其从 Lθold(θ) 省略了。
Lθold(θ) 指的是新策略 θ 相比于旧策略 θold 的性能改进期望,这里的 a 需要从新策略 θ 里采样动作,可我们只能从旧策略 θold 里采样动作,因此使用重要性采样:
Ea∼πθ[f(a)]=Ea∼πθold[f(a)⋅πθold(a∣s)πθ(a∣s)]
因此我们得到:
Lθold(θ)=Es∼ρθold,a∼πθold[πθold(a∣s)πθ(a∣s)⋅Aπθold(s,a)]
基于泰勒展开的近似
TRPO将目标函数L 和平均KL散度都在 θ=θold 附近做了近似:
-
目标函数 Lθold(θ) 在 θ=θold 做一阶泰勒展开
Lθold(θ)≈Lθold(θold)+∇θLθold(θold)⋅(θ−θold)
-
约束条件(平均KL散度)在 θ=θold 做二阶泰勒展开
对于平均KL散度泰勒展开的第一项与第二项:
DKL(θold,θold)∇θDKL(θold,θ)∣∣∣θ=θold
很容易看出,这两项其实都是0。因此,平均KL散度的二阶泰勒展开只剩下最后一项:
DKLρθold(θold,θ)≈21ΔθTAΔθ
这里的 Δθ 为参数的更新量,A为平均KL散度在 θold 处的Hessian矩阵
Hessian矩阵,其实就是多元函数二阶偏导数构成的一个对称矩阵。
比如 f(X) 在 X(0) 处的海森矩阵为
⎣⎢⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎥⎤X(0)
因此,A 就是
∂θi∂∂θj∂Es∼ρπ[DKL(π(⋅∣s,θold)∥π(⋅∣s,θ))]∣∣∣∣∣θ=θold
由此,原始问题由
maxθs.t.Lθold(θ)DKL(θold,θ)≤δ
转化为
maxs.t.gT(θ−θold)21(θ−θold)TH(θ−θold)≤δ
g 就是刚才的 ∇θLθold(θold),H 就是刚才的海森矩阵。它把复杂的非线性优化变成了一个二次规划问题,而这个二次规划可以用拉格朗日法求解。
设 Δθ=θ−θold,问题变成:
ΔθmaxgTΔθs.t.21ΔθTHΔθ≤δ
解是:
Δθ=gTH−1g2δ⋅H−1g
即:
θ=θold+gTH−1g2δ⋅H−1g
这就是 TRPO 的更新公式。
