从零开始学AI——10

34 阅读29分钟

前言

学习的时候脑子抽了把内积和距离混淆了一段时间,希望都改过来了吧

第十章

本章我们要讨论两个核心内容降维度量学习

对于降维,其核心思想是将高维稀疏的样本空间映射到维度更低但更稠密的样本空间中。这种方法的主要目的是为了解决维度灾难问题,即在高维空间中数据点之间的距离计算、模型训练等任务会变得极其困难(我们之前在核方法中已经接触过类似的概念)。

对于度量学习,其动机在于传统的闵氏距离可能过于僵硬,无法适应不同数据分布或任务需求。因此,我们可以通过数据驱动的方式学习一个更合适当前数据的距离度量,使得相似样本之间的距离更小,不相似样本之间的距离更大,从而提升后续机器学习任务的性能。

10.1 K近邻学习与MDS降维

我们先介绍k近邻(KNN)算法,其核心思想是基于一个基本假设:相似特征的样本在样本空间中会彼此靠近。因此,对于任何一个样本,我们可以通过它在特征空间中最近的kk个邻居(即距离最近的kk个样本)来预测该样本的类别标签(分类任务)或目标值(回归任务)。

需要特别强调的是,KNN和传统算法不同,它是一种惰性学习算法:在训练阶段仅仅存储训练数据,不会构建显式的模型函数。所有的计算(包括距离计算和预测)都推迟到预测阶段才进行。

关于KNN的计算步骤(以新数据点xq\mathbf{x}_{q}为例):

  • 参数选择:首先需要确定kk值,这个参数控制着需要考虑的最近邻数量。kk值过小会导致模型对噪声敏感,kk值过大会使模型过于平滑。
  • 距离计算:计算xq\mathbf{x}_{q}与所有训练样本xi\mathbf{x}_{i}之间的距离dist(xq,xi)dist(\mathbf{x}_{q},\mathbf{x}_{i})
  • 邻居选择:将所有距离计算结果排序,选择距离最小的kk个样本。
    • 分类任务:统计这kk个近邻的类别标签,采用多数表决原则确定xq\mathbf{x}_q的预测类别。若出现平票情况,可随机选择或采用其他打破平局的策略。
    • 回归任务:计算这kk个近邻目标值的算术平均加权平均作为xq\mathbf{x}_q的预测值。

需要特别注意的是,KNN虽然简单直观,但存在一个严重缺陷。在高维特征空间中:

  1. 距离计算的计算量会急剧增加
  2. 样本在空间中的分布会变得极其稀疏
  3. 原本"相近"的样本在高维空间中可能不再接近,这直接破坏了KNN的基本假设

这里的"稀疏"指样本点之间的距离过大,与特征向量中零分量的"稀疏性"完全不同,不要搞混

这种现象被称为维度灾难,是机器学习中普遍存在的难题。一个可行的解决方案降维,其合理性基于:

  • 高维数据通常包含大量冗余信息,特征间存在相关性
  • 真正有用的特征往往存在于低维子空间

多维度缩放就是一种降维方法(又称MDS),其思想是:降维后的低维表示必须保持原始空间中的样本距离关系(即进行保距离的线性变换)。 设mm个样本在dd维样本空间Rd\mathbb{R}^{d}的距离矩阵为DRm×m\mathbf{D} \in \mathbb{R}^{m\times m},其中Dij\mathbf{D}_{ij}表示样本xi\mathbf{x}_{i}xj\mathbf{x}_{j}之间的欧氏距离,即Dij=xixj\mathbf{D}_{ij} = ||\mathbf{x}_{i} - \mathbf{x}_{j}||。现在我们需要在更低维度dd'的空间Rd\mathbb{R}^{d'}中寻找mm个向量z1,,zm\mathbf{z}_{1}, \dots, \mathbf{z}_{m},使得这些向量之间的距离与原始距离矩阵完全一致,即满足zizj=Dij||\mathbf{z}_{i} - \mathbf{z}_{j}|| = \mathbf{D}_{ij}对所有i,ji,j成立。

为了便于计算,我们将这些向量按列排列成矩阵ZRd×m\mathbf{Z} \in \mathbb{R}^{d' \times m},其中第ii列对应向量zi\mathbf{z}_{i}。此时,向量间的内积关系可以通过内积矩阵BZTZ\mathbf{B} \coloneqq \mathbf{Z}^{T}\mathbf{Z}来描述,该矩阵的元素满足Bij=ziTzj\mathbf{B}_{ij} = \mathbf{z}_{i}^{T}\mathbf{z}_{j}。根据欧氏距离与内积的关系,可以将距离平方Dij2\mathbf{D}_{ij}^{2}展开为:

Dij2=zizj2=(zizj)T(zizj)=ziTzi+zjTzj2ziTzj\mathbf{D}_{ij}^{2} = ||\mathbf{z}_{i} - \mathbf{z}_{j}||^{2} = (\mathbf{z}_{i} - \mathbf{z}_{j})^{T}(\mathbf{z}_{i} - \mathbf{z}_{j}) = \mathbf{z}_{i}^{T}\mathbf{z}_{i} + \mathbf{z}_{j}^{T}\mathbf{z}_{j} - 2\mathbf{z}_{i}^{T}\mathbf{z}_{j}

通过内积矩阵B\mathbf{B}的项可进一步表示为

Dij2=Bii+Bjj2Bij\mathbf{D}_{ij}^{2} = \mathbf{B}_{ii} + \mathbf{B}_{jj} - 2\mathbf{B}_{ij}

样本之间的距离不会随着坐标系原点的选取而改变,因此为了后续计算方便,这里选取原点为Rd\mathbb{R}^{d'}中所有低维向量的中心点,即满足i=1mzi=0\sum_{i=1}^{m}\mathbf{z}_{i}=0。在此条件下,我们可以通过距离矩阵D\mathbf{D}来推导出内积矩阵B\mathbf{B}的元素。具体步骤如下:

  • D\mathbf{D}求行和,得到k=1mDik2=k=1mBii+k=1mBkk2ziTk=1mzk\sum_{k=1}^{m}D^{2}_{ik} = \sum_{k=1}^{m}\mathbf{B}_{ii}+\sum_{k=1}^{m}\mathbf{B}_{kk}-2\mathbf{z}^{T}_{i}\sum_{k=1}^{m}\mathbf{z}_{k}。由于原点被选为中心点,即k=1mzk=0\sum_{k=1}^{m}\mathbf{z}_{k}=0,因此该式简化为mBii+Tr(B)m\mathbf{B}_{ii}+\mathrm{Tr}(\mathbf{B})
  • D\mathbf{D}求列和,得到k=1mDkj2=mBjj+Tr(B)\sum_{k=1}^{m}D^{2}_{kj}=m\mathbf{B}_{jj}+\mathrm{Tr}(\mathbf{B})
  • D\mathbf{D}的所有元素求和,得到ijDij2=i=1m(mBii+Tr(B))=2mTr(B)\sum_{ij}\mathbf{D}^{2}_{ij}=\sum_{i=1}^{m}(m\mathbf{B}_{ii}+\mathrm{Tr}(\mathbf{B}))=2m\mathrm{Tr}(\mathbf{B})。 其中,Tr(B)i=1mBii\mathrm{Tr}(\mathbf{B})\coloneqq \sum_{i=1}^{m}\mathbf{B}_{ii}被称为矩阵的迹(trace),它表示矩阵对角线元素的总和。

在求行和时,我们利用了条件2ziTk=1mzk=02\mathbf{z}^{T}_{i}\sum_{k=1}^{m}\mathbf{z}_{k}=0。这个条件等价于j=1mBij=0\sum_{j=1}^{m}\mathbf{B}_{ij}=0,这与书中提到的bijb_{ij}行列求和均为零的性质相对应。

现在,我们通过代数运算来用D\mathbf{D}表示B\mathbf{B}。我们的目标是推导出Bij\mathbf{B}_{ij}的表达式。首先,从第三个求和式中可以得到B\mathbf{B}的迹:

Tr(B)=12mi=1mj=1mDij2\mathrm{Tr}(\mathbf{B}) = \frac{1}{2m} \sum_{i=1}^{m} \sum_{j=1}^{m} \mathbf{D}_{ij}^{2}

接着,我们将这个迹的表达式分别代入前面两个关于行和与列和的式子,从而得到Bii\mathbf{B}_{ii}Bjj\mathbf{B}_{jj}的表达式:

Bii=1mk=1mDik212m2k=1ml=1mDkl2Bjj=1mk=1mDkj212m2k=1ml=1mDkl2\begin{align} \mathbf{B}_{ii} & = \frac{1}{m} \sum_{k=1}^{m} \mathbf{D}_{ik}^{2} - \frac{1}{2m^2} \sum_{k=1}^{m} \sum_{l=1}^{m} \mathbf{D}_{kl}^{2} \\ \mathbf{B}_{jj} & = \frac{1}{m} \sum_{k=1}^{m} \mathbf{D}_{kj}^{2} - \frac{1}{2m^2} \sum_{k=1}^{m} \sum_{l=1}^{m} \mathbf{D}_{kl}^{2} \end{align}

最后,将得到的Bii\mathbf{B}_{ii}Bjj\mathbf{B}_{jj}代回原始的距离平方公式Dij2=Bii+Bjj2Bij\mathbf{D}_{ij}^{2}=\mathbf{B}_{ii}+\mathbf{B}_{jj}-2\mathbf{B}_{ij},经过整理即可解出Bij\mathbf{B}_{ij}的表达式:

Bij=12(Dij21mk=1mDik21mk=1mDkj2+1m2k=1ml=1mDkl2)\mathbf{B}_{ij} = -\frac{1}{2} \left( \mathbf{D}_{ij}^{2} - \frac{1}{m} \sum_{k=1}^{m} \mathbf{D}_{ik}^{2} - \frac{1}{m} \sum_{k=1}^{m} \mathbf{D}_{kj}^{2} + \frac{1}{m^2} \sum_{k=1}^{m} \sum_{l=1}^{m} \mathbf{D}_{kl}^{2} \right)

在通过D\mathbf{D}得到B\mathbf{B}之后,接下来我们需要从B\mathbf{B}中找出对应的Z\mathbf{Z}。这一过程将通过对B\mathbf{B}进行特征值分解来实现。

根据定义B=ZTZ\mathbf{B} = \mathbf{Z}^T \mathbf{Z},矩阵B\mathbf{B}具有以下性质:

  • 对称性BT=(ZTZ)T=ZTZ=B\mathbf{B}^{T} = (\mathbf{Z}^T \mathbf{Z})^{T}=\mathbf{Z}^T \mathbf{Z}=\mathbf{B}。这表明 B\mathbf{B} 是一个对称矩阵。
  • 半正定:对于任意非零向量 vRm\mathbf{v} \in \mathbb{R}^mvTBv=vTZTZv=(Zv)T(Zv)=Zv20\mathbf{v}^T \mathbf{B} \mathbf{v} = \mathbf{v}^T \mathbf{Z}^T \mathbf{Z} \mathbf{v} = (\mathbf{Z} \mathbf{v})^T (\mathbf{Z} \mathbf{v}) = ||\mathbf{Z} \mathbf{v}||^2 \ge 0。这意味着 B\mathbf{B} 的所有特征值都是非负的。

由于B\mathbf{B}的对称性,我们可以对其进行特征值分解,得到 B=VΛVT\mathbf{B} = \mathbf{V} \mathbf{\Lambda} \mathbf{V}^T,其中:

  • Λ\mathbf{\Lambda} 是一个 m×mm \times m对角矩阵,其对角线元素是 B\mathbf{B} 的特征值 λ1,λ2,,λm\lambda_1, \lambda_2, \ldots, \lambda_m
  • V\mathbf{V} 是一个 m×mm \times m正交矩阵,其列是对应的特征向量 v1,v2,,vm\mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_m。由于是正交矩阵,满足 VTV=I\mathbf{V}^T \mathbf{V} = \mathbf{I},其中 I\mathbf{I} 是单位矩阵。

进一步,我们可以将 B\mathbf{B} 重新表示为 B=(Λ1/2VT)T(Λ1/2VT)\mathbf{B} = (\mathbf{\Lambda}^{1/2} \mathbf{V}^T)^T (\mathbf{\Lambda}^{1/2} \mathbf{V}^T)。将其与 B\mathbf{B} 的定义 B=ZTZ\mathbf{B} = \mathbf{Z}^T \mathbf{Z} 进行比较,我们最终得到:

Z=Λ1/2VT\mathbf{Z} = \mathbf{\Lambda}^{1/2} \mathbf{V}^T

这就是我们希望得到的低维向量矩阵 Z\mathbf{Z}。这表明,MDS的求解结果是一个解析解,可以直接通过公式计算得到。然而,在实际应用中,我们通常不会严格要求样本在两个空间中的距离完全相等。在这种情况下,我们可以从大到小选取 ddd^{*} \leq d 个特征值及其对应的特征向量,此时 Z\mathbf{Z} 可以表示为:

Z=(Λ)1/2(V)T\mathbf{Z} = (\boldsymbol{\Lambda}^{*})^{1/2}(\mathbf{V}^{*})^{T}

特征值越大,表示数据在该方向上的分布越分散,因此该方向对数据结构的贡献也越重要。在实际应用中,通常会去除特征值00的方向,因为这些方向上的数据完全不分散,对数据结构的贡献可以忽略不计,所以书中直接去除了

最后,降维方法通常可以分为线性降维非线性降维两大类:

  • 线性降维:通过线性变换将数据从高维空间映射到低维空间,其映射关系可以表示为Z=WTX\mathbf{Z}=\mathbf{W}^{T}\mathbf{X}其中X\mathbf{X}是原始高维数据,W\mathbf{W}是变换矩阵,Z\mathbf{Z}是降维后的数据。MDS就属于这一类。
  • 非线性降维:采用非线性变换的方式实现降维,这种方法能够捕捉数据中更复杂的结构关系。 接下来我们将分别详细介绍这两种降维方法中的代表性算法。

10.2 PCA主成分分析

主成分分析(PCA)是一种无监督的线性降维方法。在降维过程中,我们需要确保降维前后保留尽可能多的重要信息。例如,之前提到的多维缩放(MDS)方法就是通过保留样本之间的距离信息来实现这一目标的。对于PCA,有两种不同的思想可以推导出相同的结果:

  1. 最近重构性:这种思想关注的是降维后数据的重建误差。具体来说,我们将降维后的数据点通过逆变换重新映射回原始空间,希望重建后的点与原始数据点尽可能接近。如果重建误差越小,说明降维过程中丢失的信息越少,而那些被丢弃的维度通常对应着不重要的信息。换句话说,PCA会选择那些能够最小化重建误差的投影方向。

  2. 最大可分性:这种思想强调的是降维后数据的方差最大化。我们希望降维后的数据点在新的低维空间中尽可能分散开,因为数据点越分散,说明不同样本之间的区分度越高,保留的信息也就越重要。相反,那些在降维过程中被舍弃的方向,通常对应着数据分布中方差较小、较为聚集的部分。

沿用上一节的变量定义,并且假设原始空间中的样本数据x\mathbf{x}已经进行了中心化处理,即满足i=1mxi=0\sum_{i=1}^{m}\mathbf{x}_{i}=0。下面我们从两个不同的角度来分析这个问题,看看最终得到的结果是否一致。

从最大可分性的角度分析 我们希望找到一个线性变换矩阵W\mathbf{W},使得样本数据经过投影变换z=WTx\mathbf{z}=\mathbf{W}^{T}\mathbf{x}后,投影结果的方差达到最大。这里我们忽略常数项,投影后数据的协方差矩阵可以表示为:

C(z)=i=1m(zizˉ)(zizˉ)TC(\mathbf{z})=\sum_{i=1}^{m} (\mathbf{z}_{i}-\bar{\mathbf{z}})(\mathbf{z}_{i}-\mathbf{\bar{z}})^{T}

其中zˉ\bar{\mathbf{z}}表示投影后样本的均值向量。由于原始数据已经中心化,我们可以推导出:

zˉ=1mi=1mzi=1mi=1mWTxi=1mWTi=1mxi=0\bar{\mathbf{z}}=\frac{1}{m}\sum_{i=1}^{m}\mathbf{z}_{i}=\frac{1}{m}\sum_{i=1}^{m}\mathbf{W}^{T}\mathbf{x}_{i}=\frac{1}{m}\mathbf{W}^{T}\sum_{i=1}^{m}\mathbf{x}_{i}=0

因此,协方差矩阵的表达式可以简化为:

C(z)=i=1mziziT=i=1m(WTxixiTW)\begin{align} C(\mathbf{z}) & =\sum_{i=1}^{m} \mathbf{z}_{i}\mathbf{z}^{T}_{i} \\ & =\sum_{i=1}^{m} (\mathbf{W}^{T}\mathbf{x}_{i}\mathbf{x}^{T}_{i}\mathbf{W}) \end{align}

接下来,我们将样本空间中的所有样本按列向量排列组成样本矩阵X\mathbf{X}。由于协方差矩阵的对角线元素之和(即迹)就代表了各个维度的方差之和,因此我们的优化目标可以表示为:

maxWTr(WTXXTW)\max_{\mathbf{W}} \mathrm{Tr}(\mathbf{W}^{T}\mathbf{X}\mathbf{X}^{T}\mathbf{W})

这里需要特别说明的是,XXT\mathbf{X}\mathbf{X}^{T}实际上构成了一个d×dd\times d的方阵S\mathbf{S}。因此,原始优化目标可以进一步转化为:

maxWTr(WTSW)\max_{\mathbf{W}}\mathrm{Tr}(\mathbf{W}^{T}\mathbf{S}\mathbf{W})

回顾第3.3节中关于线性判别分析(LDA)的讨论,我们发现这是一个已经解决过的问题。在求解过程中,我们使用了Rayleigh quotient问题的解法。

和LDA一样,在具体求解时,通常会引入约束条件WTW=Id\mathbf{W}^{T}\mathbf{W}=\mathbf{I}_{d'}(dd'维单位矩阵)来保证有解。

从重构性的角度分析 经过线性变换可以得到:

Z=WTX\mathbf{Z} = \mathbf{W}^{T}\mathbf{X}

现在我们希望通过一种变换将Z\mathbf{Z}重新映射回Rd×d\mathbb{R}^{d\times d}空间(即进行重构)。最直接的想法是使用W\mathbf{W}作为重构矩阵,此时重构后的数据可以表示为:

X^=WWTX\hat{\mathbf{X}} =\mathbf{W}\mathbf{W}^{T}\mathbf{X}

为了衡量重构的效果,我们可以计算重构误差,其表达式为:

i=1mxix^i2=i=1m(WWTI)xi2=i=1mxiT((WWT)22WWT+I)xi\begin{align} \sum_{i=1}^{m} \|\mathbf{x}_i - \hat{\mathbf{x}}_i\|^2 & = \sum_{i=1}^{m} \|(\mathbf{W}\mathbf{W}^{T}-\mathbf{I})\mathbf{x}_{i}\|^{2} \\ & =\sum_{i=1}^{m} \mathbf{x}_{i}^{T}((\mathbf{W}\mathbf{W}^{T})^{2}-2\mathbf{W}\mathbf{W}^{T}+\mathbf{I})\mathbf{x}_{i} \\ \end{align}

在继续推导之前,我们需要对矩阵W\mathbf{W}的性质进行说明。这里假设W\mathbf{W}是一个正交矩阵(即满足WTW=Id\mathbf{W}^{T}\mathbf{W}=\mathbf{I}_{d'})。需要特别注意的是,WT\mathbf{W}^{T}的作用是将dd维的样本投影到dd'维空间,因此W\mathbf{W}的维度是d×dd \times d'。而误差表达式中的单位矩阵I\mathbf{I}的维度与原始样本空间一致是d×dd \times d的方阵。

基于这个性质,我们可以简化误差表达式中的第一项:

WWTWWT=WWT\mathbf{W}\mathbf{W}^{T}\mathbf{W}\mathbf{W}^{T}=\mathbf{W}\mathbf{W}^{T}

于是误差表达式可以简化为:

i=1mxiT(IWWT)xi\sum_{i=1}^{m} \mathbf{x}_{i}^{T}(\mathbf{I}-\mathbf{W}\mathbf{W}^{T})\mathbf{x}_{i}

接下来,我们利用迹(trace)的性质来进一步简化表达式。具体来说,对于任意向量a\mathbf{a}和矩阵B\mathbf{B},有:

aTBa=Tr(aTBa)=Tr(BaaT)\mathbf{a}^{T}\mathbf{B}\mathbf{a}=\mathrm{Tr}(\mathbf{a}^{T}\mathbf{B}\mathbf{a})=\mathrm{Tr}(\mathbf{B}\mathbf{a}\mathbf{a}^{T})

应用这个性质,误差表达式可以改写为:

=i=1mTr((IWWT)xixiT)=Tr((IWWT)i=1mxixiT)=Tr(i=1mxixiT)Tr(WWTi=1mxixiT)\begin{align} & =\sum_{i=1}^{m} \mathrm{Tr}((\mathbf{I}-\mathbf{W}\mathbf{W}^{T})\mathbf{x}_{i}\mathbf{x}_{i}^{T}) \\ & = \mathrm{Tr}\left( (\mathbf{I} - \mathbf{W}\mathbf{W}^{T})\sum_{i=1}^{m} \mathbf{x}_{i}\mathbf{x}_{i}^{T} \right) \\ & =\mathrm{Tr}\left( \sum_{i=1}^{m} \mathbf{x}_{i}\mathbf{x}_{i}^{T} \right)-\mathrm{Tr}\left( \mathbf{W}\mathbf{W}^{T}\sum_{i=1}^{m} \mathbf{x}_{i}\mathbf{x}_{i}^{T} \right) \end{align}

可以看到,在这个表达式中,只有第二项与矩阵W\mathbf{W}相关。因此,最小化重构误差等价于最大化第二项。于是优化目标可以转化为:

maxWTr(WTXXTW),s.t.WTW=Id\max_{\mathbf{W}}\mathrm{Tr}(\mathbf{W}^{T}\mathbf{X}\mathbf{X}^{T}\mathbf{W}), \quad s.t. \quad \mathbf{W}^{T}\mathbf{W}=\mathbf{I}_{d'}

这里最后一步使用了迹的交换性质Tr(AB)=Tr(BA)\mathrm{Tr}(AB)=\mathrm{Tr}(BA)。经过推导我们可以确认,两种思想是完全等价的。 回顾线性判别分析(LDA)的相关知识,解析解实际上就是对样本协方差矩阵XXT\mathbf{X}\mathbf{X}^{T}进行特征分解。具体来说,我们需要:

  1. 计算协方差矩阵的所有特征值,并按照从大到小的顺序进行排序
  2. 选择前dd'个最大的特征值及其对应的特征向量
  3. 这些选出的特征向量就构成了主成分分析(PCA)的解

之所以称为主成分分析,是因为这个方法只保留数据变异最大(对应特征值最大)的几个方向,这些方向包含了数据最主要的特征信息。

在实际应用中,确定dd'的取值通常有以下几种常见做法:

  • 直接指定法:根据领域知识或经验预先设定一个固定的dd'
  • 交叉验证法:使用计算效率较高的学习算法(如KNN),通过交叉验证来评估不同dd'值的效果,选择性能最优的
  • 阈值法:设定一个阈值tt,选择满足i=1dλii=1dλit\frac{\sum_{i=1}^{d'}\lambda_{i}}{\sum_{i=1}^{d}\lambda_{i}}\geq t的最小dd'值,其中λi\lambda_i表示第ii个特征值,这个比值反映了所选主成分保留的原始数据方差比例

10.3 核化线性降维

虽然这个方法的名字中带有"线性降维",但核化线性降维实际上是一种非线性降维方法。这里使用的"核"与我们在核方法中熟悉的核是同一个概念(可以回顾6.5节的内容)。在实际问题中,样本数据内在的分布规律往往不是线性的,如果直接使用线性降维方法,通常会导致效果不佳。

为了解决这个问题,核方法提供了一种有效的解决方案:通过核函数将原始样本空间映射到一个更高维的特征空间。在这个高维空间中,原本非线性可分的数据往往会变得线性可分。这样一来,我们就可以在高维特征空间中使用线性降维方法来处理这些数据了。

注意到在PCA方法中,所有样本都是以内积形式出现的,这提示我们可以考虑使用核PCA方法来扩展传统PCA。在核PCA中,PCA的核心计算部分保持不变,我们主要关注如何引入核方法。

首先需要选择一个合适的核函数κ(,)\kappa(\cdot,\cdot)。通过核函数,我们可以计算出核矩阵K\mathbf{K},其中每个元素定义为: Kij=κ(xi,xj)=ϕ(xi)Tϕ(xj)\mathbf{K}_{ij} = \kappa(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j) 这里ϕ\phi表示将原始数据从输入空间映射到某个高维特征空间的函数,我们并不需要知道ϕ\phi的具体表达式。

在PCA处理过程中,对于映射后的特征向量ϕ(xi)\phi(\mathbf{x}_{i}),我们需要确保它们是中心化的,即满足i=1mϕ(xi)=0\sum_{i=1}^{m}\phi(\mathbf{x}_{i})=0。由于我们无法直接操作映射函数ϕ\phi本身,因此采用了一种等效的变换方法:定义一个新的映射函数ϕ~(x)\tilde{\phi}(\mathbf{x}),其表达式为ϕ~(x)=ϕ(x)ϕˉ\tilde{\phi}(\mathbf{x})=\phi(\mathbf{x})-\bar{\phi},其中ϕˉ=1mi=1mϕ(xi)\bar{\phi}=\frac{1}{m}\sum_{i=1}^{m}\phi(\mathbf{x}_{i})表示所有样本映射后的均值。通过这种变换,可以保证变换后的ϕ~(x)\tilde{\phi}(\mathbf{x})满足中心化条件。

相应地,核矩阵也需要进行调整。调整后的核矩阵K~\tilde{\mathbf{K}}的每个元素定义为:

K~ij=(ϕ(xi)ϕˉ)T(ϕ(xj)ϕˉ)\tilde{\mathbf{K}}_{ij}=(\phi(\mathbf{x}_i) - \bar{\phi})^T (\phi(\mathbf{x}_j) - \bar{\phi})

将这个定义展开并写成矩阵形式,可以得到:

K~=K1m1mK1mK1m+1m21mK1m\tilde{\mathbf{K}} = \mathbf{K} - \frac{1}{m}\mathbf{1}_m \mathbf{K} - \frac{1}{m}\mathbf{K} \mathbf{1}_m + \frac{1}{m^2}\mathbf{1}_m \mathbf{K} \mathbf{1}_m

这里1m\mathbf{1}_m表示一个m×mm \times m的方阵,其所有元素均为11。最终,我们使用这个调整后的核矩阵K~\tilde{\mathbf{K}}作为后续计算的基础。

然后,主成分分析求解的是协方差矩阵 XXT\mathbf{X}\mathbf{X}^{T} 的特征值问题。在核主成分分析(kPCA)中,我们需要求解的是协方差矩阵 Sϕ\mathbf{S}_\phi 的特征值问题,其中 Sϕ\mathbf{S}_\phi 的定义为:

Sϕ=i=1m(ϕ(xi)ϕˉ)(ϕ(xi)ϕˉ)T=i=1mϕ~(xi)ϕ~(xi)T,\mathbf{S}_\phi = \sum_{i=1}^m (\phi(\mathbf{x}_i) - \bar{\phi}) (\phi(\mathbf{x}_i) - \bar{\phi})^T = \sum_{i=1}^m \tilde{\phi}(\mathbf{x}_i) \tilde{\phi}(\mathbf{x}_i)^T,

接下来,我们比较 Sϕ\mathbf{S}_\phi 和中心化的核矩阵 K~\tilde{\mathbf{K}} 的关系。可以发现,K~\tilde{\mathbf{K}} 实际上是 Sϕ\mathbf{S}_\phi 的转置,即:

K~=SϕT.\tilde{\mathbf{K}} = \mathbf{S}_{\phi}^{T}.

由于矩阵 Sϕ\mathbf{S}_\phiK~\tilde{\mathbf{K}} 互为转置矩阵,它们的特征值完全相同。基于这一性质,KPCA的求解可以转化为对中心化核矩阵 K~\tilde{\mathbf{K}} 的特征值分解问题。具体表现为以下特征方程:

K~αk=λkαk\tilde{\mathbf{K}}\boldsymbol{\alpha}_{k}=\lambda_{k}\boldsymbol{\alpha}_{k}

在求解过程中,我们需要将所有特征值 λk\lambda_k 及其对应的特征向量 αk\boldsymbol{\alpha}_k 按照特征值从大到小的顺序排列。然后选取前 dd' 个最大特征值对应的特征向量作为主成分方向。按照惯例,这些特征向量 αk\boldsymbol{\alpha}_k 要进行归一化处理,即满足 αk=1\|\boldsymbol{\alpha}_k\|=1 的条件。

不过需要明确的是,这里的 αk\boldsymbol{\alpha}_{k} 并不是高维特征空间 H\mathcal{H} 中的主成分特征向量。对于原始的高维特征空间,其特征向量 vk\mathbf{v}_k 满足以下特征方程: Sϕvk=λkvk\mathbf{S}_\phi \mathbf{v}_k = \lambda_{k} \mathbf{v}_k 通过推导可以证明,在高维特征空间中,特征向量 vk\mathbf{v}_k 实际上可以表示为所有样本在特征空间中中心化后的映射结果 ϕ~(xj)\tilde{\phi}(\mathbf{x}_j) 的线性组合,并且这个线性组合的系数恰好就是中心化核矩阵 K~\mathbf{\tilde{K}}特征向量 αk\boldsymbol{\alpha}_{k} 的各个分量。具体表达式如下:

vk=j=1mαjkϕ~(xj)=j=1mαjk(ϕ(xj)ϕˉ)\mathbf{v}_k = \sum_{j=1}^m \alpha_{jk} \tilde{\phi}(\mathbf{x}_j) = \sum_{j=1}^m \alpha_{jk} \left(\phi(\mathbf{x}_j) - \bar{\phi}\right)

其中,αjk\alpha_{jk} 表示向量 αk\boldsymbol{\alpha}_{k} 的第 jj 个分量

这个结论的证明过程并不困难。首先,我们根据 Sϕ\mathbf{S}_\phi 的定义:

Sϕ=i=1mϕ~(xi)ϕ~(xi)T\mathbf{S}_\phi = \sum_{i=1}^m \tilde{\phi}(\mathbf{x}_i) \tilde{\phi}(\mathbf{x}_i)^T

然后,将特征向量 vk\mathbf{v}_{k} 表示为 ϕ~(xi)\tilde{\phi}(\mathbf{x}_i) 的线性组合形式:

vk=i=1mαikϕ~(xi)\mathbf{v}_k = \sum_{i=1}^m \alpha_{ik} \tilde{\phi}(\mathbf{x}_i)

其中 αik\alpha_{ik} 是待定系数。将这两个表达式代入特征值方程 Sϕvk=λkvk\mathbf{S}_\phi \mathbf{v}_k = \lambda_k \mathbf{v}_k 的两边,并利用核函数的定义进行展开和化简,最终可以得到 αik\alpha_{ik} 确实是 K~\mathbf{\tilde{K}} 的特征向量的分量。由于推导过程较为直接但是繁琐,这里就不详细展开了。

在PCA中,我们需要确保主成分对应的特征向量是归一化的。为了实现vk=1\|\mathbf{v}_{k}\|=1这一条件,我们进行如下推导:

首先计算vk\mathbf{v}_k的范数平方:

vk2=(i=1mαikϕ~(xi))T(j=1mαjkϕ~(xj))=i=1mj=1mαikαjkK~ij=i=1mαik(j=1mK~ijαjk)=i=1mαik(λkαik)=λkαk2\begin{align} ||\mathbf{v}_k||^2 & = \left( \sum_{i=1}^m \alpha_{ik} \tilde{\phi}(\mathbf{x}_i) \right)^T \left( \sum_{j=1}^m \alpha_{jk} \tilde{\phi}(\mathbf{x}_j) \right) \\ & =\sum_{i=1}^m \sum_{j=1}^m \alpha_{ik} \alpha_{jk} \tilde{K}_{ij} \\ & = \sum_{i=1}^m \alpha_{ik} \left( \sum_{j=1}^m \tilde{K}_{ij} \alpha_{jk} \right) \\ &=\sum_{i=1}^m \alpha_{ik} (\lambda_k \alpha_{ik}) \\ & =\lambda_k ||\boldsymbol{\alpha}_k||^2 \end{align}

这里需要注意,由于我们之前已经要求αk\boldsymbol{\alpha}_{k}是归一化的(即αk2=1||\boldsymbol{\alpha}_k||^2=1),因此要使vk\mathbf{v}_{k}归一化,只需要将其除以λk\sqrt{ \lambda_{k}}。为了后续计算方便,我们重新定义归一化后的系数αk=αkλk\boldsymbol{\alpha}'_k = \frac{\boldsymbol{\alpha}_k}{\sqrt{\lambda_k}},这样对应的特征向量vk=j=1mαjkϕ~(xj)\mathbf{v}'_k = \sum_{j=1}^m \alpha'_{jk} \tilde{\phi}(\mathbf{x}_j)就满足归一化条件了。

通过上述方法,我们可以绕过显式计算ϕ\phi来进行一些运算。具体来说,原始数据xi\mathbf{x}_{i}在第kk个主成分上的投影zikz_{ik}可以表示为:

zik=(vk)T(ϕ(xi)ϕˉ)=(j=1mαjk(ϕ(xj)ϕˉ))T(ϕ(xi)ϕˉ)=j=1mαjk(ϕ(xj)ϕˉ)T(ϕ(xi)ϕˉ)=j=1mαjkK~ji\begin{align} z_{ik} & = (\mathbf{v}'_k)^T (\phi(\mathbf{x}_i) - \bar{\phi}) \\ & = \left( \sum_{j=1}^m \alpha'_{jk} (\phi(\mathbf{x}_j) - \bar{\phi}) \right)^T (\phi(\mathbf{x}_i) - \bar{\phi}) \\ &= \sum_{j=1}^m \alpha'_{jk} (\phi(\mathbf{x}_j) - \bar{\phi})^T (\phi(\mathbf{x}_i) - \bar{\phi}) \\ &= \sum_{j=1}^m \alpha'_{jk} \tilde{K}_{ji} \end{align}

通过计算所有数据的所有分量,我们就可以得到投影后的样本表示。对于一个新的样本xnew\mathbf{x}_{new},其在第kk个主成分上的投影znew,kz_{new, k}可以通过类似的方式计算:

znew,k=j=1mαjkκ~(xj,xnew)z_{new, k} = \sum_{j=1}^m \alpha'_{jk} \tilde{\kappa}(\mathbf{x}_j, \mathbf{x}_{new})

然而这个计算需要评估新样本与所有原有样本之间的核函数值κ~(xj,xnew)\tilde{\kappa}(\mathbf{x}_j, \mathbf{x}_{new}),因此计算开销会比较大

10.4 流形学习

流形学习是一种非线性降维方法,它与KPCA的主要区别在于:流形学习重点关注样本点之间的局部邻域关系,而KPCA是通过核函数对所有样本点进行全局性的变换处理。在实际应用中,我们经常会遇到这样的情况:虽然数据样本存在于高维观测空间中,但它们实际上是从一个更低维度的弯曲子空间(数学上称为流形)中采样得到的。举个直观的例子:想象一张平整的二维纸张,当它被揉成一团放入三维空间时,就会呈现出复杂的几何形状。假设所有样本点都分布在这张被揉皱的纸上,我们希望通过降维算法能够还原出它原本的二维平面结构,就像把揉皱的纸重新展平一样。

在数学上,流形是基于豪斯多夫拓扑建立起来的一种几何结构。为了帮助理解,这里简要说明流形的几个重要特性:

  1. 局部欧式性:流形中的每一个点及其邻域都可以和某个欧式空间建立同胚映射,这意味着在足够小的邻域内,我们可以找到一个局部坐标系来描述这个区域。比如在地球表面(二维流形)的任何一个点附近,都可以用二维平面地图来近似表示。
  2. 拓扑结构:严格来说,第一条中的"点及邻域"应该用开集来精确描述,这涉及到更深入的拓扑学概念。不过为了便于理解,我们可以暂时忽略这些严格的数学定义。
  3. 距离度量:如果在流形上定义了距离函数(准确的说是定义度规,度规\neq距离函数,一个度规可以自然诱导出一个距离函数),就可以计算点与点之间的距离。在这种情况下,两点之间的最短路径被称为测地线,就像球面上两点之间的最短路径是大圆弧。

基于这些性质,我们的目标是找到一个从高维空间到低维空间的映射函数,使得低维表示z\mathbf{z}能够尽可能保留原始数据的重要几何或拓扑特性。根据保留性质的不同,可以分为保持全局结构保持局部结构两大类方法,接下来我们会分别举例说明。

等度量映射 等度量映射(Isomap)是一种保持全局几何特性的降维方法,其核心目标是保持原始高维空间中样本点之间的测地线距离。由于我们通常无法直接获得样本点之间的真实测地线距离,因此需要采用间接方法来近似估计这个距离。这里的基本假设是:在样本点的局部邻域内,流形结构可以很好地用欧氏空间来近似。基于这个假设,我们可以通过以下方式构建近邻关系:

首先,对于任意两个样本点,如果在局部欧氏空间中它们足够接近(即满足某种邻近条件),我们就认为它们是相连的。这样就能构建一个近邻连接图,其中相连的点称为近邻,不相连的则不是近邻。

在得到这个连接图后,我们就可以计算图中任意两点之间的最短路径距离,用这个距离来近似估计它们之间的测地线距离。最终我们会得到一个距离矩阵DD,这个矩阵包含了所有样本点之间的近似测地线距离。有了这个距离矩阵后,就可以使用MDS算法来找到样本点在低维空间中的投影表示。

具体实现步骤如下:

  1. 构建近邻图:对于每个数据点xi\mathbf{x}_i,可以采用以下两种方法之一来确定其近邻点,并构建一个无向图GG

    • K近邻法:预先设定一个整数kk,将每个点的kk个最近邻(按欧氏距离计算)作为其近邻点。
    • ϵ\epsilon-球法:设定一个距离阈值ϵ\epsilon,将与当前点距离小于ϵ\epsilon的所有点都视为其近邻。这些近邻点之间的边可以赋予权重,通常就用它们之间的欧氏距离作为权重。
  2. 计算图距离:在构建好的近邻图GG上,计算任意两个样本点之间的最短路径距离。这个计算通常使用Dijkstra算法(时间复杂度为O(N2logN+NE)O(N^2 \log N + NE))或Floyd-Warshall算法(时间复杂度为O(N3)O(N^3)),其中NN是样本数量,EE是边数。最终得到一个图距离矩阵DGD_{G}

  3. 应用MDS:将得到的距离矩阵DGD_{G}输入到MDS算法中,计算样本点在低维空间中的投影坐标Z\mathbf{Z}

虽然Isomap算法在概念上比较直观且容易理解,但它也存在一些局限性

  1. 参数敏感性:算法对参数kk(KNN中的近邻数)或ϵ\epsilonϵ\epsilon-球中的半径)的选择非常敏感。如果参数选择不当,可能会导致两种问题:

    • 断路问题:参数过小可能导致图不连通,某些点之间没有路径相连。
    • 短路问题:参数过大可能使原本在流形上相距较远的点被错误地连接起来。
  2. 计算复杂度高:算法的主要计算瓶颈来自两个部分:

    • 最短路径计算:使用Dijkstra算法时为O(N2logN+NE)O(N^2 \log N + NE),使用Floyd-Warshall算法时为O(N3)O(N^3)
    • MDS的特征值分解:时间复杂度为O(N3)O(N^3)。 这使得算法难以应用于大规模数据集。
  3. 拓扑结构限制:由于Isomap旨在保持全局几何结构,因此对于具有复杂拓扑(如存在"洞")的流形,其降维效果可能会受到影响。

  4. 样本外扩展问题:Isomap无法直接处理新的样本点。一个常见的解决方案是:在得到原始样本点的低维投影后,训练一个回归模型(如神经网络)来学习从原始空间到低维空间的映射函数,从而可以对新的样本点进行降维。

局部线性嵌入 与Isomap方法关注全局流形结构不同,局部线性嵌入(Locally Linear Embedding,LLE)方法更注重数据局部几何特性的保持。其基本假设是:在足够小的邻域范围内,每个高维数据点 xi\mathbf{x}_i 都可以通过其邻近点的线性组合来精确重构(或实现误差足够小的近似)。LLE方法认为这种局部线性关系是流形的重要拓扑特性,需要在降维后的低维空间中予以保持。 第一步是选取邻居,依旧采用KNN方法。在这个过程中需要计算所有样本点之间的欧氏距离,从而可以得到样本点xi\mathbf{x}_{i}及其对应的邻居集合QiQ_{i}第二步,对于任意一个样本xi\mathbf{x}_{i}及其邻居集合QiQ_{i},我们需要找到一组系数WijW_{ij},使得xi\mathbf{x}_i能够由其邻居xjQi\mathbf{x}_j \in Q_{i}的线性组合最好地近似。这里设定了一个约束条件xjQiWij=1\sum_{\mathbf{x}_{j} \in Q_{i}} W_{ij} = 1,即所有权重系数之和为1。具体来说,我们需要最小化重构误差:

i=1mxixjQiWijxj22\sum_{i=1}^{m} \left\| \mathbf{x}_i - \sum_{\mathbf{x}_{j} \in Q_i} W_{ij} \mathbf{x}_j \right\|_2^2

第三步,根据约束条件xjQiWij=1\sum_{\mathbf{x}_{j} \in Q_{i}} W_{ij} = 1,可以将误差表达式重写为:

i=1mxjQiWijxixjQiWijxj22=i=1mxjQiWij(xixj)22\sum_{i=1}^{m} \left\| \sum_{\mathbf{x}_{j} \in Q_{i}} W_{ij} \mathbf{x}_i - \sum_{\mathbf{x}_{j} \in Q_i} W_{ij} \mathbf{x}_j \right\|_2^2 = \sum_{i=1}^{m} \left\| \sum_{\mathbf{x}_j \in Q_i} W_{ij} (\mathbf{x}_i - \mathbf{x}_j) \right\|_2^2

第四步,在上式中,令zij=xixj\mathbf{z}_{ij} = \mathbf{x}_{i} - \mathbf{x}_{j},并将所有zij\mathbf{z}_{ij}按列排列成一个d×kd \times k的矩阵ZiZ_{i}(其中dd是样本的维度,kk是邻居的数量)。由于我们只关心样本xi\mathbf{x}_{i}的权重系数,因此可以从WijW_{ij}中提取出第ii列,记为wi\mathbf{w}_{i}。此时,误差表达式可以进一步改写为:

minwiZiwi22=minwiwiTZiTZiwi\min_{\mathbf{w}_i} \left\| Z_i \mathbf{w}_i \right\|_2^2 = \min_{\mathbf{w}_i} \mathbf{w}_i^T Z_i^T Z_i \mathbf{w}_i

约束条件重写为1Twi=1\mathbf{1}^{T} \mathbf{w}_{i} = 1,其中1\mathbf{1}是一个全11的列向量(维度为k×1k \times 1)。注意到ZiTZiZ_i^T Z_i是一个协方差矩阵,记为SiS_{i},其维度为k×kk \times k

第五步,使用拉格朗日乘子法来求解这个带约束的优化问题。构造拉格朗日函数:

L(wi,λ)=wiTSiwiλ(1Twi1)L(\mathbf{w}_i, \lambda) = \mathbf{w}_i^T S_i \mathbf{w}_i - \lambda (\mathbf{1}^T \mathbf{w}_i - 1)

wi\mathbf{w}_{i}求导并令导数为零,得到:

Siwi=λ1S_i \mathbf{w}_i = \lambda \mathbf{1}

第六步,将wi\mathbf{w}_{i}λ\lambdaSiS_{i}表示。通过简单的运算可以解得最优权重:

wi=Si111TSi11\mathbf{w}_{i} = \frac{S_i^{-1} \mathbf{1}}{\mathbf{1}^T S_i^{-1} \mathbf{1}}

这里,分子Si11S_i^{-1} \mathbf{1}是一个k×1k \times 1的列向量,分母1TSi11\mathbf{1}^T S_i^{-1} \mathbf{1}是一个标量。为了得到WijW_{ij}(即wi\mathbf{w}_{i}的第jj个分量),需要计算分子的第jj个分量,也就是Si1S_i^{-1}的第jj行与全1向量的内积:

l=1k(Si1)jl1=l=1k(Si1)jl\sum_{l=1}^{k} (S_i^{-1})_{jl} \cdot 1 = \sum_{l=1}^{k} (S_i^{-1})_{jl}

因此,最终的权重系数为:

Wij=l=1k(Si1)jlp=1kq=1k(Si1)pqW_{ij} = \frac{\sum_{l=1}^k (S_i^{-1})_{jl}}{\sum_{p=1}^k \sum_{q=1}^k (S_i^{-1})_{pq}}

现在我们寻找低维空间的坐标zi\mathbf{z}_{i},要求在降维后保持局部线性关系不变,也就是保持权重矩阵WijW_{ij}不变。为了达到这个目的,我们需要最小化低维空间中的重构误差,这个误差可以表示为: min{zi}i=1mzij=1mWijzj22\min_{\{\mathbf{z}_i\}} \sum_{i=1}^{m} \left\| \mathbf{z}_i - \sum_{j=1}^{m} W_{ij} \mathbf{z}_j \right\|_2^2 这里需要注意的是,在求和式中只有当xj\mathbf{x}_j属于xi\mathbf{x}_i的邻域QiQ_i时,权重WijW_{ij}才不为零,因此权重矩阵WijW_{ij}实际上是一个稀疏矩阵

为了避免出现平凡解和消除对称性,我们需要添加以下两个约束条件:

  • 中心化约束:所有低维坐标的和为零向量,即i=1mzi=0\sum_{i=1}^{m} \mathbf{z}_i = \mathbf{0}
  • 单位协方差约束:低维嵌入点的协方差矩阵为单位矩阵,即i=1mziziT=Id\sum_{i=1}^{m} \mathbf{z}_i \mathbf{z}_i^T = \mathbf{I}_{d'}

为了更简洁地表示这个问题,我们将所有低维样本按列排列成一个m×dm \times d'的矩阵Z\mathbf{Z}。这样,原来的误差函数可以重新表示为:

ZWZF2=(ImW)ZF2=Tr(ZT(ImW)T(ImW)Z)\|\mathbf{Z} - \mathbf{W}\mathbf{Z}\|_F^2 = \|(\mathbf{I}_m - \mathbf{W})\mathbf{Z}\|_F^2 = \mathrm{Tr}\left( \mathbf{Z}^T (\mathbf{I}_m - \mathbf{W})^T (\mathbf{I}_m - \mathbf{W}) \mathbf{Z} \right)

引入矩阵M=(ImW)T(ImW)\mathbf{M} = (\mathbf{I}_m - \mathbf{W})^T (\mathbf{I}_m - \mathbf{W})后,原始优化问题就转化为: minZTr(ZTMZ)\min_{\mathbf{Z}} \text{Tr}(\mathbf{Z}^T \mathbf{M} \mathbf{Z}) 同时需要满足以下约束条件:

  • ZT1m=0d×1\mathbf{Z}^T \mathbf{1}_m = \mathbf{0}_{d' \times 1}
  • ZTZ=Id\mathbf{Z}^T \mathbf{Z} = \mathbf{I}_{d'}

这是一个典型的二次型最小化问题,可以通过特征值分解来求解。具体来说,矩阵Z\mathbf{Z}的列应该由M\mathbf{M}的从第二小到第d+1d'+1小的dd'个特征值对应的特征向量组成。这是因为最小的特征值一定是00,对应的特征向量是1\mathbf{1},这是一个平凡解,我们需要排除它。

10.5 度量学习

降维的本质在于寻找一个更低维度的空间,这个空间不仅要保持数据的核心结构,还要重新定义更有效的距离度量方式。在这个经过优化的低维空间中,我们能够更高效地进行计算,同时更准确地建立机器学习模型。这里提到的高效性和准确性主要取决于所采用的度量方式是否合适,因此一个自然的思路是不依赖预设的度量标准,而是通过学习找到最优的度量,这正是度量学习方法提出的根本原因。

度量学习常用于有监督学习

之前我们讨论过,度量是一个二元函数 dist(,)dist(\cdot,\cdot),它需要满足以下数学性质:

  1. 非负性
  2. 对称性
  3. 同一性
  4. 三角不等式

现在,假设我们通过一个降维的线性变换 A\mathbf{A} 将原始向量 x\mathbf{x}y\mathbf{y} 映射到低维空间,得到 x=Ax\mathbf{x}' = \mathbf{A}\mathbf{x}y=Ay\mathbf{y}' = \mathbf{A}\mathbf{y}。那么,降维后的欧氏距离的平方可以表示为:

(xy)T(xy)=(A(xy))T(A(xy))=(xy)TATA(xy).\begin{align} &(\mathbf{x}' - \mathbf{y}')^T (\mathbf{x}' - \mathbf{y}') \\ &= (\mathbf{A}(\mathbf{x} - \mathbf{y}))^T (\mathbf{A}(\mathbf{x} - \mathbf{y})) \\ &= (\mathbf{x} - \mathbf{y})^T \mathbf{A}^T \mathbf{A} (\mathbf{x} - \mathbf{y}). \end{align}

这里,我们定义了一个中间矩阵 M:=ATA\mathbf{M} := \mathbf{A}^{T}\mathbf{A}。于是,降维后的欧氏距离的平方可以等价地表示为原始样本的 (xy)TM(xy)(\mathbf{x} - \mathbf{y})^T \mathbf{M} (\mathbf{x} - \mathbf{y})。这种形式的距离,即:

distM(x,y)=(xy)TM(xy),dist_M(\mathbf{x},\mathbf{y}) = \sqrt{(\mathbf{x} - \mathbf{y})^T \mathbf{M} (\mathbf{x} - \mathbf{y})},

被称为马氏距离。马氏距离通过一个对称正定的度量矩阵 M\mathbf{M} 考虑了数据的内在结构,能够更准确地反映数据点之间的真实距离。

马氏距离本质上是一种经过线性变换后的欧氏距离,这个变换将数据映射到一个新的空间。在这个新空间中计算的距离具有以下性质,这些性质来源于欧氏距离的特性以及线性变换的数学性质

  • 由于M=ATA\mathbf{M}=\mathbf{A}^{T}\mathbf{A},矩阵M\mathbf{M}必然是对称的,且是半正定的。
  • 非负性:因为M\mathbf{M}是半正定的,所以(xy)TM(xy)0(\mathbf{x} - \mathbf{y})^T \mathbf{M} (\mathbf{x} - \mathbf{y}) \ge 0,因此马氏距离满足非负性。
  • 对称性:因为M\mathbf{M}是对称的,所以(xy)TM(xy)=(yx)TM(yx)(\mathbf{x} - \mathbf{y})^T \mathbf{M} (\mathbf{x} - \mathbf{y}) = (\mathbf{y} - \mathbf{x})^T \mathbf{M} (\mathbf{y} - \mathbf{x}),因此马氏距离满足对称性。
  • 三角不等式:马氏距离可以理解为数据经过线性变换后在新的空间中的欧氏距离。由于欧氏距离本身满足三角不等式,而线性变换保持向量的线性关系,因此马氏距离也自然满足三角不等式
  • 同一性:这要求M\mathbf{M}必须是正定的,如果降维后导致不同原数据点映射到同一个点(即xy\mathbf{x} \neq \mathbf{y}Ax=AyA\mathbf{x} = A\mathbf{y},此时M\mathbf{M}半正定),那么同一性就不满足了。

因此所谓的度量学习其实就是学习度量矩阵M\mathbf{M}的具体形式。下面我们以近邻成分分析(Neighbourhood Components Analysis, NCA)为例来详细介绍这个过程。

NCA是对传统KNN方法的改进和优化。与KNN直接寻找固定的kk个最近邻不同,NCA提出了一个概率化的思路:不再关注这kk个邻居是谁,而是考虑在所有其他样本点中,选择点xj\mathbf{x}_j作为邻居的概率是多少。然后通过学习一个最优的度量,使得选择到同类样本作为邻居的总概率达到最大。

在数学表达上,我们之前定义了度量矩阵为M=ATA\mathbf{M}=\mathbf{A}^{T}\mathbf{A},因此实际上我们只需要找到一个合适的线性变换矩阵ARd×d\mathbf{A}\in \mathbb{R}^{d'\times d}。在这个变换后的特征空间中,NCA定义了点xi\mathbf{x}_i选择点xj\mathbf{x}_j作为其“随机邻居”的概率pijp_{ij},具体计算公式如下:

pij=exp(AxiAxj2)kiexp(AxiAxk2)其中jip_{ij} = \frac{\exp(-||\mathbf{A}\mathbf{x}_i - \mathbf{A}\mathbf{x}_j||^2)}{\sum_{k \ne i} \exp(-||\mathbf{A}\mathbf{x}_i - \mathbf{A}\mathbf{x}_k||^2)} \quad \text{其中} \quad j \ne i

这个公式具有以下特性:

  1. 距离越近的点,被选为邻居的概率越高,这通过指数函数的性质保证
  2. 分母是一个归一化因子,确保对于给定的xi\mathbf{x}_i,它选择所有其他点作为邻居的概率总和为1,即满足jipij=1\sum_{j \ne i} p_{ij} = 1

接下来,我们定义Ωi={jyj=yi,ji}\Omega_i = \{j \mid y_j = y_i, j \ne i\}表示与xi\mathbf{x}_i同类样本的索引集合。NCA的优化目标是学习一个线性变换A\mathbf{A},使得所有训练样本被正确分类的概率之和最大化(这可以理解为留一法分类正确数量的期望)。具体来说,我们需要最大化以下目标函数:

F(A)=i=1mPi=i=1mjΩipij\mathcal{F}(\mathbf{A}) = \sum_{i=1}^m P_i = \sum_{i=1}^m \sum_{j \in \Omega_i} p_{ij}

这个优化问题的求解相对简单,因为F(A)\mathcal{F}(\mathbf{A})A\mathbf{A}是可微的。因此可以采用梯度上升法(或者等价地,对F(A)-\mathcal{F}(\mathbf{A})采用梯度下降法)来求解最优的变换矩阵A\mathbf{A}

除了NCA方法之外,我们还可以利用领域知识来辅助完成度量学习。具体来说,在学习过程开始之前,我们已经掌握了一些样本之间的相似或不相似关系。基于这些先验知识,我们可以定义两个约束集合:

  • 必联约束集合 M\mathcal{M}:包含所有已知相似的样本对
  • 勿联约束集合 C\mathcal{C}:包含所有已知不相似的样本对

我们的目标是学习一个度量矩阵 M\mathbf{M},使得在该度量下:

  1. 相似样本对之间的距离尽可能小
  2. 不相似样本对之间的距离尽可能大 这个目标可以通过以下优化问题来表达:
minM(xi,xj)MxixjM2(1) 目标函数:最小化必联对的马氏距离 s.t. (xi,xk)CxixkM1,(2) 约束条件:勿联对的整体距离不小于1M0,(3) 保证M是半正定矩阵\begin{aligned} \min _{\mathbf{M}} & \sum_{\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right) \in \mathcal{M}}\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|_{\mathbf{M}}^2 & \text{(1) 目标函数:最小化必联对的马氏距离} \\ \text { s.t. } & \sum_{\left(\boldsymbol{x}_i, \boldsymbol{x}_k\right) \in \mathcal{C}}\left\|\boldsymbol{x}_i-\boldsymbol{x}_k\right\|_{\mathbf{M}} \ge 1, & \text{(2) 约束条件:勿联对的整体距离不小于1} \\ & \mathbf{M} \succeq 0, & \text{(3) 保证$\mathbf{M}$是半正定矩阵} \end{aligned}

其中,xixjM2=(xixj)M(xixj)\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|_{\mathbf{M}}^2 = (\boldsymbol{x}_i-\boldsymbol{x}_j)^\top \mathbf{M} (\boldsymbol{x}_i-\boldsymbol{x}_j) 表示样本对在马氏距离度量下的平方距离。约束条件 M0\mathbf{M} \succeq 0 确保了 M\mathbf{M} 是一个半正定矩阵,这是为了保证距离度量的有效性。这是一个凸优化问题,有全局最优解。

无论采用哪种度量学习方法,最终学习到的度量矩阵 M\mathbf{M} 都可以分解为 M=AA\mathbf{M} = \mathbf{A}^\top\mathbf{A} 的形式。特别地,A\mathbf{A} 不是方阵时,这个分解过程实际上就自然地给出了一个降维变换,因为 A\mathbf{A} 可以将原始数据投影到一个更低维的空间中。

本文由博客一文多发平台 OpenWrite 发布!