赞
踩
Lipschitz 连续: 在一个连续函数
f
f
f上面额外施加了一个限制,要求存在一个常数
K
≥
0
K \geq 0
K≥0使得定义域内的任意两个元素
x
1
x_1
x1 和
x
2
x_2
x2 都满足
∣
f
(
x
1
)
−
f
(
x
2
)
∣
≤
K
∣
x
1
−
x
2
∣
|f(x_1) - f(x_2)| \leq K |x_1 - x_2|
∣f(x1)−f(x2)∣≤K∣x1−x2∣
此时称函数
f
f
f的Lipschitz常数为 K。
简单理解,就是 f ′ ( x ) ≤ K , ∀ x ∈ R f'(x) \leq K, \forall x \in R f′(x)≤K,∀x∈R , R R R为 f f f的定义域
考虑以下线性转化问题:
b
=
A
x
+
w
b = Ax + w
b=Ax+w
例如在图像模糊问题中, A为模糊模板(由未模糊图像通过转换而来), b为模糊图像, w为噪声。 并且, A 和 b已知, x为待求的系数。
求解该问题的传统方法为最小二乘法,思想很简单,使得重构误差
∣
∣
A
x
−
b
∣
∣
2
|| Ax - b||^2
∣∣Ax−b∣∣2最小,即:
x
^
=
a
r
g
min
x
∣
∣
A
x
−
b
∣
∣
2
\hat{x} = arg\min_x ||Ax- b||^2
x^=argxmin∣∣Ax−b∣∣2
对
f
(
x
)
=
∣
∣
A
x
−
b
∣
∣
2
f(x) = ||Ax - b||^2
f(x)=∣∣Ax−b∣∣2求导,可得其导数为:
f
′
(
x
)
=
2
A
T
(
A
x
−
b
)
f'(x) = 2A^T(Ax-b)
f′(x)=2AT(Ax−b)。 对于该问题,令导数为零即可以取得最小值(函数
f
(
x
)
f(x)
f(x)为凸函数,其极小值为最小值)。
m i n ∣ ∣ x ∣ ∣ 1 s . t . ∣ ∣ A x − b ∣ ∣ 2 ≤ ϵ min||x||_1 \\ s.t. ||Ax-b||^2 \leq \epsilon min∣∣x∣∣1s.t.∣∣Ax−b∣∣2≤ϵ
其中,
∣
∣
x
∣
∣
1
||x||_1
∣∣x∣∣1为惩罚项,用以规范化参数
x
x
x。该例子使用L1范数作为惩罚项,是希望
x
x
x尽量稀疏(非零元素个数尽可能的少),即b是A的一个稀疏表示。
∣
∣
A
x
−
b
∣
∣
2
≤
ϵ
||Ax-b||^2 \leq \epsilon
∣∣Ax−b∣∣2≤ϵ则为约束条件,即重构误差最小。问题(3)也可以描述为:
min
x
F
(
x
)
≡
∣
∣
A
x
−
b
∣
∣
2
+
λ
∣
∣
x
∣
∣
1
\min_x{F(x) \equiv ||Ax - b||^2 + \lambda||x||_1}
xminF(x)≡∣∣Ax−b∣∣2+λ∣∣x∣∣1
式子(4)即为一般稀疏表示的优化问题。希望重构误差尽可能的小,同时参数的个数尽可能的少。
注: 惩罚项也可以是L2或者其他范数。
考虑更为一般的情况,我们来讨论梯度下降法。有无约束的优化问题如下:
min
x
F
(
x
)
≡
f
(
x
)
\min_x {F(x) \equiv f(x)}
xminF(x)≡f(x)
梯度下降法基于这样的观察:如果实值函数
F
(
x
)
F(x)
F(x)在点
a
a
a处可微且有定义,那么函数
F
(
x
)
F(x)
F(x)在点
a
a
a沿着梯度想反的方向
−
▽
F
(
a
)
-\triangledown F(a)
−▽F(a)下降最快。
基于此,我们假设
f
(
x
)
f(x)
f(x)连续可微。如果存在一个足够小的数值
t
>
0
t>0
t>0使得
x
2
=
x
1
−
t
▽
F
(
a
)
x_2 = x_1 - t\triangledown F(a)
x2=x1−t▽F(a),那么:
F
(
x
1
)
≥
F
(
x
2
)
x
0
∈
R
n
,
x
k
=
x
k
−
1
−
t
k
▽
f
(
x
k
−
1
)
F(x_1) \geq F(x_2) \\ x_0 \in R^n, x_k = x_{k-1} - t_k \triangledown f(x_{k-1})
F(x1)≥F(x2)x0∈Rn,xk=xk−1−tk▽f(xk−1)
梯度下降法的核心就是通过式子(6)找到序列
x
k
{x_k}
xk,使得
F
(
x
k
)
≥
F
(
x
k
−
1
)
F(x_k) \geq F(x_{k-1})
F(xk)≥F(xk−1)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpOl6ZTP-1627534604110)(E:\项目\8.2 最优化\梯度下降法.png)]
从上图可以看出:初始点不同,获得的最小值也不同。因为梯度下降法求解的是局部最小值,受初值的影响较大。如果函数 f ( x ) f(x) f(x)为凸函数的话,则局部最小值亦为全局最小值。这时,初始点只对迭代速度有影响。
再回头看一下式子(6),我们使用步长 t k t_k tk和倒数 ▽ F ( x k ) \triangledown F(x_k) ▽F(xk)来控制每一次迭代时 x x x的变化量。再看一下上面的那张图,对于每一次迭代,我们当然希望 F ( x ) F(x) F(x)的值降得越快越好,这样我们就能更快速的获得函数的最小值。因此,步长 t k t_k tk的选择很重要。
如果步长 t k t_k tk太小,则找到最小值的迭代次数非常多,即迭代速度非常慢,或者说收敛速度很慢;而步长太大的话,则会出现overshoot the minimum的现象,即不断在最小值左右徘徊,跳来跳去的。
然而, t k t_k tk最后还是作用在 x k − 1 x_{k-1} xk−1上,得到 x k x_k xk。因此,更为朴素的思想应该是:序列 x k {x_k} xk的个数尽可能小,即每一次迭代步伐尽可能大,函数值减少得尽可能的多。那么就是关于序列 x k {x_k} xk的选择了,如何更好的选择每一个点 x k x_k xk,使得函数值更快的趋紧其最小值。
ISTA(Iterative shrinkage-thresholding algorithm), 即 迭代阈值收缩算法。
先从无约束优化问题开始, 即上面的式子(5):
这时候,我们还假设
f
(
x
)
f(x)
f(x)满足Lipschitz连续条件,即
f
(
x
)
f(x)
f(x)的导数有下界,其最小下界称为Lipshitz常数
L
(
f
)
L(f)
L(f)。这时,对于任意的
L
≥
L
(
f
)
L \geq L(f)
L≥L(f), 有:
f
(
x
)
≤
f
(
y
)
+
<
x
−
y
,
▽
f
(
y
)
>
+
L
2
∣
∣
x
−
y
∣
∣
2
∀
x
,
y
∈
R
n
f(x) \leq f(y) + <x - y, \triangledown f(y)> + \frac L2||x-y||^2 \space \space \forall x,y \in R^n
f(x)≤f(y)+<x−y,▽f(y)>+2L∣∣x−y∣∣2 ∀x,y∈Rn
基于此,在点
x
k
x_k
xk附近可以把函数值近似为:
f
^
(
x
,
x
k
)
=
f
(
x
k
)
+
<
▽
f
(
x
k
)
,
x
−
x
k
>
+
L
2
∣
∣
x
−
x
k
∣
∣
2
\hat{f}(x, x_k) = f(x_k) + <\triangledown f(x_k), x-x_k> + \frac L2 ||x-x_k||^2
f^(x,xk)=f(xk)+<▽f(xk),x−xk>+2L∣∣x−xk∣∣2
在梯度下降的每一步迭代中,将点
x
k
−
1
x_{k-1}
xk−1处的近似函数取得最小值的点作为下一次迭代的起始点
x
k
x_k
xk,这就是所谓的Proximal Gradient Descent for L1 Regularization算法(其中,
t
k
=
1
L
t_k = \frac 1L
tk=L1)。
x
k
=
a
r
g
min
x
{
f
(
x
k
−
1
+
<
x
−
x
k
−
1
,
▽
f
(
x
k
−
1
)
>
+
1
2
t
k
∣
∣
x
−
x
k
−
1
∣
∣
2
)
}
x_k = arg\min_x\{f(x_{k-1} + <x - x_{k-1}, \triangledown f(x_{k-1})> + \frac 1{2t_k}||x-x_{k-1}||^2)\}
xk=argxmin{f(xk−1+<x−xk−1,▽f(xk−1)>+2tk1∣∣x−xk−1∣∣2)}
上面的方法只适合解决非约束问题。而ISTA要解决的是带惩罚项的优化问题,引入范数规范函数
g
(
x
)
g(x)
g(x)对参数
x
x
x进行约束,如下:
m
i
n
{
F
(
x
)
≡
f
(
x
)
+
g
(
x
)
:
x
∈
R
n
}
min\{F(x)\equiv f(x) + g(x): x\in R^n\}
min{F(x)≡f(x)+g(x):x∈Rn}
使用更为一般的二次近似模型来求解上述的优化问题,在点
y
,
F
(
x
)
:
=
f
(
x
)
+
g
(
x
)
y, F(x):=f(x) + g(x)
y,F(x):=f(x)+g(x)的二次近似函数为:
Q
L
(
x
,
y
)
:
=
f
(
y
)
+
<
x
−
y
,
▽
f
(
y
)
>
+
L
2
∣
∣
x
−
y
∣
∣
2
+
g
(
x
)
Q_L(x, y) := f(y) + <x-y, \triangledown f(y)> + \frac L2||x-y||^2 + g(x)
QL(x,y):=f(y)+<x−y,▽f(y)>+2L∣∣x−y∣∣2+g(x)
该函数的最小值表示为 :
P
L
P_L
PL是proximal(近端算子的简写形式)、
P
L
(
y
)
:
=
a
r
g
min
x
{
Q
L
(
x
,
y
)
:
x
∈
R
n
}
P_L(y) := arg\min_x\{Q_L(x,y): x\in R^n\}
PL(y):=argxmin{QL(x,y):x∈Rn}
忽略其常数项
f
(
y
)
f(y)
f(y)和
▽
F
(
y
)
\triangledown F(y)
▽F(y),这些有和没有对结果没有影响。再结合式子(11)和(12),
P
L
(
y
)
P_L(y)
PL(y)可以写成:
P
L
(
y
)
=
a
r
g
min
x
{
g
(
x
)
+
L
2
∣
∣
x
−
(
y
−
1
L
▽
f
(
y
)
)
∣
∣
2
}
P_L(y) = arg\min_x\{g(x) + \frac L2||x-(y-\frac 1L \triangledown f(y))||^2\}
PL(y)=argxmin{g(x)+2L∣∣x−(y−L1▽f(y))∣∣2}
显然,使用ISTA解决带约束的优化问题时的基本迭代步骤为:
x
k
=
P
L
(
x
k
−
1
)
x_k = P_L(x_k - 1)
xk=PL(xk−1)
固定步长的ISTA的基本迭代步骤如下(步长
t
=
1
/
L
(
f
)
t = 1 / L(f)
t=1/L(f)):
ISTA with constant stepsize
Input: $L := L(f) - A $ Lipschitz constant of ▽ f \triangledown f ▽f.
Step 0: Take x 0 ∈ R n x_0 \in R^n x0∈Rn
Step k: (k >= 1) Compute
x k = P L ( x k − 1 ) x_k = P_L(x_{k-1}) xk=PL(xk−1)
然而, 固定步长的ISTA的缺点是: Lipschitz常数 L ( f ) L(f) L(f)不一定可知或者计算。例如, L1范数约束的优化问题,其Lipschitz常数依赖于 A T A A^TA ATA的最大特征值。而对于大规模的问题,非常难计算。因此,使用以下带回溯(backtracking)的ISTA:
ISTA with backtracking
Step 0. Take L 0 > 0 L_0 > 0 L0>0,some η > 1 \eta > 1 η>1, and x 0 ∈ R n x_0 \in R^n x0∈Rn
Step k. ( k ≥ 1 ) (k \geq 1) (k≥1) Find the smallest nonnegative intergers i k i_k ik such that with L ˉ = η i k L k − 1 \bar{L} = \eta^{i_k} L_{k-1} Lˉ=ηikLk−1
F ( P L ˉ ( x k − 1 ) ) ≤ Q L ˉ ( P L ˉ ( x k − 1 , x k − 1 ) ) F(P_{\bar{L}}(x_{k-1})) \leq Q_{\bar{L}}(P_{\bar{L}}(x_{k-1}, x_{k-1})) F(PLˉ(xk−1))≤QLˉ(PLˉ(xk−1,xk−1))
Set L k = η i k L k − 1 L_k = \eta ^ {i_k}L_{k-1} Lk=ηikLk−1 and compute
x k = P L k ( x k − 1 ) x_k = P_{L_k}(x_{k-1}) xk=PLk(xk−1)
FISTA 与 ISTA的区别在于迭代步骤中近似函数起始点y的选择。ISTA使用前一次迭代求得的近似函数最小值 x k − 1 x_{k-1} xk−1,而FISTA则使用另一种方法来计算y的位置。
FISTA with constant stepsize
**Input: ** L = L ( f ) − A L = L(f) - A L=L(f)−A Lipschitz constant of ▽ f \triangledown f ▽f.
Step 0. Take y 1 = x 0 ∈ R n y_1 = x_0 \in R^n y1=x0∈Rn, t 1 = 1 t_1 = 1 t1=1.
Step k. ( k ≥ 1 ) (k \geq 1) (k≥1) Compute
x k = P L ( y k ) t k + 1 = 1 + 1 + 4 t k 2 2 , y k + 1 = x k + t k − 1 t k + ! ( x k − x k − 1 ) x_k = P_L(y_k) \\ t_{k+1} = \frac {1 + \sqrt{1+4t^2_k}}{2}, \\ y_{k+1} = x_k + \frac {t_k - 1}{t_{k+!}}(x_k - x_{k-1}) xk=PL(yk)tk+1=21+1+4tk2 ,yk+1=xk+tk+!tk−1(xk−xk−1)
当然,考虑到与ISTA同样的问题:问题规模大的时候,决定步长的Lipschitz常数计算复杂。FISTA与ISTA一样,亦有其回溯算法。在这个问题上,FISTA与ISTA并没有区别,上面也说了,FISTA与ISTA的区别仅仅在于每一步迭代时近似函数起始点的选择。更加简明的说:FISTA用一种更为聪明的办法选择序列 { x k } \{x_k\} {xk}, 使得其基于梯度下降思想的迭代过程更加快速地趋近问题函数 F ( x ) F(x) F(x)的最小值。
对于 LASSO 问题:
min
x
1
2
∣
∣
A
x
−
b
∣
∣
2
+
μ
∣
∣
x
∣
∣
1
\min_x{ \frac 1 2||Ax - b||^2 + \mu||x||_1}
xmin21∣∣Ax−b∣∣2+μ∣∣x∣∣1
利用第二类 Nesterov 加速的近似点梯度法进行优化。
该算法被外层连续化策略调用,在连续化策略下完成某一固定正则化系数的内层迭代优化。第二类 Nesterov 加速算法的迭代格式如下:
z
k
=
(
1
−
γ
k
)
x
k
−
1
+
γ
k
y
k
−
1
,
y
k
=
p
r
o
x
t
k
γ
k
h
(
y
k
−
1
−
t
k
γ
k
A
T
(
A
z
k
−
b
)
)
,
x
k
=
(
1
−
γ
k
)
x
k
−
1
+
γ
k
y
k
.
z^{k} = (1-\gamma_k)x^{k-1} +\gamma_ky^{k-1}, \\ y^{k} = prox_{\frac{t_k}{\gamma_k}h}(y^{k-1}-\frac{t_k}{\gamma_k}A^T(Az^k-b)), \\ x^{k} = (1-\gamma_k)x^{k-1}+\gamma_ky^k.
zk=(1−γk)xk−1+γkyk−1,yk=proxγktkh(yk−1−γktkAT(Azk−b)),xk=(1−γk)xk−1+γkyk.
和经典FISTA算法的一个重要区别在于,第二类Nesterov加速算法中的三个序列{
x
k
x^k
xk},{yk}和{zk}都可以保证在定义域内.而FISTA算法中的序列{
y
k
y^k
yk}不一定在定义域内.
y
k
=
p
r
o
x
t
k
γ
k
h
(
y
k
−
1
−
t
k
γ
k
A
T
(
A
z
k
−
b
)
)
y^{k} = prox_{\frac{t_k}{\gamma_k}h}(y^{k-1}-\frac{t_k}{\gamma_k}A^T(Az^k-b))
yk=proxγktkh(yk−1−γktkAT(Azk−b))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFt5oq6d-1627534604113)(C:\Users\Maple\AppData\Roaming\Typora\typora-user-images\image-20210517192923458.png)]
同样的,对于LASSO问题:
min
x
1
2
∣
∣
A
x
−
b
∣
∣
2
+
μ
∣
∣
x
∣
∣
1
\min_x{ \frac 1 2||Ax - b||^2 + \mu||x||_1}
xmin21∣∣Ax−b∣∣2+μ∣∣x∣∣1
利用第三类 Nesterov 加速的近似点梯度法进行优化。其迭代格式如下:
z
k
=
(
1
−
γ
k
)
x
k
−
1
+
γ
k
y
k
−
1
,
y
k
=
p
r
o
x
(
t
k
∑
i
=
1
k
1
γ
i
)
h
(
−
t
k
∑
i
=
1
k
1
γ
i
∇
f
(
z
i
)
,
x
k
=
(
1
−
γ
k
)
x
k
−
1
+
γ
k
y
k
.
z^{k} = (1-\gamma_k)x^{k-1} +\gamma_ky^{k-1}, \\ y^{k} = prox_{(t_k\sum_{i=1}^{k}{\frac{1}{\gamma_i}})h}(-t_{k}\sum_{i=1}^{k}{\frac{1}{\gamma_i}}\nabla{f(z^i)}, \\ x^{k} = (1-\gamma_k)x^{k-1}+\gamma_ky^k.
zk=(1−γk)xk−1+γkyk−1,yk=prox(tk∑i=1kγi1)h(−tki=1∑kγi1∇f(zi),xk=(1−γk)xk−1+γkyk.
该算法和第二类Nesterov加速算法的区别仅仅在于
y
k
y^k
yk的更新,第三类Nesterow加速算法计算
y
k
y^k
yk时需要利用全部已有的
∇
f
(
z
i
)
,
i
=
1
,
2
,
⋯
,
k
\nabla{f(z^i)},i=1,2,\cdots,k
∇f(zi),i=1,2,⋯,k.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87bsvFfs-1627534604116)(C:\Users\Maple\AppData\Roaming\Typora\typora-user-images\image-20210517184956548.png)]
可以看到:就固定步长而言,FISTA算法相较于第二类Nesterov加速算法收敛得略快一些,也可以注意到FISTA算法是非单调算法.同时,BB步长和线搜索技巧可以加速算法的收敛速度.此外,带线搜索的近似点梯度法可以比带线搜索的FISTA算法更加收敛.
梯度下降法中面临的挑战问题:
动量法:
主要想法:在参数更新时考虑历史梯度信息 保持惯性
参数更新规则
v
t
←
ρ
v
t
−
1
−
η
▽
J
(
θ
t
)
θ
t
+
1
←
θ
t
+
v
t
v_t \leftarrow \rho v_{t-1} - \eta \triangledown J(\theta_t) \\ \theta_{t+1} \leftarrow \theta_{t} +v_t
vt←ρvt−1−η▽J(θt)θt+1←θt+vt
参数
ρ
∈
[
0
,
1
)
\rho \in [0, 1)
ρ∈[0,1)为历史梯度贡献的衰减速率,一般为 0.5、0.9或0.99
η \eta η : 学习率
ρ \rho ρ也可以随着迭代次数的增大而变大,随着时间推移调整 ρ \rho ρ比收缩 η \eta η更重要 , 动量法克制了SGD中的两个问题
Nesterov 动量法:
受 Nesterov 加速梯度算法 NGA 的启发
梯度计算在施加当前速度之后
在动量法的基础上添加了一个校正因子(correction factor)
v
t
←
ρ
v
t
−
1
−
η
▽
J
(
θ
t
+
ρ
v
t
−
1
)
θ
t
+
1
←
θ
t
+
v
t
v_t \leftarrow \rho v_{t-1} - \eta \triangledown J(\theta_t + \rho v_{t-1}) \\ \theta_{t+1} \leftarrow \theta_{t} +v_t
vt←ρvt−1−η▽J(θt+ρvt−1)θt+1←θt+vt
AdaGrad
学习率自适应:与梯度历史平方值的综合的平方根成反比
效果: 更为平缓的倾斜方向上回去的更大的进步,可能逃离鞍点
问题:理解题都平方和增长过快,导致学习率较小,提前终止学习。
s
t
←
s
t
−
1
+
▽
J
(
θ
t
)
∗
▽
J
(
θ
t
)
θ
t
+
1
←
θ
t
−
η
s
t
▽
J
(
θ
t
)
s_t \leftarrow s_{t-1} + \triangledown J(\theta_t) * \triangledown J(\theta_t) \\ \theta_{t+1} \leftarrow \theta_t - \frac \eta{\sqrt{s_t}}\triangledown J(\theta_t)
st←st−1+▽J(θt)∗▽J(θt)θt+1←θt−st
η▽J(θt)
RMSProp
在AdaGrad基础上,降低了对早期历史梯度的依赖
通过设置衰减系数 β 2 \beta_2 β2实现
建议
β
2
\beta_2
β2 = 0.9
s
t
←
β
2
s
t
−
1
+
(
1
−
β
2
)
θ
t
+
1
←
θ
t
−
η
s
t
▽
J
(
θ
t
)
s_t \leftarrow \beta_2 s_{t-1} + (1 - \beta_2) \\ \theta_{t+1} \leftarrow \theta_t - \frac {\eta}{\sqrt{s_t}} \triangledown J(\theta_t)
st←β2st−1+(1−β2)θt+1←θt−st
η▽J(θt)
Adam
同时考虑动量和学习率自适应
β
1
\beta_1
β1通常设置成0.9,
β
2
\beta_2
β2设置成0.999
v
t
←
β
1
v
t
−
1
−
(
1
−
β
1
)
▽
J
(
θ
t
)
s
t
←
β
2
s
t
−
1
−
(
1
−
β
2
)
▽
J
(
θ
t
)
∗
▽
J
(
θ
t
)
θ
t
+
1
←
θ
t
−
η
v
t
s
t
v_t \leftarrow \beta_1 v_{t-1} - (1 - \beta_1)\triangledown J(\theta_t) \\ s_t \leftarrow \beta_2 s_{t-1} - (1 - \beta_2) \triangledown J(\theta_t) * \triangledown J(\theta_t) \\ \theta_{t+1} \leftarrow \theta_t - \eta \frac {v_t}{\sqrt{s_t}}
vt←β1vt−1−(1−β1)▽J(θt)st←β2st−1−(1−β2)▽J(θt)∗▽J(θt)θt+1←θt−ηst
vt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。