最优化方法,即寻找函数极值点的数值方法。通常采用的迭代法,它从一个初始点 x 0 x_0 x0开始,反复使用某种规则(一阶导数即梯度或者二阶导数信息即Hessian矩阵)从 x k x_k xk到下一个点 x k + 1 x_{k+1} xk+1,直到到达函数的极值点。
最优化问题可统一表述为求解函数的极小值问题,即
m
i
n
x
f
(
x
)
min_xf(x)
minxf(x)
其中
x
x
x称为优化变量,
f
f
f称为目标函数。极大值问题可以转化为极小值问题,只需将目标函数加上负号即可。
梯度下降法
梯度下降法沿梯度向量的方向进行迭代已到达函数的极值点。根据多元函数的泰勒展开式,如果忽略二次及以上的项,函数
f
(
x
)
f(x)
f(x)在
x
x
x点处可以展开为
变形之后,函数的增量与自变量的增量
Δ
x
\Delta x
Δx、函数梯度的关系可以表示为
如果
(
▽
f
(
x
)
)
T
Δ
x
<
0
(\bigtriangledown f(x))^T\Delta x < 0
(▽f(x))TΔx<0, 则有
f
(
x
+
Δ
)
<
f
(
x
)
f(x+\Delta) < f(x)
f(x+Δ)<f(x), 函数递减。
当下降方向沿着梯度负方向时函数值下降的最快(参考梯度负方向函数值下降最快详解),设
Δ
x
=
−
γ
▽
f
(
x
)
\Delta x=-\gamma \bigtriangledown f(x)
Δx=−γ▽f(x)
其中$\gamma $为接近0的正数,称为步长。从初始点
x
0
x_0
x0开始,使用如下迭代公式
x
k
+
1
=
x
k
−
γ
▽
f
(
x
k
)
x_{k+1} = x_k -\gamma \bigtriangledown f(x_k)
xk+1=xk−γ▽f(xk)
只要没有达到梯度为0的点,函数值会沿着序列
x
k
x_k
xk递减,最终会收敛到梯度为0的点。迭代终止的条件是函数的梯度值为0
牛顿法
对多元函数在
x
0
x_0
x0处进行二阶泰勒展开,有
忽略二次以上的项,对上式两边同时对x求梯度,得到函数的导数(梯度向量)
Δ
f
(
x
)
=
f
(
x
0
)
+
▽
2
f
(
x
0
)
(
x
−
x
0
)
\Delta f(x) = f(x_0)+\bigtriangledown^2 f(x_0)(x-x_0)
Δf(x)=f(x0)+▽2f(x0)(x−x0)
其中,
▽
2
f
(
x
0
)
\bigtriangledown^2 f(x_0)
▽2f(x0)即为Hessian矩阵
H
H
H,令函数的梯度为0,则有
▽
f
(
x
0
)
+
▽
2
f
(
x
0
)
(
x
−
x
0
)
=
0
\bigtriangledown f(x_0) +{ \bigtriangledown}^2 f(x_0)(x-x_0) = 0
▽f(x0)+▽2f(x0)(x−x0)=0
解线性方程可以得到
x
=
x
0
−
(
▽
2
f
(
x
0
)
)
−
1
▽
f
(
x
0
)
x=x_0 - (\bigtriangledown^2 f(x_0))^{-1}\bigtriangledown f(x_0)
x=x0−(▽2f(x0))−1▽f(x0)
将梯度向量简写为
g
g
g, 上面的公式简写为
x
=
x
0
−
H
−
1
g
x = x_0 - H^{-1}g
x=x0−H−1g
−
H
−
1
g
-H^{-1}g
−H−1g为牛顿方向,从初始点开始,反复计算函数在对应点处的Hessian矩阵和梯度向量,迭代终止条件是梯度的模接近于0或者函数值下降小于指定阈值。
梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。相对于梯度下降法,牛顿法有更快的收敛速度,但每一步迭代的成本也更高(除了计算梯度以外,还要计算Hessian矩阵和其逆矩阵),并且Hessian矩阵还可能面临不可逆的情况(其行列式为0或者满秩),从而方法不可行。
拉格朗日乘数法
梯度下降法和牛顿法在求解的问题下都不带有约束条件。拉格朗日乘数法用于求解带等式约束条件的函数极值。基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
如何将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题?拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。
假设有如下的极值问题:
m
i
n
f
(
x
)
h
i
(
x
)
=
0
,
i
=
1
,
2
,
.
.
.
,
p
min f(x) \\ h_i(x) = 0, i=1, 2, ..., p
minf(x)hi(x)=0,i=1,2,...,p
拉格朗日乘数法构造如下目标函数,称为拉格朗日函数:
L
(
x
,
λ
)
=
f
(
x
)
+
∑
i
=
1
p
λ
i
h
i
(
x
)
L(x, \lambda) = f(x) + \sum^p_{i=1} \lambda _i h_i(x)
L(x,λ)=f(x)+i=1∑pλihi(x)
其中
λ
\lambda
λ为拉格朗日乘子。对上式自变量$x求导,并令其等于0,得到下列方程组:
▽
x
f
+
∑
i
=
1
p
λ
i
▽
x
h
i
(
x
)
=
0
\bigtriangledown_x f +\sum^p_{i=1} \lambda _i \bigtriangledown_xh_i(x) =0
▽xf+i=1∑pλi▽xhi(x)=0
求解以上方程即可得到函数的候选极值点
几何解释:在极值点处目标函数的梯度是约束函数梯度的线性组合
拉格朗日对偶
原始问题
在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过求解对偶问题得到原始问题的解。
对于如下带等式约束和不等式约束的优化问题:
m
i
n
f
(
x
)
g
i
(
x
)
<
=
0
,
i
=
1
,
2
,
.
.
.
,
n
h
i
(
x
)
=
0
,
i
=
1
,
2
,
.
.
.
,
p
min f(x) \\ g_i(x) <= 0, i=1, 2,..., n\\ h_i(x) = 0, i=1, 2, ..., p
minf(x)gi(x)<=0,i=1,2,...,nhi(x)=0,i=1,2,...,p
仿照拉格朗日乘数法构造广义的拉格朗日函数:
L
(
x
,
λ
,
v
)
=
f
(
x
)
+
∑
i
=
1
m
λ
i
g
i
(
x
)
+
∑
i
=
1
p
v
i
h
i
(
x
)
L(x, \lambda, v)=f(x)+\sum_{i=1}^m \lambda_i g_i(x)+\sum_{i=1}^pv_ih_i(x)
L(x,λ,v)=f(x)+i=1∑mλigi(x)+i=1∑pvihi(x)
其中
λ
\lambda
λ 和
v
v
v为拉格朗日乘子,可知道
L
(
x
,
λ
,
v
)
L(x, \lambda, v)
L(x,λ,v)最大化是f(x),那么原始最优化问题表示为广义的拉格朗日函数的极小极大问题。
p
∗
=
m
i
n
x
m
a
x
λ
,
v
,
λ
>
=
0
L
(
x
,
λ
,
v
)
p^* =min_xmax_{\lambda, v, \lambda > =0} L(x, \lambda, v)
p∗=minxmaxλ,v,λ>=0L(x,λ,v)
对偶问题
将广义拉格朗日函数的极大极小值问题表示为约束最优化问题:
称为原始问题的对偶问题,且定义对偶问题的最优值为
称为对偶问题的值。
参考:
- 《机器学习》-雷明
- https://blog.csdn.net/THmen/article/details/87366904