主要是研究SVM算法的时候涉及到了拉格朗日乘子法,由于是大学数学的内容,开始看懂,也不高兴认真去看。后来发现绕不开,于是打算认真去研究下。主要还是百度百科(https://baike.baidu.com/item/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E5%AD%90%E6%B3%95/1946079)的解释提点到了我,而且我发现这些公式如果不想深究的话,只需按照公式的使用方法去处理计算即可,而不必深究公式是如何得出的。
基本的拉格朗日乘子法就是求函数f(x1,x2,...)在约束条件g(x1,x2,...)=0下的极值的方法。其主要思想是将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。
对于具有l个等式约束的n维优化问题,把原目标函数 改造成为如下形式的新的目标函数:(为什么可以这么改造可以不用管,就是拉格朗日规定这么做的)
式中的 就是原目标函数 的等式约束条件,而待定系数 称为拉格朗日乘子。这种方法称为拉格朗日乘子法。在极值点处,有 和 ,共有n+l个方程,足以算出这n+l个变量,此法也称为升维法。
拉格朗日乘子法是一种经典的求解条件极值的解析方法,可将所有约束的优化模型问题转化为无约束极值问题的求解。一般带不等式约束的最优化问题求解如下式:
拉格朗日乘子法是用于变量无关的是常数 分别乘各约束函数 并与目标函数相加得到如下的拉格朗日函数:
,式中: 为自变量; 为拉格朗日乘子量; 为松弛变量。则
在 处取极值的必要条件为:(即对每个变量求偏导,令导数=0)
,依据上式求得 即为最优解。
主要计算过程:
1.假设需要求极值的目标函数(objective function)为f(x,y),限制条件为φ(x,y)=M
2.设
3.定义一个新函数
5.求出上述导数=0时,x,y,λ的值,代入即可得到目标函数的极值。
举一个例子:来自https://blog.csdn.net/lijil168/article/details/69395023
一般情况下,最优化问题会碰到一下三种情况:
(1)无约束条件
这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。
(2)等式约束条件
设目标函数为f(x),约束条件为h_k(x),形如:
s.t. 表示subject to ,“受限于”的意思,l表示有l个约束条件。
则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,这里主要讲拉格朗日法,因为后面提到的KKT条件是对拉格朗日乘子法的一种泛化。
例如给定椭球:
求这个椭球的内接长方体的最大体积。这个问题实际上就是条件极值问题,即在条件 下,求的最大值。
当然这个问题实际可以先根据条件消去 z (消元法),然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。
首先定义拉格朗日函数F(x):
( 其中λk是各个约束条件的待定系数。)
然后解变量的偏导方程:
......,
如果有l个约束条件,就应该有l+1个方程。求出的方程组的解就可能是最优化值(高等数学中提到的极值),将结果带回原方程验证就可得到解。
回到上面的题目,通过拉格朗日乘数法将问题转化为
对求偏导得到
联立前面三个方程得到和,带入第四个方程解之
带入解得最大体积为:
(3)不等式约束条件
看原文