内核技巧将非线性问题映射为线性问题。
我的问题是:
1. 线性问题和非线性问题的主要区别是什么?这两类问题的区别背后的直觉是什么?内核技巧如何帮助在非线性问题上使用线性分类器?
2. 为什么点积在这两种情况下如此重要?
谢谢。
内核技巧将非线性问题映射为线性问题。
我的问题是:
1. 线性问题和非线性问题的主要区别是什么?这两类问题的区别背后的直觉是什么?内核技巧如何帮助在非线性问题上使用线性分类器?
2. 为什么点积在这两种情况下如此重要?
谢谢。
当人们说关于分类问题的线性问题时,他们通常指的是线性可分问题。线性可分意味着有一些函数可以将两个类分开,它是输入变量的线性组合。例如,如果您有两个输入变量x1
和x2
,则有一些数字theta1
和theta2
使得该函数theta1.x1 + theta2.x2
足以预测输出。在二维中,这对应于一条直线,在 3D 中它变成一个平面,在更高维空间中它变成一个超平面。
通过考虑 2D/3D 中的点和线,您可以对这些概念有某种直觉。这是一对非常人为的例子......
这是一个线性不可分问题的图。没有直线可以分开红点和蓝点。
但是,如果我们给每个点一个额外的坐标(特别是1 - sqrt(x*x + y*y)
......我告诉过你这是人为的),那么问题就变成了线性可分的,因为红点和蓝点可以被一个穿过 的二维平面分开z=0
。
希望这些示例展示了内核技巧背后的部分想法:
将问题映射到具有大量维度的空间中,使得问题更有可能成为线性可分的。
内核技巧背后的第二个想法(以及它如此棘手的原因)是,在非常高维的空间中工作通常非常笨拙且计算成本很高。但是,如果算法仅使用点之间的点积(您可以将其视为距离),那么您只需使用标量矩阵。您可以在高维空间中隐式执行计算,而无需实际进行映射或处理高维数据。
许多分类器,其中包括线性支持向量机 (SVM),只能解决线性可分的问题,即属于第 1 类的点可以通过超平面与属于第 2 类的点分开。
在许多情况下,不能线性可分的问题可以通过对数据点应用变换 phi() 来解决;据说这种变换将点变换为特征空间。希望是,在特征空间中,这些点将是线性可分的。(注意:这还不是内核技巧……敬请期待。)
可以看出,特征空间的维数越高,在该空间中线性可分的问题就越多。因此,理想情况下,希望特征空间尽可能高维。
不幸的是,随着特征空间维度的增加,所需的计算量也在增加。这就是内核技巧的用武之地。许多机器学习算法(其中包括 SVM)可以以这样一种方式制定,即它们对数据点执行的唯一操作是两个数据点之间的标量积。(我将用 表示 x1 和 x2 之间的标量积<x1, x2>
。)
如果我们将点转换为特征空间,标量积现在如下所示:
<phi(x1), phi(x2)>
关键的见解是存在一类称为内核的函数,可用于优化此标量积的计算。内核是K(x1, x2)
具有以下属性的函数
K(x1, x2) = <phi(x1), phi(x2)>
对于某些函数 phi()。换句话说:我们可以在低维数据空间(其中 x1 和 x2“活”)中评估标量积,而不必转换到高维特征空间(其中 phi(x1) 和 phi(x2)“活” ")——但我们仍然获得了转换到高维特征空间的好处。这称为内核技巧。
许多流行的内核,例如高斯内核,实际上对应于变换为无限维特征空间的变换 phi() 。内核技巧允许我们计算该空间中的标量积,而不必明确表示该空间中的点(显然,这在内存有限的计算机上是不可能的)。
主要区别(出于实际目的)是:线性问题要么确实有解决方案(然后很容易找到),要么您得到一个明确的答案,即根本没有解决方案。在你根本不知道问题之前,你确实知道这么多。只要是线性的,你就会得到答案;迅速地。
这背后的直觉是,如果你在某个空间中有两条直线,很容易看出它们是否相交,如果相交,很容易知道在哪里。
如果问题不是线性的——嗯,它可以是任何东西,而你几乎一无所知。
两个向量的点积仅表示以下内容:相应元素的乘积之和。所以如果你的问题是
c1 * x1 + c2 * x2 + c3 * x3 = 0
(您通常知道系数 c,并且您正在寻找变量 x),左侧是向量(c1,c2,c3)
和的点积(x1,x2,x3)
。
上面的方程(几乎)是线性问题的定义,所以点积和线性问题之间存在联系。
我对这件事的直觉更多地基于物理学,所以我很难翻译成人工智能。
我认为以下链接也很有用...
http://www.simafore.com/blog/bid/113227/How-support-vector-machines-use-kernel-functions-to-classify-data