该书由清华大学李升波教授撰写的,主要面向工业控制领域的研究者和工程师,曾获得2024年度Springer中国新发展奖(China New Development Awards)。全书按照原理剖析、主流算法、典型示例的架构,系统地介绍了用于动态系统决策与控制的强化学习方法。全书共分为11章,内容涵盖了强化学习的基本概念、蒙特卡洛法、时序差分法、动态规划法、函数近似法、策略梯度法、近似动态规划、状态约束的处理和深度强化学习等知识点。书籍及源代码下载网站:书籍及代码链接点这里。
另外,由于本部分篇幅较长,因此分成三篇博客发表。其它博客的地址参考我的系列博客的地址汇总。
书籍链接:Reinforcement Learning for Sequential Decision and Optimal Control
本篇博客对应于原书的第九章,主要讲述了带有约束的强化学习。在实际的场景中,我们往往会遇到很多约束条件,包括对于输入的约束和对于状态的约束。对于输入的约束相对而言比较容易处理,而更困难的是对于状态的约束。主要有三种方法来处理状态约束:(1) 使用罚函数来惩罚打破约束的行为;(2) 使用基于对偶理论的拉格朗日乘子法来确定原问题的下界;(3) 使用feasible descent direction方法来找到一个既满足约束又能使目标函数下降的方向。
可以看出,处理带约束的强化学习问题与static optimization问题是类似的,但是前者因为带有约束而产生了保持每步学得的策略的递归可行性的难题。递归可行性被破坏通常是由于过于严格的状态约束。另一个困难是要在学得策略的同时确定可行域,而这两个问题是紧密耦合在一起的。因此本章中提出了一种新的学习架构——Actor-Critic-Scenery(ACS)架构,其中的Actor和Critic作用不变,而Scenery则负责确定可行域。
那么,对于这种带有hard state constraints的强化学习问题,应该在哪里训练呢?有两种常用的方法:(1) 先offline的在仿真环境中训练,然后再作为一个最优控制器部署在真实环境中;(2) 直接在真实环境中训练并部署。
9.3 罚函数法
这里我们使用Direct的基于模型的ADP来展示如何应用罚函数法。核心思路是在原本的代价函数中加入一个很高的cost来惩罚任何违反约束的状态。这样修改了代价函数后,优化这个目标就会使得学到的策略尽可能多的满足约束,便面违反约束的行为(虽然不一定能完全避免)。罚函数法可以分为两个主流的类别:(1)additive smoothing penalty(加性平滑惩罚);(2)absorbing state penalty(吸收状态惩罚)。下图简要展示了这两种罚函数法在策略更新时的区别:
在additive smoothing penalty中,学到的策略随着越来越多关于违反约束的证据的积累被缓慢拽回到可行区域。而absorbing state penalty则具有辨识可行的动作的one-shot能力。这是因为累积的Return变化的更快。
9.3.1 Additive Smoothing Penalty
通过将惩罚项以加法的形式与原有的cost function组合,就可以得到一个新的包含了约束信息的cost function。罚函数法中的外点罚函数和内点罚函数法都可以使用,但是外点罚函数法更常用,因为它放松了约束,更有利于找到可行解而不是陷入不可行(Infeasibility)的问题。下面以infinite-horizon的pointwise constraints为例来展示如何使用罚函数法来处理带约束的OCP问题。
首先,我们定义一个新的cost function:
J
m
o
d
=
∑
i
=
0
∞
l
m
o
d
(
x
t
+
i
,
u
t
+
i
)
,
with
l
m
o
d
(
x
,
u
)
=
l
(
x
,
u
)
+
ρ
⋅
ϕ
(
x
)
,
J_{\mathrm{mod}}=\sum_{i=0}^\infty l_{\mathrm{mod}}(x_{t+i},u_{t+i}),\\\text{with}\\l_{\mathrm{mod}}(x,u)=l(x,u)+\rho\cdot\phi(x),
Jmod=i=0∑∞lmod(xt+i,ut+i),withlmod(x,u)=l(x,u)+ρ⋅ϕ(x), 其中
ρ
≥
0
\rho\ge 0
ρ≥0是一个惩罚系数,
ϕ
(
x
)
\phi(x)
ϕ(x)是一个惩罚函数。这里的惩罚函数的种类有很多,比如最常见的Rectified Linear Penalty(RLP):`
ϕ
(
x
)
=
{
0
h
(
x
)
≤
0
h
(
x
)
otherwise
\phi(x)=\begin{cases}0&h(x)\leq0\\h(x)&\text{otherwise}&\end{cases}
ϕ(x)={0h(x)h(x)≤0otherwise 其他的惩罚函数还包括one-shot constant penalty、exponential risk penalty和rectified quadratic penalty。
Additive Smoothing Penalty容易学到一个局部最优策略。但是它也有自己的好处,即通过加入违反约束惩罚项学到的值函数的可以作为指示一个状态是否违反约束。如果penalised value function在某个状态下的值很大,那么这个状态就很可能是违反约束的。
9.3.2 Absorbing State Penalty
不同于Additive Smoothing Penalty在每个状态的cost function中都加入了惩罚项,Absorbing State Penalty则是将违反约束的状态直接赋值一个很大的常数作为惩罚而其他状态的代价不变:
l
M
o
d
(
x
,
u
)
=
{
l
absorb
h
(
x
)
>
0
l
(
x
,
u
)
h
(
x
)
≤
0
l_{\mathrm{Mod}}(x,u)=\begin{cases}l_\text{absorb}&h(x)>0\\l(x,u)&h(x)\leq0&\end{cases}
lMod(x,u)={labsorbl(x,u)h(x)>0h(x)≤0 这里的
l
absorb
l_{\text{absorb}}
labsorb是一个很大的常数。正是因为这个很大的常数,探索通常会结束的更早,因此在相同时间内可以收集到更多的experience,训练效率更好。
Additive Smoothing Penalty和Absorbing State Penalty两种方法兑换币,两者都是追求可行的策略更新。区别在于前者需要仔细平衡原有的cost function和惩罚项,否则算法很容易失败或停留在局部最优;而后者更像是一个one-shot策略,它的早停(违反约束时给一个很大的惩罚)使得它对于可能的违反约束的行为施加更强的惩罚,而且只要 l absorb l_{\text{absorb}} labsorb足够大,就更有可能学到全局最优解。
9.4 拉格朗日乘子法
这里我们以带约束的PIM问题为例,来展示怎么使用拉格朗日乘子法。首先在理论上,我们希望每次PIM时构建的优化问题中的约束为 x ′ ∈ X E d l s x^{\prime}\in X_{\mathrm{Edls}} x′∈XEdls。但是在实际中, X E d l s X_{\mathrm{Edls}} XEdls通常是未知的,因此我们需要使用使用已知的约束 h ( x ) ≤ 0 h(x)\leq0 h(x)≤0来代替(即 x ′ ∈ X C s t r x^{\prime}\in X_{\mathrm{Cstr}} x′∈XCstr)。正如我们之前说过的,这是一种放松的约束,但是也可通过不断的迭代试错最终找到一个可行的策略。关于更详细的合理性分析详见本章后续讲的Actor-Critic-Scenery架构。
拉格朗日对偶是拉格朗日乘子法的核心。它用来将带约束的PIM问题转化为一个拉格朗日对偶问题,这样当actor loss被最小化的时候至少可以找到原问题的一个下界。特别的,如果actor loss和状态约束都是凸的且满足Slater条件,那么拉格朗日对偶问题的解就是原问题的解(这就是满足了强对偶条件)。特别的,强对偶条件也解释了互补松弛条件的来源。这个条件也提供了一个检验可行性的方法。
9.4.1 Dual Ascent方法
为什么要把原问题(primal problem)转化为对偶问题(dual problem)呢?这是因为对偶问题比原问题好求解。即使原问题是一个非凸问题,对偶问题也是一个凹的最大化问题。
在duel ascent方法中,对偶问题可以通过交替求解最大化和最小化问题来求解。当强对偶条件满足时,就可以收敛到一个鞍点。首先,我们需要定义一个拉格朗日函数:
L
(
θ
,
λ
)
=
d
e
f
l
(
x
,
u
)
+
V
(
x
′
)
+
λ
h
(
x
′
)
,
L(\theta,\lambda)\overset{\mathrm{def}}{\operatorname*{=}}l(x,u)+V(x^{\prime})+\lambda h(x^{\prime}),
L(θ,λ)=defl(x,u)+V(x′)+λh(x′), 其中
θ
\theta
θ是actor的参数,
λ
\lambda
λ是拉格朗日乘子。然后,我们可以定义一个对偶函数:
g
(
λ
)
=
d
e
f
min
θ
L
(
θ
,
λ
)
.
g(\lambda)\overset{\mathrm{def}}{\operatorname*{=}}\min_{\theta}L(\theta,\lambda).
g(λ)=defθminL(θ,λ). 对偶函数的最大化问题就是对偶问题:
max
λ
g
(
λ
)
.
\max_{\lambda}g(\lambda).
λmaxg(λ). 也就是说,原问题的对偶问题是一个max-min问题:
max
λ
≥
0
min
θ
{
L
(
θ
,
λ
)
}
.
\max_{\lambda\geq0}\min_\theta\{L(\theta,\lambda)\}.
λ≥0maxθmin{L(θ,λ)}.接下来我们就来看看怎么求解这个对偶问题。根据其max-min问题的本质,可以将其分为两步求解:
θ
←
arg
min
θ
L
(
θ
,
λ
)
,
λ
←
λ
+
α
λ
⋅
∇
λ
L
(
θ
,
λ
)
.
\theta\leftarrow\arg\min_\theta L(\theta,\lambda),\\\lambda\leftarrow\lambda+\alpha_\lambda\cdot\nabla_\lambda L(\theta,\lambda).
θ←argθminL(θ,λ),λ←λ+αλ⋅∇λL(θ,λ). 这里的
λ
\lambda
λ必须非负。但是,这里第一步还是需要求解一个最小化问题,这不符合我们使用优化方法求解的本意。因此,我们要把这个最小化问题也转化为一个可以使用梯度下降求解的优化问题,转化后的两步更新如下:
θ
←
θ
−
α
θ
⋅
∇
θ
L
(
θ
,
λ
)
,
λ
←
λ
+
α
λ
⋅
∇
λ
L
(
θ
,
λ
)
,
\theta\leftarrow\theta-\alpha_\theta\cdot\nabla_\theta L(\theta,\lambda),\\\lambda\leftarrow\lambda+\alpha_\lambda\cdot\nabla_\lambda L(\theta,\lambda),
θ←θ−αθ⋅∇θL(θ,λ),λ←λ+αλ⋅∇λL(θ,λ), 其中
{
α
θ
>
0
,
α
λ
>
0
α
θ
≫
α
λ
∇
θ
L
(
θ
,
λ
)
=
∂
u
T
∂
θ
∂
L
(
θ
,
λ
)
∂
u
,
∇
λ
L
(
θ
,
λ
)
=
h
(
x
′
)
\begin{cases}\alpha_\theta>0,\alpha_\lambda>0\\\alpha_\theta\gg\alpha_\lambda\\ \nabla_\theta L(\theta,\lambda)=\frac{\partial u^\mathrm{T}}{\partial\theta}\frac{\partial L(\theta,\lambda)}{\partial u},\quad\nabla_\lambda L(\theta,\lambda)=h(x^{\prime}) \end{cases}
⎩
⎨
⎧αθ>0,αλ>0αθ≫αλ∇θL(θ,λ)=∂θ∂uT∂u∂L(θ,λ),∇λL(θ,λ)=h(x′) 这里需要解释几点:
- 为何 ∇ θ L ( θ , λ ) \nabla_\theta L(\theta,\lambda) ∇θL(θ,λ)写成这样?因为 θ \theta θ是actor的参数,而 u u u是actor(策略)的输出,因此在关于Actor的参数 θ \theta θ的梯度中,我们需要使用链式法则来求解。
- 为何 α θ ≫ α λ \alpha_\theta\gg\alpha_\lambda αθ≫αλ?这是为了保证第一步通过梯度下降求得的结果接近于argmin运算符求得的最小值。
来总结一下,在Dual Ascent方法中,主循环包含了两个步骤:不带约束的PEV(原因已经在之前说过)和带约束的PIM。而每个PIM中我们也设置了内外双层,首先先通过梯度下降求解一个最小化问题,然后再通过梯度上升求解一个最大化问题。尽管这样做并没有理论保证,但是在实际中使用的效果却总是很好。
更深层的,拉格朗日乘子法可以被视为一种特殊的罚函数法,因此具有一定的自我调节能力来避免违反约束。当出现违反约束时,拉格朗日乘子会自动调节来增加对于拉格朗日函数惩罚的力度。自动调节会抑制约束函数 h h h的力度,使其保持在不违反约束(0以下)的范围内。参考文献[9-34]更进一步提出了一种结合了固定的罚函数因子和拉格朗日乘子的方法,这种方法在实际中更快和更稳定的带约束的强化学习算法。
也可以通过检验一个状态对应的拉格朗日乘子法的值是否大于一个阈值来大概判断这个状态是否违反约束(不可行)。
9.4.2 拉格朗日乘子法求解带约束的RL/ADP问题的几何解释
此处我们将用图解法来简单说明一下再拉格朗日乘子法求解带约束的PIM过程中可行性是怎样变化的。在带约束的PIM中,拉格朗日乘子不是一个固定的标量,而是一个定义在整个状态空间的函数。我们选择两个特殊的状态点来展示dual ascent方法的更新过程。第一个状态点来自EFR(Endless Feasible Region),但是它的初始策略是一个违反约束的策略(一个bad guess);第二个状态点来自不可行的区域,这样自然就没有任何可行的策略存在。这两个状态点对应的拉格朗日乘子的更新过程呈现出非常不同的行为。下面将分别说明。
首先,我们来定义一个新的空间
G
\mathcal{G}
G:
G
=
{
(
h
(
x
)
,
l
(
x
,
u
)
+
V
(
x
′
)
)
∣
x
∈
X
}
,
\mathcal{G}=\{\left(h(x),l(x,u)+V(x^{\prime})\right)\mid x\in\mathcal{X}\},
G={(h(x),l(x,u)+V(x′))∣x∈X}, 这里
h
h
h是约束(constraint function),在下面的图示中我们把它作为横轴;
l
+
V
l+V
l+V是PIM的优化目标(actor criterion),在下面的图示中我们把它作为纵轴。这样,
G
\mathcal{G}
G就是一个二维的平面(我的理解是对于每一个初始的状态都有这样一个平面)。我们先来看第一种情况,即状态点位于EFR中。那么从这个状态点出发的策略可以形成一个策略集合,在下图中表现为一个月牙形的区域:
并注意到即使是从一个位于EFR的状态点出发的策略,也可能是违反约束的。因此这个策略集分为两个部分,左边那部分绿色的部分(
h
≤
0
h\le 0
h≤0)是可行的策略的集合,右边那部分粉色的部分(
h
>
0
h>0
h>0)是违反约束的策略的集合。在上图中,我们初始的猜测的策略是一个违反约束的策略(位于右边的粉色区域)回想刚才讲过的dual ascent算法的更新原理,可以把拉格朗日对偶问题写成下面的形式:
max
λ
≥
0
min
(
h
,
l
+
V
)
∈
G
{
(
l
+
V
)
+
λ
h
}
.
\max_{\lambda\geq0}\min_{(h,l+V)\in\mathcal{G}}\{(l+V)+\lambda h\}.
λ≥0max(h,l+V)∈Gmin{(l+V)+λh}. 这其实代表了PIM过程中双层循环:内层的最小化循环是在拉格朗日乘子
λ
\lambda
λ固定的情况下,找到一个
θ
\theta
θ可以最小化拉格朗日函数
(
l
+
V
)
+
λ
h
(l+V)+\lambda h
(l+V)+λh;那么根据上图的几何意义,易知图中每条虚线上的点拉格朗日函数值相同(
(
l
+
V
)
+
λ
h
=
c
o
n
s
t
(l+V)+\lambda h=\mathrm{const}
(l+V)+λh=const)同时虚线越靠下拉格朗日函数的值越小,而
λ
\lambda
λ可以理解为图中虚线的斜率(实际不是斜率,差一个负号,不过理解意思就行)。因此,内循环的更新可以理解为不断平移图中虚线(保持斜率不变),直到找到一个与左侧可行域相切的且最靠下的虚线。再来看外层循环,它是要找到最大的拉格朗日函数的值。在图上就表示为在保持与左侧可行的策略集合相切的情况下不断改变斜率,使得拉格朗日函数的值(体现为与纵轴的截距)最大,并且不能进入右侧的违反约束的策略集合(即不能进入右侧的粉色区域)。这样,最终找到的直线就是那条绿色实线,它与纵轴的交点就是实际上通过dual ascent方法找到的最优的actor criterion的值,而实际上的最优值是图上的红色方块,绿色圆点与红色方块的距离就是所谓的duality gap。
下面来看看当初始化的状态点位于不可行的区域时的情况。
此时因为没有可行策略集合的约束,不断改变斜率会导致拉格朗日函数的值不断增大,直到无穷。因此,这再次印证了拉格朗日乘子法是否趋于无穷可以用来检验一个对于某个特定的状态是否能为其找到一个可行的策略。
9.4.3 增强的拉格朗日乘子法(Augmented Lagrangian Multiplier)
与普通的拉格朗日乘子法相比,增强的拉格朗日乘子法更加鲁棒,收敛速度更快。这种方法可以提视为罚函数法和拉格朗日乘子法的结合,其基本思路是在拉格朗日函数中加入一个二次惩罚项。为什么·要做这种改进呢?因为虽然在理论上dual ascent方法可以收敛到带约束的最优值,但是对于非凸的问题收敛性常常不令人满意。而正如在罚函数法那里说的,罚函数法能改变带约束的策略梯度,因此能提升收敛的质量。增强的拉格朗日函数定义如下:
L
A
u
g
(
θ
,
λ
,
ζ
)
=
l
(
x
,
u
)
+
V
(
x
′
)
+
λ
h
(
x
′
)
+
ρ
2
∥
h
(
x
′
)
+
ζ
∥
2
2
,
L_{\mathrm{Aug}}(\theta,\lambda,\zeta)=l(x,u)+V(x')+\lambda h(x')+\frac\rho2\|h(x')+\zeta\|_2^2,
LAug(θ,λ,ζ)=l(x,u)+V(x′)+λh(x′)+2ρ∥h(x′)+ζ∥22, 其中
ρ
>
0
\rho>0
ρ>0是一个惩罚系数,
ζ
≥
0
\zeta\ge 0
ζ≥0是一个松弛变量,用于将不等式约束转化为等式约束:
h
(
x
′
)
+
ζ
=
0
,
h(x^{\prime})+\zeta=0,
h(x′)+ζ=0,
之后这个等式约束再转化为二次的形式。只要惩罚系数
ρ
\rho
ρ足够大,这样的二次罚函数项的引入增强了拉格朗日函数的凸性,有助于非凸问题的快速收敛。考虑到新引入的松弛变量
ζ
\zeta
ζ,增强的拉格朗日乘子法有三个更新步骤:、
θ
n
e
w
←
arg
min
θ
L
A
u
g
(
θ
,
λ
,
ζ
)
,
ζ
n
e
w
←
arg
min
ζ
ln
L
A
u
g
(
θ
,
λ
,
ζ
)
,
λ
n
e
w
←
λ
+
α
λ
⋅
∇
λ
L
A
u
g
(
θ
,
λ
,
ζ
)
.
\theta^{\mathrm{new}}\leftarrow\arg\min_{\theta}L_{\mathrm{Aug}}(\theta,\lambda,\zeta),\\\zeta^{\mathrm{new}}\leftarrow\arg\min_{\zeta}\ln L_{\mathrm{Aug}}(\theta,\lambda,\zeta),\\\lambda^{\mathrm{new}}\leftarrow\lambda+\alpha_{\lambda}\cdot\nabla_{\lambda}L_{\mathrm{Aug}}(\theta,\lambda,\zeta).
θnew←argθminLAug(θ,λ,ζ),ζnew←argζminlnLAug(θ,λ,ζ),λnew←λ+αλ⋅∇λLAug(θ,λ,ζ).
增强的拉格朗日乘子法的几何解释与普通的拉格朗日乘子法类似,即拉格朗日乘子 λ \lambda λ可以被视为一种为了避免违反约束的动态调整的惩罚力度。二者的区别在于增强的拉格朗日乘子法引入了一个二次惩罚项,由此带来的更强的收敛性有助于稳定训练。
9.5 Feasible Descent Direction(FDD)方法
罚函数法和拉格朗日法都关注于怎么修改原始的criterion。前者修改了overall objective function,后者修改了actor的loss function。但是在大规模优化问题中,由于不合适的惩罚项选择或者不稳定的dual ascent更新,收敛速度可能相对较慢。而作为另一种流行的求解带约束优化问题的方法,FDD方法旨在寻找一个既可行又下降的更新方向。FDD采用了多阶段的优化,通过把原来的优化问题分解为一系列简单的凸优化问题来求解,而策略则是沿着从这一些列简单的优化问题得来的既可行又下降的方向更新。
在静态优化领域,FDD的研究可以追溯到Zoutendiik。他率先将原问题线性化并通过box constraint来限制更新的幅度。之后,通过引入active constraint和增强的目标函数,FDD方法的表现得到了增强。具有线性化目标函数的FDD方法被称为Sequential Linear Programming(SLP)方法。在此基础上出现了一些使用二次近似的方法来改进的研究。在上世纪九十年代,二次目标函数预与约束线性化技术的结合催生了著名的Sequential Quadratic Programming(SQP)方法。SQP方法时至今日仍然是求解带约束优化问题的最有效的方法之一。
但是,不同于静态优化问题一次只需要求解一个固定点,RL/ADP问题需要在整个状态空间寻找一个最优策略,因此落实FDD、方法有一定难度,下面分别介绍。
9.5.1 可行方向和下降方向
这里我们也是通过带约束的PIM来研究怎么使用FDD来求解。并注意这里下一个状态
x
′
∈
X
E
d
l
s
x^{\prime}\in X_{\mathrm{Edls}}
x′∈XEdls仍然被替换为了
h
(
x
′
)
≤
0
h(x^{\prime})\leq0
h(x′)≤0来避免计算EFR。那么在FDD下,更新方向可以写成下面的形式:
θ
←
θ
+
Δ
θ
,
\theta\leftarrow\theta+\Delta\theta,
θ←θ+Δθ, 其中
Δ
θ
\Delta\theta
Δθ是一个可行的下降方向,必须满足下面两个不等式条件:、
- 下降性条件: J A c t o r ( θ + Δ θ ) ≤ J A c t o r ( θ ) J_{\mathrm{Actor}}(\theta+\Delta\theta)\leq J_{\mathrm{Actor}}(\theta) JActor(θ+Δθ)≤JActor(θ) 这个条件表示更新后的参数在标准 J A c t o r J_{\mathrm{Actor}} JActor下降。
- 可行性条件:
h
(
x
′
(
θ
+
Δ
θ
)
)
≤
0
h(x^{\prime}(\theta+\Delta\theta))\leq0
h(x′(θ+Δθ))≤0 这里
x
′
=
f
(
x
,
u
)
x^{\prime}=f(x,u)
x′=f(x,u),
h
(
x
′
)
h(x^{\prime})
h(x′)是单步约束,而
h
(
x
′
(
θ
+
Δ
θ
)
)
h(x^{\prime}(\theta+\Delta\theta))
h(x′(θ+Δθ))是强调
x
′
x^{\prime}
x′是通过更新后的策略选取
u
u
u得到的。
上图中蓝色的区域表示可行的策略的集合,而潜橘黄色的半圆表示能够满足下降性条件的方向,绿色的半圆表示能够满足可行性条件的方向,而两个半圆的交集就是既可行又下降的方向。
但是在绝大多数情况下,解析的求解可行下降方向是不可能的,需要把大的优化问题转化为一系列的线性规划(LP)或者二次规划(QP)问题来更有效的计算。与静态优化问题不同,在每次带约束的PIM中序列化求解LP或者QP问题不是必需的。这是因为在PEV和PIM之间已经存在了迭代循环,所以序列化求解LP或者QP问题可以融入到这个主循环中。换句话说,与静态优化的SLP或SQP问题的不同,在RL/ADP问题中,每个带约束的PIM都只需要转化为一次LP或者QP问题。当然,带约束的PIM也可以多次转化并求解LP或者QP问题,这样可以获得更准确的可行下降方向。
还有一个问题,就是怎么检验可行性正成为以FDD为基础的优化问题中。一个启发式的想法是检验可行性条件 h ( x ′ ( θ + Δ θ ) ) ≤ 0 h(x^{\prime}(\theta+\Delta\theta))\leq0 h(x′(θ+Δθ))≤0是否有解。但是,当我们把这个问题转化为LP或者QP问题时,对这个条件的线性化会使得它失去了可行性的能力。更多关于带约束PIM可行性的evidence需要在给定的状态点反复求解LP或者QP问题来收集。
9.5.1.1 转化为LP问题
通过对下降性条件和可行性条件进行线性化,我们可以把带约束的PIM问题转化为一个LP问题:
min
Δ
θ
g
T
Δ
θ
,
s
u
b
j
e
c
t
t
o
h
(
x
′
)
∣
θ
+
∇
θ
h
(
x
′
)
T
Δ
θ
≤
0
,
\min_{\Delta\theta}g^\mathrm{T}\Delta\theta, \\ \mathrm{subject~to} \\ h(x^{\prime})|_\theta+\nabla_\theta h(x^{\prime})^\mathrm{T}\Delta\theta\leq0,
ΔθmingTΔθ,subject toh(x′)∣θ+∇θh(x′)TΔθ≤0, 其中
g
=
∂
J
A
c
t
o
r
∂
θ
=
∂
{
l
(
x
,
u
)
+
V
(
x
′
)
}
∂
θ
.
g=\frac{\partial J_{\mathrm{Actor}}}{\partial\theta}=\frac{\partial\{l(x,u)+V(x^{\prime})\}}{\partial\theta}.
g=∂θ∂JActor=∂θ∂{l(x,u)+V(x′)}.是actor loss的一阶泰勒展开。下面来解释以下是怎么转化的。首先优化目标是通过对于
J
A
c
t
o
r
(
θ
+
Δ
θ
)
≤
J
A
c
t
o
r
(
θ
)
J_{\mathrm{Actor}}(\theta+\Delta\theta)\leq J_{\mathrm{Actor}}(\theta)
JActor(θ+Δθ)≤JActor(θ)进行展开得到的。首先将所有项均移项到左边:
J
A
c
t
o
r
(
θ
+
Δ
θ
)
−
J
A
c
t
o
r
(
θ
)
≤
0
J_{\mathrm{Actor}}(\theta+\Delta\theta)- J_{\mathrm{Actor}}(\theta)\leq 0
JActor(θ+Δθ)−JActor(θ)≤0 再对左式进行泰勒展开,展开到一次项,可得:
J
A
c
t
o
r
(
θ
+
Δ
θ
)
−
J
A
c
t
o
r
(
θ
)
≈
(
∂
J
A
c
t
o
r
∂
θ
)
T
Δ
θ
≤
0
J_{\mathrm{Actor}}(\theta+\Delta\theta)- J_{\mathrm{Actor}}(\theta)\approx(\frac{\partial J_{\mathrm{Actor}}}{\partial\theta})^\mathrm{T}\Delta\theta\leq 0
JActor(θ+Δθ)−JActor(θ)≈(∂θ∂JActor)TΔθ≤0
(
∂
J
A
c
t
o
r
∂
θ
)
T
Δ
θ
≤
0
(\frac{\partial J_{\mathrm{Actor}}}{\partial\theta})^\mathrm{T}\Delta\theta\leq 0
(∂θ∂JActor)TΔθ≤0再接着转化为
min
Δ
θ
g
T
Δ
θ
\min_{\Delta\theta}g^\mathrm{T}\Delta\theta
minΔθgTΔθ即可。而对于可行性条件,也照样对于参数
θ
\theta
θ进行一阶展开即可。
注意,上面只能确定更新的方向,而不能确定步长。确定一个合适的补偿有助于避免策略的快速变化和训练的不稳定。最naive的选择是一个固定步长。更高级的方法可以自动调节步长,比如信赖域或线搜索方法。
- 信赖域方法:实际上是一种用来限制探索范围的不等式约束。最简单的形式如下:
Δ θ T H Δ θ ≤ δ , \Delta\theta^{\mathrm{T}}H\Delta\theta\leq\delta, ΔθTHΔθ≤δ, 其中 H ≥ 0 H\ge 0 H≥0是一个权重矩阵。Constrained policy optimization(CPO)实际上就是一种model-free的算法,它使用线性化的actor loss和信赖域形式的约束。 - 线搜索方法:线搜索方法是在确定了更新方向滞后在这个方向上再求解一个优化问题来确定能够使得原始的actor loss的最优步长。其变式还包括:Armijo rule, limited line search and diminishing length。
9.5.1.2 转化为QP问题
与一阶展开相比,二阶展开包含更多的梯度信息,能够加速带约束的RL/ADP问题的收敛。把带约束的PIM问题转化为一个QP问题的形式如下:
min
Δ
θ
1
2
Δ
θ
T
F
Δ
θ
+
g
T
Δ
θ
,
subject to
h
(
x
′
)
∣
θ
+
∇
θ
h
(
x
′
)
T
Δ
θ
≤
0
,
\min_{\Delta\theta}\frac12\Delta\theta^\mathrm{T}F\Delta\theta+g^\mathrm{T}\Delta\theta,\\\text{subject to}\\h(x^{\prime})|_\theta+\nabla_\theta h(x^{\prime})^\mathrm{T}\Delta\theta\leq0,
Δθmin21ΔθTFΔθ+gTΔθ,subject toh(x′)∣θ+∇θh(x′)TΔθ≤0, 注意,这里只是对于下降性条件进行了二阶展开,可行性条件还是一阶展开。式中的
g
g
g同LP那里的,
F
F
F如下:
F
=
∂
2
J
Actor
∂
θ
2
=
∂
2
{
l
(
x
,
u
)
+
V
(
x
′
)
}
∂
θ
2
F=\frac{\partial^2J_\text{Actor}}{\partial\theta^2}=\frac{\partial^2\{l(x,u)+V(x^{\prime})\}}{\partial\theta^2}
F=∂θ2∂2JActor=∂θ2∂2{l(x,u)+V(x′)}
与LP那里不同,QP问题的解既可以确定更新方向又可确定更新步长。但是,直接使用QP求解的一个缺点是当步长太大时二阶近似时会有很大的误差。为此,可以使用信赖域方法来避免过大的策略更新。
另外,在基于QP的FDD中对于可行性的判断能力也失去了。这是因为这里也与LP那里进行了相同的线性化。
9.5.2 带约束的LP优化
本小节就来讲一讲具体怎样转化为LP问题。首先需要说明的是,FDD条件在每个带约束的PIM只被线性化一次,线性化与RL/ADP的主循环同步。这样做的好处是总的训练效率比多次转换的效率更高。在深度学习中,一阶优化方法更适合训练带约束的且使用神经网络的RL/ADP问题,比如著名的Adam算法。
为了更好地理解怎么使用LP来求解带约束的RL/ADP问题,下面介绍两种实用的带约束的LP算法:
- Lagrange-based LP algorithm
- Gradient projection algorithm
9.5.2.1 Lagrange-based LP算法
这种方法的特点是使用拉格朗日对偶来求解LP问题和用于限制更新步长的信赖域。使用拉格朗日对偶的方法有一些好处,如对于初始的坏的猜测有较低的敏感性、以及在局部区域内较快的收敛性。而信赖域方法的引入则可以限制更新的幅度来避免可能的训练不稳定。通常使用KL散度来建模信赖域:
D
K
L
(
π
(
θ
)
,
π
(
θ
n
e
w
)
)
≈
1
2
Δ
θ
T
H
Δ
θ
≤
δ
,
D_{\mathrm{KL}}(\pi(\theta),\pi(\theta^{\mathrm{new}}))\approx\frac12\Delta\theta^\mathrm{T}H\Delta\theta\leq\delta,
DKL(π(θ),π(θnew))≈21ΔθTHΔθ≤δ, 这里的
δ
\delta
δ是一个限制步长的超参数,
H
H
H是一个来自于KL散度的Hessian矩阵。
转化为LP问题并引入了信赖域约束的拉格朗日函数如下:
max
μ
,
λ
≥
0
min
Δ
θ
g
T
Δ
θ
+
λ
(
h
(
x
′
)
∣
θ
+
∇
θ
h
(
x
′
)
T
Δ
θ
)
+
μ
(
1
2
Δ
θ
T
H
Δ
θ
−
δ
)
,
\max_{\mu,\lambda\geq0}\min_{\Delta\theta}g^\mathrm{T}\Delta\theta+\lambda(h(x^{\prime})|_\theta+\nabla_\theta h(x^{\prime})^\mathrm{T}\Delta\theta)+\mu\left(\frac12\Delta\theta^\mathrm{T}H\Delta\theta-\delta\right),
μ,λ≥0maxΔθmingTΔθ+λ(h(x′)∣θ+∇θh(x′)TΔθ)+μ(21ΔθTHΔθ−δ), 这里的
λ
≥
0
\lambda\ge 0
λ≥0是线性化之后的约束的拉格朗日乘子,
μ
≥
0
\mu\ge 0
μ≥0是信赖域的拉格朗日乘子。
这个方法的一个好处是可以解析的给出其最优解:
Δ
θ
∗
=
−
H
−
1
(
g
+
λ
∗
∇
θ
h
)
μ
∗
,
\Delta\theta^*=-\frac{H^{-1}(g+\lambda^*\nabla_\theta h)}{\mu^*},
Δθ∗=−μ∗H−1(g+λ∗∇θh), 其中
λ
∗
\lambda^*
λ∗和
μ
∗
\mu^*
μ∗是拉格朗日乘子的最优解。正如之前说的,传统的基于拉格朗日乘子法的优化需要引入一个计算上很低效的内循环(固定
λ
\lambda
λ更新
θ
\theta
θ),而这里因为可以解析的给出解而避免这个问题。
9.5.2.2 Gradient projection算法
梯度投影算法是一个用于求解高维LP的有效方法。
正如上图中左图所示,梯度投影算法利用一个正定矩阵
P
T
P_T
PT来把一个未加约束的梯度投影到一个带约束的可行方向上来满足可行性条件。梯度投影在每次常规的策略梯度计算后单独计算,因此也可以被很容易的集成到其它的RL/ADP算法中。
一种经典的梯度投影算法是Rosen梯度投影。这个方法把梯度投影到约束的切平面(切线)上。梯度矩阵
P
T
P_T
PT可以通过下面的公式计算:
P
T
=
I
−
M
T
(
M
M
T
)
−
1
M
,
M
=
∇
θ
h
T
,
P_T=I-M^\mathrm{T}(MM^\mathrm{T})^{-1}M,\quad M=\nabla_\theta h^\mathrm{T},
PT=I−MT(MMT)−1M,M=∇θhT, 这里的
M
M
M是约束的梯度向量。这里投影矩阵
P
T
P_T
PT还有一个有趣的性质,即尽管
M
M
M的维度与约束数量有关,但是
P
T
P_T
PT的维度确是固定的。
通常来说,梯度投影算法适合求解具有稀疏线性约束的大规模问题。还有一个问题,就是为什么Rosen梯度投影算法能够从一个初始不可行的策略开始。正如上图中右图所示, P T P_T PT可以给出一个向可行区域移动的投影后的梯度。矩阵 I − P T I-P_T I−PT可以把任何梯度向量投影到约束的法线的方向上,这也是最快进入可行区域的方向。因此这种方法可以从一个不可行的策略开始,通过梯度投影逐渐进入可行区域。
9.5.3 带约束的QP优化
对于低维的任务,有两种带约束的QP优化方法:
- Active set QP算法
- quasi-Newton算法
当延伸到高维的任务时,Hessian矩阵的高昂的计算负担是一个主要的挑战。一些最近的研究使用近似的Hessian矩阵来减少计算负担。但是在大规模的策略搜索中,精确的Hessian矩阵估计被严重的限制了,尤其是当失去Hessian矩阵的稀疏性时。稀疏性的缺失使得矩阵求逆操作在基于神经网络的策略和值函数网络中计算效率很低甚至不可行。因此,带约束的QP优化在当今的大规模RL/ADP问题中并不是很流行。
9.5.3.1 Active set QP算法
如上图所示,Active set QP算法在每轮PIM迭代的时候主要分为两步:
-
求解一个等式约束的QP问题:本步既给出了一个可行的下降方向,又给出了拉格朗日乘子。
-
通过不断添加和移除约束来refine工作集(working set):在本步,根据如下的经验规则来决定是否添加或移除约束:
- 如果上一步给出的梯度非零,那么就把离梯度方向最近的约束添加到工作集中。
- 如果存在负的拉格朗日乘子,那么就把对应的约束从工作集中移除。
当第一步求出的梯度为零且且所有的拉格朗日乘子都是非负的时候,就可以停止迭代,找到了最优的策略。
很容易看出active set QP算法只能计算等式约束的QP问题,因为所有工作集中的不等式约束都必须被划分为active或者inactive的等式约束。这一性质也使得这种方法对于具有稀疏约束的低维约束计算很快。
9.5.3.2 quasi-Newton算法
因为计算Hessian矩阵的精确解计算量很大,因此quais-Newton算法通常使用近似的Hessian矩阵来代替以加速计算效率。而且这种方法对应的二阶优化器具有更鲁棒的学习行为,因此可以用来稳定强化学习算法。
在带约束的PIM中,需要计算的Hessian矩阵
∇
θ
2
J
A
c
t
o
r
\nabla_\theta^2J_{\mathrm{Actor}}
∇θ2JActor。但是我们用下式来近似:
F
^
Δ
θ
=
∇
J
A
c
t
o
r
∣
θ
+
Δ
θ
−
∇
J
A
c
t
o
r
∣
θ
\widehat{F}\Delta\theta=\nabla J_{\mathrm{Actor}}|_{\theta+\Delta\theta}-\nabla J_{\mathrm{Actor}}|_\theta
F
Δθ=∇JActor∣θ+Δθ−∇JActor∣θ 这里的
F
^
\widehat{F}
F
是近似的Hessian矩阵。
在一些递归的估计算法中,相邻两个Hessian矩阵之间的误差被强制保持在一个范围内来保持低秩特性。其它regularity手段也被用来保持Hessian矩阵的其它性质,比如symmetric rank-one(SR1)规则、Broyden-Fletcher-Goldfarb-Shanno(BFGS)规则。