【模式识别】第五讲:核方法、支持向量回归与聚类

上一讲最后留了一个思考:非线性怎么办。回答它之前,先把前两节过一遍。

线性可分的情况,找的是间隔最大的分类面。从几何上看是两类样本中间最宽那条带子的中线。建模成二次规划,目标最小化权重的模,约束每个样本都被分对、还要留出间隔。90 年代讲这个模型,举的例子是一幅 1024×10241024\times10241024×1024 的图像,展开上百万维;那时候互联网还没起来,一个图像分类问题能有上千个样本就算大了。上千个样本、上百万个参数,原问题直接解不现实,于是转对偶。转过去之后未知数从权重变成乘子,个数跟样本数一一对应,上百万个参数的问题变成上千个参数的问题。解出来真正起作用的只有离分界面最近的那几个样本,其余乘子都是零。

线性不可分的情况允许少量样本分错,给每个样本加一个松弛变量,目标里除了间隔再加一项惩罚,两个目标折中,还是二次规划,还是转对偶,约束上多一个 0≤αi≤C0\leq\alpha_i\leq C0≤αi≤C。

两条路走的是同一步骤:先有几何直观,再建模,再转对偶。这一步后面还要走两遍。

到 SVM 为止,学过的方法都要求样本带标签:贝叶斯决策靠先验和类条件密度,Logistic 回归和感知器直接学边界,SVM 学间隔最大的那条边界。标签一撤,这套东西全部失效,后面要换一套语言。

一、非线性

线性情况找线性分类面。非线性情况,直觉上就想去找一个非线性的分类面。

常用的办法是拿多项式去试,二阶不行试三阶;多项式不行,换指数函数或者别的非线性函数。麻烦在选择没有边:到底用哪个函数、用几阶,试到哪一步算完,说不清。SVM 没有顺着这条路走。

它还是从一维这个最简单的例子看起。一维上两类线性可分,中间找一个点就分开了。一维上两类交错,找不到这样一个点,那就给每个样本添一维,第二维取原来那个数的平方。样本到了平面上,横轴是 xxx,纵轴是 x2x^2x2,两类分到一条直线的两边。一维分不开的,二维里一条直线分开了。

图1 上是三行。第一行两类一维可分,第二行一维不可分,第三行是第二行添了平方这一维之后的样子,中间那条斜线和两边两条虚线,就是二维里的间隔。

维度这东西有个规律:一维里用点分,二维里用线分,三维里用面分。低一维分不开,就往上升一维;升到哪一维能分开,取决于数据本身。

二维的例子是同一件事。一类样本在圆环内,一类在圆环外,平面上要一条圆的边界才分得开。升到三维,第一维取第一个特征的平方,第二维取根号二倍的两个特征之积,第三维取第二个特征的平方。三维里两团被一张平面分开。

图2 是同一件事的图版。左边红点围在圈里,蓝点散在圈外,中间那条虚线圆就是原空间里唯一能分开它们的边界;箭头过去是映射之后的三个坐标轴,红点被抬到中间一层,蓝点散在四周,虚线画出的那张平面正好把两团切开。

根号二那个系数不是凑出来的。按这个映射算内积,(x12,2x1x2,x22)(x_1^2,\sqrt2x_1x_2,x_2^2)(x12,2 x1x2,x22) 与 (y12,2y1y2,y22)(y_1^2,\sqrt2y_1y_2,y_2^2)(y12,2 y1y2,y22) 的点积,展开正好是 (x1y1+x2y2)2(x_1y_1+x_2y_2)^2(x1y1+x2y2)2,也就是原空间内积的平方。换成别的系数也能把两类分开,取根号二是为了让这个等式成立;后面讲多项式核,用的就是这一点。

糖果的例子更实在。甜度和大小两个特征,各按 1 到 10 打分,方形的糖果和圆形的糖果在平面上混成两团,找不到直线分开。添一维,取大小乘甜度,到了三维,两团分开。

非线性这一块,SVM 没有去换分类面的形状,它把样本搬到高维空间里,在高维空间里找线性分类面,再落回原空间。低维分不开就升维,高维里用线性那一套,落回来的边界是弯的。

这里有个容易漏掉的地方:升到高维之后,用的还是线性可分那一整套,求最大间隔,建模成二次规划,解对偶,最后只认支持向量。没有为非线性另写一套理论,只是把内积里的向量换了。

换起来只动两个地方:对偶问题里只有两两内积 xiTxj\boldsymbol x_i^T\boldsymbol x_jxiTxj,决策函数里只有 xiTx\boldsymbol x_i^T\boldsymbol xxiTx,把 x\boldsymbol xx 换成 ϕ(x)\phi(\boldsymbol x)ϕ(x),两处一起换,就成了

max⁡α Q(α)=∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjϕ(xi)Tϕ(xj)(1-1)\max_{\boldsymbol\alpha}\ Q(\boldsymbol\alpha)=\sum_{i=1}^{n}\alpha_i-\dfrac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j\phi(\boldsymbol x_i)^T\phi(\boldsymbol x_j)\tag{1-1}αmax Q(α)=i=1∑nαi−21i=1∑nj=1∑nαiαjyiyjϕ(xi)Tϕ(xj)(1-1)

f(x)=sign(∑i=1nαiyiϕ(xi)Tϕ(x)+b)(1-2)f(\boldsymbol x)=\mathrm{sign}\left(\sum_{i=1}^{n}\alpha_iy_i\phi(\boldsymbol x_i)^T\phi(\boldsymbol x)+b\right)\tag{1-2}f(x)=sign(i=1∑nαiyiϕ(xi)Tϕ(x)+b)(1-2)

约束还是 ∑iαiyi=0\sum_i\alpha_iy_i=0∑iαiyi=0 与 0≤αi≤C0\leq\alpha_i\leq C0≤αi≤C,其余步骤与线性可分时一样:最大间隔,二次规划,解对偶,权重由支持向量算出来。换的只有内积里那个向量。

二、代价

ddd 维输入、ppp 阶多项式,新特征的个数是

d~=(p+d−1p)(2-1)\tilde d=\binom{p+d-1}{p}\tag{2-1}d~=(pp+d−1)(2-1)

一维二次多出一项 x12x_1^2x12;二维二次的二阶项三项,连同低次项和常数项是六项;三维二次的二阶项六项,连同低次项是十项。涨得不慢。

到图像上就数不清了。16×1616\times1616×16 的输入展开是 256 维,四阶多项式代进式(2-1),得数要一位一位数过去,个、十、百、千、万、十万、百万、千万、亿,一亿八千三百万维。低次项再算进来,量级不变。

一亿八千万维是什么概念。高维空间里做一次内积,要一亿八千万次乘加;训练时每一对样本算一次,测试时每个支持向量算一次。同样的内积在 256 维空间里只要 256 次乘加,差着将近六个数量级。权重本身也存不下,上亿个数,一个按 4 字节算就是几百兆,还没算中间变量。

升维本身没问题,问题在算不动。

三、核函数

核方法绕开的就是这一步。它不去算 ϕ(x)\phi(\boldsymbol x)ϕ(x),直接在原空间上定义一个函数,让它恒等于高维空间里的内积:

k(xi,xj)=ϕ(xi)Tϕ(xj)(3-1)k(\boldsymbol x_i,\boldsymbol x_j)=\phi(\boldsymbol x_i)^T\phi(\boldsymbol x_j)\tag{3-1}k(xi,xj)=ϕ(xi)Tϕ(xj)(3-1)

左边这个函数定义在 256 维的原空间上,算一次是 O(d)O(d)O(d);右边是高维空间里的内积,代价本该是 O(d~)O(\tilde d)O(d~)。两边恒等,按式(3-1)把内积换掉,训练和测试都不进高维空间:

max⁡α Q(α)=∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjk(xi,xj)(3-2)\max_{\boldsymbol\alpha}\ Q(\boldsymbol\alpha)=\sum_{i=1}^{n}\alpha_i-\dfrac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_jk(\boldsymbol x_i,\boldsymbol x_j)\tag{3-2}αmax Q(α)=i=1∑nαi−21i=1∑nj=1∑nαiαjyiyjk(xi,xj)(3-2)

f(x)=sign(∑i=1nαiyik(xi,x)+b)(3-3)f(\boldsymbol x)=\mathrm{sign}\left(\sum_{i=1}^{n}\alpha_iy_ik(\boldsymbol x_i,\boldsymbol x)+b\right)\tag{3-3}f(x)=sign(i=1∑nαiyik(xi,x)+b)(3-3)

规模也没有变。乘子个数还是样本数,二次规划的规模还是由样本数定,高维空间只出现在定义里。高维空间里的线性可分拿到了,计算还留在原空间,这个办法在纸上很漂亮。

核函数还有一层意思。内积衡量的是两个向量同不同向,同向则大,垂直则零,所以核函数值本身就是两个样本的相似程度:值大表示像,值小表示不像。高斯核把这一点摆得最明白,两个样本一远,核值就趋近于零。一个函数身兼两职,一头把低维样本送进高维,一头替两个样本算相似度。

剩下的问题是,随手写一个函数,它凭什么等于某个高维空间的内积。

四、条件

条件是这样:kkk 是输入空间上的对称函数,对任意 mmm 个样本、任意实系数 a1,...,ama_1,\dots,a_ma1,...,am,都满足

∑i=1m∑j=1maiajk(xi,xj)≥0(4-1)\sum_{i=1}^{m}\sum_{j=1}^{m}a_ia_jk(\boldsymbol x_i,\boldsymbol x_j)\geq0\tag{4-1}i=1∑mj=1∑maiajk(xi,xj)≥0(4-1)

这就是半正定。满足半正定的 kkk,一定存在一个从输入空间到某个内积空间的映射 ϕ\phiϕ,使 kkk 等于对应向量的内积。那个空间在泛函里叫再生核希尔伯特空间,证明在泛函那一头,这里不展开。

用矩阵看更清楚。取 mmm 个样本,两两算核函数,排成方阵

K=k(x1,x1)⋯k(x1,xm)⋮⋱⋮k(xm,x1)⋯k(xm,xm)(4-2)K=\begin{bmatrix}k(\boldsymbol x_1,\boldsymbol x_1) & \cdots & k(\boldsymbol x_1,\boldsymbol x_m)\cr \vdots & \ddots & \vdots\cr k(\boldsymbol x_m,\boldsymbol x_1) & \cdots & k(\boldsymbol x_m,\boldsymbol x_m)\end{bmatrix}\tag{4-2}K= k(x1,x1)⋮k(xm,x1)⋯⋱⋯k(x1,xm)⋮k(xm,xm) (4-2)

把实系数写成向量 a\boldsymbol aa,式(4-1)那个二重和就是 aTKa\boldsymbol a^TK\boldsymbol aaTKa。它对任意 a\boldsymbol aa 非负,等价于 KKK 半正定。所谓核函数满足半正定条件,说的是这个矩阵。

这个矩阵的每个元素是两个样本在高维空间里的内积,线性代数里管它叫格拉姆矩阵。核矩阵半正定,跟一堆向量的内积矩阵半正定是同一件事。反过来想更容易接受:把 ϕ(x)\phi(\boldsymbol x)ϕ(x) 想成某个空间里一个向量的坐标,核矩阵就是这些向量两两的内积表;一张内积表只要自洽,总找得到一组向量把它实现出来,半正定就是自洽的数学说法。

KKK 半正定还带来一件事:对偶问题的目标函数是二次型,二次型是凸的,对偶问题还是凸二次规划,最优解有保证。

五、四个核

常用的一共四个,一个一个看。线性核什么都不做,原空间里还是线性:

k(x,xi)=xTxi(5-1)k(\boldsymbol x,\boldsymbol x_i)=\boldsymbol x^T\boldsymbol x_i\tag{5-1}k(x,xi)=xTxi(5-1)

多项式核把内积加一,再取 qqq 次方,qqq 就是阶数:

k(x,xi)=(xTxi+1)q(5-2)k(\boldsymbol x,\boldsymbol x_i)=(\boldsymbol x^T\boldsymbol x_i+1)^q\tag{5-2}k(x,xi)=(xTxi+1)q(5-2)

高斯核也叫径向基核,两个样本离得越远,核值越小:

k(x,xi)=exp⁡(−∥x−xi∥22σ2)(5-3)k(\boldsymbol x,\boldsymbol x_i)=\exp\left(-\dfrac{\lVert\boldsymbol x-\boldsymbol x_i\rVert^2}{2\sigma^2}\right)\tag{5-3}k(x,xi)=exp(−2σ2∥x−xi∥2)(5-3)

Sigmoid 核里层是一次内积,外层过一下 tanh:

k(x,xi)=tanh⁡(vxTxi+c)(5-4)k(\boldsymbol x,\boldsymbol x_i)=\tanh(v\boldsymbol x^T\boldsymbol x_i+c)\tag{5-4}k(x,xi)=tanh(vxTxi+c)(5-4)

多项式核可以摊开看。糖果那两个特征,取 q=2q=2q=2,把 (xTxi+1)2(\boldsymbol x^T\boldsymbol x_i+1)^2(xTxi+1)2 展开是六项:大小的平方,甜度的平方,大小乘甜度,大小,甜度,常数 1。核函数没有真去算这六个数,它等于在六维里做内积。三维输入配二次多项式,摊开是十项。

阶数一换,落回原空间的边界也换。图3 是同一组环形分布上的三条边界:线性核一条直线,切不开;二次的边界弯过来,把环内环外分开;五次的边界更贴着样本,形状与二次那条不一样,两类也分开了。三条边界的差别,是高维空间里那几张平面的差别,落回原空间成了不同次数的曲线。落到判别函数上看,用多项式核训练出来的就是一个多项式判别函数,阶数由 qqq 定。

高斯核和 Sigmoid 核还各有一个身份。高斯核训练出来的判别函数与径向基函数网络同形,每个支持向量是一个中心,核函数当基函数,乘子作权重,输出是加权和。Sigmoid 核在 vvv、ccc 取到合适值时,判别函数相当于一个三层前馈网络。这两条对应常被拿来解释 SVM 与神经网络的亲缘:一个把基函数定死成核、只学权重,一个连基函数一起学。

高斯核只有一个宽度参数。σ\sigmaσ 大,指数项在样本之间变化慢,核退化成线性核,边界接近直线;σ\sigmaσ 小,每个样本周围鼓起一个小包,边界贴着样本走,训练集上几乎不出错。图4 是同一组数据的三个 σ\sigmaσ。分母有的地方写成 σ2\sigma^2σ2,少一个 2,那是把 σ\sigmaσ 重新标定了一次,见到按同一个量理解。

核怎么选,没有统一的方法,只能试。试有次序:先用线性核,不行换多项式核,再不行换高斯核,由简到繁;同一类里参数也这么走,高斯核的 σ\sigmaσ 从大到小。σ\sigmaσ 取到无穷大,高斯核就是线性核,这两条次序是同一条。

要试的东西不多。深度网络做非线性拟合动辄几百上万个参数,这边一个核加一两个参数,试起来便宜。

六、数字

环形分布,120 个样本,换核换参数的结果如下。线性不可分那一行用的是软间隔,那组结果里还比过惩罚系数:CCC 取得大,看重少分错;取得小,看重间隔宽。

核与数据 支持向量占比 结果
线性核,线性可分数据 1.7% 干净分开
线性核,线性不可分数据 100% 并没有很好分开
二次多项式核 8.3% 较好分开
三次多项式核 7.5% 较好分开,分类面不同
高斯核,σ=3\sigma=3σ=3 7.5% 较好分开
高斯核,σ=1\sigma=1σ=1 8.3% 较好分开
三次多项式核,8 个样本 100% 小样本也能全分开

第一行、第二行只差数据可不可分,用的都是线性核。可分时支持向量占 1.7%,分类面由三两个点定下来;不可分时这个比例是 100%,全部样本都压在间隔边界上,边界是硬撑出来的,两类并没有真分开。后面几行换成非线性核,占比落到 7.5% 到 8.3% 之间,两类都分开了。

最后一行只有 8 个样本,两类相互包含,三次多项式仍然全分开。样本这么少,支持向量占满全部样本不奇怪:可用的点太少,每个点都在约束起作用的位置上。

USPS 的邮政编码,0 到 9 十类,三种核的结果:

支持向量机类型 核函数参数 支持向量个数 测试错误率
多项式核 q=3q=3q=3 274 4.0%
径向基核 σ=0.3\sigma=0.3σ=0.3 291 4.1%
Sigmoid 核 v=2v=2v=2,c=1c=1c=1 254 4.2%

4.0% 到 4.2%,几乎一样。换核改的是边界形状与支持向量的个数,错误率的上限没动。同一类核里参数没选对,结果才明显变差。

七、为什么解对偶

上一讲的回答是参数个数。非线性又多一条,而且这条更直接:核函数能顶替内积,前提是内积出现在式子里。对偶问题和决策函数恰好只有两两内积,原问题里却得把权重 w\boldsymbol ww 显式写出来,而 w\boldsymbol ww 是升维之后那个空间里的向量,上亿维,写不出来,也存不下。

另一头是规模。维度高、样本少,解对偶;样本多、维度低,解原问题。上百万个样本配上千个参数,对偶是上百万个乘子,原问题只有上千个未知数,这时候该解原问题。

SVM 在 90 年代能起来,靠的是对偶问题的复杂度只跟样本数有关,跟维数无关。这类二次规划不必自己写,LibSVM 一类现成的软件包一个调用就出结果,要给的只是核函数与惩罚系数。

八、支持向量回归

分类给类别,回归给数值。把 SVM 搬到回归上,还是从几何直观起。

先问一句:回归要什么。有人会说,让所有点到拟合直线的距离之和最小。最小二乘是这么干的,但那样只有一条线,没有宽度,也没有支持向量站的位置,接不上最大间隔那一套。

SVM 的做法换成了包络:找一条曲线,让所有样本点落在它上下两条平行边界之间的管道里,管道越窄越好;满足这条要求的曲线里,挑最平坦的一条。分类的约束是每个点分对,回归的约束是每个点落在管道里,约束站的位置一样,判据换了。

加最平坦这一条是为了防过拟合:九次多项式可以把任何一组点穿过去,曲线扭得厉害,样本一动预测就跑到别处;一次多项式平直,稳。

写成式子。管道宽度取 2ε2\varepsilon2ε,每个样本的残差不超过 ε\varepsilonε:

∣yi−(wTxi+b)∣≤ε,1≤i≤n(8-1)|y_i-(\boldsymbol w^T\boldsymbol x_i+b)|\leq\varepsilon,\quad 1\leq i\leq n\tag{8-1}∣yi−(wTxi+b)∣≤ε,1≤i≤n(8-1)

绝对值拆开:

yi−wTxi−b≤ε,wTxi+b−yi≤ε(8-2)y_i-\boldsymbol w^T\boldsymbol x_i-b\leq\varepsilon,\qquad \boldsymbol w^T\boldsymbol x_i+b-y_i\leq\varepsilon\tag{8-2}yi−wTxi−b≤ε,wTxi+b−yi≤ε(8-2)

约束把样本关进管道,目标再要求这条曲线尽量平,写成最小化权重的模:

min⁡w,b 12∥w∥2(8-3)\min_{\boldsymbol w,b}\ \dfrac{1}{2}\lVert\boldsymbol w\rVert^2\tag{8-3}w,bmin 21∥w∥2(8-3)

式(8-2)和式(8-3)合起来:目标要平,约束要全进管道,这就是硬间隔支持向量回归。

管道里的点残差不到 ε\varepsilonε,不算错,也不罚。这一点跟最小二乘不同:最小二乘对每个点都记一笔误差,误差再小也照罚;SVR 在管道内一律放过,只有出管的距离才算账。

实际数据有噪声,硬要求做不到,允许出管,代价按出管的距离算。上下两侧各引一组松弛变量,ξi\xi_iξi 管高出管道的,ξi∗\xi_i^{\ast}ξi∗ 管低于管道的:

min⁡w,b 12∥w∥2+C∑i=1n(ξi+ξi∗)(8-4)\min_{\boldsymbol w,b}\ \dfrac{1}{2}\lVert\boldsymbol w\rVert^2+C\sum_{i=1}^{n}(\xi_i+\xi_i^{\ast})\tag{8-4}w,bmin 21∥w∥2+Ci=1∑n(ξi+ξi∗)(8-4)

yi−wTxi−b≤ε+ξi,wTxi+b−yi≤ε+ξi∗(8-5)y_i-\boldsymbol w^T\boldsymbol x_i-b\leq\varepsilon+\xi_i,\qquad \boldsymbol w^T\boldsymbol x_i+b-y_i\leq\varepsilon+\xi_i^{\ast}\tag{8-5}yi−wTxi−b≤ε+ξi,wTxi+b−yi≤ε+ξi∗(8-5)

ξi≥0,ξi∗≥0(8-6)\xi_i\geq0,\qquad \xi_i^{\ast}\geq0\tag{8-6}ξi≥0,ξi∗≥0(8-6)

上下各一组,这是跟软间隔分类不一样的地方。分类里一个样本一条约束、一组松弛变量;回归里残差有正有负,上下各要一条,各要一组。

拉格朗日函数引四组乘子,αi\alpha_iαi 与 αi∗\alpha_i^{\ast}αi∗ 对应两条残差约束,γi\gamma_iγi 与 γi∗\gamma_i^{\ast}γi∗ 对应两个非负约束。两条残差约束的括号记作 ri+r_i^{+}ri+、ri−r_i^{-}ri−:

J=12∥w∥2+C∑i=1n(ξi+ξi∗)−∑i=1n(αiri++αi∗ri−)−∑i=1n(γiξi+γi∗ξi∗)(8-7)J=\dfrac{1}{2}\lVert\boldsymbol w\rVert^2+C\sum_{i=1}^{n}(\xi_i+\xi_i^{\ast})-\sum_{i=1}^{n}\left(\alpha_ir_i^{+}+\alpha_i^{\ast}r_i^{-}\right)-\sum_{i=1}^{n}\left(\gamma_i\xi_i+\gamma_i^{\ast}\xi_i^{\ast}\right)\tag{8-7}J=21∥w∥2+Ci=1∑n(ξi+ξi∗)−i=1∑n(αiri++αi∗ri−)−i=1∑n(γiξi+γi∗ξi∗)(8-7)

对 w\boldsymbol ww、bbb、ξi\xi_iξi、ξi∗\xi_i^{\ast}ξi∗ 求偏导置零。前两个给出

w=∑i=1n(αi−αi∗)xi(8-8)\boldsymbol w=\sum_{i=1}^{n}(\alpha_i-\alpha_i^{\ast})\boldsymbol x_i\tag{8-8}w=i=1∑n(αi−αi∗)xi(8-8)

∑i=1n(αi−αi∗)=0(8-9)\sum_{i=1}^{n}(\alpha_i-\alpha_i^{\ast})=0\tag{8-9}i=1∑n(αi−αi∗)=0(8-9)

后两个给出

C−αi−γi=0,C−αi∗−γi∗=0(8-10)C-\alpha_i-\gamma_i=0,\qquad C-\alpha_i^{\ast}-\gamma_i^{\ast}=0\tag{8-10}C−αi−γi=0,C−αi∗−γi∗=0(8-10)

由 γi≥0\gamma_i\geq0γi≥0 得 αi≤C\alpha_i\leq Cαi≤C,另一侧同理。代回拉格朗日函数,bbb 与松弛变量消掉,记 βi=αi−αi∗\beta_i=\alpha_i-\alpha_i^{\ast}βi=αi−αi∗,约束是 ∑iβi=0\sum_i\beta_i=0∑iβi=0 与 0≤αi,αi∗≤C0\leq\alpha_i,\alpha_i^{\ast}\leq C0≤αi,αi∗≤C,对偶问题是在这组约束下最大化

Q(β)=∑i=1nyiβi−ε∑i=1n(αi+αi∗)−12∑i=1n∑j=1nβiβjxiTxj(8-11)Q(\beta)=\sum_{i=1}^{n}y_i\beta_i-\varepsilon\sum_{i=1}^{n}(\alpha_i+\alpha_i^{\ast})-\dfrac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\beta_i\beta_j\boldsymbol x_i^T\boldsymbol x_j\tag{8-11}Q(β)=i=1∑nyiβi−εi=1∑n(αi+αi∗)−21i=1∑nj=1∑nβiβjxiTxj(8-11)

跟软间隔分类的对偶比,形式几乎一样,多一项 −ε∑i(αi+αi∗)-\varepsilon\sum_i(\alpha_i+\alpha_i^{\ast})−ε∑i(αi+αi∗)。这一项给每个非零乘子记一笔账,乘子越多越大,扣得越狠,解就倾向让乘子稀疏。ε\varepsilonε 管管道多宽,CCC 管出管的代价多贵。乘子的大小也有读法:αi\alpha_iαi 大,说明第 iii 个样本在顶着约束,模型绕不开它;乘子为零,这个样本对结果就没有发言权。

互补松弛把样本分三类,跟分类里那三类一一对上。管道内部离得远的,两条约束都不起作用,αi=αi∗=0\alpha_i=\alpha_i^{\ast}=0αi=αi∗=0,跟分类里离分界面远的点一样,对权重没贡献。压在管道边界上的,0<αi(∗)<C0\lt\alpha_i^{(\ast)}\lt C0<αi(∗)<C,是支持向量。跑出管道的,松弛变量大于零,γi=0\gamma_i=0γi=0,于是 αi(∗)=C\alpha_i^{(\ast)}=Cαi(∗)=C,惩罚顶到上界,跟分类里违反间隔的点一样。

图6 把这三类点画在一起。管道里那串浅色点不参与,管道边界上的点撑着管道,上下两个红点分别高出、低出管道,ξ\xiξ 与 ξ∗\xi^{\ast}ξ∗ 就是凸出来的那一截。

预测只用支持向量:

f(x)=∑i=1n(αi−αi∗)xiTx+b(8-12)f(\boldsymbol x)=\sum_{i=1}^{n}(\alpha_i-\alpha_i^{\ast})\boldsymbol x_i^T\boldsymbol x+b\tag{8-12}f(x)=i=1∑n(αi−αi∗)xiTx+b(8-12)

非线性情形用核函数换内积:

f(x)=∑i=1n(αi−αi∗)k(xi,x)+b(8-13)f(\boldsymbol x)=\sum_{i=1}^{n}(\alpha_i-\alpha_i^{\ast})k(\boldsymbol x_i,\boldsymbol x)+b\tag{8-13}f(x)=i=1∑n(αi−αi∗)k(xi,x)+b(8-13)

ϕ\phiϕ 具体长什么样可以不知道,只要 kkk 算得出来。bbb 由落在管道边界上的那些样本算,跟分类里用虚线上的点算 bbb 是一回事。

分类和回归是同一条路:几何直观,建模,转对偶,核函数处理非线性。分类上走了三遍,回归上又一遍。这套顺序本身就是做研究的路子,先把几何直观讲清楚,再建模,再按问题的特点挑求解的办法。

九、多类、公平、注意力

多类上一讲提过。两个办法:拆成多个两类问题,一对其余或者两两配对再投票;或者直接把模型改成多类,像回归扩成 Softmax 那样,一次给出每一类的判别值。前一种搭起来简单,后一种更紧凑。两条路都会留下歧义区域,一对其余时一个样本可能被几个分类器同时认领,两两配对时投票可能平票,这是二分类器拼多类的老问题。

公平性是另一条。分类只追整体精度,整体精度高不等于每个群体都分得好:整体 90% 的准确率,可能掩盖了某个群体上只有 70%。司法判决、信贷审批这类场合,除了整体,还要看各群体上的精度是否接近。做法是把公平性写成可计算的指标塞进目标函数,剩下还是 SVM 那一套。公平性本身有好几种刻画,选哪一种取决于要把哪种偏差压下去,这类问题留作课程大作业。

最近几年更热的是注意力这一块。有一篇工作直接把训练注意力与求解 SVM 摆成等价关系来讨论,把自注意力的优化几何与硬间隔 SVM 的形式作对照;顺着这个看法,注意力的一层就是一次特征选择,逐层挑出最能分开样本的方向,与 SVM 靠支持向量定分类面是一回事。有人干脆把 Transformer 理解成一个分层模型,逐层分离并挑出最合适的 token。

十、无监督与相似度

到这儿为止的方法都有标签。一堆水果,训练集里标好了哪是苹果、哪是葡萄、哪是草莓,学的是特征到标签的映射 hhh。

聚类没有标签。手上 100 个水果的个头、颜色、形状,知道里面有苹果、葡萄、草莓三类,不知道哪个是哪个。要学的是数据本身的解释函数 fff,按个头、颜色分堆,让同一堆里彼此相像。名字听着抽象,落到水果上就是:前者学会认苹果,后者学会把像苹果的放到一堆。

图7 左边有标签,三类样本用不同记号,中间几条虚线是学出来的分界;右边没有标签,全是一样的圆点,虚线画出的圈是聚出来的三团。两边数据一样,任务不一样。

把这件事写下来:输入是 NNN 个样本和类别数 KKK,输出是若干组 C1,...,CKC_1,\dots,C_KC1,...,CK,各组的并集正好是全部样本,组与组之间不重叠。给的只有 KKK,怎么分不管。

物以类聚,人以群分,这句话差不多就是对聚类最形象的一句描述。好的聚类满足两条:类内相似度高,类间相似度低。

相似度怎么定,看问题。一张合影,问这些人怎么聚类,可以按性别,可以按头发长短,可以按肤色,可以按戴不戴眼镜,每种都说得通,选哪种看想回答什么。多数算法用特征向量之间的距离充当相似度,距离小就是像,距离大就是不像;核函数那一套反过来,值大才是像。两套说法是一件事的两面。

一个量能当距离,要满足三条:

d(x,y)=d(y,x),d(x,y)≥0,d(x,y)≤d(x,z)+d(y,z)(10-1)d(\boldsymbol x,\boldsymbol y)=d(\boldsymbol y,\boldsymbol x),\qquad d(\boldsymbol x,\boldsymbol y)\geq0,\qquad d(\boldsymbol x,\boldsymbol y)\leq d(\boldsymbol x,\boldsymbol z)+d(\boldsymbol y,\boldsymbol z)\tag{10-1}d(x,y)=d(y,x),d(x,y)≥0,d(x,y)≤d(x,z)+d(y,z)(10-1)

对称、非负、三角不等式。第三条的意思是不绕道更近。

最常用的是一族 Minkowski 距离:

d(x,y)=∥x−y∥r=(∑i∣x(i)−y(i)∣r)1/r(10-2)d(\boldsymbol x,\boldsymbol y)=\lVert\boldsymbol x-\boldsymbol y\rVert_r=\left(\sum_{i}|x^{(i)}-y^{(i)}|^r\right)^{1/r}\tag{10-2}d(x,y)=∥x−y∥r=(i∑∣x(i)−y(i)∣r)1/r(10-2)

rrr 取 2 是欧氏距离,取 1 是曼哈顿距离,取到无穷是各分量差的最大值:

d(x,y)=max⁡i∣x(i)−y(i)∣(10-3)d(\boldsymbol x,\boldsymbol y)=\max_{i}|x^{(i)}-y^{(i)}|\tag{10-3}d(x,y)=imax∣x(i)−y(i)∣(10-3)

曼哈顿这个名字来自纽约的街道。曼哈顿的布局横平竖直,南北向是第三大道、第四大道、第五大道,第五大道是奢侈品一条街;东西向是 17、18、19 街区。站在第五大道 19 街区,跟人说一句,对方就能估出走过去的距离和时间,因为路只能沿方格走,斜穿不过去。r=1r=1r=1 算的就是这个长度。

图8 两条折线沿方格走,一条斜线穿过去。两条折线一样长,等于横向差加纵向差;斜线短,那是欧氏距离。

到原点距离为 1 的点连起来,三种距离三种形状:欧氏是圆,曼哈顿是菱形,最大距离是正方形。rrr 小于 1 时曲线陷在菱形里,连三角不等式都不满足,不能算距离。这一组也有三维的图,看起来还不如平面的清楚。

十一、K 均值

聚类里最经典的是 K 均值。出发点还是那句物理直觉:类内点之间的距离要小于类内点与类外点之间的距离。

图9 左边是没标签的一堆点,右边是聚完的样子,三团各有一个叉。叉是中心,位置取在簇的均值上,未必落在某个真实样本上,可能就在两个样本中间的空地里。

往下走绕不开一个循环。中心已知,分配容易,每个样本分给最近的中心;簇已知,算中心也容易,取簇内样本的均值。可一开始中心和簇都没有。先有鸡还是先有蛋,解法是先随便猜一个中心,分完再更新,更新完再分。

有 100 个水果,三类,随机取三个水果当中心。具体两步:初始化 KKK 个中心,然后重复,把每个样本分给最近的中心

k∗(n)=arg⁡min⁡j∥xn−μj∥2(11-1)k^{\ast}(n)=\arg\min_{j}\lVert\boldsymbol x_n-\boldsymbol\mu_j\rVert^2\tag{11-1}k∗(n)=argjmin∥xn−μj∥2(11-1)

再把中心挪到簇内样本的均值处

μk←1∣Ck∣∑n∈Ckxn(11-2)\boldsymbol\mu_k\leftarrow\dfrac{1}{|C_k|}\sum_{n\in C_k}\boldsymbol x_n\tag{11-2}μk←∣Ck∣1n∈Ck∑xn(11-2)

直到分配不再变。

图10 是同一批数据的两步。左边按最近中心连线,是分配;右边把中心挪到簇的均值处,是更新。两步交替做,中心一步步挪到位。

第一次分配完,中心多半不在簇的中间。更新一次,中心挪到均值处;按新中心再分配,边界跟着动;再更新一次,中心又挪一点。就这样一轮一轮走,某一轮分配不再变化,迭代停下。走得顺的时候三五步就稳,走岔的时候会绕着两个簇来回换人。

从优化看,这两步不是随手定的。目标函数是簇内平方和

Je=∑k=1K∑n=1Nrn,k∥xn−μk∥2(11-3)J_e=\sum_{k=1}^{K}\sum_{n=1}^{N}r_{n,k}\lVert\boldsymbol x_n-\boldsymbol\mu_k\rVert^2\tag{11-3}Je=k=1∑Kn=1∑Nrn,k∥xn−μk∥2(11-3)

rn,kr_{n,k}rn,k 是指示变量,样本 nnn 属于第 kkk 簇取 1,否则取 0。

固定中心,优化分配。目标函数对每个样本独立,一个水果分到哪一类不影响另一个,可以逐个最小化。指示变量在 KKK 个取值里只有一个 1,取哪个让距离最小就取哪个:

rn,k∗=1 ⇔ k=arg⁡min⁡j∥xn−μj∥2(11-4)r_{n,k}^{\ast}=1\ \Leftrightarrow\ k=\arg\min_{j}\lVert\boldsymbol x_n-\boldsymbol\mu_j\rVert^2\tag{11-4}rn,k∗=1 ⇔ k=argjmin∥xn−μj∥2(11-4)

固定分配,优化中心。对 μk\boldsymbol\mu_kμk 求偏导置零:

0=∂Je∂μk=∑n=1Nrn,k(μk−xn)(11-5)0=\dfrac{\partial J_e}{\partial\boldsymbol\mu_k}=\sum_{n=1}^{N}r_{n,k}(\boldsymbol\mu_k-\boldsymbol x_n)\tag{11-5}0=∂μk∂Je=n=1∑Nrn,k(μk−xn)(11-5)

移项

μk∗=∑nrn,kxn∑nrn,k=1∣Ck∣∑n∈Ckxn(11-6)\boldsymbol\mu_k^{\ast}=\dfrac{\sum_{n}r_{n,k}\boldsymbol x_n}{\sum_{n}r_{n,k}}=\dfrac{1}{|C_k|}\sum_{n\in C_k}\boldsymbol x_n\tag{11-6}μk∗=∑nrn,k∑nrn,kxn=∣Ck∣1n∈Ck∑xn(11-6)

右边就是簇内均值。

两步都在降同一个目标函数,函数值有下界,一定收敛。收敛不等于收敛到全局最小,目标函数非凸,初始点不同会落到不同的局部极小。

图11 六次运行。上排好解,三类分得干净;下排坏解,两个分开的团合进一个簇,另一个团被劈成两半。目标函数同样是局部极小,只是分得不对。

初始化有几条经验:空间里随机生成 KKK 个点;从数据里随机挑 KKK 个样本;把数据随机分成 KKK 组,用各组中心作初值;还有一种在迭代中逐步加入离现有中心最远的数据点作新中心,用来跳出局部极小。都不保证全局最优,只是把落进坏解的概率压低。

类别数 KKK 通常也不知道。常见的做法是 KKK 从 1 往上试,每个 KKK 都完整聚一遍,算簇内平方和,画曲线找拐点。

K=1K=1K=1 时 873.0,K=2K=2K=2 时 173.1,K=3K=3K=3 时 133.6。一到二降了五倍,二到三只降两成多,再往上几乎是平的,拐点在 K=2K=2K=2。这个办法叫肘部法。

K 均值用欧氏距离,等于假设每一团在各方向上差不多,簇的形状一不规则就分不好。换成别的不相似度量就是广义 K 均值

J~e=∑k=1K∑n=1Nrn,kDissim(xn,μk)(11-7)\tilde J_e=\sum_{k=1}^{K}\sum_{n=1}^{N}r_{n,k}\mathrm{Dissim}(\boldsymbol x_n,\boldsymbol\mu_k)\tag{11-7}J~e=k=1∑Kn=1∑Nrn,kDissim(xn,μk)(11-7)

分配步不变,取不相似度最小的那一类;更新步变复杂,欧氏距离下能对中心求导出闭式解,换一个没有好性质的度量,求导走不通,只能把中心限制在数据点上逐个试。

度量也能从数据里学。有一类工作把度量矩阵当参数,用样本的成对约束去优化它,让度量跟着问题走,不必先验指定。

十二、概率聚类

K 均值是硬聚类,每个样本必须归到一类,非此即彼。

硬聚类在边界上出错。葡萄有大有小,大的那颗和草莓差不多,落在中间那段尺寸上,按大小只能二选一,错判的概率不小。玉米与杂草按高度分也是,长在中间的只能硬判。还有些样本带双重属性:一首曲子既有流行的成分又有古典的成分,硬归一边,信息就丢了。

软聚类换一种说法,每个样本以某个概率属于某一类。那颗葡萄可以说 48% 像草莓、52% 像葡萄;那棵中间的草 55% 像玉米、45% 像杂草;那首曲子 60% 是流行、40% 是古典。

概率模型里最常用高斯。ddd 维多元高斯的密度是

N(x∣μ,Σ)=1(2π)d/2∣Σ∣1/2exp⁡(−12(x−μ)TΣ−1(x−μ))(12-1)N(\boldsymbol x\mid\boldsymbol\mu,\boldsymbol\Sigma)=\dfrac{1}{(2\pi)^{d/2}|\boldsymbol\Sigma|^{1/2}}\exp\left(-\dfrac{1}{2}(\boldsymbol x-\boldsymbol\mu)^T\boldsymbol\Sigma^{-1}(\boldsymbol x-\boldsymbol\mu)\right)\tag{12-1}N(x∣μ,Σ)=(2π)d/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))(12-1)

均值定位置,协方差定形状。协方差矩阵半正定,能做特征分解:特征向量给出基的旋转,特征值给出沿各基方向的伸缩。矩阵要撑起一个密度函数,特征值还必须都是正的,有一个零或负数,这个协方差就不合法。

图13 是三个协方差的对比。单位阵是正圆,各方向一样宽;非对角元 0.4 那个是斜椭圆,长短轴转了角度;0.9 那个更瘦更斜,两个特征几乎同向变化。

单个高斯的参数由最大似然估计。对数似然

L(μ,Σ)=N2log⁡∣Σ−1∣−12∑n=1N(xn−μ)TΣ−1(xn−μ)(12-2)L(\boldsymbol\mu,\boldsymbol\Sigma)=\dfrac{N}{2}\log|\boldsymbol\Sigma^{-1}|-\dfrac{1}{2}\sum_{n=1}^{N}(\boldsymbol x_n-\boldsymbol\mu)^T\boldsymbol\Sigma^{-1}(\boldsymbol x_n-\boldsymbol\mu)\tag{12-2}L(μ,Σ)=2Nlog∣Σ−1∣−21n=1∑N(xn−μ)TΣ−1(xn−μ)(12-2)

对 μ\boldsymbol\muμ 与 Σ−1\boldsymbol\Sigma^{-1}Σ−1 求偏导置零

0=∂L∂μ=∑n=1NΣ−1(xn−μ)(12-3)0=\dfrac{\partial L}{\partial\boldsymbol\mu}=\sum_{n=1}^{N}\boldsymbol\Sigma^{-1}(\boldsymbol x_n-\boldsymbol\mu)\tag{12-3}0=∂μ∂L=n=1∑NΣ−1(xn−μ)(12-3)

0=∂L∂Σ−1=N2Σ−12∑n=1N(xn−μ)(xn−μ)T(12-4)0=\dfrac{\partial L}{\partial\boldsymbol\Sigma^{-1}}=\dfrac{N}{2}\boldsymbol\Sigma-\dfrac{1}{2}\sum_{n=1}^{N}(\boldsymbol x_n-\boldsymbol\mu)(\boldsymbol x_n-\boldsymbol\mu)^T\tag{12-4}0=∂Σ−1∂L=2NΣ−21n=1∑N(xn−μ)(xn−μ)T(12-4)

解出

μ∗=1N∑n=1Nxn(12-5)\boldsymbol\mu^{\ast}=\dfrac{1}{N}\sum_{n=1}^{N}\boldsymbol x_n\tag{12-5}μ∗=N1n=1∑Nxn(12-5)

Σ∗=1N∑n=1N(xn−μ∗)(xn−μ∗)T(12-6)\boldsymbol\Sigma^{\ast}=\dfrac{1}{N}\sum_{n=1}^{N}(\boldsymbol x_n-\boldsymbol\mu^{\ast})(\boldsymbol x_n-\boldsymbol\mu^{\ast})^T\tag{12-6}Σ∗=N1n=1∑N(xn−μ∗)(xn−μ∗)T(12-6)

解出来就是样本均值与样本协方差,跟一维时推的是同一组式子,只是方差换成了协方差矩阵。这一步要用几个矩阵求导公式,过程略去。

高斯是单峰的。真实数据常常不止一个峰:一堆水果三类各有各的个头分布;一个班里混着自动化、美术、物理几个专业,同一门课的成绩也分成几团,美术与自动化的数学基础差得远,用一个高斯盖,中间被高估,两边被低估。

图14 一组双峰数据。上排一个高斯拟合,曲线落在两峰中间,两边峰顶都够不着;下排两个高斯加权,曲线几乎贴着数据。

多个高斯按权重加起来,就是高斯混合模型

p(x∣π,μ,Σ)=∑k=1KπkN(x∣μk,Σk)(12-7)p(\boldsymbol x\mid\boldsymbol\pi,\boldsymbol\mu,\boldsymbol\Sigma)=\sum_{k=1}^{K}\pi_kN(\boldsymbol x\mid\boldsymbol\mu_k,\boldsymbol\Sigma_k)\tag{12-7}p(x∣π,μ,Σ)=k=1∑KπkN(x∣μk,Σk)(12-7)

每个 N(μk,Σk)N(\boldsymbol\mu_k,\boldsymbol\Sigma_k)N(μk,Σk) 是一个分量,πk\pi_kπk 是混合系数,满足

∑k=1Kπk=1,πk≥0(12-8)\sum_{k=1}^{K}\pi_k=1,\qquad \pi_k\geq0\tag{12-8}k=1∑Kπk=1,πk≥0(12-8)

这条约束保证加权和还是密度函数。混合系数是各分量占的比例,一堆水果里三类各占多少,一个班里几个专业各占多少。

图15 是一条一维的三分量混合。三条细线是三个高斯分量,各自一个峰;粗线是加权和,左边一个峰,右边一个更高的峰,中间那段鼓起来的地方是两个分量叠出来的。这样一条粗线,用单个高斯去拟合是盖不住的。

写成生成过程更好理解。取 1 到 KKK 的离散随机变量 zzz,表示这个样本由哪个分量生成;先按混合系数抽分量,再从抽中的分量里抽样本

p(x,z)=p(z)p(x∣z)=πzN(x∣μz,Σz)(12-9)p(\boldsymbol x,z)=p(z)p(\boldsymbol x\mid z)=\pi_zN(\boldsymbol x\mid\boldsymbol\mu_z,\boldsymbol\Sigma_z)\tag{12-9}p(x,z)=p(z)p(x∣z)=πzN(x∣μz,Σz)(12-9)

zzz 叫隐变量,它不可观测,拿到一个样本只看到特征,看不到它来自哪个分量。

聚类要问的正是这个不可观测量:给定 x\boldsymbol xx,它来自第 kkk 个分量的概率是多少。贝叶斯公式

γk≡p(z=k∣x)=πkN(x∣μk,Σk)∑j=1KπjN(x∣μj,Σj)(12-10)\gamma_k\equiv p(z=k\mid\boldsymbol x)=\dfrac{\pi_kN(\boldsymbol x\mid\boldsymbol\mu_k,\boldsymbol\Sigma_k)}{\sum_{j=1}^{K}\pi_jN(\boldsymbol x\mid\boldsymbol\mu_j,\boldsymbol\Sigma_j)}\tag{12-10}γk≡p(z=k∣x)=∑j=1KπjN(x∣μj,Σj)πkN(x∣μk,Σk)(12-10)

这个后验概率叫归属度,是软聚类的输出。它的用处有两种读法:取最大的那个分量,就退化成硬聚类,跟 K 均值一样给一个确定归属;保留整组分母归一的概率,后续统计就可以按权重算,一个样本同时对几类都有贡献。

硬聚类与软聚类的关系也就清楚了:K 均值的分配变量取 0 或 1,归属度取 0 到 1 之间的数,前者是后者的极端情形。

剩下的问题是参数怎么估。单个高斯取对数后是二次型,求导有闭式解;混合模型里对数套着求和,log⁡∑kπkN\log\sum_k\pi_kNlog∑kπkN 求导之后参数在分子分母里纠缠,闭式解没有了。

办法是把归属度当已知。归属度给定,每个样本对每个分量的贡献有了权重,均值变成加权平均,协方差变成加权协方差,形式与单个高斯一样。归属度又依赖参数,两者互为条件,只能交替更新。这条循环就是下一讲的 EM。

相关推荐
sbjdhjd10 小时前
从黑板事实到长链路剪枝:AI 渗透测试 Agent 的实验、失效与改造
人工智能·网络安全·数据挖掘·php·agent·剪枝·1024程序员节
Young Doro19 小时前
独立性检测学习任务
人工智能·学习·数据挖掘
Yula99331 天前
从“撰写耗时”到“认知卸载”:企业邮件AI的效率边界与工程化路径
人工智能·神经网络·机器学习·数据挖掘·系统安全·信息与通信
北京中科新远科技2 天前
高速光链路健康检查实战:DOM、FEC、误码与压力回归
人工智能·数据挖掘·回归
residual_fan2 天前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
数说故事2 天前
自由获取全网高质量数据,随时随地进行大数据分析
数据挖掘·数据分析
硅谷秋水2 天前
VLMeg:把 VLM 从奖励回归器变成成功检测器
人工智能·机器学习·语言模型·数据挖掘·机器人
lzhdim3 天前
AI的分类
人工智能·算法·机器学习·分类·数据挖掘
Data-Miner3 天前
人工智能怎么做数据分析?从准备到出报告的实操指南
人工智能·数据挖掘·数据分析