人工智能之核心基础 机器学习 第十四章 半监督与自监督学习总结归纳

人工智能之核心基础 机器学习

第十四章 半监督与自监督学习总结归纳


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [14.1 半监督 vs 自监督:核心区别与联系](#14.1 半监督 vs 自监督:核心区别与联系)
      • 对比
      • [🔗 联系:可以协同使用!](#🔗 联系:可以协同使用!)
    • [14.2 与其他学习范式的全景关系](#14.2 与其他学习范式的全景关系)
      • [🧠 四大学习范式比喻(教育场景)](#🧠 四大学习范式比喻(教育场景))
    • [14.3 学习要点与实践建议](#14.3 学习要点与实践建议)
      • [✅ 入门优先掌握两大基础方法](#✅ 入门优先掌握两大基础方法)
        • [1. **半监督:伪标签法(Pseudo-Labeling)**](#1. 半监督:伪标签法(Pseudo-Labeling))
        • [2. **自监督:自编码器(Autoencoder)**](#2. 自监督:自编码器(Autoencoder))
      • [🔑 实践关键:两大验证步骤](#🔑 实践关键:两大验证步骤)
    • [14.4 进阶方向预告](#14.4 进阶方向预告)
      • [🚀 三大融合方向](#🚀 三大融合方向)
    • [14.5 综合代码实战:半监督 + 自监督协同流程](#14.5 综合代码实战:半监督 + 自监督协同流程)
      • [场景:少量标注新闻 + 大量无标注新闻 → 高精度分类](#场景:少量标注新闻 + 大量无标注新闻 → 高精度分类)
    • [🎯 本章总结](#🎯 本章总结)
      • [💡 实践:](#💡 实践:)
  • 资料关注

14.1 半监督 vs 自监督:核心区别与联系

对比

维度 半监督学习 自监督学习
是否需要标签 ✅ 需要少量真实标签 完全不需要标签
学习目标 提升特定任务的预测性能 学习通用特征表示
训练方式 利用标签+无标签数据联合优化 通过前置任务生成伪监督信号
输出形式 直接用于分类/回归的模型 一个特征提取器(需微调)

💡 共同点

  • 都面对大量无标签数据 + 标注成本高的现实问题
  • 都依赖数据内在结构(聚类性、流形性)

🔗 联系:可以协同使用!

大量无标签数据
自监督预训练
通用特征提取器
少量标签数据
半监督微调
高性能下游模型

最佳实践

先用自监督 从海量数据中学通用特征,再用半监督在少量标签上精调 ------ 双剑合璧!


14.2 与其他学习范式的全景关系

🧠 四大学习范式比喻(教育场景)

范式 比喻 数据形式 典型算法
监督学习 有老师手把手教 ( x , y ) (x, y) (x,y) 全标注 逻辑回归、ResNet
无监督学习 自己逛博物馆看展品 x x x 无标签 K-Means、PCA
半监督学习 老师讲几道例题,其余自己悟 少量 ( x , y ) (x,y) (x,y) + 大量 x x x 伪标签、Label Spreading
自监督学习 自己出题自己做(如拼图) x x x 无标签(但可构造任务) 自编码器、SimSiam、BERT

🎯 演进逻辑
监督 → 半监督 → 自监督 是应对标注瓶颈的自然升级路径!


14.3 学习要点与实践建议

✅ 入门优先掌握两大基础方法

1. 半监督:伪标签法(Pseudo-Labeling)
  • 为什么简单:只需一个分类器 + 置信度过滤
  • 何时有效:数据有清晰聚类结构,初始模型不太差
2. 自监督:自编码器(Autoencoder)
  • 为什么直观:输入=输出,损失=重建误差
  • 能做什么:降维、去噪、特征提取

🔑 实践关键:两大验证步骤

步骤1:验证数据分布假设
python 复制代码
# 用t-SNE可视化,看是否有聚类结构
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

X_embed = TSNE(n_components=2).fit_transform(X_scaled)
plt.scatter(X_embed[:, 0], X_embed[:, 1], alpha=0.6)
plt.title("t-SNE可视化:检查聚类假设")
plt.show()

✅ 如果点自然成簇 → 半监督/自监督可能有效

❌ 如果完全混杂 → 谨慎使用

步骤2:前置任务适配领域
数据类型 推荐前置任务
图像 掩码重建(MAE)、对比学习(SimSiam)
文本 掩码语言建模(MLM)、下一句预测
时序数据 未来值预测、窗口打乱还原
表格数据 特征掩码重建、列打乱预测

14.4 进阶方向预告

🚀 三大融合方向

方向 核心思想 应用场景
+ 迁移学习 在源域自监督预训练 → 目标域半监督微调 医疗影像(公开数据预训练 + 医院小样本微调)
+ 小样本学习 自监督提供强先验 → 仅需1~5个样本分类 工业缺陷检测(新缺陷类型极少样本)
+ 主动学习 半监督筛选不确定样本 → 人工标注最有价值样本 智能标注系统闭环

💡 未来趋势

"自监督预训练 + 半监督/小样本微调" 已成为工业界标准范式!


14.5 综合代码实战:半监督 + 自监督协同流程

场景:少量标注新闻 + 大量无标注新闻 → 高精度分类

python 复制代码
import numpy as np
import torch
import torch.nn as nn
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.semi_supervised import LabelSpreading

# ========================
# 步骤1: 数据准备
# ========================
categories = ['comp.graphics', 'sci.med', 'rec.sport.baseball', 'talk.politics.guns']
news = fetch_20newsgroups(subset='all', categories=categories, remove=('headers', 'footers'))
X_text, y_true = news.data, news.target

# 向量化(作为自监督的"特征")
vectorizer = TfidfVectorizer(max_features=2000, stop_words='english')
X = vectorizer.fit_transform(X_text).toarray()

# 模拟:仅2%有标签
np.random.seed(42)
n_total = len(y_true)
n_labeled = int(0.02 * n_total)
labeled_idx = np.random.choice(n_total, size=n_labeled, replace=False)

y_semi = np.full(n_total, -1)
y_semi[labeled_idx] = y_true[labeled_idx]

# ========================
# 步骤2: 自监督预训练(简化版:用自编码器学特征)
# ========================
class SimpleAutoencoder(nn.Module):
    def __init__(self, input_dim, latent_dim=128):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, 256),
            nn.ReLU(),
            nn.Linear(256, latent_dim)
        )
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, 256),
            nn.ReLU(),
            nn.Linear(256, input_dim)
        )
    
    def forward(self, x):
        z = self.encoder(x)
        recon = self.decoder(z)
        return recon, z

# 训练自编码器(仅用无标签数据)
device = 'cpu'  # 小数据可用CPU
ae = SimpleAutoencoder(X.shape[1], latent_dim=128)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(ae.parameters(), lr=1e-3)

X_tensor = torch.FloatTensor(X)
for epoch in range(20):
    optimizer.zero_grad()
    recon, _ = ae(X_tensor)
    loss = criterion(recon, X_tensor)
    loss.backward()
    optimizer.step()
    if epoch % 5 == 0:
        print(f"AE Epoch {epoch}, Loss: {loss.item():.4f}")

# 提取自监督特征
with torch.no_grad():
    _, X_ae = ae(X_tensor)
X_ae = X_ae.numpy()  # 自监督学到的128维特征

# ========================
# 步骤3: 半监督微调(用自监督特征 + 少量标签)
# ========================
# 方法A: 伪标签法
lr = LogisticRegression(max_iter=1000)
lr.fit(X_ae[labeled_idx], y_true[labeled_idx])

proba = lr.predict_proba(X_ae)
pseudo_labels = lr.predict(X_ae)
high_conf = np.max(proba, axis=1) > 0.9

# 构建增强训练集
train_idx = np.concatenate([labeled_idx, np.where(high_conf)[0]])
y_train = np.concatenate([y_true[labeled_idx], pseudo_labels[high_conf]])

lr_final = LogisticRegression(max_iter=1000)
lr_final.fit(X_ae[train_idx], y_train)

# 方法B: Label Spreading(直接用自监督特征)
ls = LabelSpreading(kernel='knn', n_neighbors=7, max_iter=100)
ls.fit(X_ae, y_semi)

# ========================
# 步骤4: 评估
# ========================
test_idx = np.setdiff1d(np.arange(n_total), labeled_idx)
y_test = y_true[test_idx]

acc_pseudo = accuracy_score(y_test, lr_final.predict(X_ae[test_idx]))
acc_ls = accuracy_score(y_test, ls.predict(X_ae[test_idx]))

# 对比基线:仅用2%标签的监督学习
lr_baseline = LogisticRegression(max_iter=1000)
lr_baseline.fit(X[labeled_idx], y_true[labeled_idx])
acc_baseline = accuracy_score(y_test, lr_baseline.predict(X[test_idx]))

print(f"\n=== 结果对比 ===")
print(f"纯监督 (2%标签): {acc_baseline:.2%}")
print(f"自监督+伪标签:   {acc_pseudo:.2%}")
print(f"自监督+LabelSpreading: {acc_ls:.2%}")

📊 典型输出

复制代码
纯监督 (2%标签): 68.50%
自监督+伪标签:   82.30%
自监督+LabelSpreading: 84.10%

💡 关键

自监督特征(128维)比原始TF-IDF(2000维)更紧凑、更具语义,大幅提升半监督效果!


🎯 本章总结

问题 解决方案 推荐工具
只有少量标签 半监督学习 Scikit-learn (LabelSpreading, 伪标签)
完全没有标签 自监督学习 PyTorch/TensorFlow(自编码器、SimSiam)
想最大化利用数据 自监督预训练 + 半监督微调 Hugging Face + Sklearn

💡 实践:

"先看分布,再选任务;
自监督打底,半监督精修;
少量标签,也能大有作为!"


资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
AC赳赳老秦2 小时前
技术文档合著:DeepSeek辅助多人协作文档的风格统一与内容补全
android·大数据·人工智能·微服务·golang·自动化·deepseek
风栖柳白杨2 小时前
【语音识别】SenseVoice非流式改流式
人工智能·语音识别
Aloudata2 小时前
企业落地 AI 数据分析,如何做好敏感数据安全防护?
人工智能·安全·数据挖掘·数据分析·chatbi·智能问数·dataagent
安达发公司2 小时前
安达发|煤炭行业APS高级排产:开启高效生产新时代
大数据·人工智能·aps高级排程·安达发aps·车间排产软件·aps高级排产
中科天工2 小时前
如何实现工业4.0智能制造的自动化包装解决方案?
大数据·人工智能·智能
知识分享小能手2 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle管理工具 —— 知识点详解(3)
数据库·学习·oracle
科技林总2 小时前
【系统分析师】4.1 计算机网络基础
学习
ai_top_trends2 小时前
AI 生成 PPT 工具横评:效率、质量、稳定性一次说清
人工智能·python·powerpoint
天天睡大觉2 小时前
Python学习9
开发语言·python·学习