直线的方向向量

中超01
直线的方向向量
导读:直线的方向向量是指和这条直线平行或重合的向量,一条直线的方向向量有无数个。1直线上的向量以及与之共线的向量叫做直线的方向向量。2所以只要给定直线,便可构造两个方向向量(以原点为起点)。即已知直线ax+by+c=零,则直线l的方向向量为d=(

直线的方向向量是指和这条直线平行或重合的向量,一条直线的方向向量有无数个。

1直线上的向量以及与之共线的向量叫做直线的方向向量。

2所以只要给定直线,便可构造两个方向向量(以原点为起点)。即已知直线ax+by+c=零,则直线l的方向向量为d=(-b,a)或d=(b,-a)。

3垂直的关系,即方向向量与系数向量作欧氏内积等于零。系数向量就是直线的法向量,不仅仅是直线,乃至n维空间的超平面的法向量也是系数向量。

扩展:方向向量转欧拉角、旋转矩阵、四元数,项目中需要将三维空间方向向量转化为旋转矩阵来表示,解决方案记录如下输入方向向量 y 0 , z0) ,直线l,对任意—点M= ( x , y ,数学方向向量和法向量千次阅读。直线的方向向量和法平面斜截式\(y=kx+bl),

方向向量(Ioverrightarrow'S)=(1,k),或(overrightarrows)=(1,-cfrac(A}{B))),或N(1overrightarrow{s}=(B,-AV),或\(\overrightarrow{s}=(-B,A)V)平面。

对抗攻击

对抗攻击论文参考:

《Intriguing properties of neural networks》

《神经 *** 有趣的特性》

《Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey》,以下简称『Survey』。

做适当修改后能欺骗深度学习模型的可能性

1举例理解:

左边是一张能够被GoogLeNet正常分类为熊猫的,在添加一定的噪音后变成右图,在人的肉眼看来,它还是熊猫,但GoogLeNet会判定为长臂猿。这种被修改后人类无法明显察觉,却被机器识别错误的数据即为 对抗样本 ,而这整个过程就可以理解为 对抗攻击

2数学理解:

神经 *** 中每层神经元的输入 a = g(Wx+b),其中 g 为激活函数,W 为权重参数,x 为上一层的样本数据,b 为偏置参数,那么从拓扑学角度来看,在一个二维平面上,这个过程相当于哪几个步骤呢?

(1)一次使用权重参数矩阵 W 的线性变换

(2)一次使用偏执向量 b 的移动

(3)一次应用非线性激活函数 g 的变换

二维平面 ,其实是将整个平面进行了 旋转、移动和拉伸 三步。

分类问题

简单分类问题:通过较少几次变换将问题转换为一条直线可分割的空间。

既是一层神经 *** 就可以完成分类,通过变换空间布局,最终通过一条直线完成分类。

举例:

简单转换ing

转换结果看下图

复杂分类问题:通过多几次的转换完成将问题转换为一条直线可分割的空间。

就是多层神经 *** 完成分类,通过变换空间布局,最终通过一条直线完成分类。

举例:

动态多步转换

以上是从低维度理解神经 *** 的训练,其中也有难以拉伸的例外,下图所示的圆套圆的情况,就是难以在二维空间将其拉伸到理想的位置的例子。

但,增加神经元,可以在 三维空间 中轻松将其分离。

看!

归纳 同样对于复杂问题可以通过,增加神经元在高维度通过更长且复杂的方式解决。

但是例如两个相互套起来的环,按照推测需要在四维空间中才能完全分开,然而我们难以想象四维空间,在现实世界的数据集中,这种死结或者缠绕问题可能会更复杂。

对于神经 *** 来,可以选择 将打成死结的数据尽可能拉伸开,而不是完全解开 ,如下图,对于分类问题来说,已经具有较高的准确率和召回率。

部分情况下,为了更精确地分类,较宽的神经 *** 可能相对深度来说更重要。

综上所述

1 神经 *** 中包含语义信息的不在每个独立的神经单元,而是整个空间。 神经 *** 在最后一层能将样本中诸多变化的因子理清楚并理解其语义,并不是因为某个独立神经元中包含了什么特定的语义,而是 对整个空间进行变换后从最终的表征层中学到的 ,经过学习,神经 *** 会 放大某些相关因子,同时缩小某些无关因子

2 神经 *** 学习到的输入到输出的映射在很大程度上是不连续的。 就像上面图中为了解开一个死结所做的拉伸结果一样, 在人看来,在拉伸距离较大的地方我们可以认为这种映射是连续的, 然而 对于仍然缠绕在一起的部分,之前可以用来划分界限的直线或者超平面已经无法连续

通过仔细观察可以区分出来,但是上文只是一个简单的例子,现实世界中的真实数据较为复杂,对于肉眼来说可能很难分清楚缠绕在一起的部分。对于神经 *** 来说, 对抗样本已经严重的跨过了用于分类的界限 ,而对于肉眼其实还 看不出来它有移动。

()线性特性的攻击行为()和()高效制造对抗样本的 *** ()

参考论文:

《Explaining and harnessing adversarial examples》

《对抗性例子的解读和掌握》

深度神经 *** 在高纬空间中的线性特性已经足以产生这种攻击行为 ,并提出了一种 更高效生成对抗样本的 *** ,接下来我们就简单分析一下这一理论和 *** 。

目前神经 *** 为了提高训练效率所使用的激活函数在局部都过于线性。

例如:

类比先前举出的拓扑学例子,在 最后的表征层 都是 通过直线或超平面完成的分类 ,在线性的假设下,暂且不通过二维或三维空间来理解,先从一个简单的数学公式角度开始。

数学解释

公式内容解释:

w 是训练好的参数向量

x 表示真实样本数据向量

η 表示给图像加入的噪音向量

x ~表示加入噪音后新生成的样本

当加入足够小的 η 时,肉眼无法区分出 x 的变化,直观感觉上左边的式子可能也不会变化很大。

事实上 ,然而 η 当的方向与 w 完全一致的时候,即使很小,也会使整个激活值变化很大。

假设证明:

如果 w 是一个 n 维向量,而其权值的平均大小为 m,那么激活值将会增加 nm。可见,在一个肉眼几乎无法差觉的扰动干扰下,对神经 *** 最终激活层的计算会产生巨大的干扰,从而迷惑神经 *** 训练出来的模型。

寻找正确方向

当 η 与 w 的方向一致时会使激活值更大,那么,如何找到这个正确的方向呢?

结论,那就是损失函数在待构造样本上的梯度方向,即下面的式子。

ε 是一个调节系数

sign() 是一个符号函数,代表的意思也很简单,就是取一个值的符号

(当值大于 0 时取 1,当值等于 0 时取 0,当值小于 0 时取 -1)

▽ 表示求 x 的梯度,可以理解为偏导,

J 是训练模型的损失函数。

结论的由来

在正常的神经 *** 模型训练过程中,有一个过程叫反向传播,就是对参数求偏导,然后将参数更新,我们结合下面这张图看一下。

假设图中的函数即为 损失函数 ,为了使损失函数降到更低,我们会根据当前值的梯度去调整。

当梯度小于 0 的时候我们可以看出,当前值需要右移。

而当梯度大于 0 的时候,当前值需要左移。

这个过程实际上就是用 θ 减去 θ。扩展到损失函数 J(θ, x, y) 中,θ 即为 我们要调整的参数 ,因此在样本 x 和 y 不改变的情况下,我们会不断去调整参数 θ 以寻求局部更优解,即 θ = θ - θ 。

生成对抗样本,也可以采用类似的 *** ,那就是 固定参数 θ,调整 x 同时使损失函数增大 ,而不是变小,此时就应该让 x 往相反的方向走,即 x = x + x ,这样是不是很容易可以理解上面 η 的定义呢?在实践中,我们还需要通过 ε 这个参数来 调节噪音的大小 ,这种 *** 相比之前提到的优化 *** 非常高效,基本只需要一次计算就可以找到对抗样本,因此作者将这种 *** 叫做 快速梯度符号法 (Fast Gradient Sign Method,FG *** )。总结一下FG *** ,这种 *** 通过替换目标值 y 就可以 让攻击样本朝着指定的分类目标走 ,即,可以做任意目标的欺骗。

将线性假设简化到二维空间,我们要求的 η 其方向正好就接近于参数 w 的方向,不再展开说明,有兴趣的读者可以自行画一画。

建立在一个高维空间线性的假设或猜测前提下,需要 实验 支撑,根据下列分析展开。

解释

这张图是对数据集CIFAR-10的分类器的决策边界示意图。

其中每个小格子代表的是不同的CIFAR-10样本,

每个小格子中:

横向从左往右代表的是FG *** 算法中的梯度方向,

纵向代表的是FG *** 梯度方向的正交方向,

白色表示模型能分类正确的情况

彩色代表预测出错的情况

不同的颜色代表不同的错误预测分类。

可以看出,在出错的区域都程线性分布,另外,如果横轴的方向走的不够远,即便再往其他方向走都无法使模型出错,而一单进入这个区域,就会出现大量的对抗样本。而在随机找到的对抗样本中,这种分布也是很随机的,甚至很难找到,见下图。

从实验结果表明

高维空间中的线性假设也是合理的

举例

一匹叫做 Clever Hans 的马,刚出现的时候人们认为这匹马会做算术,但实际上它只是会阅读人的表情,当它点马蹄的次数接近正确答案时,人们的表情会更兴奋,它就知道该这个时候停止了。

隐喻神经 *** ,一个测试效果良好的分类器,其实并不像人类一样学习到了所分类样本的真正底层概念,只不过刚好构建了一个在训练数据上运行相当良好的模型,所以,你以为你以为的就是你以为的吗?

分类器能够在训练集的不同子集上训练时获得大致相同的分类权重,因为机器学习算法能够泛化, 基础分类权重的稳定性反过来又会导致对抗性样本的稳定性。因此, 对抗攻击可以认为是存在于任何神经 *** 模型。

以上是论文二的线性特性的攻击行为

高效制造对抗样本的 ***

目前来看还没有能够完全抵抗这种攻击的 *** ,其实结合攻击的原理也不难看出,即便分类器做得再好,总能使一个样本用最小的干扰走到错误的分类区域,我们能做的更多是如何构造鲁棒性更强的模型,同时也保持对这个领域的关注。『Survey』(注意之一篇论文的引用有注释)中总结的目前抵御攻击的办法可以分为三大类:

1修改训练样本 ———— 通过添加更多的对抗样本到训练集中可以有效避免一部分攻击 ,但这更像是一种无奈的做法, 当扩大样本集的时候,其实分类边界有可能也在随之扩大

2修改训练 *** ,这类 *** 会对训练 *** 做出一定调整,其中有一种方式是模拟生物学 在最后一层使用更加非线性的激活函数 ,但这种方式又会 导致训练效率和效果下降 。修改训练 *** 的 *** 分为 完全抵抗 仅检测 两种方式,完全抵抗其实就是让模型能将对抗样本识别为正确的分类,而仅检测是为了发现这种攻击样本,从而拒绝服务。

3附加 *** ,这种方式是在 不改变原有模型的情况下使用额外的 *** 进行辅助 ,这样可以使原有 *** 保持不变,其中最有效的一种方式是生成式对抗 *** ——GAN。同样的,这种方式也分为 完全抵抗 仅检测 两种方式。

总结一下

定义:

对抗样本:是指在数据集中通过故意添加细微的干扰所形成的输入样本,会导致模型以高置信度给出一个错误的输出。

原因分析:

对抗样本出现的主要原因之一是过度线性, 神经 *** 主要是基于线性块构建的,实现的整体函数被证明是高度线性的,如果一个线性函数具有许多输入,那么它的值可以非常迅速地改变。

参考:

GitHub

CSDN

支持向量机(Support vector machines, SVM)是一种 二分类模型 ,它的基本模型是定义在特征空间上的间隔更大的线性分类器,他的学习策略就是间隔更大化,同时该 *** 可以形式化为一个求解图二次规划。

支持向量机可分为三类:

支持向量机模型中存在三宝:

支持向量机和感知机在某些方面很相似,其相同点:

不同点:

图1 感知机与支持向量机区别

图中的蓝色和**圆点分别表示正负样本,对于这个二分类,从图中我们可知,在最上面的黄线和最下面的绿线之间的线条都是可以把训练样本集完全分开的,这就是感知机的原理,通过这些分离超平面把训练集分开,这样的分离超平面存在很多条,比如图中的虚线,从视觉上中间那条实线应该是众多线条中更优的一条,感知机对于学习的分离超平面由于优化算法、学习率等不同因素,会随机地学习到这众多分离超平面中的一条,当学习到的是靠近上下边缘的分离超平面是,对于一个未知样本,当这个样本稍微浮动一下,模型就很可能对他进行误分类了,因此鲁棒性很低,而支持向量机的目标是找到图中中间那条更优的分离超平面。

定义(线性可分支持向量机) :给定线性可分训练数据集,通过间隔更大化或等价地求解相应的凸二次规划问题学习得到一个分离超平面:

即相应的决策模型:

此模型就为线性可分支持向量机。其中 表示分离超平面的法向量, 表示截距,位于分离超平面之上的样本为正样本,之下的为负样本。

一般来说,一个点到分离超平面的远近可以表示分类预测的确信程度,在给定分离超平面 的情况下, 能够相对地表示点 到分离超平面的远近。同时 的符号与类别标记 是否保持一致来表示分类是否正确,所以,可以用 来表示分类的正确性及确信度,这就是函数间隔(functional margin)的概念。

定义(函数间隔) :对于给定训练数据集 和超平面 ,定义超平面 关于样本点 的函数间隔为:

分离超平面关于训练数据集 的函数间隔为超平面关于 中所有样本点 的函数间隔最小值:

上述定义是在给定超平面 的时候计算,然而在实际支持向量机的学习过程中,只有函数间隔是不够的,因为当 和 按比例同时扩大 倍,此时函数间隔也扩大 倍,而超平面并没有改变。因此我们需要对分离超平面加以约束,如规范化, ,使得间隔不随 和 成比例扩大而改变。这时函数间隔就成为了几何间隔(geometric margin)

定义(几何间隔) :对于给定训练数据集 和超平面 ,定义超平面 关于样本点 的几何间隔为:

分离超平面关于训练数据集 的函数间隔为超平面关于 中所有样本点 的函数间隔最小值:

为 的 范数。其实上述公式就是我们中学时候学习的点到直线的距离公式的推广,或者说点到直线的距离公式是该公式在二位平面下的表示。

通过公式4和公式6的比较,我们可以得出函数间隔和几何间隔有如下关系:

支持向量机学习的基本思想是求解能够 正确划分训练数据集 几何间隔更大 的分离超平面。间隔更大化的直观解释是:使分类决策模型以较大的确信度来对数据集分类,同时对离超平面较近的点也有很大的确信度。

因此,更大间隔支持向量机形式化为:

也即:

我们得知函数间隔 的取值并不影响模型的更优化问题,将 和 成比例的改变 倍,函数间隔也变成 ,这一改变对上面更优化的不等式约束并没有印象,因此,我们可以令 ,于是上述公式就等价于:

此时,SVM优化问题变为一个凸二次规划问题,利用拉格朗日乘子法即可求出更优的

为求解支持向量机的更优化问题,我们将公式10作为原始问题,应用拉格朗日对偶性,通过求解对偶问题(dual problem)得到原始问题(primal problem)的更优解,这就是支持向量机的对偶算法。这样做的 优点 :

通过对公式10的约束条件引入拉格朗日乘子 ,构建出拉格朗日函数:

我们称公式10为带约束的原始问题,根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题

公式12和原始公式存在一种弱对偶关系,当等号成立时为强对偶关系:

此时我们就可以按照利用拉格朗日对偶性求解问题的标准模型,求解出

将公式14和15带入公式11得:

将上式转化为求极小值

上式可以继续利用凸二次规划来求解 ,然后可由 求得原始问题对 的解 。

定理 设 是对偶问题(即公式18)的解,则存在下标 ,使得 ,并按如下公式求得

证明

根据拉格朗日某定理,KKT条件成立,即:

此时,公式13具有强对偶关系,即等号成立。根据支持向量机的特点,至少存在一个 ,即对于支持向量(后面讲解),对此j有

由于 为1或-1,上式两边同乘以一个 得:

从上面的推导我们可以看出, 和 只依赖于训练数据中对应于 的样本点 ,而其他样本点对 和 没有印象,我们把这些 的样本点称为支持向量。这些样本点一定位于间隔边界上。

文中绘图源码

线性判别函数的基本概念

判别函数为线性的情况的一般表达式 式中x是d 维特征向量,又称样本向量, 称为权向量, 分别表示为 是个常数,称为阈值权。

设样本d维特征空间中描述,则两类别问题中线性判别函数的一般形式可表示成

    (3-1)

  其中

  

  而ω0是一个常数,称为阈值权。相应的决策规则可表示成,

  

  g(X)=0就是相应的决策面方程,在线性判别函数条件下它对应d维空间的一个超平面,

           (3-3)

  为了说明向量W的意义,我们假设在该决策平面上有两个特征向量X1与X2,则应有

   

 

     (3-4)

  其中(X1-X2)也是一个向量,(3-4)式表明向量W与该平面上任两点组成的向量(X1-X2)正交,因此W就是该超平面的法线向量。这就是向量W的几何意义。而g(X)也就是d维空间中任一点X到该决策面距离的代数度量,该决策平面将这两类样本按其到该面距离的正负号确定其类别。至于w0则体现该决策面在特征空间中的位置,当w0=0时,该决策面过特征空间坐标系原点,而时,则表示了坐标原点到该决策面的距离。

  有的同学可能对(3-1)公式表示线性判别函数不太理解,这可从线性方程的表示法说起,设二维空间一直线方程表示为:

  w2X2+w1X1+w0=0

  其中w1和w2分别是X1和X2的系数。w0是直线方程的参数项,由于X1和X2是一个向量的两个分量W=( w1, w2)T则w2X2+ w1X1就是这两个向量的点积,表示成(3-3)式。另外我们也知道一个线性方程在二维空间唯一确定了一条直线,但一条直线却可以对应无穷多个直线方程。w2、w1和w0是该直线的方程参数,kw2、kw1和kw0也是这条直线方程的参数。如果我们定义,则

  

  也是该直线的方程,但却是模为1的向量,而W‘TX就是直线上任一点到W‘向量的投影,它的数值等于,因此则表示了这条直线到坐标原点的法向距离。线性函数及线性方程的向量表示形式是今后常用的形式。

应用统计 *** 解决模式识别问题时,一再碰到的问题之一是维数问题。在低维空间里解析上或计算上行的通的 *** ,在高维空间里往往行不通。因此降低维数有时就成为处理实际问题的关键。

我们可以考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维。这在数学上总是容易办到的。然而,即使样本在d维空间里形成若干紧凑的相互分得开的集群,若把它们投影到一条任意的直线上,也可能使几类样本混在一起而变的无法识别。但在一般情况下,总可以找到某个方向,使在这个方向的直线上,样本的投影能分开的更好。

在使用线性分类器时,样本的分类由其判别函数值决定,而每个样本的判别函数值是其各分量的线性加权和再加上一阈值w0。如果我们只考虑各分量的线性加权和,则它是各样本向量与向量W的向量点积。如果向量W的幅度为单位长度,则线性加权和又可看作各样本向量在向量W上的投影。显然样本集中向量投影的分布情况与所选择的W向量有关,

如何根据实际情况找到这条更好的、最易于分类的投影线。这就是Fisher法要解决的基本问题。

        支持向量机(support vector machine),故一般简称SVM,通俗来讲,它是一种二分类模型,其基本模型定义为特征空间上的间隔更大的线性分类器,这族分类器的特点是他们能够同时最小化经验误差与更大化几何边缘区,因此支持向量机也被称为更大边缘区分类器。其学习策略便是间隔更大化,最终可转化为一个凸二次规划问题的求解。SVM在很多诸如文本分类,图像分类,生物序列分析和生物数据挖掘,手写字符识别等领域有很多的应用。

        支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个更大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离更大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。

        假设给定一些分属于两类的2维点,这些点可以通过直线分割, 我们要找到一条更优的分割线,如何来界定一个超平面是不是更优的呢

        如图:

        在上面的图中,a和b都可以作为分类超平面,但更优超平面只有一个,更优分类平面使间隔更大化。 那是不是某条直线比其他的更加合适呢 我们可以凭直觉来定义一条评价直线好坏的标准:

        距离样本太近的直线不是更优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线(图中的更优超平面),离所有点的距离最远。 由此, SVM算法的实质是找出一个能够将某个值更大化的超平面,这个值就是超平面离所有训练样本的最小距离。这个最小距离用SVM术语来说叫做间隔(margin) 。

        描述:给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):

        例如:现在有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的y全是-1 ,另一边所对应的y全是1。

        我们令分类函数为:

        当f(x) 等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点,如下图所示:

        一个点距离超平面的远近可以表示分类预测的确信或准确程度,如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔更大。所以,得寻找有着更大间隔的超平面。

补充知识点: 点到平面的距离

        支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔更大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔更大的分离超平面是唯一的。这里的间隔更大化又称为硬间隔更大化。

        间隔更大化的直观解释是:对训练数据集找到几何间隔更大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

      按照我们前面的分析,对一个数据点进行分类, 当它的margin越大的时候,分类的confidence越大。 对于一个包含n个点的数据集,我们可以很自然地定义它的margin为所有这n个点的margin值中最小的那个。于是,为了使得分类的confidence高,我们希望所选择的超平面hyper plane能够更大化这个margin值。让所选择的超平面能够更大化这个“间隔”值,这个间隔就是下图中的Gap的一半:

为什么用几何间隔求更大的分离超平面而不用函数间隔?

例题:

我们构造了约束更优化问题,就是下面这个:

        此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的更优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

补充知识点: 拉格朗日乘子法学习

                     拉格朗日KKT条件

                     KKT条件介绍

                     拉格朗日对偶

         通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier)α,定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):

 求解这个式子的过程需要拉格朗日对偶性的相关知识。

例题:

         接下来谈谈线性不可分的情况,因为 线性可分这种假设实在是太有局限性 了。下图就是一个典型的线性不可分的分类图,我们没有办法用一条直线去将其分成两个区域,每个区域只包含一种颜色的点。

         要想在这种情况下的分类器,有两种方式, 一种是用曲线 去将其完全分开,曲线就是一种 非线性 的情况,跟之后将谈到的 核函数 有一定的关系:

         另外一种还是用直线,不过不用去保证可分性 ,就是包容那些分错的情况,不过我们得加入惩罚函数,使得点分错的情况越合理越好。其实在很多时候,不是在训练的时候分类函数越完美越好,因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一个大忌。

我们可以为分错的点加上一点惩罚,对一个分错的点的 惩罚函数 就是 这个点到其正确位置的距离:

        对于线性不可分的情况,我们可以用核函数让空间从原本的线性空间变成一个更高维的空间 , 在这个高维的线性空间下,再用一个超平面进行划分 。 这儿举个例子,来理解一下如何利用空间的维度变得更高来帮助我们分类的:

        上图是一个线性不可分的图,当我们把这两个类似于椭圆形的点映射到一个高维空间后,映射函数为:

        用这个函数可以将上图的平面中的点映射到一个三维空间(z1,z2,z3),并且对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。

        形象说明:例如世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,比如说两本书,从(颜色,内容)两个维度来说,可能是一样的,我们可以加上作者这个维度,是在不行我们还可以加入页码,可以加入拥有者,可以加入购买地点,可以加入笔记内容等等。当维度增加到无限维的时候,一定可以让任意的两个物体可分了。

核函数定义:

核技巧在支持向量机中的应用:

常用核函数:

非线性支持向量机学习算法:

        支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局更优解,并且有许多更优化算法可以用于这一一问题的求解。但是当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用。所以,如何高效地实现支持向量机学习就成为一一个重要的问题。目前人们已提出许多快速实现算法本节讲述其中的序列最小更优化(sequential minimal optimization, *** O)算法。

        上述问题是要求解N个参数(α1,α2,α3,,αN),其他参数均为已知,序列最小更优化算法( *** O)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数, *** 类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数更优值。

        整个 *** O算法包括两部分,求解两个变量的 二次规划 问题和选择这两个变量的 启发式 *** 。

 上面求得的(α1)new和(α2)new是在η>0的情况下求得的:

        当时为了推导公式我们直接默认它是大于0了,现在我们需要重新审视这一项(η)。这一项是原来关于的二次项的系数。我们可以分下面三种情况讨论:

(1)当η>0时 :这个二次函数开口向上,所以要求这个二次函数的最小值,如果说极值点不在计算出的可行域的范围内,就要根据这个极值点和可行域边界值的关系来得到取最小值的地方:

①如果这个极值点在可行域左边,那么我们可以得到这个可行域内二次函数一定在单增,所以此时L应该是那个取最小值的地方。就如大括号的第三种情况。

②如果这个极值点在可行域右边,那么此时可行域内一定单减,所以此时H就是那个取最小值的地方,就是大括号里的之一种情况。

(2)当η=0时: 这个二次函数就变成了一个一次函数,那么不管这个一次函数的单调性怎样,最小值一定是在边界处取到。所以到时候计算可行域的两个边界的值,看哪个小就用哪个。

(3)当η<0时: 这个二次函数开口向下,那么此时怎么得到取最小值的点呢?很容易就能想到:最小值也是在可行域的边界处取到。很容易理解,此时开口向下,当极值点在区间内时,最小值只能在端点处取,因为极值点处是更大的。而当极值点在区间外时,区间内一定是单调的,此时最小值也只能在端点处取。通过计算比较边界处的目标函数值,哪个小取哪个。

通过以上判断求出(α2)new以后,再根据公式求出(α1)new,然后带入目标函数(1)中。即如下过程:

        上述分析是在从N个变量中已经选出两个变量进行优化的 *** ,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。

Hyperplane(超平面)超过3维的,本来就没法画啊。

如果是三维或是二维,那还是可以画的。三维可以用surf函数画平面,二维的可以用plot函数直线。

% draw plane: Ax+By+Cz+D=0

A=2; B=4; C=-3; D=4;

[xx,yy]=meshgrid(-5:1:5,-5:1:5);

zz=(-D-Axx-Byy)/C;

figure; surf(xx,yy,zz); shading interp;

% draw line: Ax+By+C=0

A=2; B=4; C=-3;

x=-5:1:5;

y=(-C-Ax)/B;

figure; plot(x,y);

仿射几何是空间的点的几何,射影几何是给每一个直线添加无穷远点使得任何两条在同一平面上的直线都相交仿射几何似乎比较直观,射影几何不太直观很可惜,现代数学思想离不开射影几何的思想,不理解射影几何就不能理解现代数学的精神仿射几何中的好几个定理在射影几何中特别容易证明,为什么采用透视法就变得简单了呢,道理何在设V是一个向量空间,V的仿射几何A(V)是V的所有陪集组成的 *** ,其仿射维数是V的维数这里的陪集,即V的任意子空间的陪集因此直观上说,V的仿射几何是由空间中所有的点、直线、面等等组成的:零维陪集称为点,一维陪集称为直线,二维陪集称为平面,维数比仿射维数少一的陪集称为超平面因此,仿射几何中,直线不一定通过原点,平面也不一定通过原点,等等,特别的任何两个陪集可能不相交与此相对应,V的射影几何P(V)是V的所有子空间组成的 *** ,其射影维数是V的维数减一因此,射影点是仿射直线,射影直线是仿射平面,射影超平面是仿射维数比V少一的仿射超平面因此,射影几何中,任意直线都相交在原点,任意平面都相交在原点,等等,特别的任何两个射影元素都在原点处相交射影几何的这个定义跟习以为常的传统定义是等价的,由此把一个球面上的每对对径点粘起来就是一个射影平面,一个射影直线相当于把一个圆的每对对径点粘起来仍然是一个圆等价性稍后进一步再解释因此粗看起来,P(V)是A(V)的子集,但前者的射影维数比A(V)的仿射维数少一,不能在同一抽象空间里分别建立起来设W是V的维数少一的子空间,因此W是P(V)中的射影超平面,也是A(V)中的通过原点的仿射超平面,则P(V)的射影维数和A(W)的仿射维数相等特别的,W的任何一个与W平行而不重合的陪集为c+W,于是c+W是A(V)中不通过原点的超平面现在,P(V)的射影维数和A(c+W)的仿射维数相等,A(W)和A(c+W)是A(V)的互相平行而不重合的仿射子几何原来,存在仿射几何A(c+W)到射影几何P(V)的一个“自然”的嵌入!即存在一个单射,这个嵌入,就是由所谓透视法给出的A(c+W)的像是P(V)中不含在W的任意射影元素,这个现象,有时也称为:P(V)与P(W)的差有一个“自然”的仿射结构,它同构于仿射几何A(c+W)从而也同构于仿射几何A(W)!这个仿射几何中,消失了的P(W)的射影点,就是所谓的“无穷远点”因此仿射几何A(W)加上无穷远点 *** P(W)就是一个射影 *** P(V),前者的仿射维数等于后者的射影维数,因此在一个抽象空间里既配备了仿射结构又配备了射影结构这个事实,同时解释了射影几何定义的等价性在这个事实上,射影几何比仿射几何只多一点点,但却使得仿射定理在射影几何中变得简单了这是因为仅仅考虑通过原点的子空间要比考虑可能甚至互不相交的陪集便利得多关于P(V)与P(W)的差有一个“自然”的仿射结构,如果你能在三维空间情形建立这个现象,那么你就算是理解了仿射几何与射影几何最后,这个对应,作为透视法的抽象,不仅仅是几何间的对应,也可以建立起线性映射间的对应,因此,这个对应是一个函子,是仿射几何范畴到射影几何范畴间的态射,你在仿射几何里考虑的事,可以对应到射影几何的情形;在射影几何里考虑的事,也可以对应到仿射几何的情形这就是透视法的威力所在把射影几何换成仿射几何,就可以发现任意一个仿射几何,都能作为不通过原点的超平面嵌入到一个所谓的泛空间:A(c+W)嵌入到A(V)这个嵌入,也可以建立起线性映射间的对应,于是也是一个函子,是仿射几何范畴到自身的态射这个函子,就是射影几何观念建立前,透视法的抽象表示之所以要引入泛空间,因为它还给了所谓的重心坐标一个“自然”的解释我要学代数拓扑,不学射影几何可以不恐怕不好,因为一方面射影几何的基本群也比较典型,射影平面的基本群就是Z2;另一方面紧致曲面的分类,就是以球面、环面和射影平面为基本构建更何况如果将来要学代数几何,射影几何就更必须学重心坐标的“自然”解释因篇幅所限,建议读者去看贝尔热的《几何》之一卷虽然这书是面向师范类,但仅之一节就很“自然”且抽象得令人发指,足以令井底之蛤蟆们认识到法国数学和我国数学的真正差距比起地球到天狼星的距离还要遥远

04 SVM - 感知器模型

支持向量机(Support Vector Machine, SVM)本身是一个 二元分类算法 ,是对感知器算法模型的一种扩展,现在的SVM算法支持 线性分类 非线性分类 的分类应用,并且也能够直接将SVM应用于 回归应用 中,同时通过OvR或者OvO的方式我们也可以将SVM应用在 多元分类 领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。

在感知器模型中,算法是在数据中找出一个划分超平面,让尽可能多的数据分布在这个平面的两侧,从而达到分类的效果,但是在实际数据中这个符合我们要求的超平面是可能存在多个的。

在感知器模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面尽可能的远,但是实际上离超平面足够远的点基本上都是被正确分类的,所以这个是没有意义的;反而比较关心那些离超平面很近的点,这些点比较容易分错。所以说我们只要 让离超平面比较近的点尽可能的远离这个超平面 ,那么我们的模型分类效果应该就会比较不错。SVM其实就是这个思想。

SVM核心思想: 找到离分割超平面较近的点(预测错误可能会高),然后想办法让它们离超平面的距离远。

PS: SVM在若干年前,当数据量还比较少的时候,SVM是更好的分类模型。但是现在随着数据量的不断增大,SVM模型运算速度较慢的缺点开始暴露。而且随着这些年集成学习的不算成熟,现在SVM普遍用于集成学习中基模型的构建。

线性可分(Linearly Separable): 在数据集中,如果可以找出一个超平面,将两组数据分开,那么这个数据集叫做线性可分数据。

线性不可分(Linear Inseparable): 在数据集中,没法找出一个超平面,能够将两组数据分开,那么这个数据集就叫做线性不可分数据。

分割超平面(Separating Hyperplane): 将数据集分割开来的直线/平面叫做分割超平面。

间隔(Margin): 数据点到分割超平面的距离称为间隔。

支持向量(Support Vector): 离分割超平面最近的那些点叫做支持向量。

回顾: 支持向量到超平面的距离为:

PS:在SVM中支持向量到超平面的函数距离一般设置为1;

SVM模型 是让所有的分类点在各自类别的支持向量的两边,同时要求支持向量尽可能的远离这个超平面,用 数学公式 表示如下:

1、将此时的目标函数和约束条件 使用KKT条件 转换为拉格朗日函数,从而转换为 无约束的优化函数

2、引入拉格朗日乘子后,优化目标变成:

3、根据拉格朗日对偶化特性,将该优化目标转换为等价的对偶问题来求解,从而优化目标变成:

4、所以对于该优化函数而言,可以先求优化函数对于w和b的极小值,然后再求解对于拉格朗日乘子β的极大值。

5、首先求让函数L极小化的时候w和b的取值,这个极值可以直接通过对函数L分别求w和b的偏导数得到:

6、将求解出来的w和b带入优化函数L中,定义优化之后的函数如下:

7、通过对w、b极小化后,我们最终得到的优化函数只和β有关,所以此时我们可以直接极大化我们的优化函数,得到β的值,从而可以最终得到w和b的值;

8、求解w T +b中b的值。

假设存在更优解β; 根据w、b和β的关系,可以分别计算出对应的w值和b值(使用支持向量对应的样本点来计算,作为实际的b值, 支持向量求解出的b值是唯一解 );

这里的(xs,ys)即 支持向量 ,根据KKT条件中的对偶互补条件(松弛条件约束),支持向量必须满足以下公式:

06 SVM - 线性可分SVM算法和案例