带约束问题
在求解最优化问题时,很多问题的变量满足一定的约束,其数学形式为
min
f
(
x
)
s
t
.
C
(
x
)
=
0
\min f(\mathbf x) \\ st. \mathbf C(\mathbf x)=0
minf(x)st.C(x)=0
显然,对于带约束问题,我们使用前面的方法进行求解时,迭代结束后得到的x很容易不满足约束条件。
惩罚因子
为解决这一问题,一个简单的方法是在原有的损失函数上加一个惩罚项,即令
g
(
x
)
=
f
(
x
)
+
σ
∣
∣
C
(
x
)
∣
∣
g(x) = f(\mathbf x) + \sigma ||C(\mathbf x)||
g(x)=f(x)+σ∣∣C(x)∣∣
其中
σ
\sigma
σ为较大的正数。由此我们就得到了一个新的无约束问题,即
min
g
(
x
)
\min g(\mathbf x)
ming(x)
当这个函数趋于最小值时,后面的惩罚项趋于零,满足上面的约束。使用前面提到的最优化方法,即可对此无约束问题求出极值。
实际使用中,一方面,加入了新的误差项使得整个损失函数变得更为复杂;另一方面,惩罚因子权重的选择往往存在困难:考虑到要使得新的问题尽可能接近原问题,我们希望 σ \sigma σ尽量的大,而 σ \sigma σ较大时则会导致原来求解的损失函数在求解过程中对于Hessian矩阵的影响过小,使得收敛困难。
迭代步修改
与上面的思路相反,当约束具有一定的几何结构时,我们可以正常进行迭代优化,每次迭代完,将x“拉回”约束条件,在保证其cost下降的同时每次迭代完的x满足约束。
举个例子,考虑最优化问题
m
i
n
f
(
x
)
,
x
∈
R
2
s
t
.
A
x
=
b
min f(\mathbf x) , x\in \R^2 \\ st. Ax = b
minf(x),x∈R2st.Ax=b
其对应的无约束问题使用梯度下降法求解如图
加入约束条件,x只能在一条直线上取值,即下图的灰色直线。每次优化完之后,将步长投影到约束的直线上,同样可以逼近最优解。如图所示
由此我们就得到了在不更改损失函数的情况下处理带约束问题的方法。
此例中我们直接将迭代的步长投影到约束的直线上就得到了新的步长。但是对于一般的情况来说,如何将每次迭代的步长收缩至约束条件,以及如何保证每次迭代收缩之后cost能够下降,都是更加复杂的问题。
围绕此类带有几何约束的最优化问题,发展了一整套的流形优化方法,广泛应用于计算几何中,我们将在后文进行介绍。