开发者自述:我是怎样理解支持向量机(SVM)与神经网络的

  SVM与神经网络

支持向量机并不是神经网络,这两个完全是两条不一样的路吧。不过详细来说,线性SVM的计算部分就像一个单层的神经网络一样,而非线性SVM就完全和神经网络不一样了(是的没错,现实生活中大多问题是非线性的),详情可以参考知乎答案

这两个冤家一直不争上下,最近基于神经网络的深度学习因为AlphaGo等热门时事,促使神经网络的热度达到了空前最高。毕竟,深度学习那样的多层隐含层的结构,犹如一个黑盒子,一个学习能力极强的潘多拉盒子。有人或许就觉得这就是我们真正的神经网络,我们不知道它那数以百千计的神经元干了什么,也不理解为何如此的结构能诞生如此美好的数据 —— 犹如复杂性科学般,处于高层的我们并不能知道底层的”愚群“为何能涌现。两者一比起来,SVM似乎也没有深度学习等那么令人狂热,连Hinton都开玩笑说SVM不过是浅度学习(来自深度学习的调侃)。

不然,个人觉得相对于热衷于隐含层的神经网络,具有深厚的数学理论的SVM更值得让我们研究。SVM背后伟大的数学理论基础可以说是现今人类的伟大数学成就,因此SVM的解释性也非神经网络可比,可以说,它的数学理论让它充满了理性,这样的理性是一个理工科生向往的。就如,你渴望知道食物的来源以确定食物是否有毒,如果有毒是什么毒,这样的毒会在人体内发生了什么反应以致于让你不适 —— 我的理性驱使我这么想,一个来路不明的食物是不能让我轻易接受的。

  SVM是什么

简单点讲,SVM 就是个分类器,它用于回归的时候称为SVR(Support Vector Regression),SVM和SVR本质上都一样。下图就是SVM分类:

(边界上的点就是支持向量,这些点很关键,这也是”支持向量机“命名的由来)

SVM的目的:寻找到一个超平面使样本分成两类,并且间隔最大。而我们求得的w就代表着我们需要寻找的超平面的系数。

用数学语言描述:

这就是SVM的基本型。

SVM的基本型在运筹学里面属于二次规划问题,而且是凸二次规划问题(convex quadratic programming)。

  二次规划

二次规划的问题主要用于求最优化的问题,从SVM的求解公式也很容易看出来,我们的确要求最优解。

简介:
在限制条件为

的条件下,找一个n 维的向量 x ,使得

为最小。

其中,c为n 维的向量,Q为n × n 维的对称矩阵,A为m × n 维的矩阵,b为m 维的向量。

其中,根据优化理论,如果要到达最优的话,就要符合KKT条件(Karush-Kuhn-Tucker)。

  KKT

KKT是在满足一些有规则的条件下,一个非线性规则问题能有最优解的一个充分必要条件。也就是说,只要约束条件按照这个KKT给出的规则列出,然后符合KKT条件的,就可以有最优解。这是一个广义化拉格朗日乘数的成果。

把所有的不等式约束、等式约束和目标函数全部写为一个式子:

L(a, b, x)= f(x) + a*g(x)+b*h(x)

KKT条件是说最优值必须满足以下条件:

● L(a, b, x)对x求导为零

● h(x) = 0

● a*g(x) = 0

  对偶问题

将一个原始问题转换为一个对偶问题,懂的人知道对偶问题不过是把原始问题换了一种问法,从另一角度来求问题的解,其本质上是一样的。就好像我不能证明我比百分之五的人丑,但是我能证明我比百分之九十五的人帅,那样就够了。那么,为啥要用对偶问题,直接求原始问题不好吗?参考一下为什么我们要考虑线性规划的对偶问题

而二次规划的对偶问题也是二次规划,性质、解法和原来一样,所以请放心。(只做简要介绍)

最后训练完成时,大部分的训练样本都不需要保留,最终只会保留支持向量。这一点我们从图上也能看得出来,我们要确定的超平面只和支持向量有关不是吗?

(你看,只和支持向量有关)

然而,问题又出现了(新解法的出现总是因为新问题的出现),对于SVM的对偶问题,通过二次规划算法来求解的计算规模和训练样本成正比,开销太大。换句话来说,输入数据小的时候还好,不过小数据几乎没啥用,但是数据量大起来又计算量太大,所以就得寻找一种适合数据量大而且计算量小的解法,这个就是SMO。

  SMO

SMO,Sequential Minimal Optimization,针对SVM对偶问题本身的特性研究出的算法,能有效地提高计算的效率。SMO的思想也很简单:固定欲求的参数之外的所有参数,然后求出欲求的参数。

例如,以下是最终求得的分类函数,也就是我们SVM的目标:

SMO 算法每次迭代只选出两个分量 ai 和 aj 进行调整,其它分量则保持固定不变,在得到解 ai 和 aj 之后,再用 ai 和 aj 改进其它分量。

如何高效也能通过 SMO 算法的思想看得出来 —— 固定其他参数后,仅优化两个参数,比起之前优化多个参数的情况,确实高效了。然而,与通常的分解算法比较,它可能需要更多的迭代次数。不过每次迭代的计算量比较小,所以该算法表现出较好的快速收敛性,且不需要存储核矩阵,也没有矩阵运算。说白了,这样的问题用 SMO 算法更好。

  核函数

我们的SVM目的其实也简单,就是找一个超平面,引用一张图即可表述这个目的:

然而现实任务中,原始样本空间也许并不能存在一个能正确划分出两类样本的超平面,而且这是很经常的事。你说说要是遇到这样的数据,怎么划分好呢:

告诉我你的曲线方程吧,傻了吧~

于是引入了一个新的概念:核函数。它可以将样本从原始空间映射到一个更高维的特质空间中,使得样本在这个新的高维空间中可以被线性划分为两类,即在空间内线性划分。这个过程可以观看视频感受感受,由于是 youtube 所以我截一下图:

这是原始数据和原始空间,明显有红蓝两类:

通过核函数,将样本数据映射到更高维的空间(在这里,是二维映射到三维):

而后进行切割:

再将分割的超平面映射回去:

大功告成,这些就是核函数的目的。

再进一步,核函数的选择变成了支持向量机的最大变数(如果必须得用上核函数,即核化),因此选用什么样的核函数会影响最后的结果。而最常用的核函数有:线性核、多项式核、高斯核、拉普拉斯核、sigmoid核、通过核函数之间的线性组合或直积等运算得出的新核函数。(这里只涉及概念,不涉及数学原理)

  软间隔

知道了上面的知识后,你不是就觉得SVM分类就应该是这样的:

然而这也不一定是这样的,上图给出的是一种完美的情况,多么恰巧地两类分地很开,多么幸运地能有一个超平面能将两个类区分开来!要是这两个类有一部分掺在一起了,那又该怎么分啊:

有时候如果你非要很明确地分类,那么结果就会像右边的一样 —— 过拟合。明显左边的两个都比过拟合好多了,可是这样就要求允许一些样本不在正确的类上,而且这样的样本越少越好,”站错队“的样本数量要通过实际来权衡。这就得用上”软间隔“,有软间隔必然有硬间隔,应间隔就是最开始的支持向量机,硬间隔支持向量机只能如此”明确“地分类。特意找来了这个数学解释:

其中一个样本要是”站错队“就要有损失,我们的目的就是:找出总损失值最小并且能大概分类的超平面。而计算一个样本的损失的损失函数也有很多种,例如:hinge损失、指数损失、対率损失等。

以上只是简单地把我学习 SVM 的思路整理了一遍,若有错误之处还请指正。

====================================分割线================================

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-10-03 09:26:38

开发者自述:我是怎样理解支持向量机(SVM)与神经网络的的相关文章

说说我是怎么理解微信红包的产品方法

摘要: 今年的春节,大家都被微信红包包围了,从一开始大城市IT圈传播开始,蔓延到各个圈子,随着各阶层民工的返乡,又把红包带入了三四线城市的微信群.不是盯着屏幕抢红包,就是求 今年的春节,大家都被微信红包包围了,从一开始大城市IT圈传播开始,蔓延到各个圈子,随着各阶层民工的返乡,又把红包带入了三四线城市的微信群.不是盯着屏幕抢红包,就是求拉入土豪群,彻底引爆了年前的掌上生活,更是听说某公司开发了抢红包插件. 作为近两年风头正劲的互联网产品来说,微信又一次没有让我们失望,小小的一个支付+分享+公众号

能帮你更好理解分析深度卷积神经网络,今天要解读的是一款新型可视化工具——CNNVis,看完就能用!

以下为译文: 更好的理解分析深度卷积神经网络   图1 CNNVis,一个能够帮助专家理解,分析与改进深度卷积神经网络的视觉分析工具 摘要:深度卷积神经网络(CNNs)在许多模式识别任务中取得了很大的性能突破, 然而高质量深度模型的发展依赖于大量的尝试,这是由于没有很好的理解深度模型是怎么工作的,在本文中,提出了一个可视化分析系统,CNNVis,帮助机器学习专家更好的理解.分析.设计深度卷积神经网络. 关键词:深度卷积神经网络,矩形填充,矩阵排序,边缘捆绑,双聚类 1 引言 深度卷积神经网络在许

开发者自述:我是这样理解强化学习的

定义 强化学习是机器学习的一个重要分支,是多学科多领域交叉的一个产物,它的本质是解决 decision making 问题,即自动进行决策,并且可以做连续决策. 它主要包含四个元素,agent,环境状态,行动,奖励,强化学习的目标就是获得最多的累计奖励. 让我们以小孩学习走路来做个形象的例子: 小孩想要走路,但在这之前,他需要先站起来,站起来之后还要保持平衡,接下来还要先迈出一条腿,是左腿还是右腿,迈出一步后还要迈出下一步. 小孩就是 agent,他试图通过采取行动(即行走)来操纵环境(行走的表

开发者自述:我是这样学习 GAN 的

Generative Adversarial Network,就是大家耳熟能详的 GAN,由 Ian Goodfellow 首先提出,在这两年更是深度学习中最热门的东西,仿佛什么东西都能由 GAN 做出来.我最近刚入门 GAN,看了些资料,做一些笔记. 1.Generation 什么是生成(generation)?就是模型通过学习一些数据,然后生成类似的数据.让机器看一些动物图片,然后自己来产生动物的图片,这就是生成. 以前就有很多可以用来生成的技术了,比如 auto-encoder(自编码器)

机器学习——支持向量机SVM在R中的实现

支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向量机. 支持向量机如何工作? 简单介绍下支持向量机是做什么的: 假设你的数据点分为两类,支持向量机试图寻找最优的一条线(超平面),使得离这条线最近的点与其他类中的点的距离最大.有些时候,一个类的边界上的点可能越过超平面落在了错误的一边,或者和超平面重合,这种情况下,需要将这些点的权重降低,以减小它们

支持向量机(SVM)笔记

SVM 1.概述 SVM全称Support_Vector_Machine,即支持向量机,是机器学习中的一种监督学习分类算法,一般用于二分类问题.对于线性可分的二分类问题,SVM可以直接求解,对于非线性可分问题,其也可以通过核函数将低维映射到高维空间从而转变为线性可分.对于多分类问题,SVM经过适当的转换,也能加以解决.相对于传统的分类算法如logistic回归,k近邻法,决策树,感知机,高斯判别分析法(GDA)等,SVM尤其独到的优势.相对于神经网络复杂的训练计算量,SVM在训练方面较少计算量的

我是如何理解Java抽象类和接口的

在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像把标准答案熟练的说出来一样. 抽象类和接口这篇文章讲到了他们的区别和联系,它们确实有很多相似的地方,但是从本质上看,或从语言的设计角度来看,这不是它们最本质的区别. 不卖关子,我个人对这两个的理解: 类是具体实例的抽象,比如一个json字符串的抽象;而抽象类就是类的抽象;接口就是抽象类的抽象,接口更

Android 开发者自述:为什么我要改用 Kotlin?

写在前面的话,作为一个不熬夜的人,一觉醒来发现 Kotlin 成为了 Android 的官方语言,可谓是大喜过望.为了趁热打铁,我决定提前三天放出原定本周日 Release 的文章.希望能及时让大家了解一下 Kotlin. 相信很多开发人员,尤其是 Android 开发者都会或多或少听说过 Kotlin,当然如果没有听过或者不熟悉也没有关系.因为本篇文章以及博客后期的内容会涉及到很多关于 Kotlin 的知识分享. 在写这篇文章前的一个多月,Flipboard 中国的 Android 项目确定了

找你妹开发者自述:我们是怎么做自营销的

中介交易 SEO诊断 淘宝客 云主机 技术大厅 来源:i黑马 口述:张帆(成都市云中游科技有限公司CEO) 整理:王根旺 [i黑马导读]最近手游"找你妹"可谓火的"一塌糊涂":4月初下载量已经达到5500万次,日活跃用户已达800万,月收入达数百万,在安卓和ios两大平台手游里均是排名第一.你可能没有想到的是,这款游戏的开发商云中游最初只有两名核心成员,起步资金来自成员们自己的积蓄.而在这款游戏大获成功前,已有五个项目打了水漂.日前,云中游科技CEO 张帆就&quo