直觉:区别不在算法,在「监督信号从哪来」

很多人把这三者当成三类算法。更准的视角是:它们的根本差异在于训练信号(标签)从哪里来

  • 监督学习:标签由人提供,(x,y)(x, y) 成对。
  • 无监督学习:没有标签,只能从数据自身的结构里找规律。
  • 自监督学习:没有人工标签,但从数据自身构造出「伪标签」,把无标签问题转化成监督形式来解。

自监督是过去十年最重要的范式转变——它让我们能在几乎无限的无标签数据上,用监督学习的成熟机器去训练,从而支撑起大规模预训练。下面把三者的目标函数、数据流和工程取舍逐一拆开。

机制:三种范式的目标函数

监督学习

给定带标签数据,最小化预测与真值的差距:

minθE(x,y)D[L(fθ(x),y)]\min_\theta \; \mathbb{E}_{(x,y)\sim\mathcal{D}}\big[\mathcal{L}(f_\theta(x), y)\big]

信号清晰、收敛快,但标签是瓶颈——人工标注昂贵、慢、且有歧义。

无监督学习

只有 xx,目标是建模数据本身的结构。典型两类:

聚类(如 k-means)最小化簇内方差:

min{Ck}k=1KxCkxμk2\min_{\{C_k\}} \sum_{k=1}^{K} \sum_{x \in C_k} \|x - \mu_k\|^2

降维(如 PCA)寻找保留最大方差的低维子空间;密度估计则直接建模 P(x)P(x)。没有「正确答案」,评估困难是无监督的天然痛点——簇划得「好不好」往往没有客观标尺。

自监督学习

精髓是设计一个预设任务(pretext task),从 xx 自动切出输入和目标。形式上仍是监督损失,只是 yy 来自 xx 自身:

minθExD[L(fθ(mask(x)),target(x))]\min_\theta \; \mathbb{E}_{x\sim\mathcal{D}}\big[\mathcal{L}(f_\theta(\,\text{mask}(x)\,),\; \text{target}(x))\big]

两大流派:

  • 生成式/掩码式:遮住一部分,让模型预测被遮的部分。语言模型预测下一个词,或还原被 mask 的词,本质都是 P(xtx<t)P(x_t \mid x_{<t})P(xmaskxvisible)P(x_{\text{mask}} \mid x_{\text{visible}})
  • 对比式:同一样本的两个增强视图互为正例,不同样本为负例,拉近正例、推远负例。InfoNCE 损失是代表:

L=logexp(sim(zi,zi+)/τ)jexp(sim(zi,zj)/τ)\mathcal{L} = -\log \frac{\exp(\text{sim}(z_i, z_i^+)/\tau)}{\sum_{j}\exp(\text{sim}(z_i, z_j)/\tau)}

其中 τ\tau 是温度,zz 是编码后的表示。直觉:让模型学会「什么变换不改变语义」,从而学到鲁棒表示。

代码:自监督如何「凭空造标签」

以掩码语言建模为例,看伪标签是怎么来的:

1
2
3
4
5
6
7
8
9
10
11
12
13
import random

def make_mlm_example(tokens, mask_id, vocab, p=0.15):
"""从一句话自动构造 (输入, 标签),无需任何人工标注"""
inputs, labels = list(tokens), [-100] * len(tokens) # -100 表示不计损失
for i, tok in enumerate(tokens):
if random.random() < p: # 随机选 15% 的位置
labels[i] = tok # 标签 = 原始 token(这就是"伪标签")
r = random.random()
if r < 0.8: inputs[i] = mask_id # 80% 替换为 [MASK]
elif r < 0.9: inputs[i] = random.choice(vocab) # 10% 随机替换
# 10% 保持不变
return inputs, labels # 模型要从 inputs 还原出被遮位置的 labels

关键洞察:标签 labels[i] = tok 直接来自数据自身。一份纯文本语料因此能产生海量监督样本,无需一个人工标注者。这正是大规模预训练得以成立的根基。

工程权衡:为什么是「自监督预训练 + 监督微调」

现代主流范式是两阶段的:

1
2
3
海量无标签数据 ──自监督预训练──► 通用表示/基座模型

少量有标签数据 ──监督微调──────────► 下游任务模型

背后的权衡逻辑:

维度 监督 无监督 自监督
标签成本 高(人工) 无(自动构造)
可用数据量 受标注限制 海量 海量
信号质量 高、直接 弱、间接 较强、可端到端学表示
评估 直接(看任务指标) 困难 间接(看下游迁移效果)
典型产物 任务专用模型 簇/低维/密度 通用表示

几个实践要点与误区:

  • 预训练任务要和数据「形状」匹配:掩码式适合双向理解(编码器),自回归式适合生成。选错 pretext task,学到的表示对下游没用。
  • 对比学习对负样本和批大小敏感:负样本太少表示会坍缩,常需大 batch 或负样本队列;增强策略选得不好,模型会学到捷径而非语义。
  • 「无监督」和「自监督」别混用:聚类、PCA 这类是无监督(没有任何标签也不构造标签);预测下一个词是自监督(构造了伪标签)。自监督是无监督的子集这一说法常见,但工程上把它单列更清晰,因为它复用的是监督学习的整套优化机器。
  • 自监督学到的表示需要下游验证:预训练损失下降不等于表示有用,必须用 linear probing 或微调在真实任务上检验迁移效果。

小结

三种范式的分水岭是监督信号的来源:监督学习靠人工标签,信号最强但最贵;无监督学习不用标签、挖掘内在结构,但评估困难;自监督学习从数据自身切出伪标签,把无标签数据转成监督问题,从而兼得「海量数据」与「监督式优化」两个优势。理解了这条主线,你就明白为什么当代基座模型几乎都走「自监督预训练 + 少量监督微调」——用自监督在无限数据上学通用表示,再用昂贵的人工标签在下游做精准对齐。