凸优化
一.凸优化基本概念
凸优化,或叫做凸最优化,凸最小化,是数学最优化的一个子领域,研究定义于凸集中的凸函数最小化的问题。凸优化在某种意义上说较一般情形的数学最优化问题要简单,譬如在凸优化中局部最优值必定是全局最优值。凸函数的凸性使得凸分析中的有力工具在最优化问题中得以应用,如次导数等。
(1)什么是最优化?
最优化是应用数学的一个分支,主要指在一定条件限制下,选取某种研究方案使目标达到最优的一种方法。最优化问题在当今的军事、工程、管理等领域有着极其广泛的应用。
数学模型中,最优化问题的共同特点是:求满足一定条件的变量x1,x2,…,xn,使某函数f(x1,x2,…,xn)取得最大值或者最小值。
(2)最优化常见的方法
- 梯度下降法
- 牛顿法和拟牛顿法
- 共轭梯度法
- 启发式优化方法等等
(3)应用领域
凸优化应用于很多学科领域,诸如自动控制系统,信号处理,通讯和网络,电子电路设计,数据分析和建模,统计学(最优化设计),以及金融。
二.凸集
(1)凸集的定义
在凸几何中,凸集(convex set)是在凸组合下闭合的仿射空间的子集。更具体地说,在欧氏空间中,凸集是对于集合内的每一对点,连接该对点的直线段上的每个点也在该集合内。例如,立方体是凸集,但是任何中空的或具有凹痕的例如月牙形都不是凸集。集合中的任意两点连线的点都在该集合中,则称该集合为凸集;凹集为非凸集。
(2)凸集的性质
- 凸集的交集是凸集。
- 凸集的并集不一定是凸集。
实数R上(或复数C上)的向量空间中,如果集合S中任两点的连线上的点都在S内,则称集合S为凸集。
三.凸函数
简单理解为对曲线上任意两点连线上的点对应的函数值不大于该两点对应的函数值得连线上的值。
什么是凹函数?简单理解为对曲线上任意两点连线上的点对应的函数值不小于该两点对应的函数值得连线上的值。
凸函数的局部最优解就是全局最优解。
四.凸优化问题标准形式
(1)凸优化问题(OPT)的定义
即要求目标函数是凸函数,变量所属集合是凸集合的优化问题。或者目标函数是凸函数,变量的约束函数是凸函数(不等式约束时),或者是仿射函数(等式约束时)。对于凸优化问题来说,局部最优解就是全局最优解。
(2)常见的凸优化问题
- 线性规划(LP)
- 二次规划(QP)
- 二次约束的二次规划(QCQP)
- 半正定规划(SDP)
其中SDP在机器学习领域应用很广,最近很流行。
五.凸优化之Lagerange对偶化
无论原问题是不是凸优化问题,都可以将原问题转化为凸优化问题来求解。
当Lagrange对偶问题的强对偶性成立时,可以利用求解对偶问题来求解原问题;而原问题是凸优化问题时,强对偶性往往成立。否则,可以利用求解对偶问题求出原问题最优值的下界。拉格朗日对偶讲解
六.凸优化求解
有些凸优化问题比较简单,是可以直接求解的,譬如二次规划,这里不做说明。求解凸优化问题,就要利用该问题的“凸”性——只要我一直朝着代价函数减小的方向去,那么我一定不会走错!这就是下降方法的基本思想。
(1)牛顿法
机器学习、深度学习中,损失函数的优化问题一般是基于一阶导数梯度下降的。现在,从另一个角度来看,想要让损失函数最小化,这其实是一个最值问题,对应函数的一阶导数 f’(x) = 0。也就是说,如果我们找到了能让 f’(x) = 0 的点 x,损失函数取得最小值,也就实现了模型优化目标。
- 牛顿法的迭代更新公式中没有参数学习因子,也就不需要通过交叉验证选择合适的学习因子了。
- 牛顿法被认为可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数)。
(2)梯度下降
梯度下降法和牛顿法等基于导数作为判据的优化算法,找到的都导数/梯度为0的点,而梯度等于0只是取得极值的必要条件而不是充分条件。如果我们将这个必要条件变成充分条件,即:
问题将会得到简化。如果对问题加以限定,是可以保证上面这个条件成立的。其中的一种限制方案是:对于目标函数,我们限定是凸函数;对于优化变量的可行域(注意,还要包括目标函数定义域的约束),我们限定它是凸集。
(3)梯度下降 VS 牛顿法
梯度下降算法是将函数在 xn 位置进行一次函数近似,也就是一条直线。计算梯度,从而决定下一步优化的方向是梯度的反方向。而牛顿法是将函数在 xn 位置进行二阶函数近似,也就是二次曲线。计算梯度和二阶导数,从而决定下一步的优化方向。一阶优化和二阶优化的示意图如下所示:
梯度下降,一阶优化
牛顿法,二阶优化