图片懒得挂了,,之后有空再挂
凸集与凸函数
判断凸函数的条件
- 定义
- 保凸运算
- g ( t ) = f ( x + t v ) g(t)=f(x+tv) g(t)=f(x+tv)关于t凸
- 一阶等价条件和二阶等价条件
共轭函数
可分函数
f ( x ) = g ( x 1 , ⋯ , x p ) = ∑ i = 1 p f i ( x i ) , f i ( x i ) = . . . f ∗ ( y ) = g ∗ ( y 1 , ⋯ , y p ) = ∑ i = 1 p f i ∗ ( y i ) , f i ∗ ( y i ) = . . . f(x)=g(x_1,\cdots,x_p)=\sum_{i=1}^p f_i(x_i), \ f_i(x_i)=... \\ f^*(y)=g^*(y_1,\cdots,y_p)=\sum_{i=1}^p f_i^*(y_i), \ f_i^*(y_i)=... f(x)=g(x1,⋯,xp)=i=1∑pfi(xi), fi(xi)=...f∗(y)=g∗(y1,⋯,yp)=i=1∑pfi∗(yi), fi∗(yi)=...
注意定义域
凸性和闭性
共轭函数 f ∗ ( y ) f^*(y) f∗(y)可以看作是一系列关于y的仿射函数的逐点最大值函数,而放射函数是凸的和闭的,最大化操作保留凸性和闭性,因此共轭函数一定是凸的和闭的
最优化问题基本形式
可行解: x ∈ d o m ( f ) x\in {\rm dom}(f) x∈dom(f)且满足所有不等式与等式约束
最优解: f ( x ) = p ∗ f(x)=p^* f(x)=p∗
局部最优解:满足各种约束且 ∥ x − x ^ ∥ 2 ≤ r \Vert x-\hat x\Vert_2\leq r ∥x−x^∥2≤r
凸优化
如果不等式约束函数都是凸函数,所有的等式约束是线性约束,则该最优化问题为凸优化问题。
凸优化的局部最优解
凸优化问题的任何局部最优解也是全局最优解
反证法,假设有一个比局部最优解更优的可行解 y y y,利用局部最优解的性质和凸函数的性质。
拉格朗日对偶问题
注意所有的 λ i \lambda_i λi都对应 ≤ 0 \leq 0 ≤0的不等式约束,需要根据不等式约束的符号确定 λ i \lambda_i λi的正负
拉格朗日函数
L
(
x
,
λ
,
v
)
=
f
(
x
)
+
∑
i
=
1
m
λ
i
f
i
(
x
i
)
+
∑
j
=
1
p
λ
j
h
j
(
x
j
)
L(x,\lambda,v)=f(x)+\sum_{i=1}^m \lambda_i f_i(x_i)+\sum_{j=1}^p \lambda_j h_j(x_j)
L(x,λ,v)=f(x)+i=1∑mλifi(xi)+j=1∑pλjhj(xj)
对应的拉格朗日对偶函数为
g
(
λ
,
v
)
=
inf
x
∈
D
L
(
x
,
λ
,
v
)
g(\lambda,v)=\inf_{x\in \mathcal{D}}L(x,\lambda,v)
g(λ,v)=x∈DinfL(x,λ,v)
注意这里是取关于x的最小值,对偶函数是凹函数。
对偶函数给出了原问题最优值的一个下界,因此可以通过求对偶函数的极大值来获得对最优值的一个最佳逼近。
定义
拉格朗日对偶问题定义为
max
λ
,
v
g
(
λ
,
v
)
,
s
.
t
.
λ
⪰
0
\max_{\lambda, v} g(\lambda,v), {\rm s.t.} \ \lambda\succeq 0
λ,vmaxg(λ,v),s.t. λ⪰0
这里是取关于 λ , v \lambda, v λ,v的最大值。
凸性
对偶函数是一个凹函数(最小化函数),而对偶问题是对凹函数求最大值,对偶变量 λ \lambda λ的约束集合为凸集,因此拉格朗日对偶问题一定是凸优化问题。
强对偶性质
拉格朗日对偶问题一定具有弱对偶性质,在最优化问题满足一定规格假设的时候可以满足强对偶性质。
Slater条件
充分条件
如果最优化问题为凸优化问题且严格可行,则强对偶性质成立
KKT条件
充要条件
互补松弛条件是强对偶成立的必要条件。
- 原始可行
- 对偶可行: λ ≻ 0 \lambda\succ 0 λ≻0
- 互补松弛: λ i f i ( x ) = 0 \lambda_i f_i(x)=0 λifi(x)=0
- 拉格朗日函数关于变量 x x x的梯度为0
所有满足KKT条件的解都可以看作是该最优化问题最优解的候选解。
条件的来源
原始可行条件和对偶可行条件分别满足原始最优化问题的约束和对偶问题的约束;
根据结论1,可以获得KKT的条件4(对于无约束优化问题,最小值在梯度为0处取到);根据结论2,得到KKT的互补松弛条件。
例题
- 对偶问题的约束一定包含 λ ⪰ 0 \lambda\succeq 0 λ⪰0
- 需要注意 λ \lambda λ的符号
- 对于线性规划问题的拉格朗日对偶问题,在求对偶函数时需要对系数进行分类讨论,选取的系数区间作为对偶问题的新增约束条件。
梯度下降
梯度的反方向是目标函数值下降的方向
一般迭代格式如下
x
k
+
1
=
x
k
−
α
k
∇
f
(
x
k
)
x^{k+1}=x^k-\alpha_k \nabla f(x^k)
xk+1=xk−αk∇f(xk)
- 针对无约束最优化问题求解的最基本算法
收敛性分析
算法全局迭代复杂度
经过k步迭代后,算法得到的序列
{
x
k
}
\{x_k\}
{xk}满足
f
(
x
k
)
−
f
(
x
∗
)
≤
ε
f(x^k)-f(x^*)\leq \varepsilon
f(xk)−f(x∗)≤ε
定理
假设目标函数f是连续可微L-光滑的凸函数,步长
α
k
∈
(
0
,
2
L
)
\alpha_k\in(0,\frac{2}{L})
αk∈(0,L2),则梯度下降算法的迭代复杂度为
f
(
x
k
)
−
f
(
x
∗
)
≤
O
(
1
k
)
f(x^k)-f(x^*)\leq \mathcal{O}(\frac{1}{k})
f(xk)−f(x∗)≤O(k1)
证明
假设步长 η < 1 L \eta<\frac{1}{L} η<L1
- 下降引理+迭代公式,推出充分下降性质
- 利用凸性,推广到 x ∗ x^* x∗,准备好累加
- 累加+下降引理的放缩
f ( x k ) − f ( x ∗ ) ≤ O ( ∥ x 0 − x ∗ ∥ 2 2 2 η k ) f(x^k)-f(x^*)\leq \mathcal{O}(\frac{\Vert x^0-x^*\Vert_2^2}{2\eta k}) f(xk)−f(x∗)≤O(2ηk∥x0−x∗∥22)
取迭代次数 k = L ∥ x 0 − x ∗ ∥ 2 2 ε k=L\frac{\Vert x^0-x^*\Vert_2^2}{\varepsilon} k=Lε∥x0−x∗∥22次,可以保证收敛到ε - approximation optional value
临近梯度法
很多正则项具有不可微分的性质,因此不能直接利用梯度
临近算子
P r o x h ( x ) = arg min y ∈ R n h ( y ) + 1 2 ∥ x − y ∥ 2 {\rm Prox}_h(x)=\arg \min_{y\in R^n} h(y)+\frac{1}{2} \Vert x-y\Vert^2 Proxh(x)=argy∈Rnminh(y)+21∥x−y∥2
- 注意代入h的是y,所以对于临近算子的分类需要对y的取值分类
- y的代入看作整体代入,h前的常数系数不需要放进范数平方项中, P r o x α h ( a x + b ) = arg min y ∈ R n { α h ( y ) + 1 2 ∥ y − ( a x + b ) ∥ 2 } {\rm Prox}_{\alpha h}(ax+b)=\arg \min_{y\in R^n}\{\alpha h(y)+\frac{1}{2}\Vert y-(ax+b)\Vert^2\} Proxαh(ax+b)=argminy∈Rn{αh(y)+21∥y−(ax+b)∥2}
例题
Soft-thresholding
soft-thresholding下标的 λ \lambda λ代表阈值。
l
1
\mathcal{l}_1
l1-范数:
h
(
x
)
=
λ
∥
x
∥
1
=
∑
i
=
1
n
λ
∣
x
i
∣
=
∑
i
=
1
n
ϕ
(
x
i
)
h(x)=\lambda\Vert x\Vert_1=\sum_{i=1}^n \lambda |x_i|=\sum_{i=1}^n \phi(x_i)
h(x)=λ∥x∥1=i=1∑nλ∣xi∣=i=1∑nϕ(xi)
记
P
r
o
x
ϕ
(
x
)
=
T
λ
(
x
)
{\rm Prox}_\phi(x)=\mathcal{T}_\lambda(x)
Proxϕ(x)=Tλ(x),
T
λ
(
x
)
=
{
x
−
λ
,
x
≥
λ
0
,
∣
x
∣
<
λ
x
+
λ
,
x
≤
−
λ
=
[
∣
x
∣
−
λ
]
+
s
g
n
(
x
)
\mathcal{T}_\lambda(x)= \begin{cases} x-\lambda, & x\geq \lambda \\ 0, & |x|<\lambda \\ x+\lambda, & x\leq -\lambda \end{cases} =[|x|-\lambda]_+ {\rm sgn}(x)
Tλ(x)=⎩⎪⎨⎪⎧x−λ,0,x+λ,x≥λ∣x∣<λx≤−λ=[∣x∣−λ]+sgn(x)
由此可得
P
r
o
x
h
(
x
)
=
(
T
λ
(
x
1
)
,
T
λ
(
x
2
)
,
⋯
,
T
λ
(
x
n
)
)
T
=
[
∣
x
∣
−
λ
e
]
+
⊙
s
g
n
(
x
)
{\rm Prox}_h(x)=(\mathcal{T}_\lambda(x_1),\mathcal{T}_\lambda(x_2),\cdots,\mathcal{T}_\lambda(x_n))^T=[|x|-\lambda e]_+\odot {\rm sgn}(x)
Proxh(x)=(Tλ(x1),Tλ(x2),⋯,Tλ(xn))T=[∣x∣−λe]+⊙sgn(x)
复合函数的临近算子
-
h ( x ) = g ( λ x + a ) h(x)=g(\lambda x+a) h(x)=g(λx+a):
P r o x h ( x ) = 1 λ [ P r o x λ 2 g ( λ x + a ) − a ] {\rm Prox}_h(x)=\frac{1}{\lambda}[{\rm Prox}_{\lambda^2g}(\lambda x+a)-a] Proxh(x)=λ1[Proxλ2g(λx+a)−a] -
h ( x ) = λ g ( x / λ ) h(x)=\lambda g(x/\lambda) h(x)=λg(x/λ):
P r o x h ( x ) = λ P r o x g / λ ( x / λ ) {\rm Prox}_h(x)={\lambda}{\rm Prox}_{g/\lambda}(x/\lambda) Proxh(x)=λProxg/λ(x/λ)
证明
记 h ( x ) = g ( λ x + a ) h(x)=g(\lambda x+a) h(x)=g(λx+a),
P r o x h ( x ) = arg min y ∈ R n { h ( y ) + 1 2 ∥ x − y ∥ 2 } = arg min y ∈ R n { g ( λ y + a ) + 1 2 ∥ x − y ∥ 2 } {\rm Prox}_h(x)=\arg \min_{y\in R^n} \{h(y)+\frac{1}{2} \Vert x-y\Vert^2\}=\arg \min_{y\in R^n}\{g(\lambda y+a)+\frac{1}{2} \Vert x-y\Vert^2\} Proxh(x)=argy∈Rnmin{h(y)+21∥x−y∥2}=argy∈Rnmin{g(λy+a)+21∥x−y∥2}
令== z = λ y + a z=\lambda y+a z=λy+a==,上式化为
arg min z ∈ R n { g ( z ) + 1 2 ∥ 1 λ ( z − a ) − x ∥ 2 } = arg min z ∈ R n 1 λ 2 { λ 2 g ( z ) + 1 2 ∥ z − ( λ x + a ) ∥ 2 } \arg \min_{z\in R^n}\{g(z)+\frac{1}{2} \Vert \frac{1}{\lambda}(z-a)-x\Vert^2\}=\arg \min_{z\in R^n}\frac{1}{\lambda^2}\{\lambda^2 g(z)+\frac{1}{2}\Vert z-(\lambda x+a)\Vert^2\} argz∈Rnmin{g(z)+21∥λ1(z−a)−x∥2}=argz∈Rnminλ21{λ2g(z)+21∥z−(λx+a)∥2}
也就是
z = P r o x λ 2 g ( λ x + a ) , y = 1 λ [ P r o x λ 2 g ( λ x + a ) − a ] z={\rm Prox}_{\lambda^2g}(\lambda x+a),\ y=\frac{1}{\lambda}[{\rm Prox}_{\lambda^2g}(\lambda x+a)-a] z=Proxλ2g(λx+a), y=λ1[Proxλ2g(λx+a)−a]
临近梯度
对于函数
f
(
x
)
=
h
(
x
)
+
g
(
x
)
f(x)=h(x)+g(x)
f(x)=h(x)+g(x)(g连续可微凸函数,h连续不处处可微)
∇
~
f
(
x
)
=
x
−
P
r
o
x
α
h
(
x
−
α
∇
g
(
x
)
)
\tilde{\nabla} f(x)=x-{\rm Prox}_{\alpha h}(x-\alpha \nabla g(x))
∇~f(x)=x−Proxαh(x−α∇g(x))
可以代进去算一下,感觉蛮对的
由此获得临近梯度法的迭代公式
x
k
+
1
=
P
r
o
x
α
h
(
x
−
α
∇
g
(
x
)
)
x^{k+1}={\rm Prox}_{\alpha h}(x-\alpha \nabla g(x))
xk+1=Proxαh(x−α∇g(x))
可以看作是步长为1的基于临近梯度的梯度下降,或是基于最优性条件的不动点迭代
例题
Lasso
P r o x α k λ h ( x − α A T ( A x k − b ) ) {\rm Prox}_{\alpha_k \lambda h}(x-\alpha A^T(Ax^k-b)) Proxαkλh(x−αAT(Axk−b))
对应的soft-thresholding函数,将括号内看作整体x,阈值为h的系数 α k λ \alpha_k \lambda αkλ
块坐标下降
-
求解大规模最优化问题
-
适合并行计算或分布式计算
基本框架
-
给定初始值
-
判断终止条件
-
选择块坐标索引 i k i_k ik
-
更新计算 x i k k + 1 x_{i_k}^{k+1} xikk+1
-
固定其他分块不变
-
-
进入下一个迭代
固定其他分块变量,更新被选择的分块变量:适应并行/分布式计算
子问题更新机制
精确极小化机制
-
通过闭式解
-
通过迭代,达到足够精度时得到近似最优解
如果子问题更新机制采用精确极小化机制,所得到的序列也有可能是发散的
临近梯度机制
收敛更稳定,不发散
块坐标选择机制
循环机制
简单循环,充分循环
讨论
-
最容易实现
-
尤其适合分块之间耦合不紧密的情形
-
采用精确极小化机制来计算分块子问题,再采用循环机制选择分块变量,可能导致算法不收敛
随机机制
均匀采样,重要性采样(根据分块光滑参数),任意采样
讨论
- 实现较为简单
- 对于非凸问题更容易跳出局部最优解
- 更适合并行计算
- 计算复杂度比循环机制稍微高一点
贪婪机制
- Guass-Southwell 机制:选择梯度范数最大的分块,范数越大越需要优化计算
- 最大分块改进机制:选取分块变量对应目标函数值最小的分块,即选择下降最大的分块
- Gauss-Southwell-Lipschitz 机制:在Guass-Southwell 机制的基础上结合光滑参数进行选择
讨论
- 迭代步数较少,尤其适用于稀疏最优解
- 可以i并行处理
- 每个迭代步所需要的计算量最多
随机梯度
具备快速高效求解能力,适合处理海量数据,而无需为过高的求解精度而付出较多的计算迭代。
经典随机梯度(SGD)
Stochastic Gradient Descent method
每一个迭代步都只利用当前迭代步所选择到的数据进行更新
w
k
+
1
=
w
k
−
α
k
∇
f
i
(
k
)
(
w
k
)
w^{k+1}=w^k-\alpha_k \nabla f_{i(k)}(w^k)
wk+1=wk−αk∇fi(k)(wk)
在凸优化问题中,迭代复杂度为
O
(
1
/
k
)
\mathcal{O}(1/\sqrt{k})
O(1/k),收敛速度慢于经典梯度下降(强凸条件下迭代复杂度可以达到
O
(
1
/
k
)
\mathcal{O}(1/{k})
O(1/k),但还是比经典梯度下降的线性收敛速度慢)。但是每一步的计算复杂度显著降低。
随机平均梯度(SAG)
Stochased Average Gradient method
利用历史梯度信息,将计算过的梯度都保存着内存中,并不断更新且用于算法设计
{
y
j
k
+
1
=
∇
f
j
(
w
k
)
,
j
=
i
(
k
)
y
j
k
+
1
=
y
j
k
,
j
≠
i
(
k
)
,
w
k
+
1
=
w
k
−
α
k
n
∇
y
j
k
+
1
\begin{cases} y_j^{k+1}=\nabla f_j(w^k), & j=i(k) \\ y_j^{k+1}=y_j^k, & j\neq i(k) \end{cases} ,\quad w^{k+1}=w^k-\frac{\alpha_k}{n} \nabla y_j^{k+1}
{yjk+1=∇fj(wk),yjk+1=yjk,j=i(k)j=i(k),wk+1=wk−nαk∇yjk+1
每个迭代步只需计算一次单个函数梯度。但是需要在内存中存储n个d维梯度向量,在存储需求方面比随机梯度法显著增加。
接近于一种方差减小的随机梯度算法,相当于方差减小机制中 α = 1 / n , Y = y i ( k ) k \alpha=1/n,Y=y^{k}_{i(k)} α=1/n,Y=yi(k)k。
理论上SAG可以找强凸假设下达到线性收敛速度。
方差减小随机梯度(SVRG)
Stochastic Variance Reduced Gradient method
随机梯度法利用的梯度信息可以看作对整体函数梯度的随机采样,于是可以建立一种新的随机变量,这个新的随机变量依然是整体的无偏估计,但是比原随机变量有更小的方差,从而使每个采样估计更加稳定。
w
k
+
1
=
w
k
−
α
k
[
∇
f
i
(
k
)
(
w
k
)
−
∇
f
i
(
k
)
(
w
~
)
+
1
n
∑
j
=
1
n
∇
f
j
(
w
~
)
]
w^{k+1}=w^k-\alpha_k [\nabla f_{i(k)}(w^k)-\nabla f_{i(k)}(\widetilde w)+\frac{1}{n}\sum_{j=1}^n \nabla f_{j}(\widetilde w)]
wk+1=wk−αk[∇fi(k)(wk)−∇fi(k)(w
)+n1j=1∑n∇fj(w
)]
引入固定参数
w
~
\widetilde w
w
。
∇
g
(
w
~
)
=
1
n
∑
j
=
1
n
∇
f
j
(
w
~
)
\nabla g(\widetilde w)=\frac{1}{n}\sum_{j=1}^n \nabla f_{j}(\widetilde w)
∇g(w
)=n1∑j=1n∇fj(w
).
可以达到和SAG一样的收敛速度,常数系数更优。
无偏方差减小随机梯度(SAGA)
相当于方差减小机制中 α = 1 , Y = y i ( k ) k \alpha=1,Y=y^{k}_{i(k)} α=1,Y=yi(k)k,是一个无偏估计。
可以达到和SAG一样的收敛速度,常数系数更优。
增广拉格朗日方法
对偶上升方法
-
不稳定,且需要增加许多对问题的假设才能建立其理论收敛性质。
-
对偶上升方法具备对偶分解的优势,该优势可以帮助算法的分布式或并行实现。
增广拉格朗日方法
为了增强对偶上升方法计算过程中的稳定性,增加了线性等式约束的二次惩罚项
在每个迭代步自动满足最优性条件中的第二个等式(拉格朗日梯度=0)
- 理论上稳健,数值上稳定
- 满足一些最优性条件。在每个迭代步自动满足最优性条件中的第二个等式
- 破坏了可分结构
交替方向法
增广拉格朗日方法无法把两个分块变量的求解分开
- 分开了分块变量的求解,提高求解效率
- 一定程度上保持了增广拉格朗日方法的稳定性
- 当分块数量>=3时,可能无法建立算法收敛性
面向深度学习的最优化方法
深度学习模型的最优解未必是最佳的,因其模型在训练数据上的局限性,我们需要计算泛化能力更好的“最优解”。
挑战
- 步长的选择
- 学习率自适应调整机制
- 避免陷入坏的局部最优解
动量加速
动量技巧的核心是利用上一步迭代的信息来构造对当前迭代步的动量加速。
- 在梯度方向发生改变时减少更新,在梯度方向保持不变时加大更新力度,一定程度上具有自适应能力
- 梯度变化滞后于函数变化(改进:Nesterov加速)
Nesterov加速
将一阶算法的复杂度从 O ( 1 / ϵ ) \mathcal{O}(1/{\epsilon}) O(1/ϵ)提升到 O ( 1 / ϵ ) \mathcal{O}(1/{\sqrt \epsilon}) O(1/ϵ)(将迭代复杂度从 O ( 1 / k ) \mathcal{O}(1/k) O(1/k)降到== O ( 1 / k 2 ) \mathcal{O}(1/k^2) O(1/k2)==)
临近梯度法FISTA:
特点
- 迭代复杂度
- 步长固定
- 梯度变化同步于函数变化,预测这一步的f变化,修改这一步的动量
Adagrad
将传统步长除以历史梯度信息来建立自适应步长机制,从而自适应调整步长
- 自适应调整步长
- 利用历史梯度信息
- 步长会越来越小,甚至小到算法不会再获得额外知识
Adadelta
试图降低 Adagrad 方法的过度的学习率单调递减,将累加限制在固定大小窗口内的历史梯度。
每个迭代步的累积梯度平方是当前迭代步梯度平方和历史平均的加权平均值
基本版本可以表示为
最终版本表示为
- 避免学习率的过度递减
RMSprop
基本版本的Adadelta
Adam
自适应矩估计方法,是动量加速和学习率调整的结合。
保存了历史梯度的指数衰减平均值和历史梯度平方的指数衰减平均值,调整更新、约束步长
由于 m k , v k m_k,v_k mk,vk在0处为有偏估计,尤其是在最初几个迭代步或衰减较慢的时候( β 1 , β 2 \beta_1,\beta_2 β1,β2接近1时),因此进行误差校正
迭代格式为