在机器学习中,很多问题最终都可以总结为优化问题,比如定义一个描述学习好坏的损失函数,那么机器学习的目标就是在什么情况下,这个损失函数最小。根据有无条件限制,可以分为无约束优化和有约束优化。
无约束优化
无约束优化是机器学习中最常见、最普通的优化问题,形如
x
∗
=
min
x
f
(
x
)
,
x
∈
R
n
{\boldsymbol x}^* = \min_x f({\boldsymbol x}),{\boldsymbol x} \in \R^n
x∗=xminf(x),x∈Rn
对于求极值问题,一般有两种思路:一种是根据极值的第一、二充分条件,也就是说极值点处的损失函数偏导数分别为零,且其二阶导数大于零,进而求出一种特定解,例如前面讲到的线性回归模型的最小二乘法的求解。但是一般情况下,函数的求导很困难或者导数的形式很复杂,这些直接求精确解的方法就不适用了,另外一种思路是通过一种迭代搜索的方式,不断地探求最小值,被称为梯度下降法。
梯度下降法
基本思想
在上图中,如果我们已知一个初始点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ,那么我们如何去找到 f ( x , y ) f(x,y) f(x,y) 的最小值点呢?梯度下降法是基于搜索来寻找最小值的,那它在每一步搜索的过程中,首先需要判断出下一步移动的方向,而选择这个方向的原则就是在同样的前进步长下,哪一个方向能够使得函数值 f f f 下降的更快。后来发现在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) 位置的下降最快的方向正是该点的梯度的反方向。
梯度方向为什么是增长最快的方向
已知某一点处的函数值为
f
(
x
1
,
x
2
,
⋯
,
x
n
)
f(x_1,x_2,\cdots,x_n)
f(x1,x2,⋯,xn) ,则在该点处的函数梯度为
∇
f
∣
(
x
1
,
x
2
,
⋯
,
x
n
)
=
(
∂
f
∂
x
1
,
∂
f
∂
x
2
,
⋯
,
∂
f
∂
x
n
)
\nabla f|_{(x_1,x_2,\cdots,x_n)} = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n})
∇f∣(x1,x2,⋯,xn)=(∂x1∂f,∂x2∂f,⋯,∂xn∂f)
为什么该点处梯度的方向就是增长最快的方向呢?我们以二维平面上的函数
f
(
x
,
y
)
f(x,y)
f(x,y) 为例进行理论推导。
已知当前点为
P
(
x
,
y
)
P(x,y)
P(x,y) ,假设它以步长
L
L
L 进行四处探寻,我们不妨设它前进的方向与
X
X
X 轴正方向的夹角为
θ
\theta
θ ,这时,它下一步到达的位置为
P
′
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
P'(x+L \cos \theta,y + L\sin \theta)
P′(x+Lcosθ,y+Lsinθ) 。而我们想要找到这么一个
θ
\theta
θ ,使得
max
θ
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
\max_\theta \frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y)}{L}
θmaxLf(x+Lcosθ,y+Lsinθ)−f(x,y)
我们作以下变换
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
=
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
+
L
sin
θ
)
+
f
(
x
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
=
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
+
L
sin
θ
)
L
+
f
(
x
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
=
cos
θ
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
+
L
sin
θ
)
L
cos
θ
+
sin
θ
f
(
x
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
sin
θ
\frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y)}{L}\\ \begin{aligned} &= \frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y+L\sin\theta) + f(x,y+L\sin\theta) - f(x,y)}{L}\\ &= \frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y+L\sin\theta)}{L} + \frac{f(x,y+L\sin\theta) - f(x,y)}{L} \\ &= \cos \theta\frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y+L\sin\theta)}{L\cos\theta} + \sin\theta\frac{f(x,y+L\sin\theta) - f(x,y)}{L\sin\theta} \\ \end{aligned}
Lf(x+Lcosθ,y+Lsinθ)−f(x,y)=Lf(x+Lcosθ,y+Lsinθ)−f(x,y+Lsinθ)+f(x,y+Lsinθ)−f(x,y)=Lf(x+Lcosθ,y+Lsinθ)−f(x,y+Lsinθ)+Lf(x,y+Lsinθ)−f(x,y)=cosθLcosθf(x+Lcosθ,y+Lsinθ)−f(x,y+Lsinθ)+sinθLsinθf(x,y+Lsinθ)−f(x,y)
当步长
L
→
0
L \rightarrow 0
L→0 ,上式有
=
cos
θ
lim
L
→
0
f
(
x
+
L
cos
θ
,
y
+
L
sin
θ
)
−
f
(
x
,
y
+
L
sin
θ
)
L
cos
θ
+
sin
θ
lim
L
→
0
f
(
x
,
y
+
L
sin
θ
)
−
f
(
x
,
y
)
L
sin
θ
=
cos
θ
f
x
(
x
,
y
)
+
sin
θ
f
y
(
x
,
y
)
\begin{aligned} &= \cos\theta \lim_{L\rightarrow0}\frac{f(x+L \cos \theta,y + L\sin \theta) - f(x,y+L\sin\theta)}{L\cos\theta} + \sin\theta \lim_{L\rightarrow0}\frac{f(x,y+L\sin\theta) - f(x,y)}{L\sin\theta} \\ &= \cos\theta f_x(x,y) + \sin \theta f_y(x,y) \end{aligned}
=cosθL→0limLcosθf(x+Lcosθ,y+Lsinθ)−f(x,y+Lsinθ)+sinθL→0limLsinθf(x,y+Lsinθ)−f(x,y)=cosθfx(x,y)+sinθfy(x,y)
上式则是
f
f
f 在
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0) 点处沿单位向量
l
⃗
=
(
cos
θ
,
sin
θ
)
\vec{l}=(\cos\theta,\sin\theta)
l=(cosθ,sinθ) 的方向导数,根据柯西不等式
我们知道内积公式 < x , y > = ∣ ∣ x ∣ ∣ ∗ ∣ ∣ y ∣ ∣ ∗ cos α <{\boldsymbol x},{\boldsymbol y}> = ||{\boldsymbol x}||*||{\boldsymbol y}||* \cos\alpha <x,y>=∣∣x∣∣∗∣∣y∣∣∗cosα , 其中 α \alpha α 为两个向量间的夹角。若等式两边同时平方,有
< x , y > 2 = ∣ ∣ x ∣ ∣ 2 ∗ ∣ ∣ y ∣ ∣ 2 ∗ cos 2 α ≤ ∣ ∣ x ∣ ∣ 2 ∗ ∣ ∣ y ∣ ∣ 2 <{\boldsymbol x},{\boldsymbol y}>^2 = ||{\boldsymbol x}||^2*||{\boldsymbol y}||^2* \cos^2\alpha \le ||{\boldsymbol x}||^2*||{\boldsymbol y}||^2 <x,y>2=∣∣x∣∣2∗∣∣y∣∣2∗cos2α≤∣∣x∣∣2∗∣∣y∣∣2 当且仅当 x , y {\boldsymbol x},{\boldsymbol y} x,y 同向时,等式成立。
从而有不等式
cos
θ
f
x
(
x
,
y
)
+
sin
θ
f
y
(
x
,
y
)
≤
[
(
cos
θ
)
2
+
(
sin
θ
)
2
]
[
f
x
2
(
x
,
y
)
+
f
y
2
(
x
,
y
)
]
\cos\theta f_x(x,y) + \sin \theta f_y(x,y) \le [(\cos\theta)^2+(\sin\theta)^2][f_x^2(x,y)+f_y^2(x,y)]
cosθfx(x,y)+sinθfy(x,y)≤[(cosθ)2+(sinθ)2][fx2(x,y)+fy2(x,y)]
那么
f
f
f 沿着
l
⃗
\vec{l}
l 方向在什么条件下取得最大值呢?我们可以推出:当且仅当
l
⃗
=
(
cos
θ
,
sin
θ
)
\vec{l}=(\cos\theta,\sin\theta)
l=(cosθ,sinθ) 与
∇
(
f
x
(
x
,
y
)
,
f
y
(
x
,
y
)
)
\nabla (f_x(x,y),f_y(x,y))
∇(fx(x,y),fy(x,y)) 同向时,我们可以取得公式
(
3
)
(3)
(3) 的最大值,即该点梯度的方向就是增长最快的方向。
牛顿法
在迭代搜索求解最值问题中,还有一类著名的方法——牛顿法。它是将求取 f ( x ) f(x) f(x) 的极值问题,转化为求解 f ′ ( x ) = 0 f'(x)=0 f′(x)=0 的非线性方程求数值解问题。
具体的牛顿法推导公式可以参考另一篇博客《[科学计算]之非线性方程数值解》
有约束优化
有约束优化又分为三种形式,一种是等式约束,一种是不等式约束,还有一种是等式和不等式混合约束。
拉格朗日乘子法
我们先来讨论一种最简单的形式——等式约束。
min
x
f
(
x
)
,
x
∈
R
n
s
t
.
g
(
x
)
=
0
\min_{\boldsymbol x} f({\boldsymbol x}),{\boldsymbol x} \in \R^n\\ st. g({\boldsymbol x}) =0
xminf(x),x∈Rnst.g(x)=0
上式的几何意义是什么呢?我们以二维变量为例。我们将 f ( x , y ) f(x,y) f(x,y) 的等高线画出,如图所示,朝着黑色虚箭头的方向 f ( x , y ) f(x,y) f(x,y) 的值逐渐变小,也就是 f ( x , y ) f(x,y) f(x,y) 的负梯度方向,如果没有约束条件,只要朝着该方向前进迭代,就可以收敛到最值,但是公式 ( 5 ) (5) (5) 中的条件限制了可选点 ( x , y ) (x,y) (x,y) 的范围,即可行解一定首先得满足 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0 (它其实从几何意义上看就是一条曲线)。因此,我们的目标就是既在 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0 这条红色曲线上,尽可能同时还要满足 f ( x , y ) f(x,y) f(x,y) 最小,也就是图中椭圆最小。从几何上观察,这时最优解的一个必要条件就是 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0 曲线与函数 f ( x , y ) f(x,y) f(x,y) 的等高线相切,因此二者的法线(如何确定曲面的法线方向)在同一条直线上,即梯度在同一条直线上。(关于曲线的法线和梯度的关系可参考)
从而在最优值处必满足
∇
f
(
x
∗
,
y
∗
)
=
λ
∇
g
(
x
∗
,
y
∗
)
,
λ
∈
R
g
(
x
∗
,
y
∗
)
=
0
\nabla f(x^*,y^*) = \lambda \nabla g(x^*,y^*),\lambda \in \R\\ g(x^*,y^*) = 0
∇f(x∗,y∗)=λ∇g(x∗,y∗),λ∈Rg(x∗,y∗)=0
这时,我们为此引入了拉格朗日函数
L
(
x
,
y
,
λ
)
=
f
(
x
,
y
)
−
λ
g
(
x
,
y
)
L(x,y,\lambda) = f(x,y) - \lambda g(x,y)
L(x,y,λ)=f(x,y)−λg(x,y)
进而对拉格朗日函数的偏导限制为零,其实就是满足公式
(
6
)
(6)
(6) 而已。
KKT条件
还有一种经典的有约束条件优化问题——不等式约束。
min
x
f
(
x
)
,
x
∈
R
n
s
t
.
g
(
x
)
≤
0
\min_{\boldsymbol x} f({\boldsymbol x}),{\boldsymbol x}\in \R^n \\ st. g({\boldsymbol x}) \le 0
xminf(x),x∈Rnst.g(x)≤0
在不等式约束条件下,可行解的所在区域可以分为两种情况:
- 一种是可行解在条件区域内;
如上图所示,当可行解在条件区域内时,不等式约束取得局部极小值的充要条件便等于无条件约束的充要条件,此时的条件限制已不再起作用,变为一个无条件约束优化问题。
- 另一种是可行解在条件边界上。
如上图所示,此时可行解必将落在条件限制边界上,这就是之前介绍的等式约束的优化问题,此时条件受限是起到作用的。在这种情况下, f ( x ) f({\boldsymbol x}) f(x) 的梯度和 g ( x ) g({\boldsymbol x}) g(x) 的梯度首先是共线的。
上式中, λ ∈ R , 且 λ ≠ 0 \lambda \in \R,且\lambda \neq0 λ∈R,且λ=0 ,但是由于条件区域的存在,它们的梯度关系有着更严格的限制。当下面情况出现时,发现并不能满足最小值。
在上图中,此时边界上的红点也满足二者梯度方向共线的必要条件,但是此时的 − ∇ f ( x ) -\nabla f({\boldsymbol x}) −∇f(x) 指向条件区域,意味着还存在比当前点还小的点,因此此时红点绝对不可能是极值点。
如上图所示,只有当前红点才更能满足极小值点的要求,此时的
−
∇
f
(
x
)
-\nabla f({\boldsymbol x})
−∇f(x) 与
∇
g
(
x
)
\nabla g({\boldsymbol x})
∇g(x) 同向,而且
−
∇
f
(
x
)
-\nabla f({\boldsymbol x})
−∇f(x) 背离条件区域,该点符合极小值点要求。因此,有条件约束的极小值点处需要满足
∇
x
f
(
x
)
=
λ
∇
x
g
(
x
)
,
λ
>
0
\nabla_{\boldsymbol x} f({\boldsymbol x}) =\lambda \nabla_{\boldsymbol x} g({\boldsymbol x}),\lambda > 0
∇xf(x)=λ∇xg(x),λ>0
下面进行总结:
强烈推荐参考资料:http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf