================================ 经典半监督学习方法 ================================ 本章从统计视角梳理经典半监督学习方法。 自训练(Self-Training) ========================== 自训练是最直观的 SSL 方法,也是最早提出的方法之一。 算法流程 ---------- .. code-block:: text 1. 用有标签样本 L 训练初始分类器 f₀ 2. 用 f₀ 对无标签样本 U 预测伪标签 (pseudo-label) 3. 选择置信度最高的伪标签样本加入 L 4. 用更新后的 L 重新训练 f₁ 5. 重复步骤 2-4 直到收敛或无新样本加入 与 EM 算法的联系 ------------------ 自训练与**期望最大化**(EM)算法有着深刻的理论联系。 .. list-table:: :header-rows: 1 * - 步骤 - 自训练 - EM 算法 * - E-step - 用当前分类器预测伪标签 - 计算缺失标签的后验期望 * - M-step - 用伪标签重新训练 - 最大化期望对数似然 * - 收敛性 - 经验上收敛,理论保证少 - 理论上收敛到局部最优 .. math:: \text{EM 视角下的 SSL 目标函数:} \quad Q(\theta \mid \theta^{(t)}) = \mathbb{E}_{y \mid x, \theta^{(t)}} [\log P(x, y; \theta)] .. note:: McLachlan (1975) 首次从理论上分析了自训练方法,证明在特定条件下, 随着无标签样本数 :math:`m \to \infty`,自训练的期望误差率可以收敛到 完全有标签分类器的水平。 风险 ----- .. warning:: 自训练的最大风险是**错误累积**(error accumulation): 早期预测的错误伪标签会强化分类器自身的错误认知,导致性能越迭代越差。 缓解方法: - 仅选择置信度极高的样本 - 使用多个分类器的投票(协同训练) - 引入置信度加权 生成式模型方法 ================= 高斯混合模型(GMM) --------------------- 生成式方法对联合分布 :math:`P(x, y)` 建模。 .. code-block:: text 假设: P(x | y = k) ~ N(μ_k, Σ_k) // 每个类的高斯分布 P(y = k) = π_k // 类先验 半监督学习: 用 EM 同时估计每个类的均值 μ_k、协方差 Σ_k 和先验 π_k E-step: 计算每个无标签样本属于每个类的后验概率 M-step: 用加权的最大似然更新参数 .. math:: \text{E-step:} \quad p_{ik}^{(t)} = \frac{\pi_k^{(t)} \, \phi(x_i; \mu_k^{(t)}, \Sigma_k^{(t)})} {\sum_{j=1}^K \pi_j^{(t)} \, \phi(x_i; \mu_j^{(t)}, \Sigma_j^{(t)})} \text{M-step:} \quad \mu_k^{(t+1)} = \frac{\sum_{i=1}^{n+m} p_{ik}^{(t)} x_i} {\sum_{i=1}^{n+m} p_{ik}^{(t)}} 线性判别分析(LDA) --------------------- LDA 是生成式方法的特例——假设各类的协方差矩阵相同。 .. math:: \Sigma_k = \Sigma, \quad \forall k 无标签数据对 LDA 的帮助可以被精确量化: - 当类别分离度好时,无标签数据贡献大 - 当类别混叠严重时,无标签数据贡献有限 基于图的 SSL 方法 =================== 核心思想 ---------- 将数据看作图上的节点,边的权重反映样本间的相似性, 标签在图上"传播"。 .. code-block:: 图构建: 每个样本 = 一个节点 边权重 w_{ij} = exp(-||x_i - x_j||² / 2σ²) // RBF 核 标签传播: 有标签节点已知其标签 无标签节点通过图上随机游走获得标签 标签传播算法 ------------- .. math:: F^{(t+1)} = \alpha S F^{(t)} + (1 - \alpha) Y 其中: - :math:`F` 是标签分布矩阵 - :math:`S` 是归一化的相似度矩阵 - :math:`Y` 是初始标签指示矩阵 - :math:`\alpha \in (0, 1)` 是传播参数 .. math:: 收敛解: \quad F^* = (I - \alpha S)^{-1} Y .. tip:: 基于图的方法在流形假设成立时非常有效,但: - 计算复杂度为 :math:`O((n+m)^3)`,难以规模化 - 图构建方式(亲和矩阵、核宽 :math:`\sigma`)对结果高度敏感 协同训练(Co-Training) ========================== 核心思想 ---------- 如果数据有两个"充分且条件独立"的视角(view),可以在两个视角上交替训练。 .. code-block:: text 数据有两个特征视角: 视角 A → 分类器 f_A 视角 B → 分类器 f_B 迭代过程: 1. 每个分类器对无标签数据预测 2. 各自选取置信度最高的样本 3. 将伪标签样本**共享给对方**作为新增训练数据 4. 重新训练两个分类器 理论保证 ---------- .. math:: 若两个视角满足 \quad P(y \mid x^A, x^B) = P(y \mid x^A) = P(y \mid x^B) 且给定 :math:`y` 时 :math:`x^A` 与 :math:`x^B` 条件独立, 则协同训练理论上可以仅用少量有标签样本达到任意精度。 .. note:: 协同训练在实际中难以达到理论条件——"充分且条件独立的两个视角"很少天然存在。 但对网页分类等任务(用页面文本 vs. 超链接文本作为两个视角)效果很好。 半监督 SVM(S3VM) ===================== 核心思想:将决策边界推向低密度区域。 .. math:: \min_{f, \{y_i\}_{i=n+1}^{n+m}} \quad \frac{1}{2}\|w\|^2 + C \sum_{i=1}^n \ell(y_i, f(x_i)) + C^* \sum_{i=n+1}^{n+m} \ell(\tilde{y}_i, f(x_i)) 其中 :math:`\tilde{y}_i` 是对无标签样本的伪标签赋值。 .. warning:: S3VM 的优化问题是**非凸**的(涉及离散的伪标签变量), 通常使用凸松弛或组合搜索方法求解,计算成本较高。