1. 支持向量机核心思想

支持向量机SVM有三宝:间隔,对偶,核技巧

注:核技巧与SVM没有固定的绑定关系,核技巧作用是让SVM从普通的欧式空间映射到高维空间,可以实现非线性的分类

ssim损失pytorch实现 svm pytorch_优化问题

支持向量机的作用是找到一个超平面将上图中的样本进行分类,SVM模型的作用是找到一个超平面ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_02,这个超平面具有很好的鲁棒性,不会随着样本的轻微的波动而进行错误的分类;简而言之:我们要找到一个很好的超平面,这个超平面距离两类样本点的距离足够大,由一定的鲁棒性;
ssim损失pytorch实现 svm pytorch_支持向量机_03

2.SVM的分类

  1. Hard-margin SVM ----> 硬间隔 SVM
  2. Soft-margin SVM ----->软间隔 SVM
  3. Kernel SVM ------>核函数 SVM

3.SVM的模型建立-hard-margin SVM 硬间隔

3.1数据集定义

我们定义数据集中由N个样本ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_04,我们就是运用一个符号函数将上述样本分成ssim损失pytorch实现 svm pytorch_支持向量机_05

3.2 求两类样本最小距离点

我们知道,要做最大间隔分类器分两步:

1.间隔,从N个样本中找到一个样本到超平面最小的距离:ssim损失pytorch实现 svm pytorch_数据集_06
2. 最大:求出间隔后,再求最大间隔
ssim损失pytorch实现 svm pytorch_优化问题_07
满足:s.t.:ssim损失pytorch实现 svm pytorch_支持向量机_08
注:
ssim损失pytorch实现 svm pytorch_数据集_09
ssim损失pytorch实现 svm pytorch_支持向量机_10
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_11
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_12
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_13
ssim损失pytorch实现 svm pytorch_优化问题_14
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_15
我们一般习惯用最小值表示,并将||w||表示成向量形式||W||=ssim损失pytorch实现 svm pytorch_优化问题_16

3.3最大间隔分类器数学模型(优化问题=凸优化问题convex_optimization)

ssim损失pytorch实现 svm pytorch_数据集_17
ssim损失pytorch实现 svm pytorch_支持向量机_18
以上是一个凸优化问题,目标函数是二次函数,一共有N个约束,即一个二次规划问题(Quadratic Programming)-QP问题;

3.4 数学模型转换

对于此类问题,我们的思想是借助拉格朗日法将凸优化问题(原问题)转换成对偶问题;

整体思路如下图:

ssim损失pytorch实现 svm pytorch_支持向量机_19

3.4.1 将凸优化问题转换成拉格朗日乘子

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_20
ssim损失pytorch实现 svm pytorch_数据集_21

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_22
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_23
我们通过拉格朗日乘子法,将原问题中带约束的问题转换成无约束的问题:那么原问题的等价模型如下:
ssim损失pytorch实现 svm pytorch_支持向量机_24
ssim损失pytorch实现 svm pytorch_优化问题_25

3.4.2 原问题与等价问题解释

将w,b组成的数据几何分成两个部分:令ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_26

情况1:
ssim损失pytorch实现 svm pytorch_数据集_27

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_28

情况2:
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_29

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_30

合并上述问题:
ssim损失pytorch实现 svm pytorch_支持向量机_31

ssim损失pytorch实现 svm pytorch_数据集_32

3.4.3对偶问题转换[将原问题 -> 对偶问题]

ssim损失pytorch实现 svm pytorch_支持向量机_33
ssim损失pytorch实现 svm pytorch_支持向量机_34
我们可以用凤尾永远大于鸡头来形象
ssim损失pytorch实现 svm pytorch_支持向量机_35
ssim损失pytorch实现 svm pytorch_优化问题_36
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_37

3.4.4对ssim损失pytorch实现 svm pytorch_数据集_38

3.4.4.1 偏导:令ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_39

ssim损失pytorch实现 svm pytorch_数据集_40

ssim损失pytorch实现 svm pytorch_优化问题_41
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_42
将上式代入L中可得如下:
ssim损失pytorch实现 svm pytorch_优化问题_43
ssim损失pytorch实现 svm pytorch_支持向量机_44

3.4.4.2 偏导:令ssim损失pytorch实现 svm pytorch_优化问题_45

ssim损失pytorch实现 svm pytorch_优化问题_46

求偏导:

ssim损失pytorch实现 svm pytorch_数据集_47

结果:

ssim损失pytorch实现 svm pytorch_支持向量机_48

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_49

将其结果代入:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_50
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_51
ssim损失pytorch实现 svm pytorch_优化问题_52
调换顺序:
ssim损失pytorch实现 svm pytorch_优化问题_53
合并可得:
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_54

更新后模型:

ssim损失pytorch实现 svm pytorch_数据集_55

化简模型如下:
ssim损失pytorch实现 svm pytorch_数据集_56
ssim损失pytorch实现 svm pytorch_优化问题_57
ssim损失pytorch实现 svm pytorch_优化问题_58

3.5 KKT条件

ssim损失pytorch实现 svm pytorch_支持向量机_59
ssim损失pytorch实现 svm pytorch_支持向量机_60
ssim损失pytorch实现 svm pytorch_支持向量机_61
ssim损失pytorch实现 svm pytorch_数据集_62

由上述KKT条件可得
ssim损失pytorch实现 svm pytorch_数据集_63

对于样本中的数据由KKT条件可得如下数据相关图形性质:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_64

由互补松弛条件(17-2)可得:

ssim损失pytorch实现 svm pytorch_优化问题_65
则数据我们可以知道,在距离超平面最近的两个点满足ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_66

在两边同时乘以ssim损失pytorch实现 svm pytorch_数据集_67可得如下:

ssim损失pytorch实现 svm pytorch_数据集_68我们知道ssim损失pytorch实现 svm pytorch_支持向量机_69则:

ssim损失pytorch实现 svm pytorch_支持向量机_70

故最近两个点的值为:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_71

ssim损失pytorch实现 svm pytorch_支持向量机_72

我们假设样本中一定存在点ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_73

ssim损失pytorch实现 svm pytorch_数据集_74

ssim损失pytorch实现 svm pytorch_数据集_75

ssim损失pytorch实现 svm pytorch_支持向量机_76代入方程可得:

ssim损失pytorch实现 svm pytorch_数据集_77

ssim损失pytorch实现 svm pytorch_支持向量机_78

ssim损失pytorch实现 svm pytorch_数据集_79

ssim损失pytorch实现 svm pytorch_数据集_80

ssim损失pytorch实现 svm pytorch_数据集_81

ssim损失pytorch实现 svm pytorch_数据集_82

4.软间隔-SVM

soft-SVM顾名思义就是软的支持向量机,主要作用是算法本身能允许兼容一点点错误。所以我们需要在硬间隔的基础上增加一个损失函数Loss function;我们知道样本被错误分类的情况是ssim损失pytorch实现 svm pytorch_数据集_83;但是这个函数关于w是不连续的;我们令:ssim损失pytorch实现 svm pytorch_优化问题_84;则函数的图像如下:

ssim损失pytorch实现 svm pytorch_支持向量机_85


由图可知:在z=1处出现断点,即不连续现象;就会导致函数在求导出现不可导现象;为了解决上述问题,我们可以用距离来表示损失函数;

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_86

ssim损失pytorch实现 svm pytorch_数据集_87

综上所述:

ssim损失pytorch实现 svm pytorch_数据集_88

图像为:可以看出此时的Loss为连续函数;

ssim损失pytorch实现 svm pytorch_优化问题_89


那么数学模型可变为如下:

ssim损失pytorch实现 svm pytorch_数据集_90

ssim损失pytorch实现 svm pytorch_数据集_91

我们引入ssim损失pytorch实现 svm pytorch_优化问题_92数学模型可优化为:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_93

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_94

图形如下:

ssim损失pytorch实现 svm pytorch_优化问题_95


用图像表示为:我们在硬间隔的条件下新增了一个缓冲区,由于这个缓冲区的存在,我们可以允许由一点点的误差。而支持向量的区间被放宽到了ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_96

5.约束优化问题

在SVM中有很多带约束条件的优化问题,对于此类问题,我们需要约束优化的原问题转换成等价的无约束问题;

整体思路如下:

ssim损失pytorch实现 svm pytorch_数据集_97

5.1 约束优化问题与无约束问题的等价性

原问题描述:
ssim损失pytorch实现 svm pytorch_支持向量机_98
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_99
ssim损失pytorch实现 svm pytorch_支持向量机_100

用拉格朗日函数表示如下:
ssim损失pytorch实现 svm pytorch_优化问题_101

等价数学模型-原问题的约束问题如下:
ssim损失pytorch实现 svm pytorch_优化问题_102
ssim损失pytorch实现 svm pytorch_数据集_103

现在我们解释下为啥两个模型是等价的:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_104
ssim损失pytorch实现 svm pytorch_数据集_105
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_106
ssim损失pytorch实现 svm pytorch_支持向量机_107
ssim损失pytorch实现 svm pytorch_优化问题_108
重点!!!
也就是说,当我们用拉格朗日函数代替约束条件(不等式)时,其实等式中就自动将不满足条件的数据过滤掉了;也就从约束条件变成了无约束的等式模型;所以含不等式约束条件模型(27)与不含约束条件模型(28)等价!!!

5.2 原问题转换成对偶问题(弱对偶性):

5.2.1弱对偶性描述:

ssim损失pytorch实现 svm pytorch_优化问题_109
之前我们感性认识:鸡头ssim损失pytorch实现 svm pytorch_优化问题_110凤尾,毕竟鸡头始终是鸡,凤尾终究还是凤 ,凤永远大于鸡;

我们要证明的目的是要证明原问题和对偶问题等价:

原问题(关于x的函数):
ssim损失pytorch实现 svm pytorch_优化问题_111
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_112
对偶问题(关于ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_113最大化的函数):
ssim损失pytorch实现 svm pytorch_优化问题_114
ssim损失pytorch实现 svm pytorch_优化问题_115

5.2.2弱对偶型证明:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_116
证明如下:

ssim损失pytorch实现 svm pytorch_优化问题_117

ssim损失pytorch实现 svm pytorch_数据集_118

ssim损失pytorch实现 svm pytorch_优化问题_119

ssim损失pytorch实现 svm pytorch_支持向量机_120

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_121

代入即得:

ssim损失pytorch实现 svm pytorch_支持向量机_122

6.对偶问题的几何解释

原问题的优化模型如下:
ssim损失pytorch实现 svm pytorch_支持向量机_123
ssim损失pytorch实现 svm pytorch_支持向量机_124
ssim损失pytorch实现 svm pytorch_数据集_125
为方便几何表达,我们可以简化上述模型为:
ssim损失pytorch实现 svm pytorch_支持向量机_126
ssim损失pytorch实现 svm pytorch_支持向量机_127
上述原问题转换成拉格朗日函数为:
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_128
ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_129
定义域:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_130

定义原问题最优解为:

ssim损失pytorch实现 svm pytorch_优化问题_131
定义对偶问题最优解为:
ssim损失pytorch实现 svm pytorch_数据集_132
代入拉格朗日函数为:
ssim损失pytorch实现 svm pytorch_优化问题_133
ssim损失pytorch实现 svm pytorch_数据集_134
由于我们知道ssim损失pytorch实现 svm pytorch_数据集_135
ssim损失pytorch实现 svm pytorch_数据集_136
现在我们主要问题是如何将上述两个最优解ssim损失pytorch实现 svm pytorch_支持向量机_137

6.1 ssim损失pytorch实现 svm pytorch_优化问题_138原问题最优解几何表示

原问题最优解:

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_139

图像表示如下:

ssim损失pytorch实现 svm pytorch_优化问题_140

6.2 ssim损失pytorch实现 svm pytorch_支持向量机_141对偶问题最优解几何表示

对偶问题最优解:

ssim损失pytorch实现 svm pytorch_支持向量机_142

图像表示:

ssim损失pytorch实现 svm pytorch_优化问题_143

通过不断移动ssim损失pytorch实现 svm pytorch_数据集_144可以得到无数个几何点为ssim损失pytorch实现 svm pytorch_支持向量机_145
ssim损失pytorch实现 svm pytorch_支持向量机_146从而满足直线与定义域两个点相切;

调整斜率得到如下图形:

ssim损失pytorch实现 svm pytorch_数据集_147

由上述图形可得:凹函数的ssim损失pytorch实现 svm pytorch_优化问题_138ssim损失pytorch实现 svm pytorch_支持向量机_141
ssim损失pytorch实现 svm pytorch_数据集_150
那什么时候可以得到ssim损失pytorch实现 svm pytorch_优化问题_138=ssim损失pytorch实现 svm pytorch_支持向量机_141

一般我们发现当函数为凸函数的时候满足ssim损失pytorch实现 svm pytorch_优化问题_138=ssim损失pytorch实现 svm pytorch_支持向量机_141

如图所示:

ssim损失pytorch实现 svm pytorch_数据集_155


综上所述:

ssim损失pytorch实现 svm pytorch_优化问题_156

上面我们从几何的角度来重新解释了这个问题,其实仔细的想一想也不算很难。但是,强对偶性

的证明这个东西有点难,实际上学习机器学习中的 SVM,学到这就差不多够了。如果是强对偶性,我

们还需要满足两个条件,也就是 1. 是一个凸优化问题;2. slater 条件。就可以得到 d∗ = p∗。但是这只是一个充分必要条件,满足其他的条件也可能是强对偶关系。而 SVM 是一个

二次规划问题,那么它一定是一个强对偶问题。

7.Slater Condition

通常凸优化问题不一定是强对偶问题,我们往往需要在凸优化问题上加一些限制条件才可以构成凸优化问题,比如slatter-condition;但这种条件往往是充分非必要条件;这种条件有很多种,一般有slatter-condition和以后讲的KKT条件;

7.1 Slater-condition描述

存在一个ssim损失pytorch实现 svm pytorch_支持向量机_157,满足对于每一个ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_158;其中relint{D}=relative-interior相对内部的意思,不包含边界。

注:

1) 对于绝大多数的凸优化问题来说,通常slater条件是成立的;

2)放松的slater条件为:假设M中有K个仿射函数(一阶的多项式函数),那么我们可以不需要校验这K个放射函数,只需要校验其余(M-K)个函数

3)SVM 是一个典型的凸二次规划问题,也就是目标函数 f 是凸函数,ssim损失pytorch实现 svm pytorch_优化问题_159是仿射函数,ssim损失pytorch实现 svm pytorch_优化问题_160为仿射。那么在几何上是什么意思呢?也就是限制至少有一个点在坐标系的左边,使得限制直线不是垂直的;如下图所述:

ssim损失pytorch实现 svm pytorch_优化问题_161


4) 如果u=0即直线垂直u轴的时候,我们就对此问题不给予考虑;

5)如果我们的凸优化问题满足了stater条件,那么它的强对偶关系一定成立;恰恰我们的凸二次优化问题天然满足slater条件或放松的slater条件;

6)如果是SVM+强对偶关系+凸优化问题,那么我们就可以用KKT条件直接求解

8.KKT Condition

由上文可得,当我们遇到凸优化问题,且它满足slater-condition时,我们可以得到强对偶关系,即ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_162但由于这个条件是充分非必要条件;但凸优化问题在满足KKT Condition的情况下,能够得到充分必要条件;即:
ssim损失pytorch实现 svm pytorch_数据集_163
ssim损失pytorch实现 svm pytorch_数据集_164

8.1KKT条件概述

  1. 可行性条件:
    1.1 ssim损失pytorch实现 svm pytorch_数据集_165
    1.2 ssim损失pytorch实现 svm pytorch_支持向量机_166
    1.3 ssim损失pytorch实现 svm pytorch_数据集_167
  2. 互补松弛条件:ssim损失pytorch实现 svm pytorch_数据集_168
  3. 梯度为0:ssim损失pytorch实现 svm pytorch_优化问题_169

8.2原问题的数学模型

ssim损失pytorch实现 svm pytorch_支持向量机_170
ssim损失pytorch实现 svm pytorch_优化问题_171
ssim损失pytorch实现 svm pytorch_支持向量机_172

8.3原问题的拉格朗日模型

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_173
ssim损失pytorch实现 svm pytorch_数据集_174
ssim损失pytorch实现 svm pytorch_优化问题_175

8.4对偶问题的拉格朗日模型

ssim损失pytorch实现 svm pytorch_优化问题_176
ssim损失pytorch实现 svm pytorch_优化问题_177
ssim损失pytorch实现 svm pytorch_支持向量机_178

8.5互补松弛条件证明

我们可以令:ssim损失pytorch实现 svm pytorch_优化问题_179

详解:

ssim损失pytorch实现 svm pytorch_优化问题_180

ssim损失pytorch实现 svm pytorch_支持向量机_181

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_182

ssim损失pytorch实现 svm pytorch_优化问题_183

ssim损失pytorch实现 svm pytorch_数据集_184

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_185

ssim损失pytorch实现 svm pytorch_数据集_186

ssim损失pytorch实现 svm pytorch_支持向量机_187

证毕!

8.6梯度为0

ssim损失pytorch实现 svm pytorch_ssim损失pytorch实现_188

ssim损失pytorch实现 svm pytorch_数据集_189

ssim损失pytorch实现 svm pytorch_数据集_190

证毕!