从零开始学AI——13

前言

夏天快要过去,本书也快接近尾声了。

第十三章

13.1 半监督学习

在此之前,我们讨论的所有学习范式都具有非常明确的边界条件:

  • 监督学习 :我们拥有大量带标签 的数据样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , y i ) (x_i, y_i) </math>(xi,yi),目标是学习从输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x到输出 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y的映射关系 <math xmlns="http://www.w3.org/1998/Math/MathML"> f : X → Y f: \mathcal{X} \rightarrow \mathcal{Y} </math>f:X→Y。这里的每个样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i x_i </math>xi都配有对应的标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi,模型通过这些明确的输入-输出对来建立预测函数。
  • 无监督学习 :我们只有大量无标签 的数据样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i x_i </math>xi,目标是发现数据内在的分布模式或结构。例如通过聚类算法将数据划分为若干组,或通过降维方法找到数据在低维空间中的表示形式。 然而在实际应用中,最常见的情况是同时存在少量带标签数据大量无标签数据。这导致了一个两难困境:
  • 如果仅使用有限的带标签数据进行监督学习,由于训练样本不足,模型容易过拟合,即在训练集上表现良好但在新数据上泛化能力差。
  • 如果完全忽略标签信息,仅对所有数据实施无监督学习,虽然可能发现数据中的某些聚类模式,但这些发现的模式可能与目标任务无关,无法直接提升模型在特定任务上的表现。

半监督学习 正是为解决这一困境而提出的方法。其研究重点是:如何同时利用少量带标签数据和大量无标签数据,构建比仅使用带标签数据时性能更好的模型?

这个问题看似违反直觉------无标签数据既然没有目标信息,如何能帮助提升模型性能?关键在于:虽然无标签数据不直接提供标签信息,但它们揭示了数据在特征空间 <math xmlns="http://www.w3.org/1998/Math/MathML"> X \mathcal{X} </math>X中的分布特性 。半监督学习的基本思想是通过特定方法,使模型能够利用无标签数据反映的数据分布结构来辅助监督学习过程。

为了让未标记数据发挥作用,必须对数据分布做出基本假设 :如果两个点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 1 x_1 </math>x1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 2 x_2 </math>x2在特征空间中彼此"接近",那么它们对应的标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y 1 y_1 </math>y1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> y 2 y_2 </math>y2也应该相似或相同。具体有两种常见假设:

  • 聚类假设:数据倾向于形成不同的簇。同一个簇内的所有数据点,无论是否被标记,都应具有相同标签。大量未标记数据可以帮助更准确地识别这些簇的边界。
  • 流形假设:观察到的高维数据实际上分布在低维流形上,未标记数据帮助勾勒这个低维流形的形状。

此外,半监督学习根据目标可以分为两种类型:

  • 直推学习:训练模型的目的是标记训练集中未标记的数据
  • 纯半监督学习:训练模型的目的是标记任何新数据

最后讨论一下主动学习:与半监督学习利用已有未标记数据不同,主动学习是一个更主动的过程。它会从大量未标记数据中智能选择"最有价值标记"的样本,交由专家标记。这是解决标签稀缺问题的另一种思路,与半监督学习相辅相成。

13.2 生成式方法

生成式方法基于生成式模型构建,生成式模型在7.1 贝叶斯决策论 中已有介绍,这类模型的核心目标是对数据的联合概率分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x , y ) p(\mathbf{x}, y) </math>p(x,y) 进行建模

这里简要回顾贝叶斯公式: <math xmlns="http://www.w3.org/1998/Math/MathML"> 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})} </math>p(y∣x)=p(x)p(x,y)=p(x)p(x∣y)p(y) 其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( y ) p(y) </math>p(y) 表示任意样本属于类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y的先验概率
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ∣ y ) p(\mathbf{x}|y) </math>p(x∣y) 表示在类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y确定的条件下,生成数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> x \mathbf{x} </math>x的似然概率 只要能够对这两个概率进行建模,就能推导出后验概率 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( y ∣ x ) p(y|\mathbf{x}) </math>p(y∣x)。

传统贝叶斯方法完全依赖已标记数据 ,这些数据为直接估计 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ∣ y ) p(\mathbf{x}|y) </math>p(x∣y)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( y ) p(y) </math>p(y)提供了基础。而未标记数据 则来自数据的边际分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ) p(\mathbf{x}) </math>p(x)的采样结果。根据全概率公式: <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ) = ∑ y p ( x , y ) = ∑ y p ( x ∣ y ) p ( y ) p(\mathbf{x}) = \sum_y p(\mathbf{x},y) = \sum_y p(\mathbf{x}|y)p(y) </math>p(x)=∑yp(x,y)=∑yp(x∣y)p(y) 大量未标记数据能够反映数据点在特征空间中的整体分布结构局部密度特征

这意味着,如果一个生成模型能够同时准确描述已标记数据和未标记数据的统计特性 ,那么该模型所隐含的分类决策边界 很可能具有更高的可靠性。特别值得注意的是,这种决策边界往往会自然地落在未标记数据揭示的低密度区域 ,这与半监督学习中聚类假设的核心思想完全一致。

基于高斯混合模型,我们假设数据中的 <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>N个类别,与高斯混合模型 中的 <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>N个成分一一对应。即数据样本基于如下概率密度生成:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> p ( x ) = ∑ i = 1 N α i ⋅ p ( x ∣ μ i , Σ i ) = ∑ i = 1 N p ( y i ) p ( x ∣ y i ) 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}) </math>p(x)=i=1∑Nαi⋅p(x∣μi,Σi)=i=1∑Np(yi)p(x∣yi)

其中

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> α i \alpha_i </math>αi是混合系数,也代表了类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i的先验概率,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( y = i ) p(y=i) </math>p(y=i)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ∣ μ i , Σ i ) p(\boldsymbol{x} | \mu_i, \Sigma_i) </math>p(x∣μi,Σi)是第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i个高斯成分的概率密度,也代表类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i的类条件概率密度,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ∣ y i ) p(\boldsymbol{x}|y_{i}) </math>p(x∣yi)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> ( μ i , Σ i ) (\mu_i, \Sigma_i) </math>(μi,Σi)是第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i个高斯成分的参数,也刻画了第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i类数据在特征空间中的中心位置和形状

我们的目标是找到一组参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ = { α i , μ i , Σ i } i = 1 N \theta = \{\alpha_i, \mu_i, \Sigma_i\}_{i=1}^N </math>θ={αi,μi,Σi}i=1N,使得所有观测数据出现的联合概率最大 (即最大化对数似然函数)。为了实现这个目标,我们采用EM算法进行迭代优化,具体步骤如下:

1. 参数初始化阶段 首先利用少量已标记数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> D l = { ( x j , y j ) } D_l = \{(\boldsymbol{x}_j, y_j)\} </math>Dl={(xj,yj)}进行初步参数估计,得到初始参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ ( 0 ) \theta^{(0)} </math>θ(0)。这个初始估计不需要很精确,后续迭代会逐步优化。

2. 迭代优化阶段 采用交替执行以下两个步骤的方式进行优化:

(1) E步骤(期望步骤) 对于每个未标记样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x k ∈ D u \boldsymbol{x}k \in D_u </math>xk∈Du,基于当前参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ ( t ) \theta^{(t)} </math>θ(t)计算其属于各个类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i的后验概率: <math xmlns="http://www.w3.org/1998/Math/MathML"> γ k i = p ( y = i ∣ x k , θ ( t ) ) = p ( x k , y = i ∣ θ ( t ) ) p ( x k ∣ θ ( t ) ) = α i ( t ) ⋅ p ( x k ∣ μ i ( t ) , Σ i ( t ) ) ∑ j = 1 N α j ( t ) ⋅ p ( x k ∣ μ 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)})} </math>γ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步骤(最大化步骤) 结合未标记数据的"软标签" <math xmlns="http://www.w3.org/1998/Math/MathML"> γ k i \gamma_{ki} </math>γki和已标记数据的确定标签,重新估计所有参数:

  • 均值向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ i \mu_i </math>μi的更新: <math xmlns="http://www.w3.org/1998/Math/MathML"> μ i = 1 ∑ x j ∈ D u γ j i + l i ( ∑ x j ∈ D u γ j i x j + ∑ ( x j , y j ) ∈ D l ∧ y j = i x j ) \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) </math>μi=∑xj∈Duγji+li1(∑xj∈Duγjixj+∑(xj,yj)∈Dl∧yj=ixj)

  • 协方差矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> Σ i \Sigma_i </math>Σi的更新: <math xmlns="http://www.w3.org/1998/Math/MathML"> Σ i = 1 ∑ x j ∈ D u γ j i + l i ( ∑ x j ∈ D u γ j i ( x j − μ i ) ( x j − μ i ) T + ∑ ( x j , y j ) ∈ D l ∧ y j = i ( x j − μ i ) ( x j − μ 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) </math>Σi=∑xj∈Duγji+li1(∑xj∈Duγji(xj−μi)(xj−μi)T+∑(xj,yj)∈Dl∧yj=i(xj−μi)(xj−μi)T)

  • 混合系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> α i \alpha_i </math>αi的更新: <math xmlns="http://www.w3.org/1998/Math/MathML"> α i = 1 m ( ∑ x j ∈ D u γ j i + l i ) \alpha_i = \frac{1}{m} \left( \sum_{\boldsymbol{x}j \in D_u} \gamma{ji} + l_i \right) </math>αi=m1(∑xj∈Duγji+li)

3. 预测决策阶段 当算法收敛得到最终参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ ∗ = { α i ∗ , μ i ∗ , Σ i ∗ } i = 1 N \theta^* = \{\alpha_i^*, \mu_i^*, \Sigma_i^*\}_{i=1}^N </math>θ∗={αi∗,μi∗,Σi∗}i=1N后,对新样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x \boldsymbol{x} </math>x的预测采用贝叶斯决策规则。具体来说,我们寻找使后验概率 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( y = j ∣ x ) p(y=j|\boldsymbol{x}) </math>p(y=j∣x)最大的类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j:

根据贝叶斯定理,后验概率可以表示为: <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) = arg ⁡ max ⁡ j ∈ Y p ( y = j ∣ x ) = arg ⁡ max ⁡ j ∈ Y p ( 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})} </math>f(x)=argmaxj∈Yp(y=j∣x)=argmaxj∈Yp(x)p(x∣y=j)p(y=j)

由于分母 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ( x ) p(\boldsymbol{x}) </math>p(x)对所有类别相同,可以简化为: <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) = arg ⁡ max ⁡ j ∈ Y p ( x ∣ y = j ) p ( y = j ) f(\boldsymbol{x}) = \arg\max_{j \in \mathcal{Y}} p(\boldsymbol{x} | y=j) p(y=j) </math>f(x)=argmaxj∈Yp(x∣y=j)p(y=j)

将学习到的参数代入后,最终的预测规则为: <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( x ) = arg ⁡ max ⁡ j ∈ 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) </math>f(x)=argmaxj∈Y(αj∗⋅p(x∣μj∗,Σj∗)) 这个方法简单又严谨,但是该方法的成败完全取决于我们的初始假设是否正确。如果我们假设数据是高斯混合,但实际上它长得像两个弯月(非凸、非高斯),那么生成式方法会强制用高斯模型去拟合它,得到非常差的结果,而一个好的假设需要很强的领域知识。

13.3 半监督SVM

本节我们将学习支持向量机在半监督学习中的扩展方法:半监督支持向量机(Semi-Supervised Support Vector Machine, S3VM)。在介绍S3VM之前,我们先简要回顾一下标准支持向量机(SVM)的基本原理。

SVM回顾 标准的支持向量机旨在找到一个决策边界,使得离该边界最近的样本点(称为支持向量)到边界的距离最大化。最终确定的超平面位置完全由这些支持向量决定,其他样本点不会影响决策边界的位置。

S3VM的设计动机来源于将SVM的"最大间隔"原则与半监督学习中的"聚类假设"相结合。其核心思想体现在两个方面:

  1. 对于已有的标记数据,我们仍然要保持SVM的最大间隔分类特性;
  2. 对于未标记数据,我们希望决策边界能够穿过数据分布中密度较低的区域,这样可以使分类边界位于样本稀疏的位置,从而更好地反映数据的整体分布特征。

对于已经标记的数据样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , y i ) (\boldsymbol{x}_i, y_i) </math>(xi,yi),支持向量机(SVM)要求这些样本必须满足间隔约束条件 : <math xmlns="http://www.w3.org/1998/Math/MathML"> y i ( w T x i + b ) ≥ 1 y_i(\boldsymbol{w}^T\boldsymbol{x}i + b) \ge 1 </math>yi(wTxi+b)≥1。而对于那些没有标记的数据样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x j \mathbf{x}{j} </math>xj,半监督支持向量机(S3VM)可以采用软标签的方式进行处理 。假设存在 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k个未标记样本,那么理论上会产生 <math xmlns="http://www.w3.org/1998/Math/MathML"> 2 k 2^{k} </math>2k种可能的标签组合。对于每一种标签组合,我们都可以将其视为一个伪标记数据集,并在其上训练一个标准的SVM模型,从而得到一个分类超平面和对应的目标函数值。我们的优化目标 是从这 <math xmlns="http://www.w3.org/1998/Math/MathML"> 2 k 2^k </math>2k种可能性中,寻找能够使SVM间隔最大化(即最小化 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 2 ∥ w ∥ 2 \frac{1}{2}\|\boldsymbol{w}\|^2 </math>21∥w∥2)的最优标签组合。

这个基于枚举搜索的优化思想可以转化为一个数学优化问题。 假设我们拥有:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> l l </math>l个已标记样本构成的集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> D l = { ( x i , y i ) } i = 1 l D_l = \{(\boldsymbol{x}i, y_i)\}{i=1}^l </math>Dl={(xi,yi)}i=1l
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> u u </math>u个未标记样本构成的集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> D u = { x j } j = l + 1 l + u D_u = \{\boldsymbol{x}j\}{j=l+1}^{l+u} </math>Du={xj}j=l+1l+u

我们需要同时优化以下两个变量:

  1. 未标记样本的伪标签向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ = ( y ^ l + 1 , ... , y ^ l + u ) \boldsymbol{\hat{y}} = (\hat{y}{l+1}, \dots, \hat{y}{l+u}) </math>y^=(y^l+1,...,y^l+u)
  2. SVM的模型参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w , b ) (\boldsymbol{w}, b) </math>(w,b) 所以目标函数为: <math xmlns="http://www.w3.org/1998/Math/MathML"> min ⁡ w , b , y ^ 1 2 ∥ w ∥ 2 + C l ∑ i = 1 l ξ i + C u ∑ j = l + 1 l + 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_j </math>minw,b,y^21∥w∥2+Cl∑i=1lξi+Cu∑j=l+1l+uξj 约束条件:
  • 对于所有已标记样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , y i ) ∈ D l (\boldsymbol{x}_i, y_i) \in D_l </math>(xi,yi)∈Dl: <math xmlns="http://www.w3.org/1998/Math/MathML"> y i ( w T x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0 </math>yi(wTxi+b)≥1−ξi,ξi≥0
  • 对于所有未标记样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x j ∈ D u \boldsymbol{x}_j \in D_u </math>xj∈Du及其对应的伪标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ j \hat{y}_j </math>y^j: <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ j ( w T x j + b ) ≥ 1 − ξ j , ξ j ≥ 0 \hat{y}_j(\boldsymbol{w}^T\boldsymbol{x}_j + b) \ge 1 - \xi_j, \quad \xi_j \ge 0 </math>y^j(wTxj+b)≥1−ξj,ξj≥0
  • 伪标签的取值限制: <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ j ∈ { − 1 , + 1 } \hat{y}j \in \{-1, +1\} </math>y^j∈{−1,+1} 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> C l C{l} </math>Cl和 <math xmlns="http://www.w3.org/1998/Math/MathML"> C u C_{u} </math>Cu分别是对已标记数据分类错误 的惩罚和对未标记数据分类错误 (相对于其伪标签)的惩罚。一般选取 <math xmlns="http://www.w3.org/1998/Math/MathML"> C l ≫ C u C_l \gg C_u </math>Cl≫Cu因为我们对真实的标签更有信心,不希望它们被轻易地分错;而对未标记数据可以更"宽容"一些。

很明显 ,直接穷举所有可能的标签组合(共 <math xmlns="http://www.w3.org/1998/Math/MathML"> 2 k 2^{k} </math>2k种)在计算上是不可行的,因此需要设计更高效的近似算法。这正是Transductive SVM(TSVM)的核心价值所在。

TSVM采用迭代优化的策略,具体步骤如下:

初始化 : 首先仅使用已标记数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D l D_l </math>Dl训练一个标准SVM模型,得到初始分类超平面参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w , b ) (\boldsymbol{w}, b) </math>(w,b)。这个超平面将作为后续伪标签预测的基准。

首次预测 : 利用初始超平面对所有未标记数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> D u D_u </math>Du进行预测,获得它们的初始伪标签: <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ j = sign ( w T x j + b ) \hat{y}_j = \text{sign}(\boldsymbol{w}^T\boldsymbol{x}_j + b) </math>y^j=sign(wTxj+b) 迭代优化: 此时我们获得了一个混合数据集(包含真实标签和伪标签)。TSVM进入以下优化循环:

  1. 模型重训练 : 在当前完整数据集上重新训练SVM。需要注意的是:
    • 必须保持已标记样本的标签不变
    • 通过调整惩罚系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> C l C_l </math>Cl(标记数据)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> C u C_u </math>Cu(未标记数据)来实现平衡
    • 实践中通常采用渐进策略 :从 <math xmlns="http://www.w3.org/1998/Math/MathML"> C u = 0 C_u=0 </math>Cu=0开始,逐步增大至接近 <math xmlns="http://www.w3.org/1998/Math/MathML"> C l C_l </math>Cl的水平
  2. 可疑样本检测 : 在未标记样本中识别最可能错误的样本对 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , x j ) (\boldsymbol{x}_i, \boldsymbol{x}_j) </math>(xi,xj),这些样本具有以下特征:
    • 位于当前决策边界附近(即 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ w T x + b ∣ |\boldsymbol{w}^T\boldsymbol{x}+b| </math>∣wTx+b∣值很小)
    • 具有相反的伪标签( <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ i ≠ y ^ j \hat{y}_i \neq \hat{y}_j </math>y^i=y^j)
  3. 标签交换验证
    • 交换候选样本对的伪标签( <math xmlns="http://www.w3.org/1998/Math/MathML"> y ^ i ↔ y ^ j \hat{y}_i \leftrightarrow \hat{y}_j </math>y^i↔y^j)
    • 重新计算SVM目标函数值
  4. 优化决策
    • 若目标函数值降低(间隔增大),则保留此次交换
    • 否则撤销交换操作
  5. 循环终止条件: 重复步骤2-4,直到目标函数无法通过任何样本对的交换而进一步降低。

这个迭代过程实际上是通过贪心策略调整伪标签,引导决策边界向数据稀疏区域移动。每次成功的交换都意味着决策边界更符合聚类假设,即位于高密度数据区域之间的低密度间隙处。

13.4 图半监督学习

之前的算法主要关注于划分决策边界 ,而图半监督学习则着重考虑样本之间的关联性 。它通过图结构中的边来表示样本间的关系------若两个样本属于同一类别,则它们之间的边应具有较大的权重。在这种框架下,已标注样本会基于自身标签信息,通过边权重对邻近未标注样本产生影响,这个过程类似于标签信息的传播机制

下面我们将详细阐述图半监督学习的三个核心操作步骤:

图结构构建 首先需要将离散的数据点集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> D l ∪ D u D_l \cup D_u </math>Dl∪Du表示为图结构 <math xmlns="http://www.w3.org/1998/Math/MathML"> G = ( V , E ) G=(V, E) </math>G=(V,E),其中包含以下要素:

  • 顶点集 :每个数据样本(无论是否带有标签)对应图中的一个顶点。对于总数为 <math xmlns="http://www.w3.org/1998/Math/MathML"> m = l + u m=l+u </math>m=l+u的样本集,图中将包含 <math xmlns="http://www.w3.org/1998/Math/MathML"> m m </math>m个顶点。
  • 边集定义 :边的权重反映顶点间的相似程度,相似度越高则权重越大。常见的邻域定义方式是我们见过的:
    • <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k-近邻法:为每个顶点选择距离最近的 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k个邻居建立连接
    • <math xmlns="http://www.w3.org/1998/Math/MathML"> ϵ \epsilon </math>ϵ-近邻法:与中心点距离小于 <math xmlns="http://www.w3.org/1998/Math/MathML"> ϵ \epsilon </math>ϵ的所有点建立连接 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k-近邻法在实际应用中更为普遍。

又基于"邻近样本更可能同类"的假设,边的权重应随样本距离减小而单调递增。最常用的权重计算方法是采用高斯核函数: <math xmlns="http://www.w3.org/1998/Math/MathML"> w i j = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) w_{ij} = \exp\left(-\frac{\|\boldsymbol{x}_i - \boldsymbol{x}_j\|^2}{2\sigma^2}\right) </math>wij=exp(−2σ2∥xi−xj∥2) 式中各参数含义为:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> w i j w_{ij} </math>wij:顶点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i与 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j之间的边权重
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> ∥ x i − x j ∥ 2 \|\boldsymbol{x}_i - \boldsymbol{x}_j\|^2 </math>∥xi−xj∥2:特征空间中两样本距离的平方
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> σ \sigma </math>σ:控制权重衰减速度的关键参数
    • 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> σ \sigma </math>σ取值较小时,权重随距离增加快速衰减,仅极近邻点能保持有效连接
    • 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> σ \sigma </math>σ取值较大时,权重衰减缓慢,使得较远距离的点仍能保持一定关联强度

所有边的权重构成 <math xmlns="http://www.w3.org/1998/Math/MathML"> m × m m \times m </math>m×m维的权重矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> W W </math>W,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i j = w i j W_{ij}=w_{ij} </math>Wij=wij表示顶点间的连接强度,无连接时 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i j = 0 W_{ij}=0 </math>Wij=0。

定义平滑度(能量) 我们希望从图中学习到一个映射函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> h : V → R h: V \to \mathbb{R} </math>h:V→R,该函数将图中的每个顶点映射到一个实数值。然后通过符号函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> y i = sign ( h ( x i ) ) y_i = \text{sign}(h(\mathbf{x}_i)) </math>yi=sign(h(xi))得到顶点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \mathbf{x}_i </math>xi的分类结果。为了使这个映射函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> h h </math>h能够满足聚类假设和流形假设,我们需要定义一个平滑度度量来确保标签不会在数据密集区域发生剧烈变化。

假设标签分配向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> f = ( h ( x 1 ) , h ( x 2 ) , ... , h ( x m ) ) f = (h(\mathbf{x}1), h(\mathbf{x}2), \dots, h(\mathbf{x}m)) </math>f=(h(x1),h(x2),...,h(xm))表示所有顶点在映射 <math xmlns="http://www.w3.org/1998/Math/MathML"> h h </math>h下的标签分配方案。我们可以证明,二次型 <math xmlns="http://www.w3.org/1998/Math/MathML"> f T L f f^T L f </math>fTLf是一个有效的平滑度定义,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> L = D − W L = D - W </math>L=D−W是图的拉普拉斯矩阵。这里 <math xmlns="http://www.w3.org/1998/Math/MathML"> D D </math>D是一个对角矩阵,其对角线元素 <math xmlns="http://www.w3.org/1998/Math/MathML"> D i i = ∑ j = 1 m W i j D{ii} = \sum{j=1}^m W{ij} </math>Dii=∑j=1mWij表示顶点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i的所有边权重之和,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> W W </math>W是图的邻接权重矩阵。

注意这里我用 <math xmlns="http://www.w3.org/1998/Math/MathML"> h h </math>h替换了书中的"能量函数" <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f,我觉得用向量更易懂

接下来,我们详细展开这个二次型的计算过程:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> f T L f = f T ( D − W ) f = f T D f − f T W f = ∑ i = 1 m D i i f i 2 − ∑ i , j = 1 m W i j f i f j = ∑ i = 1 m ( ∑ j = 1 m W i j ) f i 2 − ∑ i , j = 1 m W i j f i f j = 1 2 ( ∑ i , j = 1 m W i j f i 2 − 2 ∑ i , j = 1 m W i j f i f j + ∑ i , j = 1 m W i j f j 2 ) = 1 2 ∑ i , j = 1 m W i j ( f i − f j ) 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} </math>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

从推导结果可以看出, <math xmlns="http://www.w3.org/1998/Math/MathML"> f T L f f^T L f </math>fTLf的值与所有相连顶点对 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( i , j ) (i, j) </math>(i,j)的标签预测值之差的平方成正比,并且由它们之间的连接权重(相似度) <math xmlns="http://www.w3.org/1998/Math/MathML"> W i j W_{ij} </math>Wij加权。因此,最小化 <math xmlns="http://www.w3.org/1998/Math/MathML"> f T L f f^T L f </math>fTLf等价于要求连接紧密(即 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i j W_{ij} </math>Wij较大)的顶点对具有尽可能接近的标签预测值( <math xmlns="http://www.w3.org/1998/Math/MathML"> f i ≈ f j f_i \approx f_j </math>fi≈fj) 。 该二次型是一个理想的用于衡量标签分配 <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f在图上的平滑度工具。这个值也被称为图的能量

标签传播算法 我们需要找到一个最优的标签分配函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f,这个函数需要满足两个主要条件:

  1. 预测一致性 :对于已经标记的数据点,预测值 <math xmlns="http://www.w3.org/1998/Math/MathML"> f i f_i </math>fi应当尽可能接近真实标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi。
  2. 图结构平滑性 :整个标签分配 <math xmlns="http://www.w3.org/1998/Math/MathML"> f f </math>f在图结构上应该是平滑的,这意味着 <math xmlns="http://www.w3.org/1998/Math/MathML"> f T L f f^T L f </math>fTLf的值要尽可能小,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L是上述图的拉普拉斯矩阵。

基于这两个要求,我们可以写出以下正则化的目标函数:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> J ( f ) = ∑ i = 1 l ( f i − y i ) 2 + λ f T L f J(f) = \sum_{i=1}^{l} (f_{i}-y_{i})^2 + \lambda f^T L f </math>J(f)=i=1∑l(fi−yi)2+λfTLf

这里 <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ是调节两项相对重要性的超参数。虽然这个目标函数是凸的,但直接求解需要对一个大矩阵求逆,计算复杂度很高。因此实际应用中通常采用迭代的标签传播算法

算法思想:每个节点通过不断接收邻居节点的标签信息,并根据连接边的权重来更新自己的标签。这个过程持续迭代,直到整个网络的标签分布达到稳定状态。

首先进行初始化:

  • 构建一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> m × C m \times C </math>m×C的标签概率矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> F F </math>F,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> C C </math>C是类别数量。矩阵的第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i行 <math xmlns="http://www.w3.org/1998/Math/MathML"> F i F_i </math>Fi表示样本 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi的标签概率分布。
  • 初始化固定的标签矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y Y </math>Y(大小也是 <math xmlns="http://www.w3.org/1998/Math/MathML"> m × C m \times C </math>m×C),它保存已知的标签信息,通常设 <math xmlns="http://www.w3.org/1998/Math/MathML"> F 0 = Y F_0=Y </math>F0=Y。
  • 对于已标记节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i(真实标签为 <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi),将 <math xmlns="http://www.w3.org/1998/Math/MathML"> F i F_i </math>Fi初始化为one-hot向量:在 <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi对应位置为 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 1 </math>1,其他位置为 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 </math>0。
  • 对于未标记节点,可以将其对应的 <math xmlns="http://www.w3.org/1998/Math/MathML"> F i F_i </math>Fi初始化为全 <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 </math>0向量或均匀分布。

然后开始迭代过程:

  1. 计算转移矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> S S </math>S:

    • 首先计算上述对角矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> D D </math>D。
    • 定义对称 的转移矩阵: <math xmlns="http://www.w3.org/1998/Math/MathML"> S = D − 1 2 W D − 1 2 \mathbf{S} = \mathbf{D}^{-\frac{1}{2}} \mathbf{W} \mathbf{D}^{-\frac{1}{2}} </math>S=D−21WD−21
    • 矩阵乘积 <math xmlns="http://www.w3.org/1998/Math/MathML"> S F SF </math>SF的第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i行 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( S F ( t ) ) i = ∑ j = 1 m S i j F j ( t ) \left( \mathbf{S} \mathbf{F}(t) \right)i = \sum{j=1}^m S_{ij} F_j(t) </math>(SF(t))i=∑j=1mSijFj(t)表示节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i从所有邻居节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j获得的加权 标签信息(因为只有临近节点的权重 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i j W_{ij} </math>Wij不为零,对应 <math xmlns="http://www.w3.org/1998/Math/MathML"> S i j ≠ 0 S_{ij}\neq 0 </math>Sij=0)。
  2. 标签传播更新:

    • 在每次迭代 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t时执行更新: <math xmlns="http://www.w3.org/1998/Math/MathML"> F ( t + 1 ) = α S F ( t ) + ( 1 − α ) Y \mathbf{F}(t+1) = \alpha \mathbf{S} \mathbf{F}(t) + (1-\alpha)\mathbf{Y} </math>F(t+1)=αSF(t)+(1−α)Y
    • 其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α控制新接收的邻居信息权重, <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 1 − α ) Y (1-\alpha)Y </math>(1−α)Y项保留初始标签信息。
  3. 重复迭代直到标签矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> F F </math>F收敛(变化小于某个阈值)。

最终得到的收敛矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> F ∗ F^* </math>F∗即为预测结果。对于未标记节点 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j,取其对应行 <math xmlns="http://www.w3.org/1998/Math/MathML"> F j ∗ F_j^* </math>Fj∗中最大概率值对应的类别作为预测标签:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> y ^ j = arg ⁡ max ⁡ c ∈ { 1 , ... , C } F j c ∗ \hat{y}j = \arg\max{c \in \{1, \dots, C\}} F^*_{jc} </math>y^j=argc∈{1,...,C}maxFjc∗

13.5 基于分歧的方法

在之前的方法中,我们主要依赖于数据的平滑性假设 来最大化利用未标记数据并划分决策边界。然而,仅依靠这一假设可能无法得到最优的边界。由于平滑性假设已经被充分挖掘,为了进一步提升边界质量,我们可以引入新的假设多视角/冗余性假设 。其思想是:数据的不同"视角"(例如不同的特征子集模型架构 )都应当能够独立地给出正确的预测。换句话说,问题的解并不唯一,可以通过多种不同的途径获得。 对于如何利用未标记数据 ,其价值主要体现在作为不同学习器之间达成共识的媒介。具体来说:

  • 如果多个基于不同视角构建的、性能良好的学习器对某个未标记样本的预测出现显著分歧,则表明该样本很可能位于当前决策边界附近,具有较高的信息量。
  • 反之,如果这些学习器对某个未标记样本的预测表现出高度一致且置信度高 ,那么这个预测结果就具有较高的可靠性。 整个学习过程的目标 依旧是在确保已标记数据上预测准确性的同时,最大化不同学习器在未标记数据上的预测一致性

这类方法的一个典型代表是Co-Training算法,其设计初衷是为了处理天然具有多视角特征的数据。为了使Co-Training算法在理论上能够有效工作,需要满足两个重要条件:

  1. 视角充分性 :要求数据的特征空间能够被划分为两个独立的视角 ,即特征集合可以表示为笛卡尔积形式 <math xmlns="http://www.w3.org/1998/Math/MathML"> X = X 1 × X 2 X = X_1 \times X_2 </math>X=X1×X2。其中每个视角 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1或 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2都必须包含足够的信息 ,使得仅凭该视角就能独立完成学习任务并做出有效预测。举例来说,在网页分类任务中, <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1可以表示网页本身的文本内容,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2可以表示指向该网页的所有锚文本。在这种情况下,无论是仅使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1还是仅使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2,都应该能够训练出具有一定准确率的分类器。

  2. 视角条件独立性 :在给定样本真实标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y的条件下,两个视角 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2必须满足条件独立性,其数学表达为 <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( X 1 , X 2 ∣ y ) = P ( X 1 ∣ y ) P ( X 2 ∣ y ) P(X_1, X_2 | y) = P(X_1 | y) P(X_2 | y) </math>P(X1,X2∣y)=P(X1∣y)P(X2∣y)。虽然这个假设在理论上要求较强,但在实际应用中发现,即便是弱相关的视角往往也能取得不错的效果。这个条件的直观理解是:两个视角是从不同角度对同一对象的描述,因此它们产生错误的模式应该是相互独立的。

假设我们有一个少量的已标记数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L和一个大量的未标记数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U。基于这两个数据集,我们首先需要找到数据的两个不同视角: <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2。在初始阶段,我们使用已标记数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L分别训练两个分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2。需要注意的是, <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1只能使用视角 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1的特征进行训练和预测,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2只能使用视角 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 2 X_2 </math>X2的特征。

接下来是迭代协同训练 的过程,该过程会持续进行,直到未标记数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U为空或者达到预设的最大迭代次数。具体步骤如下:

  1. 分类器进行预测与筛选
    • 首先,分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1对当前所有未标记数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U进行预测。
    • 从这些预测结果中,我们筛选出 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k个 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1预测置信度最高的正样本 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k个置信度最高的负样本 (如果是多分类问题,则从每个类别中选出置信度最高的若干样本)。这些样本及其由 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1赋予的伪标签组成一个新的集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 1 ′ L_1' </math>L1′。
    • 对分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2执行相同的操作,得到另一个高置信度样本集 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 2 ′ L_2' </math>L2′。
  2. 交叉提供伪标签数据
    • 将 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1筛选出的高置信度样本集 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 1 ′ L_1' </math>L1′从 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U中移除,并将其添加到 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2的训练集中。
    • 同样地,将 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2筛选出的高置信度样本集 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 2 ′ L_2' </math>L2′从 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U中移除,并将其添加到 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1的训练集中。
  3. 再训练
    • 分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1使用更新后的训练集(即原始标记数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L加上之前所有由 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2提供的伪标签数据)进行重新训练。
    • 分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2同样使用更新后的训练集(即原始标记数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L加上之前所有由 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1提供的伪标签数据)进行重新训练。
  4. 进入下一轮迭代,重复执行上述步骤,直至达到结束条件。

Co-Training的有效性 源于不同视角提供的互补信息 以及通过伪标签实现的信息交换。具体来说:

  • 分类器 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1是视角 <math xmlns="http://www.w3.org/1998/Math/MathML"> X 1 X_1 </math>X1的"专家",能够在其专业领域内找到一些它非常有把握的样本。
  • 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1将这些样本(例如 <math xmlns="http://www.w3.org/1998/Math/MathML"> x \boldsymbol{x} </math>x)及其伪标签(例如 <math xmlns="http://www.w3.org/1998/Math/MathML"> y ′ y' </math>y′)传递给 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2时,实际上是为 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2提供了一个新的监督信息: <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x 2 , y ′ ) (\boldsymbol{x}_2, y') </math>(x2,y′)。
  • 对于 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2来说,它获得了一个新的带有标签的训练样本,而这个样本的特征 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 2 \boldsymbol{x}_2 </math>x2属于它自己的专业领域。由于视角的条件独立性, <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1和 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2的错误模式是不同的 。因此, <math xmlns="http://www.w3.org/1998/Math/MathML"> h 1 h_1 </math>h1自信提供的标签有很大概率是 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2难以通过自身视角独立判断的,从而帮助 <math xmlns="http://www.w3.org/1998/Math/MathML"> h 2 h_2 </math>h2修正和完善其决策边界。
  • 这一过程是双向的,两个分类器互相"教学",利用对方的专长弥补自身的不足,逐步在大量未标记数据上扩展已标记数据集的规模,最终提升泛化性能。

最后,虽然Co-Training最初要求样本具有多视角 ,但研究发现只要学习器之间存在明显差异 (例如参数不同、算法不同等),都可以提高泛化性能。因此,这类方法也被称为基于分歧的方法

13.6 半监督聚类

现在我们将讨论重点从有监督学习转向无监督学习。与有监督学习类似,在无监督学习的训练集中也经常包含少量额外的辅助信息,这些信息主要分为两类:

  1. 约束条件

    • 必联约束勿联约束 :对于数据点对 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , x j ) (\boldsymbol{x}_i, \boldsymbol{x}_j) </math>(xi,xj),前者要求它们必须被划分到同一个簇中,后者则要求它们必须被划分到不同的簇中。
    • 数学可表示为:
      • 必联约束集: <math xmlns="http://www.w3.org/1998/Math/MathML"> M L = { ( x i , x j ) } ML = \{(\boldsymbol{x}_i, \boldsymbol{x}_j)\} </math>ML={(xi,xj)}
      • 勿联约束集: <math xmlns="http://www.w3.org/1998/Math/MathML"> C L = { ( x i , x j ) } CL = \{(\boldsymbol{x}_i, \boldsymbol{x}_j)\} </math>CL={(xi,xj)}
  2. 部分标记数据 :少量数据点带有已知的类别标签。 下面我们以K均值算法(参见9.3.1节)为基础,分别说明如何处理这两类信息。 约束式半监督聚类算法 我们将标准K均值算法改进为约束K均值算法,主要区别体现在样本的簇分配阶段 。具体步骤如下: 首先,与标准K均值算法相同,随机选择 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k个数据点作为初始簇中心(质心) <math xmlns="http://www.w3.org/1998/Math/MathML"> μ 1 , μ 2 , ... , μ k \boldsymbol{\mu}_1, \boldsymbol{\mu}_2, \dots, \boldsymbol{\mu}_k </math>μ1,μ2,...,μk。 然后,根据给定的约束信息初始化两个集合:必联约束集 <math xmlns="http://www.w3.org/1998/Math/MathML"> M L ML </math>ML和勿联约束集 <math xmlns="http://www.w3.org/1998/Math/MathML"> C L CL </math>CL

接着进入迭代循环过程:

  1. 簇分配步骤 : 对于每个数据点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi,执行以下操作:
    • 计算 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi到所有簇中心 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ k \boldsymbol{\mu}_k </math>μk的距离 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ( x i , μ k ) d(\boldsymbol{x}_i, \boldsymbol{\mu}_k) </math>d(xi,μk)
    • 对每个可能的簇分配目标 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,进行约束检查:
      • 勿联约束检查 : 遍历 <math xmlns="http://www.w3.org/1998/Math/MathML"> C L CL </math>CL中所有与 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi相关的约束 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , x j ) (\boldsymbol{x}_i, \boldsymbol{x}_j) </math>(xi,xj)。如果存在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x j \boldsymbol{x}_j </math>xj已经被分配到簇 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,则 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi不能被分配到 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,否则会违反勿联约束。
      • 必联约束检查 : 遍历 <math xmlns="http://www.w3.org/1998/Math/MathML"> M L ML </math>ML中所有与 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi相关的约束 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x i , x j ) (\boldsymbol{x}_i, \boldsymbol{x}_j) </math>(xi,xj)。如果存在 <math xmlns="http://www.w3.org/1998/Math/MathML"> x j \boldsymbol{x}_j </math>xj已经被分配到另一个簇 <math xmlns="http://www.w3.org/1998/Math/MathML"> l l </math>l( <math xmlns="http://www.w3.org/1998/Math/MathML"> l ≠ k l \neq k </math>l=k),则 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi不能被分配到 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,否则会违反必联约束。
    • 从所有满足约束条件的簇中,选择距离 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i \boldsymbol{x}_i </math>xi最近的簇进行分配。如果没有符合条件的簇,则标记分配失败(实际应用中可采用启发式方法处理)。
  2. 簇中心更新步骤 :与标准K均值算法完全相同。对于每个簇 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,重新计算其中心: <math xmlns="http://www.w3.org/1998/Math/MathML"> μ k = 1 ∣ C k ∣ ∑ x j ∈ C k x j \boldsymbol{\mu}k = \frac{1}{|C_k|} \sum{\boldsymbol{x}_j \in C_k} \boldsymbol{x}_j </math>μk=∣Ck∣1∑xj∈Ckxj
  3. 终止条件:当簇分配不再发生变化或达到最大迭代次数时,算法终止。

种子式半监督聚类

这种方法利用少量带标签的样本(称为种子集 )作为聚类的起点和锚点。基于K均值算法的Seeded K均值算法主要修改的是初始化阶段,具体步骤如下:

  1. 初始化阶段

    • 不再随机选择初始中心,而是根据种子集计算初始的 <math xmlns="http://www.w3.org/1998/Math/MathML"> K K </math>K个簇中心。
    • 对于每一个类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k,其初始簇中心 <math xmlns="http://www.w3.org/1998/Math/MathML"> μ k \boldsymbol{\mu}_k </math>μk通过以下公式计算: <math xmlns="http://www.w3.org/1998/Math/MathML"> μ k ( 0 ) = 1 ∣ S k ∣ ∑ x j ∈ S k x j \boldsymbol{\mu}k^{(0)} = \frac{1}{|S_k|} \sum{\boldsymbol{x}_j \in S_k} \boldsymbol{x}_j </math>μk(0)=∣Sk∣1∑xj∈Skxj 其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> S k S_k </math>Sk表示属于类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k的种子点集合, <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ S k ∣ |S_k| </math>∣Sk∣是该集合的大小。
    • 所有未标记的数据点在初始时均未分配到任何簇。
  2. 迭代阶段

    • 剩余步骤与标准K均值算法基本一致,包括以下两步:
      • 分配步骤:将每个数据点分配到最近的簇中心。
      • 更新步骤:重新计算每个簇的中心。
    • 区别:种子数据点始终保持其初始分配的类别,不会在迭代过程中改变隶属关系。
相关推荐
智能汽车人4 分钟前
行业分析---领跑汽车2025第二季度财报
人工智能·microsoft
先做个垃圾出来………14 分钟前
迁移学习(Transfer Learning)
人工智能·机器学习·迁移学习
许泽宇的技术分享16 分钟前
ReAct Agent:让AI像人类一样思考与行动的革命性框架
人工智能·agent·react
eBest数字化转型方案1 小时前
2025年快消品行业渠道数字化营销系统全景透视与选型策略
人工智能
kkcodeer1 小时前
大模型Prompt原理、编写原则与技巧以及衡量方法
人工智能·prompt·ai大模型
DevSecOps选型指南2 小时前
SBOM风险预警 | NPM前端框架 javaxscript 遭受投毒窃取浏览器cookie
前端·人工智能·前端框架·npm·软件供应链安全厂商·软件供应链安全工具
rocksun2 小时前
MCP利用流式HTTP实现实时AI工具交互
人工智能·mcp
xiaok2 小时前
docker network create langbot-network这条命令在dify输入还是在langbot中输入
人工智能
It_张2 小时前
LLM(大语言模型)的工作原理 图文讲解
人工智能·语言模型·自然语言处理