zoukankan      html  css  js  c++  java
  • 拉格朗日对偶性学习笔记

    拉格朗日对偶性

    我在之前的博客中提到了两次拉格朗日函数,一次是在讲感知机的时候,一次是在讲支持向量的时候,当时都是求解有约束最优化问题,我都只是提到拉格朗日函数可以解决这样的最优化问题,但并没有明确的去解释。这一篇博客我就尽量的去解释一下,对于拉格朗日对偶函数,其实从它的数学式子来去理解真的很难,我曾对这个知识点反复学习,我就谈谈我对拉格朗日对偶函数的理解。
    先来讲一下它的原始问题:
    在这里插入图片描述这里引进一下广义拉个朗日函数的概念

    在这里插入图片描述
    为什么坐上面ai,bj的代换,这里并没什么特别的用意,主要是因为markdown不能使用数学符号,便于我们接下里的讲解。
    另外 ai和bj都是拉格朗日乘子,但是ai需要大于等于零。

    对于上面的拉格朗日函数L,大家应该知道它的式子中那一部分才是重点,重点部分其实就是我们的优化目标f(x),我们想做的其实就是求f(x)在x满足c(x)<=,h(x)=0条件下的最小值。即min f(x),那么有的同学肯定问了:难道非得是求最小值吗?我求最大值可不可以?

    答案:不行,只能是求最小值,如果你需要求解的是最大值问题,你可以转化一下,比如max f(x),可以转化成 min -f(x).

    那为什么不行呢?这里得原因其实是由于x和ai,bj使化与最大化先后的原因,下面讲解中会解答这个问题。
    对于求解f(x)最小化的问题,我们先是求解ai,bj(ai>=0)使L最大化的优化问题 , a,bj是代换过来的,没看到的,看看上面得公式)再求解x使L最小化的优化问题。
    为什么是这个先后顺序?

    因为比如对于第一步,求解ai,bj使拉格朗日函数L的最大化的问题,如果x不满足c(x)<=0,即c(x)>0,或者h(x)!=0,那么我们可知,此时的最大化应该是。因为h(x)!=0,那么bj*h(x)当bj与h(x)同号,切无限大时L正无穷,或者c(x)>0,ai趋于正无穷,则L无限大。但是如果符合c(x),h(x)都符合条件L=f(x),此时在这个条件下,我们再求x下L的最小值,正无穷的部分都可以直接不考虑,那么只考虑c(x),h(x)满足条件的部分。
    很多伙伴对这个求解步骤可能感觉太模糊了,这个先后顺序求解太不清晰。其实,这样来理解,当我们求解ai,bj变量下L的最大值时,x相当于定值但是x又不是“定值 “。因为x确切来说是一个不确定的定值,此时可以想象这里的不确定其实就是所有的x可能取的值,即x的定义域,那么此时我们可以得到一个a,b是关于x的两个代数式,得到的不是定值,就是因为x其实是一个”不确定的定值“,即x不是代表一个数值,二式它所有可能的取值。那么我们现在求解的其实就是在x所有可能的取值的条件下,当时的最大值,即这个最大值不是一个定值,它是随x变化而变化的。现在我们在对ai,bj代换代换过后的的L求最小值,得到得其实就是x所有可能的情况下L的最小值,求解时就会过滤掉不符合约束条件下的x,因为不符合时L趋于无穷,此时求得的就会是f(x)满足条件下的最小值。

    其实直接求解原始问题,思路是对的,但是可能很难求出解,因为最后的求解式过于复杂。所以我们往往转化求解思路,求解L的对偶式。即我们先求解x条件下L的最小值,然后再求解a,b条件下L的最大值。求出a,b后我们再用a,b表示x就可以求出最终解。那么为什么对偶式的解跟原式的解会是一样的呢?x条件下最小值L一定小于等于a,b条件下最大值
    即 min L <=L<=max L,即很大可能发生max min L ==min max L时x得到的解是相同的。(注:有时拉格朗日对偶函数不一定得到的值f(x)可能会小于原始的f(x)。
    那么现在问题来了,何时对偶问题求的的解等于原始问题得解呢?
    这里有一个定理:
    **假设f(x),ci(x)使凸函数,hj(x)是仿射函数。并且存在x对于所有ci(x)<0成立,这此时求的原始问题的解x,a,b也会是对偶问题的解。**这个定理很重要,也比较好记。

  • 相关阅读:
    Linux命令总结--grep命令
    Linux命令总结--sed命令
    python函数--enumerate()方法
    python函数--index()方法
    在objc项目中使用常量的最佳实践
    iOS 开发 初级:应用内购买 In-App Purchase
    CFUUIDRef和CFStringRef-生成唯一标识符
    保留你的dSYM文件
    xcode 环境,多工程联编设置【转】
    ld: symbol dyld_stub_binding_helper not found, normally in crt1.o/dylib1.o/bundle1.o for architecture i386
  • 原文地址:https://www.cnblogs.com/gaoxing2580/p/12423429.html
Copyright © 2011-2022 走看看