
在本节中,主要讨论连续优化的两个主要分支: 约束优化(constrained optimization)、 无约束优化(unconstrained optimization)。在求解一个线性方程的最优问题的时候,可以对方程进行求导,让后让求导得到的式子赋值为0,接触的结果就是 驻点(Stationary points),想要知道这个驻点是极大值还是极小值,需要看在该点的二阶导数的的值的情况。由于五次方及以上的高次方程没有代数解(Abel–Ruffini theorem),所以在一些情况下无法求解出求导式子的解析解,这时候我们可以设置一个初始点,为了求解极小值,只需要让点顺着梯度的反方向运动即可,但是这有可能无法得到全局最优解,而是得到一个局部最优解。

梯度下降法(Optimization Using Gradient Descent)
梯度下降法是一种一阶优化算法,算法会不断更新参数的值,每一步的变化方向都是梯度的反方向(梯度方向的变化率最大。)
梯度下降的目标是:
min
x
f
(
x
)
\min_xf(x)
xminf(x)
其中,
f
:
R
d
→
R
f:\mathbb R^d \rightarrow \mathbb R
f:Rd→R被称为目标函数(objective function)。在等高线图中,
f
(
x
)
f(x)
f(x)的变化方向与等高线相互垂直。
下面考虑多元方程
f
(
x
)
f(\boldsymbol x)
f(x)的优化问题。
f
(
x
)
f(\boldsymbol x)
f(x)下降最快的方向就是梯度的反方向
−
(
(
∇
f
)
(
x
0
)
)
⊤
-((\nabla f)(x_0))^\top
−((∇f)(x0))⊤,所以:
x
1
=
x
0
−
γ
(
(
∇
f
)
(
x
0
)
)
⊤
\boldsymbol{x}_{1}=\boldsymbol{x}_{0}-\gamma\left((\nabla f)\left(\boldsymbol{x}_{0}\right)\right)^{\top}
x1=x0−γ((∇f)(x0))⊤
如果步长(step-size)
γ
≥
0
\gamma \ge 0
γ≥0,则
f
(
x
1
)
≤
f
(
x
0
)
f(x_1)\le f(x_0)
f(x1)≤f(x0)
步长/学习率(Step-size)
梯度实际上只给出了变化的方向,但是变化的大小是由学习率和当前梯度的绝对值决定的。梯度的绝对值由函数决定,学习率就成为了能够人为控制的变量。假如学习率过小,则取得最优解的耗时会很长,反之可能会在最优解两端左右震荡,也会可能会花费很多的时间求得最优解,在极端情况下还可能会发散。
有一种称为自适应梯度法(Adaptive gradient methods)能够在每次迭代的时候更新学习率,以保证代价函数能够“平滑”地移动到最优解点。下面是几个经验性的结论:
- 每一次迭代代价函数都应该减少,否则减小学习率并撤回当前操作。
- 当函数值接近最优解点的时候,函数的梯度减少,这个时候应该适当地增大学习率,以加快收敛速度。
我们可以使用梯度下降法求解线性方程:
求解一个线性方程
A
x
=
b
\boldsymbol A\boldsymbol x=\boldsymbol b
Ax=b就是求解
A
x
−
b
=
0
\boldsymbol A\boldsymbol x-\boldsymbol b=\boldsymbol0
Ax−b=0,近似地等价于求解当平方误差最小时,x的取值:(这里使用欧几里得范数)
min
x
∥
A
x
−
b
∥
2
=
(
A
x
−
b
)
⊤
(
A
x
−
b
)
\min_x \|Ax-b\|^2=(Ax-b)^\top(Ax-b)
xmin∥Ax−b∥2=(Ax−b)⊤(Ax−b)
对上式对x进行求导:
∇
x
=
2
(
A
x
−
b
)
⊤
A
\nabla_x=2(Ax-b)^\top A
∇x=2(Ax−b)⊤A
这时可以使用梯度下降法求解出x的值。
在求解线性方程的时候,梯度下降法的收敛速度由条件数(condition number)决定,即
κ
=
σ
(
A
)
m
a
x
σ
(
B
)
m
i
n
\kappa = \frac{\sigma(A)_{max}}{\sigma(B)_{min}}
κ=σ(B)minσ(A)max,条件数在本质上就是最大弯曲方向与最小弯曲方向的比率(在等高线图上)
预处理子(preconditioner)
在求解
A
x
−
b
=
0
Ax-b=0
Ax−b=0之前,先进行
P
−
1
(
A
x
−
b
)
=
0
P^{-1}(Ax-b) = 0
P−1(Ax−b)=0,使得
P
−
1
A
P^{-1}A
P−1A有一个更好的条件数,其中
P
P
P称为预处理子。实际上就是对数量级进行匹配,使得等高线图上的图像更加均匀,这样能够加快收敛的速度。
带动量项的梯度下降(Gradient Descent With Momentum)
当函数数量级不是很匹配的时候(表现在等高线图上就是一个狭长的圆),这时候,在执行梯度下降算法的时候,可能会出现在最优解两端不断震荡的现象,为了改善这种情况,可以给梯度下降赋予一些记忆,这个记忆就是动量项,记录先前一次迭代发生的变化。
x
i
+
1
=
x
i
−
γ
i
(
(
∇
f
)
(
x
i
)
)
⊤
+
α
Δ
x
i
Δ
x
i
=
x
i
−
x
i
−
1
=
α
Δ
x
i
−
1
−
γ
i
−
1
(
(
∇
f
)
(
x
i
−
1
)
)
⊤
,
α
∈
[
0
,
1
]
\begin{aligned} \boldsymbol{x}_{i+1} &=\boldsymbol{x}_{i}-\gamma_{i}\left((\nabla f)\left(\boldsymbol{x}_{i}\right)\right)^{\top}+\alpha \Delta \boldsymbol{x}_{i} \\ \Delta \boldsymbol{x}_{i} &=\boldsymbol{x}_{i}-\boldsymbol{x}_{i-1}=\alpha \Delta \boldsymbol{x}_{i-1}-\gamma_{i-1}\left((\nabla f)\left(\boldsymbol{x}_{i-1}\right)\right)^{\top} ,\alpha\in[0,1]\end{aligned}
xi+1Δxi=xi−γi((∇f)(xi))⊤+αΔxi=xi−xi−1=αΔxi−1−γi−1((∇f)(xi−1))⊤,α∈[0,1]
the momentum term is useful since it averages out different noisy estimates of the gradient
随机梯度下降法(Stochastic Gradient Descent)
由于在计算梯度的时候需要消耗很多的时间,所以可以考虑求解一个近似解即可并非需要求出精确解。
在运行梯度下降的时候,我们需要求解出所有代价函数最小时,所对应的参数的值:
L
(
θ
)
=
∑
n
=
1
N
L
n
(
θ
)
L(\boldsymbol\theta)=\sum^N_{n=1}L_n(\boldsymbol \theta)
L(θ)=n=1∑NLn(θ)
我们还可以使用负对数似然的形式表示代价函数:
L
(
θ
)
=
−
∑
n
=
1
N
log
p
(
y
n
∣
x
n
,
θ
)
L(\boldsymbol \theta)=-\sum_{n=1}^N\log p(y_n|\boldsymbol x_n,\boldsymbol \theta)
L(θ)=−n=1∑Nlogp(yn∣xn,θ)
其中
x
n
∈
R
D
x_n\in \mathbb R^{D}
xn∈RD为训练数据,
y
n
y_n
yn为训练目标,
θ
\boldsymbol\theta
θ为回归模型的参数。
我们原先提到的梯度下降是批优化算法,也就是在更新的时候需要用到所有的训练数据。
θ
i
+
1
=
θ
i
−
γ
i
(
∇
L
(
θ
i
)
)
⊤
=
θ
i
−
γ
i
∑
n
=
1
N
(
∇
L
n
(
θ
i
)
)
⊤
\boldsymbol \theta_{i+1}=\boldsymbol\theta_i-\gamma_i(\nabla L(\boldsymbol\theta_i))^{\top}=\boldsymbol\theta_i-\gamma_i\sum^N_{n=1}(\nabla L_n(\boldsymbol \theta_i))^\top
θi+1=θi−γi(∇L(θi))⊤=θi−γin=1∑N(∇Ln(θi))⊤
当需要训练大量数据或是对应的方程无法简单地表示出来的时候,利用上式进行梯度下降将会消耗大量的计算资源。
其实,我们并不一定需要使用所有的数据,我们可以使用其中的一部分数据进行训练,这种梯度下降法被称为小批量梯度下降法(mini-batch gradient descent)当样品的数量越多,所得到的梯度结果也就越接近真实值,但是也会消耗更多的计算资源。
如果我们能够保持每次的数据小批量,那么数据噪音也许会帮助梯度下降算法跳出局部最优解。
在机器学习中有广泛应用,需要进行补充
约束优化和拉格朗格日乘数(Constrained Optimization and Lagrange Multipliers)
约束优化问题可以表示为:
min
x
f
(
x
)
,
s
.
t
g
i
(
x
)
≤
0
i
=
1
,
⋯
,
m
\min_x f(x),s.t \ g_i(x)\le0 \ \ i = 1,\cdots,m
xminf(x),s.t gi(x)≤0 i=1,⋯,m
也可以使用指示函数(indicator function)指示函数可以表示一个元素是否在设定的集合内,用
1
\boldsymbol 1
1表示:
J
(
x
)
=
f
(
x
)
+
∑
i
=
1
m
1
(
g
i
(
x
)
)
J(x)=f(x)+\sum^m_{i=1}\boldsymbol 1(g_i(x))
J(x)=f(x)+i=1∑m1(gi(x))
其中
1
\boldsymbol 1
1是无限阶跃函数(infinite step function):
1
(
z
)
=
{
0
i
f
z
≤
0
∞
o
t
h
e
r
w
i
s
e
\boldsymbol 1(z)=\left\{\begin{aligned} &0\quad if\ z\le0 \\ &\infin \quad otherwise\end{aligned}\right.
1(z)={0if z≤0∞otherwise
也就是当取值在约束范围之外时,会有一个无穷大的惩罚。
拉格朗日算子
L
(
x
,
λ
)
=
f
(
x
)
+
∑
i
=
1
m
λ
i
g
i
(
x
)
=
f
(
x
)
+
λ
⊤
g
(
x
)
\begin{aligned} \mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda}) &=f(\boldsymbol{x})+\sum_{i=1}^{m} \lambda_{i} g_{i}(\boldsymbol{x}) &=f(\boldsymbol{x})+\boldsymbol{\lambda}^{\top} \boldsymbol{g}(\boldsymbol{x}) \end{aligned}
L(x,λ)=f(x)+i=1∑mλigi(x)=f(x)+λ⊤g(x)
其中
λ
\boldsymbol\lambda
λ为拉格朗日乘子(Lagrange multiplier)
拉格朗日对偶(Lagrangian duality)
在优化问题中,对偶是将一个变量(原始变量,primal variables)装换成另一种变量(对偶变量,dual variables)x
对偶问题是看待一个优化问题的两个角度。对偶问题的解是原始问题的一个下界。
原始问题(primal problem):
min
x
f
(
x
)
,
s
.
t
.
g
i
(
x
)
≤
0
i
=
1
⋯
,
m
\min_x f(x), s.t. \quad g_i(x)\le 0\quad i = 1\cdots,m
xminf(x),s.t.gi(x)≤0i=1⋯,m
对应的对偶问题(Lagrangian Dual Problem):(将原始的问题转化成拉格朗日算子表示的式子)
max
λ
∈
R
m
D
(
λ
)
,
s
.
t
.
λ
≥
0
\max_{\lambda\in\mathbb R^m}\mathfrak D(\lambda),\quad s.t.\ \lambda\ge 0
λ∈RmmaxD(λ),s.t. λ≥0
这里
λ
\lambda
λ为对偶变量(dual variable),
D
=
min
x
∈
R
d
L
(
x
,
λ
)
\mathfrak D = \min\limits_{x\in \mathbb R^d}\mathfrak L(x,\lambda)
D=x∈RdminL(x,λ)
这里需要补充几点知识:
1.极大极小不等式(minimax inequality)
对于任意一个有两个参数的函数 φ ( x , y ) \varphi(\boldsymbol x, \boldsymbol y) φ(x,y)有:
max y min x φ ( x , y ) ⩽ min x max y φ ( x , y ) \max _{\boldsymbol{y}} \min _{\boldsymbol{x}} \varphi(\boldsymbol{x}, \boldsymbol{y}) \leqslant \min _{\boldsymbol{x}} \max _{\boldsymbol{y}} \varphi(\boldsymbol{x}, \boldsymbol{y}) ymaxxminφ(x,y)⩽xminymaxφ(x,y)
2.弱对偶(weak duality)
原始变量 ≥ \ge ≥对偶变量(duality gap ≥ 0 \ge 0 ≥0)
下面的内容需要想想为什么?(为什么是下界,二者的关系是什么?)
当
λ
≥
0
\lambda\ge0
λ≥0时,
L
(
x
,
λ
)
\mathfrak L(x,\lambda)
L(x,λ)是代价函数
J
(
x
)
J(x)
J(x)的下界。所以:
J
(
x
)
=
max
λ
≥
0
L
(
x
,
λ
)
J(x)=\max_{\lambda\ge0}\mathfrak L(x,\lambda)
J(x)=λ≥0maxL(x,λ)
同时我们原先先要解决的问题是找到J(x)最小时的参数的值所以:
min
x
∈
R
d
max
λ
≥
0
L
(
x
,
λ
)
\min_{x\in\mathbb R^d}\max_{\lambda\ge0}\mathfrak L(x,\lambda)
x∈Rdminλ≥0maxL(x,λ)
再利用之前的极大极小不等式:
min
x
∈
R
d
max
λ
⩾
0
L
(
x
,
λ
)
⩾
max
λ
⩾
0
min
x
∈
R
d
L
(
x
,
λ
)
.
\min _{x \in \mathbb{R}^{d}} \max _{\boldsymbol{\lambda} \geqslant 0} \mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda}) \geqslant \max _{\boldsymbol{\lambda} \geqslant 0} \min _{\boldsymbol{x} \in \mathbb{R}^{d}} \mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda}) .
x∈Rdminλ⩾0maxL(x,λ)⩾λ⩾0maxx∈RdminL(x,λ).
这也是弱对偶。这时候将问题转化成了
min
x
∈
R
d
L
(
x
,
λ
)
\min\limits_{\boldsymbol x\in\mathbb{R}^{d}} \mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda})
x∈RdminL(x,λ),一个无约束的问题。
等式约束(Equality Constraints):
min x f ( x ) subject to g i ( x ) ⩽ 0 for all i = 1 , … , m h j ( x ) = 0 for all j = 1 , … , n . \begin{array}{rl} \min _{\boldsymbol{x}} & f(\boldsymbol{x}) \\ \text { subject to } & g_{i}(\boldsymbol{x}) \leqslant 0 \quad \text { for all } \quad i=1, \ldots, m \\ & h_{j}(\boldsymbol{x})=0 \quad \text { for all } \quad j=1, \ldots, n . \end{array} minx subject to f(x)gi(x)⩽0 for all i=1,…,mhj(x)=0 for all j=1,…,n.
其中的等式可以用两个不等式表示,然后就可以继续使用拉格朗日乘子了。(有一些需要补充)
凸优化(Convex Optimization)
注意一点:国内外对凹凸函数的定义有时相反
当一个优化问题的目标函数为凸函数,约束条件为凸集时,称这种问题为凸优化问题
强对偶(strong duality):原始问题和对偶问题的最优化结果是一致的。
凸集:
对于一个凸集(convex set)
C
\mathcal C
C,如果任意的
x
,
y
∈
C
x,y\in \mathcal C
x,y∈C和任意的标量
θ
(
0
≤
θ
≤
1
)
\theta(0\le \theta\le 1)
θ(0≤θ≤1)有:
θ
x
+
(
1
−
θ
)
y
∈
C
\theta x+(1-\theta)y\in \mathcal C
θx+(1−θ)y∈C
其实凸集就是凸函数上方形成的一个区域中的集合,如下图。
凸函数:
对于一个函数
f
:
R
D
→
R
f:\mathbb R^D\rightarrow\mathbb R
f:RD→R的定义域是一个凸集,那么如果这个函数是凸函数,则对于定义域内的所有的点
x
、
y
x、y
x、y和标量
θ
(
0
≤
θ
≤
1
)
\theta(0\le\theta\le1)
θ(0≤θ≤1)有:(Jensen’s inequality)
f
(
θ
x
+
(
1
−
θ
)
y
)
≤
θ
f
(
x
)
+
(
1
−
θ
)
f
(
y
)
f(\theta x+(1-\theta)y)\le\theta f(x)+(1-\theta)f(y)
f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)
判断一个函数是否为凸函数,可以使用函数的梯度:
f
(
y
)
≥
f
(
x
)
+
∇
x
f
(
x
)
⊤
(
y
−
x
)
f(y)\ge f(x)+\nabla_xf(x)^\top(y-x)
f(y)≥f(x)+∇xf(x)⊤(y−x)
如果该函数二阶可导,则只要这个函数的海森矩阵是半正定的
线性规划(Linear Programming)
目标函数和约束函数都是线性方程的优化问题
min
x
∈
R
d
c
⊤
x
,
s
.
t
.
A
x
≤
b
\min_{x\in\mathbb R^d}c^\top x,\ s.t.\ Ax\le b
x∈Rdminc⊤x, s.t. Ax≤b
其中:
A
∈
R
m
×
d
、
b
∈
R
m
A\in\mathbb R^{m\times d}\ 、b\in\mathbb R^m
A∈Rm×d 、b∈Rm这里包含d个变量和m个线性约束条件。
对应的拉格朗日式为:
L
(
x
,
λ
)
=
c
⊤
x
+
λ
⊤
(
A
x
)
\mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda})=\boldsymbol{c}^{\top} \boldsymbol{x}+\boldsymbol{\lambda}^{\top}(\boldsymbol{A} \boldsymbol{x})
L(x,λ)=c⊤x+λ⊤(Ax)
将上式对x进行求导,并设为0,得:
c
+
A
⊤
λ
=
0
c+A^\top \lambda=0
c+A⊤λ=0
所以对偶问题为:
max
λ
∈
R
m
−
b
⊤
λ
,
s
.
t
.
c
+
A
⊤
λ
=
0
,
λ
≥
0
\max_{\lambda\in\mathbb R^m}-b^\top\lambda,\ \ s.t.\ c+A^\top\lambda=0, \lambda\ge 0
λ∈Rmmax−b⊤λ, s.t. c+A⊤λ=0,λ≥0
二次规划问题(Quadratic Programming)
min
x
∈
R
d
1
2
x
⊤
Q
x
+
c
⊤
s
.
t
.
A
x
≤
b
\min _{x\in \mathbb R^d}\frac{1}{2}x^\top Qx+c^\top\ \ s.t.\ Ax\le b
x∈Rdmin21x⊤Qx+c⊤ s.t. Ax≤b
其中:
A
∈
R
m
×
d
,
b
∈
R
m
,
C
∈
R
d
A\in \mathbb R^{m\times d},b\in\mathbb R^m,C\in \mathbb R^d
A∈Rm×d,b∈Rm,C∈Rd,其中
Q
∈
R
d
×
d
Q\in \mathbb R^{d\times d}
Q∈Rd×d是一个正定矩阵,目标函数是凸函数(convex)。这种问题被称为二次规划问题。
利用拉格朗日乘子:
L
(
x
,
λ
)
=
1
2
x
⊤
Q
x
+
c
⊤
x
+
λ
⊤
(
A
x
−
b
)
=
1
2
x
⊤
Q
x
+
(
c
+
A
⊤
λ
)
⊤
x
−
λ
⊤
b
\begin{aligned} \mathfrak{L}(\boldsymbol{x}, \boldsymbol{\lambda}) &=\frac{1}{2} \boldsymbol{x}^{\top} \boldsymbol{Q} \boldsymbol{x}+\boldsymbol{c}^{\top} \boldsymbol{x}+\boldsymbol{\lambda}^{\top}(\boldsymbol{A} \boldsymbol{x}-\boldsymbol{b}) \\ &=\frac{1}{2} \boldsymbol{x}^{\top} \boldsymbol{Q} \boldsymbol{x}+\left(\boldsymbol{c}+\boldsymbol{A}^{\top} \boldsymbol{\lambda}\right)^{\top} \boldsymbol{x}-\boldsymbol{\lambda}^{\top} \boldsymbol{b} \end{aligned}
L(x,λ)=21x⊤Qx+c⊤x+λ⊤(Ax−b)=21x⊤Qx+(c+A⊤λ)⊤x−λ⊤b
对上式进行整理之后,对x进行求导得:
Q
x
+
(
c
+
A
⊤
λ
)
=
0
Qx+(c+A^\top\lambda)=0
Qx+(c+A⊤λ)=0
假设矩阵Q是可逆得:
x
=
−
Q
−
1
(
c
+
A
⊤
λ
)
x= -Q^{-1}(c+A^\top\lambda)
x=−Q−1(c+A⊤λ)
将上面二式联立可以得到拉格朗日对偶:
D
(
λ
)
=
−
1
2
(
c
+
A
⊤
λ
)
⊤
Q
−
1
(
c
+
A
⊤
λ
)
−
λ
⊤
b
\mathfrak D(\lambda)=-\frac12(c+A^\top\lambda)^\top Q^{-1}(c+A^\top\lambda)-\lambda^\top b
D(λ)=−21(c+A⊤λ)⊤Q−1(c+A⊤λ)−λ⊤b
对偶优化问题的解可以由下解得:
max
λ
∈
R
m
−
1
2
(
c
+
A
⊤
λ
)
⊤
Q
−
1
(
c
+
A
⊤
λ
)
−
λ
⊤
b
,
s
.
t
.
λ
≥
0
\max_{\lambda\in\mathbb R^m}-\frac 12(c+A^\top\lambda)^\top Q^{-1}(c+A^\top\lambda)-\lambda^\top b,\ \ s.t. \lambda\ge 0
λ∈Rmmax−21(c+A⊤λ)⊤Q−1(c+A⊤λ)−λ⊤b, s.t.λ≥0
Legendre-Fenchel变换和凸共轭(Legendre-Fenchel Transform and Convex Conjugate)
支撑超平面(supporting hyperplane):
我们可以用一个支撑超平面来表示一个凸函数或者凸集,如下图所示:
凸共轭
这也被称为Legendre-Fenchel变换
其中,
sup
\sup
sup: supremum 上确界
A legendre transformation is a way of transforming a function of some variable into another function of another variable without losing any information.
上下确界:(子集中最大和最小的元素)
这部分需要补充
补充内容
Legendre Transform
Sometime it’s much more easier to work with
f
(
s
)
f(s)
f(s) instead of
f
(
x
)
f(x)
f(x)
f
(
x
)
→
f
(
s
)
,
f
(
s
)
=
d
f
(
x
)
d
x
f(x)\rightarrow f(s),\quad f(s) = \frac{df(x)}{dx}
f(x)→f(s),f(s)=dxdf(x)
Now we want a function which is changing with s, the function
f
∗
(
s
)
f^*(s)
f∗(s) is changing with
s
s
s.And
f
∗
f^*
f∗actually equal to
−
b
-b
−b
And if we use the transformation again, we will regain the original function:
f
∗
∗
(
x
)
=
x
⊤
s
−
f
∗
(
s
)
=
x
⊤
s
−
(
s
⊤
x
−
f
(
x
)
)
=
f
(
x
)
\begin{aligned}f^{**}(x) & =x^\top s-f^*(s)\\ &=x^\top s-(s^\top x - f(x))\\ & =f(x) \end{aligned}
f∗∗(x)=x⊤s−f∗(s)=x⊤s−(s⊤x−f(x))=f(x)
Why using it we can solve the optimistics problems pretty fast:
f ∗ ( 0 ) = 0 ⊤ x min − f ( x min ) f ( x min ) = − f ∗ ( 0 ) f^*(0)=0^\top x_{\min}-f(x_{\min})\\f(x_{\min})=-f^*(0) f∗(0)=0⊤xmin−f(xmin)f(xmin)=−f∗(0)