前言
夏天快要过去,本书也快接近尾声了。
第十三章
13.1 半监督学习
在此之前,我们讨论的所有学习范式都具有非常明确的边界条件:
- 监督学习:我们拥有大量带标签的数据样本(xi,yi)(x_i, y_i)(xi,yi),目标是学习从输入xxx到输出yyy的映射关系f:X→Yf: \mathcal{X} \rightarrow \mathcal{Y}f:X→Y。这里的每个样本xix_ixi都配有对应的标签yiy_iyi,模型通过这些明确的输入-输出对来建立预测函数。
- 无监督学习:我们只有大量无标签的数据样本xix_ixi,目标是发现数据内在的分布模式或结构。例如通过聚类算法将数据划分为若干组,或通过降维方法找到数据在低维空间中的表示形式。
然而在实际应用中,最常见的情况是同时存在少量带标签数据和大量无标签数据。这导致了一个两难困境: - 如果仅使用有限的带标签数据进行监督学习,由于训练样本不足,模型容易过拟合,即在训练集上表现良好但在新数据上泛化能力差。
- 如果完全忽略标签信息,仅对所有数据实施无监督学习,虽然可能发现数据中的某些聚类模式,但这些发现的模式可能与目标任务无关,无法直接提升模型在特定任务上的表现。
半监督学习正是为解决这一困境而提出的方法。其研究重点是:如何同时利用少量带标签数据和大量无标签数据,构建比仅使用带标签数据时性能更好的模型?
这个问题看似违反直觉——无标签数据既然没有目标信息,如何能帮助提升模型性能?关键在于:虽然无标签数据不直接提供标签信息,但它们揭示了数据在特征空间X\mathcal{X}X中的分布特性。半监督学习的基本思想是通过特定方法,使模型能够利用无标签数据反映的数据分布结构来辅助监督学习过程。
为了让未标记数据发挥作用,必须对数据分布做出基本假设:如果两个点x1x_1x1和x2x_2x2在特征空间中彼此"接近",那么它们对应的标签y1y_1y1和y2y_2y2也应该相似或相同。具体有两种常见假设:
- 聚类假设:数据倾向于形成不同的簇。同一个簇内的所有数据点,无论是否被标记,都应具有相同标签。大量未标记数据可以帮助更准确地识别这些簇的边界。
- 流形假设:观察到的高维数据实际上分布在低维流形上,未标记数据帮助勾勒这个低维流形的形状。
此外,半监督学习根据目标可以分为两种类型:
- 直推学习:训练模型的目的是标记训练集中未标记的数据
- 纯半监督学习:训练模型的目的是标记任何新数据
最后讨论一下主动学习:与半监督学习利用已有未标记数据不同,主动学习是一个更主动的过程。它会从大量未标记数据中智能选择"最有价值标记"的样本,交由专家标记。这是解决标签稀缺问题的另一种思路,与半监督学习相辅相成。
13.2 生成式方法
生成式方法基于生成式模型构建,生成式模型在7.1 贝叶斯决策论中已有介绍,这类模型的核心目标是对数据的联合概率分布 p(x,y)p(\mathbf{x}, y)p(x,y) 进行建模。
这里简要回顾贝叶斯公式:
p(y∣x)=p(x,y)p(x)=p(x∣y)p(y)p(x)p(y|\mathbf{x}) = \frac{p(\mathbf{x}, y)}{p(\mathbf{x})} = \frac{p(\mathbf{x}|y)p(y)}{p(\mathbf{x})}p(y∣x)=p(x)p(x,y)=p(x)p(x∣y)p(y)
其中:
- p(y)p(y)p(y) 表示任意样本属于类别yyy的先验概率
- p(x∣y)p(\mathbf{x}|y)p(x∣y) 表示在类别yyy确定的条件下,生成数据x\mathbf{x}x的似然概率
只要能够对这两个概率进行建模,就能推导出后验概率p(y∣x)p(y|\mathbf{x})p(y∣x)。
传统贝叶斯方法完全依赖已标记数据,这些数据为直接估计p(x∣y)p(\mathbf{x}|y)p(x∣y)和p(y)p(y)p(y)提供了基础。而未标记数据则来自数据的边际分布p(x)p(\mathbf{x})p(x)的采样结果。根据全概率公式:
p(x)=∑yp(x,y)=∑yp(x∣y)p(y)p(\mathbf{x}) = \sum_y p(\mathbf{x},y) = \sum_y p(\mathbf{x}|y)p(y)p(x)=y∑p(x,y)=y∑p(x∣y)p(y)
大量未标记数据能够反映数据点在特征空间中的整体分布结构和局部密度特征。
这意味着,如果一个生成模型能够同时准确描述已标记数据和未标记数据的统计特性,那么该模型所隐含的分类决策边界很可能具有更高的可靠性。特别值得注意的是,这种决策边界往往会自然地落在未标记数据揭示的低密度区域,这与半监督学习中聚类假设的核心思想完全一致。
基于高斯混合模型,我们假设数据中的NNN个类别,与高斯混合模型中的NNN个成分一一对应。即数据样本基于如下概率密度生成:
p(x)=∑i=1Nαi⋅p(x∣μi,Σi)=∑i=1Np(yi)p(x∣yi)
p(\boldsymbol{x}) = \sum_{i=1}^N \alpha_i \cdot p(\boldsymbol{x} | \mu_i, \Sigma_i) =\sum_{i=1}^{N} p(y_{i})p(x|y_{i})
p(x)=i=1∑Nαi⋅p(x∣μi,Σi)=i=1∑Np(yi)p(x∣yi)
其中
- αi\alpha_iαi是混合系数,也代表了类别iii的先验概率,即p(y=i)p(y=i)p(y=i)
- p(x∣μi,Σi)p(\boldsymbol{x} | \mu_i, \Sigma_i)p(x∣μi,Σi)是第iii个高斯成分的概率密度,也代表类别iii的类条件概率密度,即p(x∣yi)p(\boldsymbol{x}|y_{i})p(x∣yi)
- (μi,Σi)(\mu_i, \Sigma_i)(μi,Σi)是第iii个高斯成分的参数,也刻画了第iii类数据在特征空间中的中心位置和形状
我们的目标是找到一组参数θ={αi,μi,Σi}i=1N\theta = \{\alpha_i, \mu_i, \Sigma_i\}_{i=1}^Nθ={αi,μi,Σi}i=1N,使得所有观测数据出现的联合概率最大(即最大化对数似然函数)。为了实现这个目标,我们采用EM算法进行迭代优化,具体步骤如下:
1. 参数初始化阶段
首先利用少量已标记数据Dl={(xj,yj)}D_l = \{(\boldsymbol{x}_j, y_j)\}Dl={(xj,yj)}进行初步参数估计,得到初始参数θ(0)\theta^{(0)}θ(0)。这个初始估计不需要很精确,后续迭代会逐步优化。
2. 迭代优化阶段
采用交替执行以下两个步骤的方式进行优化:
(1) E步骤(期望步骤)
对于每个未标记样本xk∈Du\boldsymbol{x}_k \in D_uxk∈Du,基于当前参数θ(t)\theta^{(t)}θ(t)计算其属于各个类别iii的后验概率:
γki=p(y=i∣xk,θ(t))=p(xk,y=i∣θ(t))p(xk∣θ(t))=αi(t)⋅p(xk∣μi(t),Σi(t))∑j=1Nαj(t)⋅p(xk∣μj(t),Σj(t))\gamma_{ki} = p(y=i | \boldsymbol{x}_k, \theta^{(t)}) =\frac{p(\boldsymbol{x}_k, y=i | \theta^{(t)})}{p(\boldsymbol{x}_k | \theta^{(t)})}= \frac{\alpha_i^{(t)} \cdot p(\boldsymbol{x}_k | \mu_i^{(t)}, \Sigma_i^{(t)})}{\sum_{j=1}^N \alpha_j^{(t)} \cdot p(\boldsymbol{x}_k | \mu_j^{(t)}, \Sigma_j^{(t)})}γki=p(y=i∣xk,θ(t))=p(xk∣θ(t))p(xk,y=i∣θ(t))=∑j=1Nαj(t)⋅p(xk∣μj(t),Σj(t))αi(t)⋅p(xk∣μi(t),Σi(t))
这个计算过程相当于给每个未标记样本分配了一个"软标签",表示其属于各个类别的概率权重。
(2) M步骤(最大化步骤)
结合未标记数据的"软标签"γki\gamma_{ki}γki和已标记数据的确定标签,重新估计所有参数:
-
均值向量μi\mu_iμi的更新:
μi=1∑xj∈Duγji+li(∑xj∈Duγjixj+∑(xj,yj)∈Dl∧yj=ixj)\mu_i = \frac{1}{\sum_{\boldsymbol{x}_j \in D_u} \gamma_{ji} + l_i} \left( \sum_{\boldsymbol{x}_j \in D_u} \gamma_{ji} \boldsymbol{x}_j + \sum_{(\boldsymbol{x}_j, y_j) \in D_l \wedge y_j=i} \boldsymbol{x}_j \right)μi=∑xj∈Duγji+li1xj∈Du∑γjixj+(xj,yj)∈Dl∧yj=i∑xj -
协方差矩阵Σi\Sigma_iΣi的更新:
Σi=1∑xj∈Duγji+li(∑xj∈Duγji(xj−μi)(xj−μi)T+∑(xj,yj)∈Dl∧yj=i(xj−μi)(xj−μi)T)\Sigma_i = \frac{1}{\sum_{\boldsymbol{x}_j \in D_u} \gamma_{ji} + l_i} \left( \sum_{\boldsymbol{x}_j \in D_u} \gamma_{ji}(\boldsymbol{x}_j - \mu_i)(\boldsymbol{x}_j - \mu_i)^T + \sum_{(\boldsymbol{x}_j, y_j) \in D_l \wedge y_j=i} (\boldsymbol{x}_j - \mu_i)(\boldsymbol{x}_j - \mu_i)^T \right)Σi=∑xj∈Duγji+li1xj∈Du∑γji(xj−μi)(xj−μi)T+(xj,yj)∈Dl∧yj=i∑(xj−μi)(xj−μi)T -
混合系数αi\alpha_iαi的更新:
αi=1m(∑xj∈Duγji+li)\alpha_i = \frac{1}{m} \left( \sum_{\boldsymbol{x}_j \in D_u} \gamma_{ji} + l_i \right)αi=m1xj∈Du∑γji+li
3. 预测决策阶段
当算法收敛得到最终参数θ∗={αi∗,μi∗,Σi∗}i=1N\theta^* = \{\alpha_i^*, \mu_i^*, \Sigma_i^*\}_{i=1}^Nθ∗={αi∗,μi∗,Σi∗}i=1N后,对新样本x\boldsymbol{x}x的预测采用贝叶斯决策规则。具体来说,我们寻找使后验概率p(y=j∣x)p(y=j|\boldsymbol{x})p(y=j∣x)最大的类别jjj:
根据贝叶斯定理,后验概率可以表示为:
f(x)=argmaxj∈Yp(y=j∣x)=argmaxj∈Yp(x∣y=j)p(y=j)p(x)f(\boldsymbol{x}) = \arg\max_{j \in \mathcal{Y}} p(y=j | \boldsymbol{x}) = \arg\max_{j \in \mathcal{Y}} \frac{p(\boldsymbol{x} | y=j) p(y=j)}{p(\boldsymbol{x})}f(x)=argj∈Ymaxp(y=j∣x)=argj∈Ymaxp(x)p(x∣y=j)p(y=j)
由于分母p(x)p(\boldsymbol{x})p(x)对所有类别相同,可以简化为:
f(x)=argmaxj∈Yp(x∣y=j)p(y=j)f(\boldsymbol{x}) = \arg\max_{j \in \mathcal{Y}} p(\boldsymbol{x} | y=j) p(y=j)f(x)=argj∈Ymaxp(x∣y=j)p(y=j)
将学习到的参数代入后,最终的预测规则为:
f(x)=argmaxj∈Y(αj∗⋅p(x∣μj∗,Σj∗)) f(\boldsymbol{x}) = \arg\max_{j \in \mathcal{Y}} \left( \alpha_j^* \cdot p(\boldsymbol{x} | \mu_j^*, \Sigma_j^*) \right)f(x)=argj∈Ymax(αj∗⋅p(x∣μj∗,Σj∗))
这个方法简单又严谨,但是该方法的成败完全取决于我们的初始假设是否正确。如果我们假设数据是高斯混合,但实际上它长得像两个弯月(非凸、非高斯),那么生成式方法会强制用高斯模型去拟合它,得到非常差的结果,而一个好的假设需要很强的领域知识。
13.3 半监督SVM
本节我们将学习支持向量机在半监督学习中的扩展方法:半监督支持向量机(Semi-Supervised Support Vector Machine, S3VM)。在介绍S3VM之前,我们先简要回顾一下标准支持向量机(SVM)的基本原理。
SVM回顾
标准的支持向量机旨在找到一个决策边界,使得离该边界最近的样本点(称为支持向量)到边界的距离最大化。最终确定的超平面位置完全由这些支持向量决定,其他样本点不会影响决策边界的位置。
S3VM的设计动机来源于将SVM的"最大间隔"原则与半监督学习中的"聚类假设"相结合。其核心思想体现在两个方面:
- 对于已有的标记数据,我们仍然要保持SVM的最大间隔分类特性;
- 对于未标记数据,我们希望决策边界能够穿过数据分布中密度较低的区域,这样可以使分类边界位于样本稀疏的位置,从而更好地反映数据的整体分布特征。
对于已经标记的数据样本(xi,yi)(\boldsymbol{x}_i, y_i)(xi,yi),支持向量机(SVM)要求这些样本必须满足间隔约束条件:yi(wTxi+b)≥1y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \ge 1yi(wTxi+b)≥1。而对于那些没有标记的数据样本xj\mathbf{x}_{j}xj,半监督支持向量机(S3VM)可以采用软标签的方式进行处理。假设存在kkk个未标记样本,那么理论上会产生2k2^{k}2k种可能的标签组合。对于每一种标签组合,我们都可以将其视为一个伪标记数据集,并在其上训练一个标准的SVM模型,从而得到一个分类超平面和对应的目标函数值。我们的优化目标是从这2k2^k2k种可能性中,寻找能够使SVM间隔最大化(即最小化12∥w∥2\frac{1}{2}\|\boldsymbol{w}\|^221∥w∥2)的最优标签组合。
这个基于枚举搜索的优化思想可以转化为一个数学优化问题。
假设我们拥有:
- lll个已标记样本构成的集合Dl={(xi,yi)}i=1lD_l = \{(\boldsymbol{x}_i, y_i)\}_{i=1}^lDl={(xi,yi)}i=1l
- uuu个未标记样本构成的集合Du={xj}j=l+1l+uD_u = \{\boldsymbol{x}_j\}_{j=l+1}^{l+u}Du={xj}j=l+1l+u
我们需要同时优化以下两个变量:
- 未标记样本的伪标签向量y^=(y^l+1,…,y^l+u)\boldsymbol{\hat{y}} = (\hat{y}_{l+1}, \dots, \hat{y}_{l+u})y^=(y^l+1,…,y^l+u)
- SVM的模型参数(w,b)(\boldsymbol{w}, b)(w,b)
所以目标函数为:
minw,b,y^12∥w∥2+Cl∑i=1lξi+Cu∑j=l+1l+uξj\min_{\boldsymbol{w}, b, \boldsymbol{\hat{y}}} \quad \frac{1}{2}\|\boldsymbol{w}\|^2 + C_l \sum_{i=1}^l \xi_i + C_u \sum_{j=l+1}^{l+u} \xi_jw,b,y^min21∥w∥2+Cli=1∑lξi+Cuj=l+1∑l+uξj
约束条件:
- 对于所有已标记样本(xi,yi)∈Dl(\boldsymbol{x}_i, y_i) \in D_l(xi,yi)∈Dl:
yi(wTxi+b)≥1−ξi,ξi≥0y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0yi(wTxi+b)≥1−ξi,ξi≥0 - 对于所有未标记样本xj∈Du\boldsymbol{x}_j \in D_uxj∈Du及其对应的伪标签y^j\hat{y}_jy^j:
y^j(wTxj+b)≥1−ξj,ξj≥0\hat{y}_j(\boldsymbol{w}^T\boldsymbol{x}_j + b) \ge 1 - \xi_j, \quad \xi_j \ge 0y^j(wTxj+b)≥1−ξj,ξj≥0 - 伪标签的取值限制:
y^j∈{−1,+1}\hat{y}_j \in \{-1, +1\}y^j∈{−1,+1}
其中ClC_{l}Cl和CuC_{u}Cu分别是对已标记数据分类错误的惩罚和对未标记数据分类错误(相对于其伪标签)的惩罚。一般选取Cl≫CuC_l \gg C_uCl≫Cu因为我们对真实的标签更有信心,不希望它们被轻易地分错;而对未标记数据可以更“宽容”一些。
很明显,直接穷举所有可能的标签组合(共2k2^{k}2k种)在计算上是不可行的,因此需要设计更高效的近似算法。这正是Transductive SVM(TSVM)的核心价值所在。
TSVM采用迭代优化的策略,具体步骤如下:
初始化:
首先仅使用已标记数据集DlD_lDl训练一个标准SVM模型,得到初始分类超平面参数(w,b)(\boldsymbol{w}, b)(w,b)。这个超平面将作为后续伪标签预测的基准。
首次预测:
利用初始超平面对所有未标记数据DuD_uDu进行预测,获得它们的初始伪标签:
y^j=sign(wTxj+b)\hat{y}_j = \text{sign}(\boldsymbol{w}^T\boldsymbol{x}_j + b)y^j=sign(wTxj+b)
迭代优化:
此时我们获得了一个混合数据集(包含真实标签和伪标签)。TSVM进入以下优化循环:
- 模型重训练:
在当前完整数据集上重新训练SVM。需要注意的是:- 必须保持已标记样本的标签不变
- 通过调整惩罚系数ClC_lCl(标记数据)和CuC_uCu(未标记数据)来实现平衡
- 实践中通常采用渐进策略:从Cu=0C_u=0Cu=0开始,逐步增大至接近ClC_lCl的水平
- 可疑样本检测:
在未标记样本中识别最可能错误的样本对(xi,xj)(\boldsymbol{x}_i, \boldsymbol{x}_j)(xi,xj),这些样本具有以下特征:- 位于当前决策边界附近(即∣wTx+b∣|\boldsymbol{w}^T\boldsymbol{x}+b|∣wTx+b∣值很小)
- 具有相反的伪标签(y^i≠y^j\hat{y}_i \neq \hat{y}_jy^i=y^j)
- 标签交换验证:
- 交换候选样本对的伪标签(y^i↔y^j\hat{y}_i \leftrightarrow \hat{y}_jy^i↔y^j)
- 重新计算SVM目标函数值
- 优化决策:
- 若目标函数值降低(间隔增大),则保留此次交换
- 否则撤销交换操作
- 循环终止条件:
重复步骤2-4,直到目标函数无法通过任何样本对的交换而进一步降低。
这个迭代过程实际上是通过贪心策略调整伪标签,引导决策边界向数据稀疏区域移动。每次成功的交换都意味着决策边界更符合聚类假设,即位于高密度数据区域之间的低密度间隙处。
13.4 图半监督学习
之前的算法主要关注于划分决策边界,而图半监督学习则着重考虑样本之间的关联性。它通过图结构中的边来表示样本间的关系——若两个样本属于同一类别,则它们之间的边应具有较大的权重。在这种框架下,已标注样本会基于自身标签信息,通过边权重对邻近未标注样本产生影响,这个过程类似于标签信息的传播机制。
下面我们将详细阐述图半监督学习的三个核心操作步骤:
图结构构建
首先需要将离散的数据点集合Dl∪DuD_l \cup D_uDl∪Du表示为图结构G=(V,E)G=(V, E)G=(V,E),其中包含以下要素:
- 顶点集:每个数据样本(无论是否带有标签)对应图中的一个顶点。对于总数为m=l+um=l+um=l+u的样本集,图中将包含mmm个顶点。
- 边集定义:边的权重反映顶点间的相似程度,相似度越高则权重越大。常见的邻域定义方式是我们见过的:
- kkk-近邻法:为每个顶点选择距离最近的kkk个邻居建立连接
- ϵ\epsilonϵ-近邻法:与中心点距离小于ϵ\epsilonϵ的所有点建立连接
其中kkk-近邻法在实际应用中更为普遍。
又基于"邻近样本更可能同类"的假设,边的权重应随样本距离减小而单调递增。最常用的权重计算方法是采用高斯核函数:
wij=exp(−∥xi−xj∥22σ2)w_{ij} = \exp\left(-\frac{\|\boldsymbol{x}_i - \boldsymbol{x}_j\|^2}{2\sigma^2}\right)wij=exp(−2σ2∥xi−xj∥2)
式中各参数含义为:
- wijw_{ij}wij:顶点iii与jjj之间的边权重
- ∥xi−xj∥2\|\boldsymbol{x}_i - \boldsymbol{x}_j\|^2∥xi−xj∥2:特征空间中两样本距离的平方
- σ\sigmaσ:控制权重衰减速度的关键参数
- 当σ\sigmaσ取值较小时,权重随距离增加快速衰减,仅极近邻点能保持有效连接
- 当σ\sigmaσ取值较大时,权重衰减缓慢,使得较远距离的点仍能保持一定关联强度
所有边的权重构成m×mm \times mm×m维的权重矩阵WWW,其中Wij=wijW_{ij}=w_{ij}Wij=wij表示顶点间的连接强度,无连接时Wij=0W_{ij}=0Wij=0。
定义平滑度(能量)
我们希望从图中学习到一个映射函数h:V→Rh: V \to \mathbb{R}h:V→R,该函数将图中的每个顶点映射到一个实数值。然后通过符号函数yi=sign(h(xi))y_i = \text{sign}(h(\mathbf{x}_i))yi=sign(h(xi))得到顶点xi\mathbf{x}_ixi的分类结果。为了使这个映射函数hhh能够满足聚类假设和流形假设,我们需要定义一个平滑度度量来确保标签不会在数据密集区域发生剧烈变化。
假设标签分配向量f=(h(x1),h(x2),…,h(xm))f = (h(\mathbf{x}_1), h(\mathbf{x}_2), \dots, h(\mathbf{x}_m))f=(h(x1),h(x2),…,h(xm))表示所有顶点在映射hhh下的标签分配方案。我们可以证明,二次型fTLff^T L ffTLf是一个有效的平滑度定义,其中L=D−WL = D - WL=D−W是图的拉普拉斯矩阵。这里DDD是一个对角矩阵,其对角线元素Dii=∑j=1mWijD_{ii} = \sum_{j=1}^m W_{ij}Dii=∑j=1mWij表示顶点iii的所有边权重之和,而WWW是图的邻接权重矩阵。
注意这里我用hhh替换了书中的“能量函数”fff,我觉得用向量更易懂
接下来,我们详细展开这个二次型的计算过程:
fTLf=fT(D−W)f=fTDf−fTWf=∑i=1mDiifi2−∑i,j=1mWijfifj=∑i=1m(∑j=1mWij)fi2−∑i,j=1mWijfifj=12(∑i,j=1mWijfi2−2∑i,j=1mWijfifj+∑i,j=1mWijfj2)=12∑i,j=1mWij(fi−fj)2
\begin{aligned}
f^T L f &= f^T (D - W) f \\
&= f^T D f - f^T W f \\
&= \sum_{i=1}^m D_{ii} f_i^2 - \sum_{i,j=1}^m W_{ij} f_i f_j \\
&= \sum_{i=1}^m \left( \sum_{j=1}^m W_{ij} \right) f_i^2 - \sum_{i,j=1}^m W_{ij} f_i f_j \\
&= \frac{1}{2} \left( \sum_{i,j=1}^m W_{ij} f_i^2 - 2 \sum_{i,j=1}^m W_{ij} f_i f_j + \sum_{i,j=1}^m W_{ij} f_j^2 \right) \\
&= \frac{1}{2} \sum_{i,j=1}^m W_{ij} (f_i - f_j)^2
\end{aligned}
fTLf=fT(D−W)f=fTDf−fTWf=i=1∑mDiifi2−i,j=1∑mWijfifj=i=1∑m(j=1∑mWij)fi2−i,j=1∑mWijfifj=21(i,j=1∑mWijfi2−2i,j=1∑mWijfifj+i,j=1∑mWijfj2)=21i,j=1∑mWij(fi−fj)2
从推导结果可以看出,fTLff^T L ffTLf的值与所有相连顶点对(i,j)(i, j)(i,j)的标签预测值之差的平方成正比,并且由它们之间的连接权重(相似度)WijW_{ij}Wij加权。因此,最小化fTLff^T L ffTLf等价于要求连接紧密(即WijW_{ij}Wij较大)的顶点对具有尽可能接近的标签预测值(fi≈fjf_i \approx f_jfi≈fj)。
该二次型是一个理想的用于衡量标签分配fff在图上的平滑度工具。这个值也被称为图的能量。
标签传播算法
我们需要找到一个最优的标签分配函数fff,这个函数需要满足两个主要条件:
- 预测一致性:对于已经标记的数据点,预测值fif_ifi应当尽可能接近真实标签yiy_iyi。
- 图结构平滑性:整个标签分配fff在图结构上应该是平滑的,这意味着fTLff^T L ffTLf的值要尽可能小,其中LLL是上述图的拉普拉斯矩阵。
基于这两个要求,我们可以写出以下正则化的目标函数:
J(f)=∑i=1l(fi−yi)2+λfTLf
J(f) = \sum_{i=1}^{l} (f_{i}-y_{i})^2 + \lambda f^T L f
J(f)=i=1∑l(fi−yi)2+λfTLf
这里λ\lambdaλ是调节两项相对重要性的超参数。虽然这个目标函数是凸的,但直接求解需要对一个大矩阵求逆,计算复杂度很高。因此实际应用中通常采用迭代的标签传播算法。
算法思想:每个节点通过不断接收邻居节点的标签信息,并根据连接边的权重来更新自己的标签。这个过程持续迭代,直到整个网络的标签分布达到稳定状态。
首先进行初始化:
- 构建一个m×Cm \times Cm×C的标签概率矩阵FFF,其中CCC是类别数量。矩阵的第iii行FiF_iFi表示样本xi\boldsymbol{x}_ixi的标签概率分布。
- 初始化固定的标签矩阵YYY(大小也是m×Cm \times Cm×C),它保存已知的标签信息,通常设F0=YF_0=YF0=Y。
- 对于已标记节点iii(真实标签为yiy_iyi),将FiF_iFi初始化为one-hot向量:在yiy_iyi对应位置为111,其他位置为000。
- 对于未标记节点,可以将其对应的FiF_iFi初始化为全000向量或均匀分布。
然后开始迭代过程:
-
计算转移矩阵SSS:
- 首先计算上述对角矩阵DDD。
- 定义对称的转移矩阵:S=D−12WD−12\mathbf{S} = \mathbf{D}^{-\frac{1}{2}} \mathbf{W} \mathbf{D}^{-\frac{1}{2}}S=D−21WD−21
- 矩阵乘积SFSFSF的第iii行(SF(t))i=∑j=1mSijFj(t)\left( \mathbf{S} \mathbf{F}(t) \right)_i = \sum_{j=1}^m S_{ij} F_j(t)(SF(t))i=∑j=1mSijFj(t)表示节点iii从所有邻居节点jjj获得的加权标签信息(因为只有临近节点的权重WijW_{ij}Wij不为零,对应Sij≠0S_{ij}\neq 0Sij=0)。
-
标签传播更新:
- 在每次迭代ttt时执行更新:F(t+1)=αSF(t)+(1−α)Y\mathbf{F}(t+1) = \alpha \mathbf{S} \mathbf{F}(t) + (1-\alpha)\mathbf{Y}F(t+1)=αSF(t)+(1−α)Y
- 其中α\alphaα控制新接收的邻居信息权重,(1−α)Y(1-\alpha)Y(1−α)Y项保留初始标签信息。
-
重复迭代直到标签矩阵FFF收敛(变化小于某个阈值)。
最终得到的收敛矩阵F∗F^*F∗即为预测结果。对于未标记节点jjj,取其对应行Fj∗F_j^*Fj∗中最大概率值对应的类别作为预测标签:
y^j=argmaxc∈{1,…,C}Fjc∗
\hat{y}_j = \arg\max_{c \in \{1, \dots, C\}} F^*_{jc}
y^j=argc∈{1,…,C}maxFjc∗
13.5 基于分歧的方法
在之前的方法中,我们主要依赖于数据的平滑性假设来最大化利用未标记数据并划分决策边界。然而,仅依靠这一假设可能无法得到最优的边界。由于平滑性假设已经被充分挖掘,为了进一步提升边界质量,我们可以引入新的假设:多视角/冗余性假设。其思想是:数据的不同“视角”(例如不同的特征子集或模型架构)都应当能够独立地给出正确的预测。换句话说,问题的解并不唯一,可以通过多种不同的途径获得。
对于如何利用未标记数据,其价值主要体现在作为不同学习器之间达成共识的媒介。具体来说:
- 如果多个基于不同视角构建的、性能良好的学习器对某个未标记样本的预测出现显著分歧,则表明该样本很可能位于当前决策边界附近,具有较高的信息量。
- 反之,如果这些学习器对某个未标记样本的预测表现出高度一致且置信度高,那么这个预测结果就具有较高的可靠性。
整个学习过程的目标依旧是在确保已标记数据上预测准确性的同时,最大化不同学习器在未标记数据上的预测一致性。
这类方法的一个典型代表是Co-Training算法,其设计初衷是为了处理天然具有多视角特征的数据。为了使Co-Training算法在理论上能够有效工作,需要满足两个重要条件:
-
视角充分性:要求数据的特征空间能够被划分为两个独立的视角,即特征集合可以表示为笛卡尔积形式X=X1×X2X = X_1 \times X_2X=X1×X2。其中每个视角X1X_1X1或X2X_2X2都必须包含足够的信息,使得仅凭该视角就能独立完成学习任务并做出有效预测。举例来说,在网页分类任务中,X1X_1X1可以表示网页本身的文本内容,而X2X_2X2可以表示指向该网页的所有锚文本。在这种情况下,无论是仅使用X1X_1X1还是仅使用X2X_2X2,都应该能够训练出具有一定准确率的分类器。
-
视角条件独立性:在给定样本真实标签yyy的条件下,两个视角X1X_1X1和X2X_2X2必须满足条件独立性,其数学表达为P(X1,X2∣y)=P(X1∣y)P(X2∣y)P(X_1, X_2 | y) = P(X_1 | y) P(X_2 | y)P(X1,X2∣y)=P(X1∣y)P(X2∣y)。虽然这个假设在理论上要求较强,但在实际应用中发现,即便是弱相关的视角往往也能取得不错的效果。这个条件的直观理解是:两个视角是从不同角度对同一对象的描述,因此它们产生错误的模式应该是相互独立的。
假设我们有一个少量的已标记数据集LLL和一个大量的未标记数据集UUU。基于这两个数据集,我们首先需要找到数据的两个不同视角:X1X_1X1和X2X_2X2。在初始阶段,我们使用已标记数据集LLL分别训练两个分类器h1h_1h1和h2h_2h2。需要注意的是,h1h_1h1只能使用视角X1X_1X1的特征进行训练和预测,而h2h_2h2只能使用视角X2X_2X2的特征。
接下来是迭代协同训练的过程,该过程会持续进行,直到未标记数据集UUU为空或者达到预设的最大迭代次数。具体步骤如下:
- 分类器进行预测与筛选:
- 首先,分类器h1h_1h1对当前所有未标记数据UUU进行预测。
- 从这些预测结果中,我们筛选出kkk个h1h_1h1预测置信度最高的正样本和kkk个置信度最高的负样本(如果是多分类问题,则从每个类别中选出置信度最高的若干样本)。这些样本及其由h1h_1h1赋予的伪标签组成一个新的集合L1′L_1'L1′。
- 对分类器h2h_2h2执行相同的操作,得到另一个高置信度样本集L2′L_2'L2′。
- 交叉提供伪标签数据:
- 将h1h_1h1筛选出的高置信度样本集L1′L_1'L1′从UUU中移除,并将其添加到h2h_2h2的训练集中。
- 同样地,将h2h_2h2筛选出的高置信度样本集L2′L_2'L2′从UUU中移除,并将其添加到h1h_1h1的训练集中。
- 再训练:
- 分类器h1h_1h1使用更新后的训练集(即原始标记数据LLL加上之前所有由h2h_2h2提供的伪标签数据)进行重新训练。
- 分类器h2h_2h2同样使用更新后的训练集(即原始标记数据LLL加上之前所有由h1h_1h1提供的伪标签数据)进行重新训练。
- 进入下一轮迭代,重复执行上述步骤,直至达到结束条件。
Co-Training的有效性源于不同视角提供的互补信息以及通过伪标签实现的信息交换。具体来说:
- 分类器h1h_1h1是视角X1X_1X1的“专家”,能够在其专业领域内找到一些它非常有把握的样本。
- 当h1h_1h1将这些样本(例如x\boldsymbol{x}x)及其伪标签(例如y′y'y′)传递给h2h_2h2时,实际上是为h2h_2h2提供了一个新的监督信息:(x2,y′)(\boldsymbol{x}_2, y')(x2,y′)。
- 对于h2h_2h2来说,它获得了一个新的带有标签的训练样本,而这个样本的特征x2\boldsymbol{x}_2x2属于它自己的专业领域。由于视角的条件独立性,h1h_1h1和h2h_2h2的错误模式是不同的。因此,h1h_1h1自信提供的标签有很大概率是h2h_2h2难以通过自身视角独立判断的,从而帮助h2h_2h2修正和完善其决策边界。
- 这一过程是双向的,两个分类器互相“教学”,利用对方的专长弥补自身的不足,逐步在大量未标记数据上扩展已标记数据集的规模,最终提升泛化性能。
最后,虽然Co-Training最初要求样本具有多视角,但研究发现只要学习器之间存在明显差异(例如参数不同、算法不同等),都可以提高泛化性能。因此,这类方法也被称为基于分歧的方法。
13.6 半监督聚类
现在我们将讨论重点从有监督学习转向无监督学习。与有监督学习类似,在无监督学习的训练集中也经常包含少量额外的辅助信息,这些信息主要分为两类:
-
约束条件:
- 必联约束和勿联约束:对于数据点对(xi,xj)(\boldsymbol{x}_i, \boldsymbol{x}_j)(xi,xj),前者要求它们必须被划分到同一个簇中,后者则要求它们必须被划分到不同的簇中。
- 数学可表示为:
- 必联约束集:ML={(xi,xj)}ML = \{(\boldsymbol{x}_i, \boldsymbol{x}_j)\}ML={(xi,xj)}
- 勿联约束集:CL={(xi,xj)}CL = \{(\boldsymbol{x}_i, \boldsymbol{x}_j)\}CL={(xi,xj)}
-
部分标记数据:少量数据点带有已知的类别标签。
下面我们以K均值算法(参见9.3.1节)为基础,分别说明如何处理这两类信息。
约束式半监督聚类算法
我们将标准K均值算法改进为约束K均值算法,主要区别体现在样本的簇分配阶段。具体步骤如下:
首先,与标准K均值算法相同,随机选择kkk个数据点作为初始簇中心(质心)μ1,μ2,…,μk\boldsymbol{\mu}_1, \boldsymbol{\mu}_2, \dots, \boldsymbol{\mu}_kμ1,μ2,…,μk。
然后,根据给定的约束信息初始化两个集合:必联约束集MLMLML和勿联约束集CLCLCL
接着进入迭代循环过程:
- 簇分配步骤:
对于每个数据点xi\boldsymbol{x}_ixi,执行以下操作:- 计算xi\boldsymbol{x}_ixi到所有簇中心μk\boldsymbol{\mu}_kμk的距离d(xi,μk)d(\boldsymbol{x}_i, \boldsymbol{\mu}_k)d(xi,μk)
- 对每个可能的簇分配目标kkk,进行约束检查:
- 勿联约束检查:
遍历CLCLCL中所有与xi\boldsymbol{x}_ixi相关的约束(xi,xj)(\boldsymbol{x}_i, \boldsymbol{x}_j)(xi,xj)。如果存在xj\boldsymbol{x}_jxj已经被分配到簇kkk,则xi\boldsymbol{x}_ixi不能被分配到kkk,否则会违反勿联约束。 - 必联约束检查:
遍历MLMLML中所有与xi\boldsymbol{x}_ixi相关的约束(xi,xj)(\boldsymbol{x}_i, \boldsymbol{x}_j)(xi,xj)。如果存在xj\boldsymbol{x}_jxj已经被分配到另一个簇lll(l≠kl \neq kl=k),则xi\boldsymbol{x}_ixi不能被分配到kkk,否则会违反必联约束。
- 勿联约束检查:
- 从所有满足约束条件的簇中,选择距离xi\boldsymbol{x}_ixi最近的簇进行分配。如果没有符合条件的簇,则标记分配失败(实际应用中可采用启发式方法处理)。
- 簇中心更新步骤:与标准K均值算法完全相同。对于每个簇kkk,重新计算其中心:μk=1∣Ck∣∑xj∈Ckxj\boldsymbol{\mu}_k = \frac{1}{|C_k|} \sum_{\boldsymbol{x}_j \in C_k} \boldsymbol{x}_jμk=∣Ck∣1xj∈Ck∑xj
- 终止条件:当簇分配不再发生变化或达到最大迭代次数时,算法终止。
种子式半监督聚类
这种方法利用少量带标签的样本(称为种子集)作为聚类的起点和锚点。基于K均值算法的Seeded K均值算法主要修改的是初始化阶段,具体步骤如下:
-
初始化阶段
- 不再随机选择初始中心,而是根据种子集计算初始的KKK个簇中心。
- 对于每一个类别kkk,其初始簇中心μk\boldsymbol{\mu}_kμk通过以下公式计算:μk(0)=1∣Sk∣∑xj∈Skxj\boldsymbol{\mu}_k^{(0)} = \frac{1}{|S_k|} \sum_{\boldsymbol{x}_j \in S_k} \boldsymbol{x}_jμk(0)=∣Sk∣1xj∈Sk∑xj
其中,SkS_kSk表示属于类别kkk的种子点集合,∣Sk∣|S_k|∣Sk∣是该集合的大小。 - 所有未标记的数据点在初始时均未分配到任何簇。
-
迭代阶段
- 剩余步骤与标准K均值算法基本一致,包括以下两步:
- 分配步骤:将每个数据点分配到最近的簇中心。
- 更新步骤:重新计算每个簇的中心。
- 区别:种子数据点始终保持其初始分配的类别,不会在迭代过程中改变隶属关系。
- 剩余步骤与标准K均值算法基本一致,包括以下两步: