最近接触了 ramp loss
这个loss 优劣参半, 很烦的就是这个函数它虽然连续和鲁棒,但是 不可微 非凸
DC分解 以及 CCCP规划 在这个问题上就蛮适用
下面的内容,主要来自:
参考网址1
参考网址2
以及一篇外刊
记录下来,方便学习。
CCCP规划,本质上是寻找两个凸函数之间梯度相同的两个点,即逐步减小两个函数之间的距离,使其收敛到距离最接近的点。
保留了目标函数的部分凸性,对非凸的部分进行线性化处理,进而通过迭代求解目标函数的一系列凸的子问题,进而得到原目标函数的驻点。
Convex-Concave procedure(凹凸过程)
CCCP是一种单调递减全局优化的方法。其形式可以表示为凸函数-凸函数 或者 凸函数+凹函数。
————————————
一、问题模型:DC(difference of convex)问题/规划
令f是一个DC函数,定义存在凸函数,
g
(
x
)
,
h
(
x
)
:
R
n
→
R
g(x),h(x) :{R^{n}\rightarrow R}
g(x),h(x):Rn→R,使得f可以被分解为g和h之间的差值:
对于DC问题:
在这里
f
i
:
R
n
→
R
对
于
i
=
0
,
…
,
m
f_i:R^n\rightarrow R对于{ i } = 0 , \dots , \mathbf { m }
fi:Rn→R对于i=0,…,m是一个可导的DC函数。本文探讨使用CCCP算法来优化这一问题
————————————
二、CCCP
假设一个能量函数E(x),其Hessian矩阵(二阶偏导矩阵)有界,y写成
E
(
x
)
=
E
c
a
v
e
(
x
)
+
E
v
e
x
(
x
)
E(x)=E_{cave}(x)+E_{vex}(x)
E(x)=Ecave(x)+Evex(x)形式。
接下来证明该优化形式以及过程是收敛的:
证明:∀F(x) 是凸的,Hessian 矩阵F(\vec x) > 0,由于其Hessian矩阵有界,所以 ∃ λ > 0 , H e s s i a n 矩 阵 E ( x ⃗ ) + λ F ( x ⃗ ) ) > 0 , 则 E ( x ⃗ ) + λ F ( x ⃗ ) 是 凸 的 。 所 以 E ( x ) 可 以 写 成 E ( x ) = E ( x ⃗ ) + λ F ( x ⃗ ) + ( − λ F ( x ⃗ ) ) \exists\lambda>0,Hessian矩阵E(\vec x)+\lambda F(\vec x))>0,则E(\vec x)+\lambda F(\vec x)是凸的。所以 E(x)可以写成E(x) = E(\vec x)+\lambda F(\vec x) +(- \lambda F(\vec x)) ∃λ>0,Hessian矩阵E(x)+λF(x))>0,则E(x)+λF(x)是凸的。所以E(x)可以写成E(x)=E(x)+λF(x)+(−λF(x))
其次,对于一个函数
E
(
x
)
=
E
c
a
v
e
(
x
)
+
E
v
e
x
(
x
)
E(x)=E_{cave}(x)+E_{vex}(x)
E(x)=Ecave(x)+Evex(x),则离散迭代CCCP算法
x
⃗
t
→
X
⃗
t
+
1
\vec {x}^t\rightarrow \vec{X}^{t+1}
xt→Xt+1为:
证明收敛:如果函数 E v e x ( ⋅ ) 和 E c a v e ( ⋅ ) E_{vex}(\cdot)和E_{cave}(\cdot) Evex(⋅)和Ecave(⋅)分别为凸函数和凹函数,下为证明和示意图。
图中表示为两个凸函数 上面假设为E1,下面为E2,,本质上寻找两个凸函数之间梯度相同的两个点就是在逐步减小两个函数之间的距离,使其收敛到距离最接近的点。首先在E2找到一个x0,寻找E1中与x0梯度相同的点,投影到E2上,一直重复下去,直到收敛到最小距离的点(图中为5.0)。
根据以上理论,凹凸问题相减问题可以得到解决。首先在这个算法中,应该设置初始点x_0,然后线性初始化凹陷部分函数,可以把x_{k+1}设置为上面凸函数的解,通过迭代优化进行收敛,找到全局最优点。
————————————
三 总结
在实际应用中,经常把两个函数利用线性约束/正则化写成两个凸函数相减的形式,进行优化。但是由于CCCP会有两层循环,一层优化 arg min θ ( E v e x ( θ ) + E c a v ′ ( θ i ) ⋅ θ ) , \arg \min _ { \theta } \left( E _ { \mathrm { vex } } ( \theta ) + E _ { \mathrm { cav } } ^ { \prime } \left( \theta ^ { i } \right) \cdot \theta \right), argminθ(Evex(θ)+Ecav′(θi)⋅θ),一层分别对凸函数进行梯度下降,程序速度会比较慢。
暂时就先采用这个思想去初步实现ramp loss, 如果有优化的话,后面在补充吧。