CHAPTER 13
✓ 已完成
🎭

半监督学习

Semi-Supervised Learning

学习目标

🎯
  • 理解半监督学习的基本假设和动机
  • 掌握自训练和协同训练方法
  • 理解生成式和判别式半监督学习
  • 了解图半监督学习和标签传播
13.1

未标记样本

半监督学习的动机

在许多实际应用中,获取标记数据成本高昂(需要人工标注),而未标记数据容易获取。半监督学习(Semi-Supervised Learning)试图利用少量标记样本和大量未标记样本来提升学习性能。

学习范式对比

监督学习(Supervised)

使用完全标记的数据 Dl = {(x₁,y₁), ..., (xₘ,yₘ)}

半监督学习(Semi-Supervised)

同时使用少量标记数据 Dl 和大量未标记数据 Du = {xₘ₊₁, ..., xₘ₊ᵤ},通常 u ≫ m

无监督学习(Unsupervised)

只有未标记数据,如聚类、降维

💡 为什么未标记数据有帮助?

未标记数据能够揭示数据的分布结构

  • • 帮助发现数据的簇结构、流形结构
  • • 提供关于决策边界位置的信息(应避开高密度区域)
  • • 增强模型的泛化能力

半监督学习假设

半监督学习需要对数据分布做一些假设,才能有效利用未标记数据:

1. 聚类假设(Cluster Assumption)

数据存在簇结构,同一簇内的样本倾向于属于同一类别。 决策边界应位于低密度区域,避免穿过簇。

2. 流形假设(Manifold Assumption)

高维数据分布在低维流形上,相近的样本(沿流形的测地线距离)倾向于有相同标记。

3. 平滑假设(Smoothness Assumption)

如果两个样本在高密度区域中相近,则它们的标记应该相同或相似。

警告: 如果数据不满足这些假设,未标记数据可能降低性能!半监督学习不是万能的。

🎮

半监督学习假设可视化

展示聚类假设、流形假设、平滑假设在不同数据分布上的效果

🚧 开发中...

13.2

生成式方法

生成式半监督学习

生成式方法假设数据由某个概率模型生成, 利用未标记数据来更准确地估计模型参数。

基于混合模型的方法

假设数据由混合模型生成(如高斯混合模型GMM),每个混合成分对应一个类别:

  1. 用标记数据初始化模型参数(均值、协方差、混合系数)
  2. E步:计算未标记样本属于各成分的后验概率
  3. M步:利用所有样本(标记+未标记)更新参数
  4. 重复2-3直到收敛

对数似然

ℒ = Σ(x,y)∈Dl log P(x, y | θ) + Σx∈Du log P(x | θ)

标记数据提供类别信息,未标记数据帮助估计数据分布

优点:有坚实的概率理论基础,EM算法保证收敛。缺点:依赖模型假设,如果模型不匹配真实分布,效果不佳。

🎮

生成式半监督学习演示

用GMM进行半监督分类,观察未标记数据如何改善类别边界

🚧 开发中...

13.3

半监督SVM

TSVM(Transductive SVM)

直推式SVM(Transductive SVM, TSVM)也称为S3VM(Semi-Supervised SVM),试图找到一个决策边界,使其穿过低密度区域, 同时对标记样本有较大间隔。

TSVM优化目标

同时优化标记样本的分类精度和未标记样本的置信度:

min ||w||² + ClΣi∈Dlξᵢ + CuΣj∈Duξⱼ

s.t. yᵢ(wTxᵢ + b) ≥ 1 - ξᵢ (标记样本)
|wTxⱼ + b| ≥ 1 - ξⱼ (未标记样本:远离决策边界)

TSVM算法流程

  1. 在标记数据上训练初始SVM
  2. 用初始SVM预测未标记样本的标记(伪标记)
  3. 选择置信度最低的未标记样本,尝试翻转其标记
  4. 重新训练SVM,如果目标函数下降则接受翻转
  5. 重复3-4直到收敛或达到最大迭代次数

💡 低密度分离

TSVM体现了聚类假设: 决策边界应位于低密度区域。通过要求未标记样本远离决策边界(|f(x)| ≥ 1), TSVM避免决策边界穿过数据密集区域。

TSVM是非凸优化问题,通常使用启发式算法求解,难以保证全局最优。

🎮

TSVM决策边界演示

对比SVM和TSVM的决策边界,观察低密度分离效果

🚧 开发中...

13.4

图半监督学习

基于图的半监督学习

图半监督学习将数据表示为图,节点是样本,边表示样本间的相似度。 标记信息从标记节点沿着边传播到未标记节点。

图的构建

  • k近邻图: 如果xⱼ是xᵢ的k个最近邻之一,连接边(i, j)
  • ε近邻图: 如果 ||xᵢ - xⱼ|| < ε,连接边(i, j)
  • 全连接图: 所有节点两两相连,边权重 wᵢⱼ = exp(-||xᵢ - xⱼ||²/2σ²)(高斯核)

标签传播算法

Label Propagation

迭代地让每个未标记节点从邻居获取标记,直到收敛:

  1. 初始化:标记样本保持其真实标记,未标记样本随机初始化
  2. 对每个未标记样本xᵢ,更新其标记为邻居标记的加权平均:

yᵢ ← Σⱼ wᵢⱼyⱼ / Σⱼ wᵢⱼ

  1. 重复步骤2直到标记不再变化

Label Spreading

Label Propagation的改进版本,允许标记样本的标记也参与更新(软钳制):

Y(t+1) = αSY(t) + (1-α)Y(0)

S是归一化的相似度矩阵,α∈(0,1)控制标记样本标记的保持程度,Y(0)是初始标记

基于图的正则化

从能量最小化角度看图半监督学习,目标是最小化:

E = Σ(x,y)∈Dl ||f(x) - y||² + λΣᵢⱼ wᵢⱼ||f(xᵢ) - f(xⱼ)||²

第一项:拟合标记数据;第二项:平滑性正则化,相似样本的预测应相近。

✓ 优点

  • • 简单直观,易于实现
  • • 有封闭解(矩阵求逆)
  • • 能利用流形结构

✗ 缺点

  • • 计算复杂度高(O(n³))
  • • 对图构建方式敏感
  • • 难以处理大规模数据

标签传播交互演示

在k近邻图上观察标签如何从少量标记节点传播到整个网络

迭代次数
0
标记样本
0
未标记样本
40
准确率
0%
标签传播 (α=1)标签扩散 (α<1)

图例说明

标记样本(类别0)
标记样本(类别1)
未标记样本

颜色深浅表示预测置信度,连线表示k近邻关系

💡 标签传播算法

Label Propagation (α=1)

每个未标记样本的标签由其邻居标签的加权平均决定,标记样本的标签保持不变。

yi(t+1) = Σj wijyj(t) / Σj wij
Label Spreading (α<1)

允许标记样本的标签也参与更新(软钳制),增强算法鲁棒性。

Y(t+1) = αSY(t) + (1-α)Y(0)
核心思想
  • 平滑假设:相近的样本倾向于有相同标签
  • 聚类假设:同一簇内的样本属于同一类
  • 流形假设:数据分布在低维流形上
13.5

分歧方法

协同训练(Co-Training)

协同训练假设特征可以分为两个充分且条件独立的视图(view), 利用多视图之间的互补信息进行半监督学习。

Co-Training算法

  1. 将特征分为两个视图:x = (x(1), x(2))
  2. 在每个视图上用标记数据训练一个分类器 h(1), h(2)
  3. 用 h(1) 对未标记数据预测,选择最有信心的样本加入标记集
  4. 用 h(2) 对未标记数据预测,选择最有信心的样本加入标记集
  5. 重新训练两个分类器
  6. 重复3-5直到满足停止条件

💡 为什么有效?

两个视图提供不同的"视角"看数据,一个分类器的高置信度预测可以作为另一个分类器的训练样本, 从而利用未标记数据。关键假设:两个视图充分(每个都足以分类) 且条件独立(给定类别,两个视图独立)。

经典应用:网页分类

网页分类是Co-Training的经典应用场景:

  • 视图1:网页自身的文本内容
  • 视图2:指向该网页的超链接锚文本

这两个视图都包含关于网页类别的信息,且相对独立。

自训练(Self-Training)

自训练是一种简单的半监督学习方法,反复使用自己的预测来扩充训练集。

Self-Training算法

  1. 在标记数据上训练初始分类器
  2. 用分类器预测未标记数据
  3. 选择置信度最高的k个预测,将其伪标记加入训练集
  4. 重新训练分类器
  5. 重复2-4直到未标记数据用完或达到停止条件

✓ 优点

  • • 非常简单,易于实现
  • • 适用于任何分类器
  • • 无需特殊假设

✗ 缺点

  • • 错误会累积(一旦加入错误伪标记,难以纠正)
  • • 容易产生"确认偏误"
  • • 不保证性能提升

提示: Co-Training比Self-Training更可靠,因为两个视图的"意见不一致"能够互相纠错。

🎮

Co-Training vs Self-Training

对比协同训练和自训练在双月形数据上的表现

🚧 开发中...

13.6

半监督聚类

约束聚类

半监督聚类利用少量监督信息(标记样本或成对约束)来改善聚类结果。

成对约束

  • Must-Link(ML)约束: xᵢ 和 xⱼ 必须在同一个簇中
  • Cannot-Link(CL)约束: xᵢ 和 xⱼ 不能在同一个簇中

这些约束可以从标记样本自动生成:同类样本产生ML约束,异类样本产生CL约束。

约束k-means算法

  1. 初始化k个簇中心
  2. 对于每个样本xᵢ:
  3. • 找到最近的簇中心Cⱼ
  4. • 检查是否违反约束:
  5. - 如果违反CL约束,选择次近的不违反约束的簇
  6. - 如果违反ML约束,将相关样本也分配到同一簇
  7. 更新簇中心
  8. 重复2-3直到收敛

度量学习 + 聚类

另一种策略是利用约束学习距离度量,然后用学到的度量进行聚类:

  1. 从约束中学习马氏距离矩阵M(ML对应的样本距离应小,CL对应的样本距离应大)
  2. 用学到的度量 dM(x, x') = √((x-x')TM(x-x')) 进行k-means聚类

💡 应用场景

半监督聚类适用于:用户交互式聚类(用户提供少量标注反馈)、主动学习(选择最有价值的样本询问标签)、 知识发现(利用领域知识改善聚类)。

🎮

约束聚类演示

交互式添加ML和CL约束,观察聚类结果的变化

🚧 开发中...