第13章:数据的“升维打击”——支持向量机与核技巧
前面两章我们聊了线性回归和逻辑回归。一个是猜数字一个是猜类别但底层逻辑是一回事画一条线或一个超平面把数据串起来或切开。但你肯定已经想到了一个问题如果数据天生就没法用一条直线切开呢比如一个圆形的区域里全是红点红点外面围了一圈蓝点——你在二维平面上永远画不出一条直线把它们分开。逻辑回归也好感知机也好碰上这种情况就束手无策。支持向量机SVM的答案很巧妙如果二维分不开那就把它扔到三维去。在更高的维度上原来缠在一起的东西突然就变得可以被一刀劈开了。这个操作有一个专门的名字叫“核技巧”。先画一条最宽的“马路”在说“升维”之前我们先看看SVM本来的设计——它在线性可分的数据上想做什么。假设你的数据是能画一条直线分开的。红点和蓝点各居一侧。你随手画一条线分开了但是那条线贴着红点很近——蓝点那边空了一大片。再画一条分开了但贴着蓝点很近。这两种分法都不是很舒服。SVM的想法是找一条离两类点都尽量远的直线。你在两类点中间修一条“马路”马路越宽你往两边看就越安心——万一将来有几个新点稍微偏一点也不会轻易越界。这两条“马路牙子”刚好碰到的那几个点就是支持向量。这就是“支持向量机”这个名字的全部来历。它是由少数几个“撑住”边界的点来决定的——其他的点离边界很远对分界线基本没有影响。这跟逻辑回归完全不一样。逻辑回归在训练的时候每一个点都会拽一下分界线——远处的点虽然拽得轻但多少也有影响。SVM彻底无视远处的点。它只关心那些“骑在边界上”的少数点因为它觉得那些远离边界的点已经被分得很好了没必要为了它们牺牲马路的宽度。这个“少数关键点决定一切”的特性让SVM在处理高维数据时特别高效——它只依赖一小部分训练样本而不是所有数据。如果一刀切不下去呢好这是线性可分的情况。SVM表现很好。但现实中大量问题是非线性可分的。你没法在二维平面上把红蓝点用直线分开因为它们的分布像甜甜圈一样——红点在中间蓝点围着外面一圈。你在二维平面上画任何直线都会被同时穿过两种颜色。SVM怎么解决这个问题答案是把数据映射到更高维的空间。我们用一个极简的例子来看。一维数据数轴上红点在[-3, -1]区间蓝点在[1, 3]区间。这是线性可分的吗是——你画一条竖线在0的位置就分开了没问题。但如果红点在[-3, -1]和[1, 3]两个区间蓝点在[-1, 1]区间——红点分居两端蓝点在中间。你在一维数轴上画不出一个点能把它们一刀切开。怎么办加一个维度。把每一个一维的点 x 映射到二维平面上的 (x, x²)。比如 x2 变成 (2, 4)x-2 变成 (-2, 4)。注意看原来在数轴上分居两端的红点-2和2在二维平面上都跑到了 y4 的同一条水平线上。而原来夹在中间的蓝点0被映射到了 (0, 0)被甩在了下面。你看到没有数据从一维升到二维之后原来没办法分类的问题现在变成线性可分的了。你只需要在二维平面上画一条水平线 y2就能把红点和蓝点彻底分开。这就是“升维”的威力。在低维空间里缠在一起的数据到了高维空间里可能会突然散开。你不需要去想象这个高维空间长什么样——数学会自动帮你算。你只需要知道维度越高数据被“撑开”的可能性就越大。核函数你不需要亲自飞到高维去你这时候可能会问“那我把数据升到十万维去不就行了吗”理论上可以但计算量太大了。如果你真的把每个点从二维映射到十万维需要算十万个新坐标然后在这十万维空间里求内积、算距离——计算量爆炸。SVM的“核技巧”就是解决这个问题的。核技巧的核心是一个聪明的观察SVM的训练过程只需要一个东西——任意两个数据点之间的“相似度”数学上叫内积。它不需要知道每个点在高维空间里的完整坐标它只需要知道每两个点之间的相似度是多少。核函数就是一个“捷径计算器”你不必真的把点映射到高维空间再算它们的相似度。你只需要在原始的低维空间里用一个公式直接算出“高维空间中的相似度”是多少。这个公式有很多种。最常用的是“径向基核函数”也叫高斯核它的直觉是两个点离得越近相似度越高离得越远相似度越低。这个相似度从1完全重合平滑下降到0远在天边。有了这个相似度公式SVM就可以在原始空间中直接工作了——它从未真正“看到”高维空间但它算出来的结果跟在那个高维空间里算出来的结果完全一样。这就像你会开车但不需要知道发动机里面每个零件的精确位置。你知道踩油门车会走、踩刹车车会停——核函数就是那个“油门”它帮你完成了所有的“高维映射”你只需要知道怎么踩它。江湖地位从王者到退隐在深度学习流行之前SVM是整个机器学习界的“王者算法”。它在1990年代到2000年代初的几乎所有分类竞赛中表现出色——手写数字识别、文本分类、生物信息学、图像识别SVM都拿过冠军。它的理论非常扎实VC维理论我们第5章提过泛化能力极强而且对过拟合有一定的天然免疫力。但SVM有两个致命的弱点。第一是它不擅长处理超大样本。SVM的训练复杂度大约是样本量的三次方——100个样本没问题1万个样本开始吃力100万个样本基本跑不动。而深度学习可以轻松处理几百万、几千万个样本——它用梯度下降每次只吃一小批数据不会一次性把整个数据集吞下去。第二是它不太适合端到端的特征学习。SVM需要你提前把数据“特征化”——比如一张图片你得手动设计好哪些像素是重要的、哪些统计量有用。而深度学习可以自己从原始数据里学出特征来不需要你手动设计。所以当深度学习在2012年爆发之后SVM的江湖地位逐渐被取代。今天大部分分类任务的第一选择是神经网络而不是SVM。但SVM并没有消失。在小样本、高维特征已经提取好的问题上比如基因表达数据、文本分类SVM仍然非常能打。而且核函数的思想——用相似度替代直接计算——深刻地影响了后来很多算法包括注意力机制你会在Transformer那章看到这个影子。SVM教给我们的一件事SVM的最大贡献可能不是它本身的分类能力而是它告诉了我们一个极其重要的道理有些问题在低维空间里看着无解但在高维空间里可能简单得离谱。这个道理后来被深度学习继承和发展了。神经网络的每一层都在做类似的事情——把数据映射到一个新的“表示空间”。在低层空间里像素的排列毫无规律在高层空间里猫的特征和狗的特征被分得清清楚楚。SVM用核函数来一次性完成这个映射。神经网络用多层非线性变换来逐步完成这个映射。方法不同但底层的信念是一致的高维空间里藏着低维空间看不到的结构。下一章我们要从“分而治之”这个更朴素的思路出发去看另一种完全不同的分类器——决策树。它不画线不升维就靠不断地问“是或不是”来一步步逼近答案。参考文献Cortes, C., Vapnik, V. (1995). Support-Vector Networks.Machine Learning, 20(3), 273–297.推荐理由SVM的原始论文提出了“最大间隔分类器”的核心思想并用核函数解决了非线性分类问题。虽然读起来有一定门槛但论文的前几节对SVM的直觉和几何解释非常清晰——Vapnik是那种能把复杂理论用朴素语言讲明白的少数人之一。udiprod. (2012). SVM with polynomial kernel visualization. https://www.udiprod.com/svm/推荐理由这个视频完整演示了二维空间中线性不可分的两类点红点被蓝点围成一圈通过核函数映射到三维空间后变得线性可分的过程。视频中使用的变换 f([x,y]) [x, y, x²y²] 恰好是正文“一维到二维”示例在高一维版本中的自然延伸。可视化极其直观是“升维打击”这个概念最直接的视觉印证。Hastie, T., Tibshirani, R., Friedman, J. (2009).The Elements of Statistical Learning(2nd ed.). Springer. 第12章Support Vector Machines。推荐理由ESL的第12章以超过40页的篇幅完整覆盖了SVM——从线性SVM开始到非线性SVM和核函数再到与逻辑回归的关系。不用全读重点看前几节12.1-12.3的图示和公式旁白能帮你在“直观理解”和“严谨数学”之间搭一座桥。