SVM与神经网络
支持向量机并不是神经网络,这两个完全是两条不一样的路吧。不过详细来说,线性SVM的计算部分就像一个单层的神经网络一样,而非线性SVM就完全和神经网络不一样了(是的没错,现实生活中大多问题是非线性的),详情可以参考知乎答案。
这两个冤家一直不争上下,最近基于神经网络的深度学习因为AlphaGo等热门时事,促使神经网络的热度达到了空前最高。毕竟,深度学习那样的多层隐含层的结构,犹如一个黑盒子,一个学习能力极强的潘多拉盒子。有人或许就觉得这就是我们真正的神经网络,我们不知道它那数以百千计的神经元干了什么,也不理解为何如此的结构能诞生如此美好的数据 —— 犹如复杂性科学般,处于高层的我们并不能知道底层的”愚群“为何能涌现。两者一比起来,SVM似乎也没有深度学习等那么令人狂热,连Hinton都开玩笑说SVM不过是浅度学习(来自深度学习的调侃)。
不然,个人觉得相对于热衷于隐含层的神经网络,具有深厚的数学理论的SVM更值得让我们研究。SVM背后伟大的数学理论基础可以说是现今人类的伟大数学成就,因此SVM的解释性也非神经网络可比,可以说,它的数学理论让它充满了理性,这样的理性是一个理工科生向往的。就如,你渴望知道食物的来源以确定食物是否有毒,如果有毒是什么毒,这样的毒会在人体内发生了什么反应以致于让你不适 —— 我的理性驱使我这么想,一个来路不明的食物是不能让我轻易接受的。
SVM是什么
简单点讲,SVM 就是个分类器,它用于回归的时候称为SVR(Support Vector Regression),SVM和SVR本质上都一样。下图就是SVM分类:
(边界上的点就是支持向量,这些点很关键,这也是”支持向量机“命名的由来)
SVM的目的:寻找到一个超平面使样本分成两类,并且间隔最大。而我们求得的w就代表着我们需要寻找的超平面的系数。
用数学语言描述:
开发者自述:我是怎样理解支持向量机(SVM)与神经网络的
这就是SVM的基本型。
SVM的基本型在运筹学里面属于二次规划问题,而且是凸二次规划问题(convex quadratic programming)。
吴恩达老师讲解的支持向量机
在监督学习中,许多学习算法的性能都非常类似。因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是应用这些算法时所创建的大量数据。
在应用这些算法时,表现情况通常依赖于你的水平。比如,你为学习算法所设计的特征量的选择以及如何选择正则化参数,诸如此类的事。还有一个更加强大的算法广泛的应用于工业界和学术界。它被称为支持向量机(Support Vector Machine),简称SVM。
在逻辑回归中,如果有一个 y=1 的样本,我们希望 h(x) 趋近1。这就意味着 当 h(x) 趋近于1时,θ 转置乘以 x 应当远大于0,此时逻辑回归的输出将趋近于1。
现在,开始建立支持向量机。将原曲线用紫红色曲线替代,我们将使用的新的代价函数,左边的函数为 cost1(z),右边为 cost0(z)。这里的下标是指在代价函数中对应的 y=1 和 y=0 的情况。
拥有了这些定义后,现在我们就开始构建支持向量机,这是我们在逻辑回归中使用代价函数 J(θ)。
对于逻辑回归,在目标函数中,我们不是优化这里的 A+λ×B,我们所做的是通过设置不同正则参数λ 达到优化目的。这样,我们就能够权衡对应的项:是使得训练样本拟合的更好即最小化A,还是保证正则参数足够小也即是对于B项而言。
利用λ来控制第一项A的权重,或第二项B的权重,使得产生最优化最小的代价函数J的结果。
但对于支持向量机,我们依照惯例使用一个不同的参数,称为C(类似于1/λ的作用,但是并不一定等于1/λ) 同时改为优化目标 C×A+B。因此,在逻辑回归中,如果给定 λ 一个非常大的值,意味着给予B更大的权重(将A的权重减小了,也就相当于把B的权重增大了)。而这里,就对应于将C设定为非常小的值,那么,相应的将会给 B 比给 A 更大的权重。
因此,这只是一种不同的方式来控制这种权衡,或者一种不同的方法,即用参数来决