zoukankan      html  css  js  c++  java
  • 拉格朗日乘数法

    拉格朗日乘数法

    等式约束

    • 作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数

    • 以上是从别人的博客中摘过来的, 通俗地理解就是拉格朗日乘数法将目标优化函数与约束条件合并成了一个函数,这个函数没有约束,下面举一个例子讲解,唤醒高数学过的拉格朗日

      • 这里例子也是从别人博客摘过来的
      • 目标优化函数: (f(x, y, z)=8xyz)
      • 约束条件: (s.t.{{x^2}over{a^2}}+{{y^2}over{b^2}}+{{z^2}over{c^2}}=1)
      • 使用拉格朗日乘数法的思想, 将多个式子转变成为一个没有约束的式子
        • (F(x, y, z, lambda)=f(x, y, z)+lambda[{{x^2}over{a^2}}+{{y^2}over{b^2}}+{{z^2}over{c^2}}-1])
        • (F)分别对(x), (y), (z), (lambda)求偏导, 令他们的偏导为0
        • ({{{partial}F}over{partial}x}=8yz+{{2lambda{x}}over{a^2}}=0) (1)
        • ({{{partial}F}over{partial}y}=8xz+{{2lambda{y}}over{b^2}}=0) (2)
        • ({{{partial}F}over{partial}z}=8yz+{{2lambda{z}}over{c^2}}=0) (3)
        • ({{{partial}F}over{partial}{lambda}}={{x^2}over{a^2}}+{{y^2}over{b^2}}+{{z^2}over{c^2}}-1=0) (4)
        • 联立方程求出最有的(x), (y), (z)

    不等式约束与拉格朗日对偶式

    • 拉格朗日乘数法的核心思想是不变的, 不管是等式约束还是不等式约束, 但是在不等式约束使用拉格朗日乘数法的前提是不等式约束符合KKT条件, 这个不等式约束在高等数学中没有讲过

    • 例子

      • 目标优化函数: (minf(x))

      • 约束条件(不是这种形式的要转换成这种形式)

        • (g(x)<=0)
        • (h(x)=0)
      • 构造拉格朗日(L(x, a, b)=f(x)+ag(x)+bh(x)), 其中(a>=0), (g(x)<=0), (h(x)=0)

      • 我们要求的是(minf(x)), 现在就是见证奇迹的时刻了

        • 因为(h(x)=0), 所以(L(x, a, b)=f(x)+ag(x))
        • 因为(a>=0), (g(x)<=0), 所以(ag(x)<=0), 所以(maxL(x, a, b)=f(x)), 因为(ag(x)<=0), 所以要想(L(x, a, b))最大, 则需要让(ag(x)=0), 这个时候右侧就只剩下了(f(x)), 所以(max_aL(x, a, b)=f(x)), 那么优化目标(minf(x))就成了(min_xmax_aL(x, a, b)), 注意(max_a)是对a这个拉格朗日因子变量求(L(x, a, b))求最大值
      • 除此之外, 因为不等式约束满足了KKT(要求h(x)=0, a(g(x))=0), 所有有这个结论, (min_xmax_aL(x, a, b)=max_amin_xL(x, a, b)=minf(x)), 现在来推一遍

        • (max_amin_xL(x, a, b)=max_amin_x(f(x))+max_amin_x(ag(x)))
        • 因为(a)是在拉格朗日中加入的变量, (f(x))与a没有任何关系, 所有(max_amin_x(f(x))=min_x(f(x)))
        • 所有(max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x)))
        • 进一步的, (max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x))=min_x(f(x))+max_a(0))
          • 我们知道

            [ag(x)=egin{cases} 0 & if & a=0 & or & g(x)=0 \ -infty & otherwises end{cases} ]

          • 如果(minag(x))取到(infty)(maxmin(ag(x)))为负数, 但是如果(minag(x)取0), 则(maxmin(ag(x)))为0, 这个才是最大值
        • 所以在进一步的, (max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x))=min_x(f(x))+max_a(0)=min_x(f(x)))得到KKT结论
        • 以上就是对偶式推导(SVM需要对偶式, 如果不适用求解困难)

      作用

        + 将原始的问题转换成可以使用SMO算法的形式, 使用SMO算法求解方程
  • 相关阅读:
    history对象
    排序算法总结
    Boltzmann机
    Sort Colors
    First Missing Positive
    Sort List
    Insertion Sort List
    Merge Two Sorted Lists
    Merge Sorted Array
    Sum Root to Leaf Numbers
  • 原文地址:https://www.cnblogs.com/megachen/p/10016464.html
Copyright © 2011-2022 走看看