机器学习面对各种各样的求解极值或者最值问题 ,现在对常见的求解极值或者最值问题思路做一下理论上的梳理。
最值问题
简单了解最值问题
求最值是非常常见的问题,比如如何选择交通路线,最快地到达某地;如何用手头的钱买到分量最重的水果等等。
我们可以把需求定义为一个目标函数: f(x)
最值问题也就可以表示为 min[f(x)]
对于一个函数求解最值问题,我们要先查看函数的特性,比如是否单调,是否有拐点,是否有峰谷等。
比如,在可导时,利用导数函数是否大于0,来判断函数是否增减,并且令导数为0来找到极值点。
利用二阶导数是否大于0,来判断函数是否凹凸。
常见几种最值问题的形式
(1)
(2)
s.t.gi(w)=0,i=1,2,...,n
(3)
s.t.gi(w)=0,i=1,2,...,n;
hj(w)⩽0,j=1,2,...,m
整体思路,就是无约束最好解决,带约束的转化为无约束的问题再解决。
约束
上面说的是一般情况下,直接对函数求解最值。实际问题不会总是这么简单,还会有老多的限制的,比如我想省时间,还只花10元路费,那么该怎么选择路线;所买的商品单价不能小于15元,该怎么才能买到分量最多的水果。
在实际情形下,比如我们的逻辑回归,我们会加上惩罚项 12wTw ,得到新的目标函数:
效果是对权重进行了约束,而且这个权重是分布于0附近的,这个惩罚怎么解释呢。这是一个直接给出的结果,其实最本质的表示应该是:
在约束 wTw≤1 下
对原来的误差函数进行最优化求解。于是才有了上面那个加入惩罚之后的目标函数。
约束下的最值问题
为什么会有上面的变换呢,可能大家还是一头雾水,为什么我在某个约束条件下求某个目标函数的最优解,就突然变成了最上面的新目标函数?
这个疑惑的解答要先从拉格朗日乘数法讲起。
拉格朗日乘数法
对于第二种形式,带约束条件的问题,我们更倾向于将其转化为无约束问题。在数学最优化问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数(:约束方程的梯度(gradient)的线性组合里每个向量的系数,搞不懂这句话在说神马)。
上面这段话读起来挺绕的,还是举个例子吧。
目标是求 f(x,y)=x2∗y 的最大值
同时满足 x2+y2=1
怎么将这两个式子凑到一起呢?引入个系数变量 λ
构造新目标函数 F(x,y,λ)=x2∗y+λ∗(x2+y2−1)
我们看看新目标函数的特点:
对 λ 求导,则得:(1)