作者:siyu1992
序言
优化方法是险些所有机器学习模型中最主要的核心部分,其主要性也是须要强调的。凸优化是优化方法论中的特例,是一个非常大的领域,想要细致地学习须要花费不少韶光,本文作为阶段性学习的总结,通过算法思维和常见算法的目标函数引出凸优化内容,并先容了作为算法工程师我们最须要理解的凸优化领域的主要方法论,希望通过分享给大家,能够对大家在算法领域的学习有所帮助,如果本文中的方法论有误的话,还请各路大神进行示正。目录
算法思维及常见目标函数凸集与凸函数经典凸优化问题非凸优化问题的优化一. 算法思维及常见目标函数
算法思维
针对一个AI问题,我们都可以将AI问题拆解为建立模型+优化模型这两块内容的,对付任何一个AI问题,其目标函数都可以用以下形式表示:
我将办理业务问题中的常用套路称为算法思维,并总结了以下4个主要步骤:
将业务场景中须要办理的问题转化为数学问题,并写出严格的数学模型(目标函数)针对写出的数学模型判断凹凸性根据目标的函数的凹凸性判断问题类型(如果目标函数是凸函数,我们须要判断该函数所属问题类型,常见的问题类型有Linear Programming、Quadratic Programming等;如果目标函数是非凸函数,也须要判断其所属问题类型,常见有Setcover Problem,Max flow Problem等)根据不同的问题类型利用不同的优化方法论办理问题。其实在实际办理问题的过程中,实在大家都不太会在意第1,2个步骤点,可能都会直接通过履历去查找相应的工具办理问题,但是这样的办理思路是不太好的,由于在这个过程中,我们可能不知道须要办理的问题和我们选择的工具是否匹配,如果结果不太空想,我们可能也不知道个中的缘故原由。但是如果我们在办理问题前,定义了严格的目标函数,我们不仅可以针对该目标函数选择相应的优化方法,也可以根据业务场景,对目标函数进行相应调度,增加项目的成功率。
常见目标函数
我将事情中可能会用到的常见的一些算法的目标函数进行了列举,如下:
二. 凸集与凸函数
凸优化的主要性
从函数的凹凸性而言,我们常日把函数分为凸函数和非凸函数。凸函数是有且只有全局最优解的,而非凸函数可能有多个局部最优解,这些特性我会不才文中进行详细阐明。在序言中,我提到过优化问题是机器学习模型中的核心部分,而针对不同模型,有不同的方法论对其目标函数进行优化。例如针对逻辑回归、线性回归这样的凸函数,利用梯度低落或者牛顿法可以求出参数的全局最优解,针对神经网络这样的非凸函数,我们可能会找到许多局部最优解。
不丢脸出,我们希望在实际办理问题过程中,都希望我们建立的目标函数是凸函数,这样我们不必担心局部最优解问题,但实际上,我们碰着的问题大多数情形下建立的目标函数都是非凸函数,因此我们须要根据场景选择不同的优化方法。
凸优化定义
就定义而言,凸优化是:在最小化(最大化)的优化哀求下,目标函数是凸函数且约束条件所形成的可行域凑集是一个凸集的优化方法,因此凸优化的剖断条件有两个,1.函数定义域是凸集 2.目标函数是凸函数。
凸集的定义:假设对付任意x, y ∈ C and 任意参数α ∈ [0, 1], 我们有αx + (1 − α)y ∈ C,凑集C为凸集。
凸集的理解:对凸集的理解,我们可以分别从理论定义的角度和函数图像的角度两方面理解。从定义上讲,对付凑集C中的任意两个元素x和y,须要知足αx + (1 − α)y 的值也须要在凑集C中;从函数图像角度讲,这个定义中的式子含义是,x、y两点连线上的任意一个点都须要属于凑集C,如下图所示,任何证明凑集是凸集的方法都可以通过定义和函数图像两方面进行。
凸集的性子:两个凸集的交集也是凸集。
常见凸集与证明方法:
凸函数定义:函数f的定义域为凸集,对付定义域里的任意x, y,函数知足:
凸函数与凹函数之间的关系:如果f(x)是凸函数,则-f(x)是凹函数
凸函数的证明方法(函数定义域为凸集的条件下):
常见凸函数及证明:
三. 经典的凸优化问题
维基百科中罗列了一些经典的凸优化问题和对应的维基百科链接,在此总结一下:
Least squares(最小二乘法,常用,目标:线性关系;限定条件:线性关系)Convex quadratic minimization with linear constraints(线性约束条件下的二次方案问题,常用,目标:平方关系;限定条件:线性关系)Linear programming(线性方案)Quadratic minimization with convex quadratic constraintsConic optimizationGeometric programmingSecond order cone programmingSemidefinite programmingEntropy maximization with appropriate constraints四. 非凸优化问题的优化
在实际的业务运用处景中 ,我们定义出的目标函数很可能是非凸函数,非凸函数不仅可能存在很多局部最优解,对我们探求全局最优解造成了很大的困扰,乃至有些优化方法论的繁芜度非常高,可能O(P^N)这样的NP hard问题,这样的问题我们是没有办法很好进行优化的,因此我们在探求优化方法论时,一定要选择更合理的方法论。很多非凸优化问题可以转化(并非是等价的)为凸优化问题,并给出问题的近似解。
松弛(Relaxation)
通过对问题限定条件的松弛,可以将原问题等价为凸优化问题。注:松弛原问题,只能得到一个可行域更大的问题,如果原问题是求最小,则松弛后的问题的最优值一定小于即是原问题的最优值,这也是一种给出下界的方法。松弛不仅仅用于整数约束,只要利于将定义域非凸变为凸集即可。
提及来可能比较抽象,我们通过下面的Set cover Problem来详细解释一下
Set cover Problem
优化方法:
松弛(Relaxation)的问题点
通过上面Set cover Problem中通过relaxation的办法求解参数,我们不难创造,实在通过对问题的转化,我们虽然能够快速对问题求解了,但是我们求出来的最优解与原问题的最优解可能是相等,也可能有一定的偏差的,以是通过relaxation,我们须要证明relaxation得出的最优解和原问题的最优解的偏差范围。
当我们拿到一个业务问题,一定须要按照算法思维那一节做,先将问题转换为一个严谨的数学问题,判断我们写出的目标函数的凹凸性,如果目标函数非凸,我们须要对问题的限定条件做一些转化,进而求出转化后问题的近似解,并证明其与原问题的偏差范围。如果是凸函数,我们须要选择相应的优化方法论进行优化,由于优化问题是机器学习算法中的核心部分。
以上是对凸优化的方法论的一些总结与梳理,不得不说,凸优化是一个很深奥也很大的领域,并且通过一些非凸函数的优化方法论,也能感想熏染出如果要严格办理一个数学问题,步骤是很严谨的,文中的不雅观点如果有缺点的地方,还请各路大神不吝见教。
参考:
贪心学院 - 做在线教诲领域的MIT, 立志于培养最顶级的工程师,www.greedyai.comwww2.imm.dtu.dk/pubdb/ven.wikipedia.org/wiki/C原文来自学员知乎作业:
https://zhuanlan.zhihu.com/p/55295699