zoukankan      html  css  js  c++  java
  • 拉格朗日乘子法、罚函数法、乘子罚函数法

           https://blog.csdn.net/lmm6895071/article/details/78329045?locationNum=7&fps=1

    1. 拉格朗日乘子法
                1.1 无约束问题
                1.2 等式约束问题
                1.3 不等式约束问题(KKT条件)
                1.4 拉格朗日乘子法问题
            2. 罚函数法
                2.1 定义
                2.2 外罚函数法
                2.3 内罚函数法
            3. 广义乘子法
                3.1 等式约束广义乘子法:
                3.2 不等式约束广义乘子法:
                3.3 一般约束广义乘子法:

        本文简单总结一些相关概念,具体证明以后再补充;
        1. 拉格朗日乘子法
        2. 罚函数法:外罚函数与内罚函数法
        3. 广义乘子法

    1. 拉格朗日乘子法
    1.1 无约束问题

    无约束问题,定义为 minf(x)
    , 对于凸函数而言,直接利用费马定理,f′(x)=0

    ,获得最优解;
    1.2 等式约束问题

    等式约束定义如下:
    minf(x)s.t.g(x)=0

    现在利用拉格朗日乘子法,合并式子:
    L(x,a)=f(x)+ag(x)

    对x,a分别求偏导:
    ∇xL(x,a)=f′(x)+ag′(x)=0∇aL(x,a)=g(x)=0

    发现第二个式子刚好是其约束条件;
                      ----------------------------------------------有两个变量,求最值,对两个变量分别求导,得出的是成对的自变量,使得函数值最小
        为什么?
        现在,我们在平面内投影函数,画出f(x)

    的等高线,以及g(x)=0的边界线;如图示:
    蓝色虚线代表了f(x,y)的等高线;红色代表g(x,y)=c=0;
    这里写图片描述
    回顾:
    1. 方向导数是各个方向上的导数
    2. 偏导数连续才有梯度存在
    3. 梯度的方向是方向导数中取到最大值的方向,梯度的值是方向导数的最大值(垂直方向)
    假设f(x)的最小值在圆心处,即梯度方向向外;g(x,y)的梯度方向向下;
    那么满足条件的值一定是两个函数相切处;如果相交,那么一定还存在一个等高线与红线相切,而且更小;在切点处,两个函数的梯度共线,即f′(x)=−ag′(x),a<0;做简单的变换后:f′(x)+ag′(x)=0

        ,这就是第一个等式啦,同时还需要满足第二个式子;

    1.3 不等式约束问题(KKT条件)

    不等式约束问题:
    minf(x)s.t.g(x)=0h(x)<=0

    引入拉格朗日函数:(KTT 条件)
    L(x,a,b)=f(x)+ag(x)+bh(x)s.t.g(x)=0bh(x)=0

    这样就将不等式约束变成了等式约束,偏导等于零即可求得最优参数;
    minf(x)等价于minxmaxa,bL(x,a,b)

    对偶变换后有:
    maxa,bminL(x,a,b)

    因为h(x)<0,所以只有当bh(x)=0时,L(x,a,b)才能取得最大值;否则不满足条件;所以KKT条件是minf(x)的必要条件;

        补充:SVM 满足KKT条件:在边界上的点,有h(x)=0

        ;非边界处,令b=0;

    1.4 拉格朗日乘子法问题

    当 目标函数的Hess矩阵不正定时(特征值不全为正,或者行列式不为正,那么此时的偏导为0处,并不能确定是否是极值点),所以无法求解;

        例子:
        求解
        {minf=2x2+y2−2xys.t.x+y=1


    我们定义L(x,y,λ)=f−λg(x)=2x2+y2−2xy−λ(x+y−1)
    求偏导可得:
    ⎧⎩⎨⎪⎪∂L∂x=4x−2y−λ=0∂L∂y=2y−2x−λ=0∂L∂λ=x−y−1=0

    我们可以计算原目标函数的Hess矩阵:�=⎡⎣⎢⎢∂2L∂x2∂2L∂y∂x∂2L∂x∂y∂2L∂y2⎤⎦⎥⎥=[4−2−22]正定矩阵;
    再看一个目标函数,方程稍作修改:
    {minf=2x2+y2+3xys.t.x+y=1

    直接求偏导,发现方程无解;
    再看其Hess矩阵:�=[4332]

        非正定矩阵;
        也就是说,在梯度为零处,我们无法判断是否是极值;

    2. 罚函数法
    2.1 定义

    罚函数法:根据约束条件的特点,构造出惩罚函数,然后加入到目标函数中,将其转化为无约束问题;新目标函数的解与原始目标函数解一致;

    2.1.1 等式约束的罚函数法:

    {minf(x)s.t.gi(x)=0

    我们引入一个增广目标函数:
    minF(x,σ)=f(x)+σP(x)P(x)=gTg

    这里:σ是惩罚因子,取很大的正数,F(x,σ)是罚函数,σP(x)是惩罚项;
    惩罚项的性质:
    1. 当x为可行解时,P(x)=0,惩罚项为0;
    2.当x不在可行域内,此时σP(x)会很大,那么求得minF(x,σ)必然有minf(x)与minx,σ[σP(x)]同时成立;所以,当σ充分大时,增广目标函数的最优值接近于原始问题的最优值;(σ→∞,若原问题有解(F<∞),则会有g=0)

        例如:
        minf(x)=(x1+x2)2s.t.g(x)=x1+x2=c


    构造罚函数为:
    minL(x,σ)=minf(x)+σ||g(x)||22

    σ

        设置的值较大;第一部分优化解,第二部分使得解在可行域内;
        如果x不在可行域内,需要我们大步迭代;

    2.1.2 不等式约束的罚函数法:

    {minf(x)s.t.hi(x)>=0

    此时我们构造惩罚项;
    (1)P(x)=∑[min(0,hi(x))]2,可以简单分析出:当hi(x)>=0时P(x)=0,满足条件;当不在可行域内时,我们需要加大惩罚;
    (2)P(x)=∑αih2i,其中αi={0,hi>=01,hi<0

    2.1.3 一般形式的罚函数法:
    ⎧⎩⎨⎪⎪minf(x)s.t.gi(x)=0hi(x)>=0

    那么罚函数为:
    P(x)=∑[gi(x)]2+∑[min(0,hi(x))]2

    特别注意:惩罚因子是充分大的数,拉格朗日乘子是一个确定的参数,意义不一样;(当惩罚因子过大时,在求解极小值的过程中,Hess矩阵变成病态矩阵?)
    2.2 外罚函数法

        对不在可行域内,加大惩罚;上文介绍的就是外罚函数法;
        这里写图片描述

    2.3 内罚函数法

        又称障碍函数法,内点法);在可行域内筑起高墙,迫使值在可行域内,目标函数无法穿越;(只适用于不等式约束)
        障碍函数一般取:(1)倒数 (2)对数
        障碍因子为很小的正数
        当x

        趋于边界时,那么障碍函数趋于无穷;初始点在可行域内部;
        在可行域内时,障碍函数值很小,增广目标函数与原始目标函数等价了;

        这里写图片描述

    3. 广义乘子法
    3.1 等式约束广义乘子法:

    {minf(x)s.t.gi(x)=0

    广义乘子法是拉格朗日乘子法与罚函数法的结合;
    ϕ(x,λ,σ)=f(x)+λTg(x)+12σgT(x)g(x)

    在罚函数的基础上增加了乘子项,首先在σ足够大的基础上,获得ϕ的极小值,然后在调整λ获得原问题的最优解;
    迭代公式如下:
    梯度等于零:∇xϕ(xk,λk,σk)=0,即
    ∇xf(xk)+λk∇xgT(xk)+σk∇xgT(xk)g(xk)=∇xf(xk)+∇xgT(xk)(σkg(xk)+λk)=0

    令λk+1=σkg(xk)+λk,则导出拉格朗日乘子法的一阶必要条件;
    ∇xf(xk)+λk+1∇g=0

    计算方法:
    (1)初始值设置:x,λ,σ
    (2)计算梯度为0,获得当前最优值xk,然后判断是否终止;
    (3)是否调整惩罚因子,获得σk+1
    (4)计算λk+1=σkg(xk)+λk

    3.2 不等式约束广义乘子法:

    思想是:引入松弛变量,化不等式问题为等式约束;
    {minf(x)s.t.hi(x)>=0→{minf(x)s.t.hi(x)=βi

    那么原始问题转化成:
    minx,λϕ(x,λ,σ)=f(x)+λT(h(x)−β)+12σ(h(x)−β)T(h(x)−β)minx,λ,σ,βϕ(x,λ,σ,β)=f(x)+σ2((h+λσ−β)2−(λσ)2)β=1σmax{0,σh+λ}

    首先计算关于β的极小值;因为β>=0,上式是关于β的二次函数,开口向上,对称轴是h+λσ,
    β={0h+λσh+λσ<0h+λσ>=0→1σmax{0,σh+λ}

    这样做的目的是:保证增广目标函数最优解近似于原始问题最优解;
    分析:当σh+λ>=0时,β=h+λσ,则
    ϕ(x,λ,σ)=f(x)−σ2(λσ)2=f(x)−λ22σ∇xϕ(x,λ,σ)=∇xf(x)

    当σh+λ<0时,β=0,则
    ϕ(x,λ,σ)=f(x)−σ2(λσ)2+(σh+λ)22σ=f(x)−λ22σ+(σh+λ)22σ∇xϕ(x,λ,σ)=∇xf(x)+(σh+λ)∇h(x)

    梯度为零计算最优解,发现刚好满足朗格朗日乘子法的必要条件;

    3.3 一般约束广义乘子法:

    混合等式不等式约束法,计算即可
    ---------------------  
    作者:冰鋒  
    来源:CSDN  
    原文:https://blog.csdn.net/lmm6895071/article/details/78329045  
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Redis分布式锁的实现原理
    Redis锁的简单应用
    Redis所需内存 超过可用内存怎么办
    redis学习笔记之虚拟内存
    组织安全性SQL
    应收发票相关脚本
    用户与职责与请求关系语句
    应收事物处理删除 SQL 语句
    总账库存科目明细追溯
    月结各模块关闭情况查询
  • 原文地址:https://www.cnblogs.com/fengff/p/9877294.html
Copyright © 2011-2022 走看看