21

支持向量机和神经网络有什么不同? 线性SVM是否是相同的NN,并且对于非线性可分问题,NN使用添加隐藏层和SVM使用不断变化的空间维度?支持向量机和神经网络

+0

SVM代表什么? – jotadepicas

+1

支持向量机(https://en.wikipedia.org/wiki/Support_vector_machine) – CoyBit

回答

40

这个问题有两个部分。第一部分是“这些方法学到的功能的形式是什么?”对于NN和SVM,这通常是相同的。例如,单个隐层神经网络使用与SVM完全相同的模型形式。那就是:

给定输入矢量x,输出为: 输出(X)= sum_over_all_i weight_i * nonlinear_function_i(X)

通常,非线性函数也将有一些参数。所以这些方法需要学习应该使用多少个非线性函数,它们的参数是什么,以及所有weight_i权重值应该是多少。

因此,SVM和NN之间的区别在于他们如何决定这些参数应该设置为什么。通常当有人说他们使用的是神经网络时,他们意味着他们试图找到使参数相对于一组训练样例最小化均方误差的参数。他们也将几乎总是使用stochastic gradient descent优化算法来做到这一点。另一方面,SVM试图最小化训练误差和“假设复杂度”的一些度量。所以他们会找到一组符合数据的参数,但在某种意义上也是“简单”的。你可以把它想像成Occam的机器学习剃刀。用于SVM的最常见的优化算法是sequential minimal optimization

这两种方法之间的另一个很大的区别是随机梯度下降不能保证在使用NN实现采用它的方式时找到最优参数集。但是,任何像样的SVM实现都将找到最佳的参数集。人们喜欢说神经网络陷入局部极小值,而SVM则不会。

11

运行简单out-of-the-box comparison between support vector machines and neural networks若干流行回归 - 和分类-数据集演示了实际差异(无参数选择):SVM变得非常慢的预测器,如果正在产生了许多支持向量而神经网络预测速度要高得多和模型尺寸要小得多。另一方面,对于SVM,训练时间要短得多。关于准确性/损失 - 尽管存在上述神经网络的理论缺陷 - 两种方法都是相同的 - 特别是对于回归问题,神经网络通常胜过支持向量机。根据您的具体问题,这可能有助于选择正确的模型。

+0

您能详细解释有关非线性可分解问题的其他部分吗? – user492238

+2

一般来说,支持向量机和神经网络都可以解决非线性问题。 “非线性程度”由NN中的#个隐藏节点(或层)和SVM中的#个支持向量控制。 SVM在训练过程中自动进行调整,而对于NN开发人员必须定义#个隐藏单元/拓扑结构(尽管自动确定最佳拓扑结构时存在几种或多或少有用的启发式方法,但最好的方法是通过交叉参数进行参数选择,验证) – Fluchtpunkt

+0

对于NN,训练时间不一定较慢:考虑使用n> 10^6数据点的非常大的数据集,使用一个集群在几周内训练某种系统。神经网络可以使用批量梯度下降(即O(n))进行训练。 SVM训练算法是O(n^2),这对于这样的大数据集是不可接受的。 – Phob

20

神经网络是启发式的,而SVM理论上是建立的。 SVM保证朝向PAC中的最佳解决方案(可能近似正确)收敛。例如,对于两个线性可分类,SVM将直接在两个类的最近点之间的中点绘制分离超平面(这些成为支持向量)。一个神经网络可以画出任何分离样本的线,这对于训练集是正确的,但可能不具有最佳泛化属性。

因此,即使对于线性可分问题,NN和SVM也不相同。

在线性不可分类的情况下,SVM和NN都将非线性投影应用到高维空间中。在神经网络的情况下,这是通过在隐藏层中引入额外的神经元来实现的。对于SVM,使用内核函数的效果相同。核函数的一个简洁特性是计算复杂度不随维数增加而增加,而对于神经网络它显然随着神经元的数量而增加。

+0

复杂性不仅仅在学习阶段才会升高,还是声明有效对于预测阶段? –

+1

该声明也适用于预测阶段。你基本上是在分离超平面的法向量和你想在高维空间中分类的向量之间做标量积。但是,不是明确地做,而是像在学习阶段一样依靠内核功能。 –

+0

神经网络又如何呢?它是否随着神经元的数量而上升(当然在预测阶段)? –

-1

其实他们完全相同。唯一的区别是在他们的标准实现中选择激活函数和正则化等,这些显然彼此不同。另外,我还没有看到用于神经网络的双重公式,但是SVM正朝着原始方向发展。

+0

“它们完全相同”你能为此发布一些参考吗? –

1

支持向量机和神经网络具有与感知器相同的建立块,但支持向量机也使用核技巧通过平移将维数从2增加到3,例如Y =(x1,2,...^2,y1,2 ...^2),它可以用直线分隔线性不可分的平原。想要一个像这样的演示,并问我:)