2

我有这种与内核 svm 相​​关的困惑。我读到使用内核 svm 保留的支持向量的数量很大。这就是为什么训练困难且耗时的原因。我没有得到这部分为什么难以优化。好的,我可以说嘈杂的数据需要大量的支持向量。但这与训练时间有什么关系。

另外我正在阅读另一篇文章,他们试图将非线性 SVM 内核转换为线性 SVM 内核。在线性核的情况下,它只是原始特征本身的点积。但在非线性的情况下,它是 RBF 和其他。我没有理解他们所说的“操纵核矩阵会带来重大的计算瓶颈”的意思。据我所知,内核矩阵是静态的,不是吗。对于线性内核,它只是原始特征的点积。在 RBF 的情况下,它使用高斯核。所以我只需要计算一次,然后我就完成了不是吗。那么操纵和瓶颈思考的意义何在?

支持向量机 (SVM) (Cortes and Vapnik, 1995) 作为最先进的分类算法已广泛应用于各个科学领域。内核的使用允许将输入样本映射到再现内核希尔伯特空间(RKHS),这对于解决线性不可分问题至关重要。虽然核 SVM 提供了最先进的结果,但操作核矩阵的需要带来了严重的计算瓶颈,使得难以在大数据上进行扩展。

4

1 回答 1

3

这是因为核矩阵是一个大小为 N 行 N 列的矩阵,其中 N 是训练样本的数量。所以假设你有 500,000 个训练样本,那么这意味着矩阵需要 500,000*500,000*8 字节(1.81 TB)的 RAM。这是巨大的,需要某种并行计算集群以任何合理的方式处理。更不用说计算每个元素所需的时间了。例如,如果您的计算机需要 1 微秒来计算 1 个内核评估,那么计算整个内核矩阵需要 69.4 小时。相比之下,一个好的线性求解器可以在普通桌面工作站上几分钟或一小时内处理这种规模的问题。这就是为什么首选线性 SVM 的原因。

要了解它们为何如此之快,您必须退后一步,想想这些优化器是如何工作的。在最高级别,您可以将它们视为搜索在所有训练样本上提供正确输出的函数。此外,大多数求解器都是迭代的,因为他们对这个函数应该是什么有一个当前的最佳猜测,并且在每次迭代中他们在训练数据上测试它,看看它有多好。然后他们以某种方式更新功能以改进它。他们一直这样做,直到找到最好的功能。

记住这一点,线性求解器如此快的主要原因是因为他们正在学习的函数只是固定大小的权重向量和训练样本之间的点积。因此,在优化的每次迭代中,它只需要计算当前权重向量和所有样本之间的点积。这需要 O(N) 时间,此外,无论您有多少训练样本,好的求解器只需几次迭代即可收敛。所以求解器的工作内存就是存储单个权重向量和所有训练样本所需的内存。这意味着整个过程只需要 O(N) 时间和 O(N) 字节的 RAM。

另一方面,非线性求解器正在学习一个函数,而不仅仅是权重向量和训练样本之间的点积。在这种情况下,它是一个函数,它是测试样本和所有其他训练样本之间的一堆内核评估的总和。因此,在这种情况下,仅针对一个训练样本评估您正在学习的函数需要 O(N) 时间。因此,针对所有训练样本对其进行评估需要 O(N^2) 时间。已经设计了各种巧妙的技巧来尝试保持非线性函数紧凑以加快速度。但是在某种意义上,它们都至少有一点启发式或近似性,而好的线性求解器会找到精确的解决方案。这就是线性求解器流行的部分原因。

于 2013-04-13T13:35:04.393 回答