在学习SVM的原理时,接触到了等式约束优化与不等式约束优化,下面是根据相关资料自己总结出来的自己的,希望对大家有所帮助,这是第一篇博客。

1.等式约束优化

1.1.问题描述

当目标函数加上等式约束条件之后,原本的非约束优化变成了等式约束优化,如下:

不等式约束 pytorch 不等式约束优化_约束条件

  .....................................................................................(1)

不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_02

  ............................................................................(2)因为存在约束条件,所以将

不等式约束 pytorch 不等式约束优化_约束条件_03

的解限定在了一个可行域的区域,此时可能找不到可以使得

不等式约束 pytorch 不等式约束优化_最优解_04

为0的点,但是我们的目的是找到可行域范围内

不等式约束 pytorch 不等式约束优化_约束函数_05

的最小值即可。

1.2.解法

利用拉格朗日乘子法,引入拉格朗日算子 

不等式约束 pytorch 不等式约束优化_最优解_06

 ,构建拉格朗日函数如下:

不等式约束 pytorch 不等式约束优化_约束函数_07

 ..........................................................(3)然后对拉格朗日函数

不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_08


不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_09

的偏导,令偏导为0,即:

不等式约束 pytorch 不等式约束优化_约束条件_10

 ..............................................................................(4)

对(2)(4)式进行求解即得到此类问题的最优解。

1.3.解释

假设我们的目标函数为二维的,即

不等式约束 pytorch 不等式约束优化_约束函数_11

,在平面中画出

不等式约束 pytorch 不等式约束优化_最优解_12

的等高线,如下图的虚线所示

显而易见,只有当等高线与目标函数的曲线相切时才有可能得到可行解。因此拉格朗日取得极值的必要条件是目标函数与约束函数相切,这时两者的法向量是平行的,即

不等式约束 pytorch 不等式约束优化_约束函数_13

 ................................................................(5)所以正好可以得到(3)式,需要注意的是,

不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_14

仅仅要求不等于0即可,正负号不需要确定。

 

2.不等式约束优化

2.1.问题描述

不等式约束优化问题为:

不等式约束 pytorch 不等式约束优化_约束条件_15

 ...........................................................................................(6)

不等式约束 pytorch 不等式约束优化_最优解_16

 ..................................................................................(7)

2.2.解法

首先构建拉格朗日函数如下:

不等式约束 pytorch 不等式约束优化_约束函数_17

 ...............................................................(8)对(8)式关于

不等式约束 pytorch 不等式约束优化_约束条件_18

求偏导,可得

不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_19

 ...................................................................................(9)

另外还有KKT条件如下:

        

\beta=0 \ and \ h(x)> 0

  或者 

\beta> 0 \ and \ h(x)=0

 .....................(10)

由(9)(10)两式可以得出最后的最优解。对于(10)式的解释请看2.3节。

2.3.解释        

假设我们的目标函数为二维的,下图给出了目标函数的等高线与不等式约束:

不等式约束 pytorch 不等式约束优化_最优解_22

根据上图可知,可行解存在于

不等式约束 pytorch 不等式约束优化_约束函数_23

或者

不等式约束 pytorch 不等式约束优化_约束条件_24

的区域里取到,存在下列两种情况:

不等式约束 pytorch 不等式约束优化_不等式约束 pytorch_25

a)当可行解

不等式约束 pytorch 不等式约束优化_约束条件_26

落在

不等式约束 pytorch 不等式约束优化_约束函数_27

的区域内,此时约束条件不起作用,直接极小化

不等式约束 pytorch 不等式约束优化_约束函数_28

即可,所以(1)式

不等式约束 pytorch 不等式约束优化_最优解_29

中,只需满足

不等式约束 pytorch 不等式约束优化_最优解_30

即可。即上图左侧所示.b)当可行解

不等式约束 pytorch 不等式约束优化_约束条件_31

落在

不等式约束 pytorch 不等式约束优化_约束条件_32

的区域内,此时等价于等式约束优化问题。即上图右侧所示。此时目标函数的梯度方向为指向中心位置的反方向,而约束函数

不等式约束 pytorch 不等式约束优化_最优解_33

由约束区域指向非约束区域。由下图可以看出,在最优解的位置,约束函数的梯度方向于目标函数的梯度方向正好相反,从而有:

不等式约束 pytorch 不等式约束优化_约束函数_34

 

不等式约束 pytorch 不等式约束优化_约束函数_35

 ..................................................(11)(11)式其实就是(9)式的变形。当然(11)式有一个限制条件 

\beta> 0