SVM 和神经网络
Posted
技术标签:
【中文标题】SVM 和神经网络【英文标题】:SVM and Neural Network 【发布时间】:2012-02-16 08:21:27 【问题描述】:有什么区别? 是不是linear svm是同一个NN,对于非线性可分问题,NN是加隐藏层,SVM是改变空间维度?
【问题讨论】:
SVM 代表什么? 支持向量机 (en.wikipedia.org/wiki/Support_vector_machine) 【参考方案1】:支持向量机 (SVM) 和人工神经网络 (ANN) 都是有监督的机器学习分类器。 ANN 是一种参数分类器,它在训练阶段使用超参数调整。 SVM 是一种非参数分类器,它找到一个线性向量(如果使用线性核)来分离类。实际上,就模型性能而言,SVM 有时相当于浅层神经网络架构。一般来说,当有大量训练实例时,ANN 会优于 SVM,但是,在所有问题范围内,任何一个都不会优于另一个。
我们可以将 ANN 相对于 SVM 的优势总结如下: ANN 可以通过为每个类生成概率来处理多类问题。相比之下,SVM 使用独立的一对多分类器来处理这些问题,其中每个分类器都产生一个二进制输出。例如,可以训练单个 ANN 来解决手写数字问题,而需要 10 个 SVM(每个数字一个)。
从模型大小的角度来看,人工神经网络的另一个优点是模型的输入节点、隐藏层和输出节点是固定的;然而,在 SVM 中,支持向量线的数量可能达到最坏情况下的实例数量。
当特征数大于样本数时,SVM 表现不佳。与多层神经网络相比,SVM 需要更多的特征工程工作。
另一方面,SVM 在某些方面优于人工神经网络:
与 SVM 相比,ANN 更容易陷入局部最小值,这意味着它们有时会错过全局图。
虽然大多数机器学习算法如果没有足够的训练样本会过拟合,但如果训练时间过长,ANN 也会过拟合——这是 SVM 没有的问题。
SVM 模型更容易理解。除了经典的线性内核之外,还有不同的内核可以提供不同级别的灵活性,例如径向基函数内核 (RBF)。与线性核不同,RBF 可以处理类标签和属性之间的关系为非线性的情况。
【讨论】:
您能否详细介绍“SVM 模型更容易理解”?我在很多地方都看到过这句话,我想知道您是根据什么标准来证明“可理解性”的?【参考方案2】:在几个流行的回归和分类数据集上运行一个简单的out-of-the-box comparison between support vector machines and neural networks(没有任何参数选择)展示了实际差异:如果创建了许多支持向量,而神经网络的预测速度非常快,那么 SVM 就会成为一个非常慢的预测器更高,模型尺寸更小。另一方面,SVM 的训练时间要短得多。关于准确性/损失 - 尽管神经网络存在上述理论缺陷 - 两种方法都相当 - 特别是对于回归问题,神经网络通常优于支持向量机。根据您的具体问题,这可能有助于选择正确的型号。
【讨论】:
您能否详细说明问题的另一部分关于非线性可分离问题? 一般来说,SVM 和 NN 都可以解决非线性问题。 “非线性度”通过 NN 中的#hidden-nodes(或层)和 SVM 中的#support-vectors 来控制。 SVM 在训练期间会自动调整这一点,而对于 NN,开发人员必须定义#hidden-units/topology(尽管存在一些或多或少有用的启发式方法来自动确定最佳拓扑结构,最好的方法是通过交叉执行参数选择)验证) NN 的训练时间不一定慢:考虑使用具有 n > 10^6 数据点的非常大的数据集,使用集群在几周内训练某种系统。可以使用批量梯度下降来训练 NN,即 O(n)。 SVM 训练算法是 O(n^2),对于这么大的数据集是不可接受的。 回程机:web.archive.org/web/20120304030602/http://indiji.com/…【参考方案3】:SVM 和 NN 与感知器具有相同的构建块,但 SVM 还使用内核技巧通过平移将维度从 2 提升到 3d,例如 Y = (x1,2,..^2, y1,2.. .^2) 可以使用直线分离线性不可分割的平原。想要一个类似的演示并问我:)
【讨论】:
【参考方案4】:实际上,您的大部分假设通常都是正确的。我会详细说明:对于线性可分离类,线性 SVM 工作得很好,而且训练起来要快得多。对于非线性类,有一个内核技巧,即将数据发送到更高维度的空间。然而,与 NN 相比,这个技巧有两个缺点。首先 - 你必须搜索正确的参数,因为分类器只有在更高维度上两个集合是线性可分的时候才会起作用。现在 - 测试参数通常是通过网格搜索来完成的,这很耗费 CPU 时间。另一个问题是整个技术不像 NN 那样通用(例如,对于 NLP,如果经常导致分类器很差)。
【讨论】:
【参考方案5】:实际上,它们是完全等价的。唯一的区别在于它们的标准实现与激活函数和正则化等的选择,它们显然彼此不同。此外,我还没有看到神经网络的对偶公式,但 SVM 无论如何都在朝着原始方向发展。
【讨论】:
“它们是完全等价的”你能发布一些参考吗?【参考方案6】:这个问题有两个部分。第一部分是“这些方法学习到的函数形式是什么?”对于 NN 和 SVM,这通常是相同的。例如,单个隐藏层神经网络使用与 SVM 完全相同的模型形式。那就是:
给定一个输入向量 x,输出为: 输出(x)= sum_over_all_i weight_i * 非线性函数_i(x)
一般非线性函数也会有一些参数。所以这些方法需要了解应该使用多少个非线性函数,它们的参数是什么,以及所有weight_i权重的值应该是多少。
因此,SVM 和 NN 之间的区别在于它们如何决定这些参数应该设置为什么。通常,当有人说他们正在使用神经网络时,他们的意思是他们试图找到最小化一组训练示例的均方预测误差的参数。他们也几乎总是使用stochastic gradient descent 优化算法来做到这一点。另一方面,SVM 试图最小化训练误差和一些“假设复杂性”的度量。所以他们会找到一组适合数据但在某种意义上也很“简单”的参数。你可以把它想象成奥卡姆的机器学习剃刀。 SVM 最常用的优化算法是sequential minimal optimization。
这两种方法的另一个很大区别是,当使用 NN 实现使用它的方式时,随机梯度下降不能保证找到最佳参数集。然而,任何体面的 SVM 实现都会找到最优的参数集。人们喜欢说神经网络会陷入局部最小值,而 SVM 则不会。
【讨论】:
【参考方案7】:NN 是启发式的,而 SVM 是理论上成立的。 SVM 保证收敛于 PAC(可能近似正确)意义上的最佳解决方案。例如,对于两个线性可分的类,SVM 将直接在两个类的最近点之间绘制分离超平面(这些成为支持向量)。神经网络会画出任何分隔样本的线,这对于训练集是正确的,但可能没有最好的泛化特性。
所以不,即使对于线性可分问题,NN 和 SVM 也不相同。
在线性不可分类的情况下,SVM 和 NN 都将非线性投影应用于高维空间。在 NN 的情况下,这是通过在隐藏层中引入额外的神经元来实现的。对于 SVM,内核函数 用于相同的效果。核函数的一个简洁特性是计算复杂度不会随着维数的增加而增加,而对于 NN,它显然会随着神经元数量的增加而增加。
【讨论】:
复杂度不是只在学习阶段上升,还是对两者的预测阶段都有效? 该语句也适用于预测阶段。您基本上是在分离超平面的法线向量和要在高维空间中分类的向量之间进行标量积。但是,不是显式地这样做,而是依赖于核函数,就像在学习阶段一样。 那么神经网络呢?它是否随着神经元数量的增加而上升(当然是在预测阶段)? 是的,当然。您必须通过所有神经元以及它们之间的所有连接来传播要分类的向量。 根据您给出的解释,在我看来,SVM 通常更适合线性问题。因为您说 SVM 将收敛于 PAC(由于它的工作方式),而 NN 可能不会立即给出最佳分离超平面,因此可能会使用反向传播进行更多迭代。所以 SVM 可能需要更少的时间和自动调整(如果我是正确的,这意味着 SVM 对线性问题的训练时间更短)。正确的?如果我错了,请随时纠正我。以上是关于SVM 和神经网络的主要内容,如果未能解决你的问题,请参考以下文章