对凸优化问题,目标函数存在不可微部分时才使用(绝对值项,l1范数,迹范数),求解想法为对可微部分泰勒展开,求得下降方向作为初步更新方向,然后利用近端映射找到一个可以使不可微部分函数值最小且尽可能接近初步更新方向的新方向,作为迭代更新的方向。
目标函数的形式: f ( x ) = g ( x ) + h ( x ) f(x)=g(x)+h(x) f(x)=g(x)+h(x),其中 g ( x ) g(x) g(x)为凸函数且可微, h ( x ) h(x) h(x)是不可微的凸函数
例:
X
∈
R
m
×
n
X\in \mathbb{R}^{m\times n}
X∈Rm×n,
y
∈
R
m
y\in \mathbb{R}^{m}
y∈Rm,
y
=
X
w
y=Xw
y=Xw,
w
∈
R
n
w\in \mathbb{R}^{n}
w∈Rn表示系数向量,则优化问题目标函数
∣
∣
y
−
X
w
∣
∣
2
2
+
λ
∣
∣
w
∣
∣
1
||y-Xw||_{2}^{2}+\lambda||w||_{1}
∣∣y−Xw∣∣22+λ∣∣w∣∣1
前一项为可微凸函数,后一项为不可微凸函数,可以使用近端梯度下降法求解
近端映射
对于上述凸优化问题,需定义近端映射算子,近端映射函数的定义:
p
r
o
x
h
,
t
(
x
)
=
a
r
g
m
i
n
z
1
2
t
∣
∣
x
−
z
∣
∣
2
2
+
h
(
z
)
prox_{h,t}(x)=argmin_{z}\frac{1}{2t}||x-z||_{2}^{2}+h(z)
proxh,t(x)=argminz2t1∣∣x−z∣∣22+h(z)
即给定一个x,找到最优点
z
=
p
r
o
x
h
,
t
(
x
)
z=prox_{h,t}(x)
z=proxh,t(x),使得
1
2
t
∣
∣
x
−
z
∣
∣
2
2
+
h
(
z
)
\frac{1}{2t}||x-z||_{2}^{2}+h(z)
2t1∣∣x−z∣∣22+h(z)最小,这样的
z
z
z能够使得
h
h
h足够小,且接近原不可微点
x
x
x。
梯度迭代
选择一个初始的
x
(
0
)
x^{(0)}
x(0),然后重复:
x
(
k
)
=
p
r
o
x
h
,
t
k
(
x
(
k
−
1
)
−
t
k
∇
g
(
x
(
k
−
1
)
)
)
x^{(k)}=prox_{h,t_{k}}(x^{(k-1)}-t_{k}\nabla g(x^{(k-1)}))
x(k)=proxh,tk(x(k−1)−tk∇g(x(k−1)))
k
=
1
,
2
,
3...
k=1,2,3...
k=1,2,3...表示当前为第
k
k
k次迭代。
对于这个迭代算法可以这样理解:给定起点
x
(
k
−
1
)
x^{(k-1)}
x(k−1),先沿目标函数可微部分凸函数g的负梯度方向,做步长为
t
k
t_k
tk的梯度下降得到一个预更新值
x
~
(
k
−
1
)
\tilde{x}^{(k-1)}
x~(k−1),然后使用近端映射寻找一个
z
z
z,这个
z
z
z能使得不可微函数
h
h
h足够小,且接近预更新值,就将这个
z
z
z作为本次迭代的更新值
x
(
k
)
x^{(k)}
x(k)。
不可微凸函数h(x)
实际上,近端算子只和不可微的凸函数
h
(
w
)
h(w)
h(w) 有关.
(1)当不可微的凸函数形式为
h
(
w
)
=
0
h(w)=0
h(w)=0时,
p
r
o
x
t
(
x
)
=
a
r
g
m
i
n
z
1
2
t
∣
∣
x
−
z
∣
∣
2
2
+
0
=
x
prox_{t}(x)=argmin_{z}\frac{1}{2t}||x-z||_{2}^{2}+0=x
proxt(x)=argminz2t1∣∣x−z∣∣22+0=x
更新策略:
x
(
k
)
=
x
(
k
−
1
)
−
t
k
∇
g
(
x
(
k
−
1
)
)
x^{(k)}=x^{(k-1)}-t_{k}\nabla g(x^{(k-1)})
x(k)=x(k−1)−tk∇g(x(k−1))
此时退化为常规的梯度下降算法。
(2)当不可微的凸函数形式为
h
(
w
)
=
I
C
(
x
)
h(w)=I_{C}(x)
h(w)=IC(x)时,
p
r
o
x
t
(
x
)
=
a
r
g
m
i
n
z
1
2
t
∣
∣
x
−
z
∣
∣
2
2
+
I
C
(
x
)
=
a
r
g
m
i
n
z
∈
C
1
2
t
∣
∣
x
−
z
∣
∣
2
2
=
P
C
(
x
)
prox_{t}(x)=argmin_{z}\frac{1}{2t}||x-z||_{2}^{2}+I_{C}(x) \\ =argmin_{z\in C}\frac{1}{2t}||x-z||_{2}^{2} \\=P_{C}(x)
proxt(x)=argminz2t1∣∣x−z∣∣22+IC(x)=argminz∈C2t1∣∣x−z∣∣22=PC(x)
更新策略:
x
(
k
)
=
P
C
(
x
(
k
−
1
)
−
t
k
∇
g
(
x
(
k
−
1
)
)
)
x^{(k)}=P_{C}(x^{(k-1)}-t_{k}\nabla g(x^{(k-1)}))
x(k)=PC(x(k−1)−tk∇g(x(k−1)))
其中
I
C
I_{C}
IC为集合C的示性函数,
P
C
(
x
)
P_{C}(x)
PC(x)为集合C上的投影算子,此时为投影梯度下降法。
(3)当不可微的凸函数形式为
h
(
w
)
=
∣
∣
x
∣
∣
1
h(w)=||x||_{1}
h(w)=∣∣x∣∣1时,
p
r
o
x
t
(
x
)
=
a
r
g
m
i
n
z
1
2
t
∣
∣
x
−
z
∣
∣
2
2
+
∣
∣
z
∣
∣
1
=
a
r
g
m
i
n
z
∣
∣
x
−
z
∣
∣
2
2
+
2
t
∣
∣
z
∣
∣
1
=
S
t
(
x
)
prox_{t}(x)=argmin_{z}\frac{1}{2t}||x-z||_{2}^{2}+||z||_{1} \\ =argmin_{z}||x-z||_{2}^{2}+2t||z||_{1} \\ =S_{t}(x)
proxt(x)=argminz2t1∣∣x−z∣∣22+∣∣z∣∣1=argminz∣∣x−z∣∣22+2t∣∣z∣∣1=St(x)
(4)当不可微的凸函数形式为
h
(
w
)
=
λ
∣
∣
x
∣
∣
1
h(w)=\lambda||x||_{1}
h(w)=λ∣∣x∣∣1时,
(5)若将近端梯度算法展开成一个网络,且
h
(
x
)
h(x)
h(x)的形式不定,则网络可以根据对应问题及数据自行学得复杂的
h
(
x
)
h(x)
h(x)
参考文献
https://www.zhihu.com/tardis/zm/art/82622940?source_id=1005
https://zhuanlan.zhihu.com/p/103161094