Convex-ConCave Procedure(CCCP) 凹凸规划 高效的问题分解求解方法

最近接触了 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):RnR,使得f可以被分解为g和h之间的差值:
分解形式
对于DC问题:
DC描述
在这里 f i : R n → R 对 于 i = 0 , … , m f_i:R^n\rightarrow R对于{ i } = 0 , \dots , \mathbf { m } fi:RnRi=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,HessianE(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} x tX t+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, 如果有优化的话,后面在补充吧。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值