zoukankan      html  css  js  c++  java
  • 通俗易懂 | 拉格朗日乘子法

    文章来自:一个宝藏公众号【机器学习炼丹术】
    在SVM中,将约束问题转化成非约束问题采用到了拉格朗日乘子法。这个文章就讲一下拉格朗日乘子法与KKT约束是怎么回事。本人不是数学科班出身,但是也只能硬着头皮讲一讲了。

    从零理解

    现在我们要解决这样一个问题:
    (x^2y=3)
    这个函数距离原点最近的距离是多少。

    先画出函数图像:

    然后想求出最短距离:

    这里的思路就是,做一个以原点为中心的圆形:

    不断扩大圆形的半径,直到圆与蓝色的曲线相切:

    现在。第一次与(x^2y=3)相交的点就是距离原点最近的那个点:

    这个,圆形与曲线相切,且切线既是圆形的切线,也是曲线的相切。

    这时候,这个切线的垂线其实也就是我们所说的梯度,也叫做等高线的法线,看下面两个图可能会好理解一些:

    那么这个梯度怎么计算呢?先看圆形(f(x,y)=x^2+y^2)的梯度:

    再看曲线的梯度计算(g(x,y)=x^2y)的梯度:

    在相切的时候,两者的梯度方向都在同一条直线上,可以称之为,成比例,这里用比例系数(lambda)来表示:

    所以我们汇总一下所有的已知信息,得到下面的方程组:

    可以求解得到:

    这个就是拉格朗日乘子法的直观理解。

    抽象成数学的形式

    我们要解决的问题:
    (min {x^2+y^2})
    (s.t. x^2y=3)

    我们会将约束问题通过拉格朗日乘子法转换成非约束问题:
    (min F(x,y)={x^2+y^2+lambda(x^2y-3)})

    【为什么可以这样呢?】
    如果求极值,偏导数为0。先对上面的公式进行求偏导数:
    (frac{partial F(x,y)}{partial x}=2x+lambda 2xy=0)
    (frac{partial F(x,y)}{partial y}=2y+lambda x^2=0)

    这两个等式与这个等价,唯一的不同就是(lambda)一个是正数一个是负数:

    当然,对于(x^2y-3=0)这个条件,我们也可以写成(frac{partial F(x,y,lambda)}{partial lambda}),所以,可以得到这样的一个方程组:

    KKT条件

    • KKT的英文全称:Karush-Kuhn-Tucker

    之前的拉格朗日的约束条件是等值的,现在可以通过KKT条件推广到不等式。因为限制条件往往是不大于,小于这样的不等式,所以KKT才是拉格朗日化约束问题为非约束问题的关键。

    对于不等式问题,就是有两种情况:

    • 可行解在g(x)<0;
    • 可行解在g(x)=0。

    可行解在g(x)<0,就表示这个约束条件并没有起到约束效果,有根没有事一个效果(下图中的左图);可行解g(x)=0,就表示这个约束条件起到作用了,这就表示g(x)与f(x)相切,也就是下图中右边的图。

    【g(x)<0的情况】
    这种情况下,就是没有限制条件下的情况,其实就是没有约束条件的限制,也就是(lambda=0)的情况,所以我们的等式就是直接求解:
    (Delta f(x)=0)

    【g(x)=0的情况】
    如果是g(x)=0的情况,那也就是约束条件起到作用了,也就意味着(lambda>0)。在这种情况下,存在着:
    (Delta f(x) = -lambda Delta g(x))
    并且两个函数的扩张的方向相反,所以表明两个g(x)和f(x)的梯度一个是正数,一个是负数。所以这个表示(lambda>0)

    所以综上所述,在这种情况下,我们所有的条件综合起来可以得到,其中(x^*)就是最优解:

    • (lambda >=0)
    • (lambda g(x^*)=0)
    • $ g(x^*) <= 0$

    这三个就是KKT条件。



  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/PythonLearner/p/13358420.html
Copyright © 2011-2022 走看看