我对内核svm有这种困惑。我读到内核svm,保留的支持向量的数量很大。这就是为什么难以训练并且耗时的原因。我没有得到这个部分为什么很难优化。好吧我可以说噪声数据需要大量的支持向量。但是它与训练时间有什么关系。
此外,我正在阅读另一个article,他们试图将非线性SVM内核转换为线性SVM内核。在线性内核的情况下,它只是原始特征本身的点积。但在非线性的情况下,它是RBF和其他。我没有得到他们的意思“操纵核矩阵强加了重要的计算瓶颈”。据我所知,内核矩阵是静态的不是它。对于线性内核,它只是原始特征的点积。在RBF的情况下,它使用高斯核。所以我只需要计算一次,然后我就完成了不是它。那么操纵点和思路是什么呢?
支持向量机(SVM)(Cortes和Vapnik,1995)作为最先进的分类算法已广泛应用于各种科学领域。内核的使用允许将输入样本映射到再生核Hilbert S-速度(RKHS),这对于解决线性不可分离问题至关重要。虽然内核SVM提供了最先进的结果,但是操纵knelnel矩阵的需求带来了显着的计算瓶颈,使得难以扩展大数据。
答案 0 :(得分:3)
这是因为核矩阵是一个N行大小为N列的矩阵,其中N是训练样本的数量。所以想象你有500,000个训练样本,那就意味着矩阵需要500,000 * 500,000 * 8字节(1.81太字节)的RAM。这是巨大的,需要某种并行计算集群以任何合理的方式处理。更不用说计算每个元素所需的时间。例如,如果您的计算机需要1微秒来计算1个内核评估,那么计算整个内核矩阵需要69.4小时。相比之下,一个好的线性求解器可以在常规桌面工作站上的几分钟或一小时内处理这种大小的问题。这就是线性SVM首选的原因。
要理解为什么它们如此快得多,你必须退一步思考这些优化器的工作原理。在最高级别,您可以将它们视为搜索在所有训练样本上提供正确输出的函数。此外,大多数求解器是迭代的,因为它们对当前函数应该是最佳猜测,并且在每次迭代中,他们在训练数据上测试它并看它有多好。然后他们以某种方式更新功能以改进它。他们一直这样做,直到找到最好的功能。
记住这一点,线性求解器速度如此之快的主要原因是因为它们所学习的函数只是固定大小的权重向量和训练样本之间的点积。因此,在优化的每次迭代中,它只需要计算当前权重向量和所有样本之间的点积。这需要O(N)时间,而且,无论您拥有多少训练样本,良好的求解器只需几次迭代即可收敛。因此,求解器的工作记忆只是存储单个权重向量和所有训练样本所需的内存。这意味着整个过程只需要O(N)个时间和O(N)字节的RAM。
另一方面,非线性求解器正在学习的函数不仅仅是权重向量和训练样本之间的点积。在这种情况下,它是一个函数,它是测试样本和所有其他训练样本之间的一堆内核评估的总和。因此,在这种情况下,仅仅评估您正在学习的一个训练样本的函数需要O(N)时间。因此,针对所有训练样本评估它需要O(N ^ 2)时间。已经设计了各种巧妙的技巧来试图保持非线性功能紧凑以加快速度。但在某种意义上,所有这些都至少有一点启发式或近似,而良好的线性求解器找到了精确的解。这就是线性求解器普及的部分原因。