本篇文章摘录自?数模百科?——支持向量机模型-凸优化问题。
你是一个快递公司的老板,你们公司有三种车型:小货车,中型卡车和大货车。每种车型都有它的优点和缺点。小货车一次可以运少量的货物,运费便宜,但运送大量货物就需要多次往返;大货车一次可以运很多货物,可如果货物不多,就会浪费运输成本;中型卡车则介于两者之间。
现在,你有一批货物需要运送,你要选择何种组合的车型才能在满足运送需求的同时,使得运输成本最低。
你可能需要考虑的因素有:货物的总量,每种车型的运输成本,需要运输的次数,货物必须在哪天之前送达等等。你需要在所有可能的车型组合中,找到那个既能满足运送所有货物的需求,又能使得总的运输成本最低的组合。
你灵机一动,想到可以把这个计算最低成本的问题变成一个数学问题,也就是求某个函数的最小值,同时这个函数的变量得满足一定条件,比如代表货车数目的变量必须为非负数并且小于等于你拥有的这款车型的数量。
接着,你可以试着组合使用不同的车型,看看是否有可能在保证所有货物送达的情况下,降低总的运费。比如,你可以先用大货车运送大部分货物,然后用小货车运送剩下的货物,看看这样是否比单独使用一种车型更省钱。
在这个过程中,你需要注意你拥有每种车型的数量,不能超过你实际拥有的车辆数。
你可能会发现,有很多种不同的组合方式,你需要一一比较,找出运费最低的那种。
在上文的例子中,快递公司求解使运输成本最低的运输方案就是一个优化问题,这也是我们在日常生活和科学研究中经常遇到的问题,例如企业可能希望找到最大化利润的生产策略,或者一个人可能想找到最短的路线从一个地方到另一个地方。
由此我们可以看出,我们可以把优化问题看成求解一个函数最小值或最大值的问题。
上文例子中,快递公司需要考虑的货物总量、运输次数其实就叫约束,在求解最值时,我们要注意保证函数的变量满足一些条件,比如在寻找最佳运输方案中,我们必须在所有货车数量为非负数的范围内求解,同时每种货车数量必须小于实际拥有的车辆数。
因此,优化问题通常可以表述为这样的形式:优化问题是在一定的约束条件下,寻求某指标最大化或最小化的问题。
让我们回到前面的例子中,你作为快递公司的经营者,需要找出最节省成本的运输方案。你发现由于季节的变化和运送货物的不同,各种车型的运输成本也会随之波动。这意味着每次成本变化后,你都需要重新计算一遍最优的运输方案。虽然每次计算的步骤基本相同,但这依然需要花费大量的时间和精力。
于是你想到,可以让计算机完成这些复杂的计算。但计算机不能理解具有现实含义的问题,所以你需要将你要解决的问题抽象成数学形式,将所有要考虑的因素都转化为数学公式。这样,计算机就能很好地解决这个纯数学问题了。当有任何数字需要改动时,只需要在公式中相应的位置进行修改,并将修改后的公式交给计算机即可。
在上文的例子中,你为了让计算机解决你的问题从而对你的优化问题做出的所有抽象化的工作,就叫形式化。就像工业革命时期,人们从繁复的手工作业中解放,将这些工作都交给了机器——人们只需要把自己的工作经验转化成机器可以理解的明确的数学问题的描述就可以。
求解现实问题通常需要花费大量人力计算,更糟糕的是,当某个因素发生变化时,整个求解过程需要从头开始,这造成了大量人力物力资源的损失和浪费。而将这些问题形式化成抽象的问题后,这些问题可以通过计算机直接求解,并且由于求解该问题的方法与公式已经固定成型,当改变其中某些变量不会造成计算上的麻烦。
具体来说,形式化指的是将模糊、复杂的问题转化为精确、明确的数学或计算机语言的描述。在优化问题中,形式化的过程涉及到确定决策变量、定义目标函数和明确约束条件。决策变量表示问题的解(也就是为了达成目标我们需要怎么做),目标函数刻画了我们要优化的目标(也就是我们需要哪个数最大或者最小),而约束条件反映了问题的限制(也就是我们得在什么范围内寻求问题的解)。
经过形式化后的优化问题包含了决策变量、目标函数、约束条件。
目标函数(也被称为损失函数,成本函数,即我们希望优化的函数),经常被记为 ,这是我们希望最小化或者最大化的函数。目标函数定义了优化问题的“目标”。
例如,在机器学习中,目标函数常常是一个损失函数。这个函数的目的是衡量预测值与真实值之间的差距,我们通常的目标是最小化这个差距。
可行集是所有满足约束条件的解构成的集合。换句话说,可行集定义了哪些解是"允许"的。
实际问题中,我们不仅仅要找到优化 f(x) 的解,我们还要保证这个解满足一些约束条件,这些约束条件定义的范围就是可行集。举个例子,如果我们在解决一个货运问题,最大化货物的输送量是我们的目标函数,但同时我们还需要满足车辆数量、路线的限制等条件,这些条件形成的解的空间就是我们的可行集。
让我们举一个将优化问题形式化的实例。
这是一个简单的生活中的问题:如何在有限的预算内购买食物,以便获得尽可能多的营养。
在这个问题中:
决策变量:我们可以买哪些食物以及数量多少。这可能包括水果、蔬菜、肉类、谷物等各种食物。
目标函数:我们希望最大化的是购买的食物的总营养价值。也就是说,我们希望在满足我们的预算限制的同时,购买到的食物可以提供尽可能多的营养。
约束条件:我们需要的食物的总价必须符合我们的预算限制,以及每种食物的数量必须为非负数。
通过以上设定,我们可以建立一个优化问题: "在满足预算约束的情况下,如何选择和组合食物,使得从中获得的营养最大化"。
优化问题通常可以形式化为以下的数学形式:
找到一个变量集使得一个函数(通常是成本函数或效用函数)达到最小值或最大值,同时满足一系列约束条件。用数学公式表示,优化问题可以写作:
其中:
是我们需要找的变量集
是我们需要最小化(或最大化)的目标函数
为? 是需要满足的不等式约束
为 是需要满足的等式约束
优化问题可以按照多种不同的方式进行分类。下面是两种常见的分类方式:
根据目标函数和约束的性质:
线性优化问题:目标函数和约束函数都是线性的。
凸优化问题:目标函数是凸函数,约束函数形成的是凸集。
非线性优化问题:目标函数或者约束函数是非线性的。
从解的角度进行分类:
无约束优化问题:这种类型的问题没有约束条件,我们可以在整个定义域中搜索最优解。
约束优化问题:这种类型的问题有一些约束条件。在这种情况下,最优解一定在可行集中。
回到开头的例子,可是计算机也不是万能的,如果你的数学问题太复杂了,它可能需要很长的时间才能计算出来。
千万别想着怎么提高你计算机的性能,我们可以换个思路,将函数转换成容易解决的形式。这就来到了我们的凸优化问题。
想象一下一块橡皮泥,如果你能够在橡皮泥上任意选择两点,并且连接这两点的线段完全在橡皮泥内部,那么我们就可以称这块橡皮泥是一个凸集。换个角度,这条线段上任意一点都在这块橡皮泥里。
它的数学定义是:一个集合 C 是凸的,如果集合中任意两点 x 和 y 连线上的任意点也在集合 C 中,即对于任何 和任何 满足 ,有:
凸集具有两个重要性质:
凸集的任何交集仍为一个凸集。
凸集加凸集仍为凸集。
想象你正在一个山谷中行走。无论你在山谷中的哪个地方,你都能看见这个山谷的全貌,没有任何东西会阻挡你的视线。现在,假设你的目标是找到从起点到终点沿路径的最低点,也就是这个山谷的最低处。因为你可以清晰地看到山谷中的所有地方,所以你可以直接找到最低点。
它的数学定义是:一个函数 是凸的,如果定义域 是凸集,并且对于 中的所有点 x,y 和任意 满足 ,有:
如果这个不等式是严格的,我们称 f 为严格凸函数。
一个凸函数的特征是,对于函数中的任何两个点,连接这两个点的线段上的任何点的函数值都不大于这两点的函数值的平均值。换句话说,如果你在函数的图像上选择两点,画一条线段连接这两点,那么这条线段将始终位于函数图像之上。
凸函数有三个主要性质:
非负加权和:凸函数的非负加权和是凸的。
凸函数的最大值:一组凸函数的逐点最大值是凸的。
复合函数:某些凸函数和线性函数的复合仍是凸的。
凸函数的常见种类:
线性函数:
二次函数:,其中 A 是半正定的。
指数凸函数:,其中 a,b 是实数。
对数凸函数:,其中 a > 0,b 是实数。
注意,以上所列并非凸函数的全体,仅仅是一些常见的形式。要判断一个函数是否为凸函数,最直接的方式还是验证其是否满足凸函数的定义。
现在这个问题我们就可以一目了然了。凸优化问题是优化问题的一种特殊类型,其中目标函数是凸函数,约束函数是凸集意义下的不等式和等式。在凸优化问题中,我们希望最小化(或最大化)一个凸(或凹)函数,而这个函数的定义域被指定为一个凸集。
粗浅理解,你可以把凸函数想象成一个碗,无论你在碗里的任何地方,只要你一直朝着下坡的方向行走,最后一定会到达碗底,也就是函数的全局最小值点。并且当你经过的两个点都在被允许的空间之内(也就是可行集中)时,这两点之间的连线上的任意点不会超过这个空间。
一座蜿蜒起伏的山脉,可能存在很多个山顶,爬山的人很难确定自己所处的山顶是不是这座山脉最高的地方。因为你很难判断你现在所在的小山峰是否比远处的山峰高。
一般的优化问题,特别是非凸优化问题,可能存在许多局部最优解,这可能会导致优化算法陷入局部最优,并无法找到全局最优解。
相比之下,凸优化问题由于其内在的数学性质(凸结构),使得在其中任何一个局部最优解也必然是全局最优解,从而极大地简化了求解过程。这种性质确保了我们可以使用有效的优化算法(比如梯度下降)在有限的步骤之内找到全局最优解,而不必担心陷入只是局部最优的解。
所以,凸优化问题的确比一般的优化问题要更容易解决,这也是为什么我们在实际问题中,尽可能地将问题转化为凸优化问题或者在凸优化框架下进行近似求解。
具体来说,凸优化问题相对于一般的优化问题,具有以下主要优势:
全局最优解:凸优化问题的一大优势是有全局最优解的保证。这是因为在凸优化问题中,任何局部最优解都是全局最优解。而在非凸优化问题中,可能存在多个局部最优解,找到全局最优解会更为困难。
收敛速度快:对于凸优化问题,有许多高效的优化算法,如梯度下降和内点法等。这些算法在有限时间内就可以收敛到全局最优解,收敛速度比一般优化问题的求解算法要快。
算法稳定:凸优化问题的优化算法通常具有较好的稳定性,对初值的选取并不敏感,在大多数情况下可以收敛到同一个解。而非凸优化问题的优化算法的解常常会受到初值的影响,不同的初值可能会到达不同的局部最优解。
理论保证:关于凸优化问题,有大量成熟的理论可以指导算法的设计和分析,可以为实际问题的求解提供坚实的理论保证,大大提高了求解的可靠性。
因此,凸优化问题在许多应用中都被广泛使用,如机器学习、信号处理和自动控制等领域,它们以其全局最优解、快速收敛、稳定性好和理论上的保证,为复杂问题的求解提供了强大的工具。
凸优化问题可以被形式化定义为以下形式:
其中:
是一个凸目标函数。
是凸函数,每一个定义了一个不等式约束。
是亚线性(affine)函数,每一个定义了一个等式约束。
是决策变量 x 的定义域。
以最小二乘线性回归问题为例,它就是一个凸优化问题。我们定义损失函数为
其中,。而我们的优化问题为:
这个问题满足凸优化问题的定义,目标函数 f(x) 是凸函数,且没有约束或者说 x 取值在整个定义域即 。
所以,最小二乘线性回归问题是一个凸优化问题。
本篇文章摘录自?数模百科?—— 支持向量机模型。
数模百科-支持向量机模型-凸优化问题https://modelwiki.cn/wiki/e90df044-3c41-4211-a770-646eeb031315
数模百科是一个由一群数模爱好者搭建的数学建模知识平台。我们想让大家只通过一个网站,就能解决自己在数学建模上的难题,把搜索和筛选的时间节省下来,投入到真正的学习当中。
我们团队目前正在努力为大家创建最好的信息集合,从用最简单易懂的话语和生动形象的例子帮助大家理解模型,到用科学严谨的语言讲解模型原理,再到提供参考代码。我们努力为数学建模的学习者和参赛者提供一站式学习平台,目前网站已上线,期待大家的反馈。
如果你想和我们的团队成员进行更深入的学习和交流,你可以通过公众号数模百科找到我们,我们会在这里发布更多资讯,也欢迎你来找我们唠嗑。