自监督学习:让模型从数据自身学表征
什么是自监督学习
监督学习依赖人工标注的标签,例如「这张图是猫」、「这句话的情感是正面」。标注越精细,成本越高,且规模受限。无监督学习通常指对数据做聚类、降维等探索性分析,并不直接产出可迁移表征。自监督学习(self-supervised learning)走了一条中间道路:不依赖外部人工标签,而是从数据自身构造监督信号。
做法是设计一个 pretext task(前置任务 / 代理任务)。模型在完成这个任务的过程中,被迫去理解数据的内部结构,从而学到有用的表征(representation)。例如,把一张图片随机遮住一块,让模型重建被遮住的区域;或者把同一张图片做两种不同增广,让模型判断这两张图来自同一原图。这些任务的「标签」不是人标的,而是由数据变换规则自动生成的。
为什么自监督如此重要
第一,标注昂贵且稀缺。在医疗、工业质检、小语种等场景,专业标注的人力成本极高,高质量标注数据往往只有几千到几万条;而互联网上的图像、文本、音频是海量且未标注的。自监督学习正是为消化这部分廉价数据而生。
第二,未标注数据的分布更接近真实世界,海量数据上预训练的表征通常比仅用少量标注训练的模型更鲁棒、更通用。
第三,表征可迁移。自监督学到的特征表示,可以当作通用底座,再通过少量标注做下游任务的微调(fine-tuning)或线性探测(linear probing),使小数据场景也能用上大模型能力。
正是这三点,让自监督成为现代大模型预训练的事实标准。
对比学习:把相似样本拉近、不相似样本推远
对比学习(contrastive learning)的核心思想:让来自同一来源的视图(正样本对)在表征空间中靠近,让来自不同来源的视图(负样本对)在表征空间中远离。它不直接预测像素或词,而是学习一种「判别性」的嵌入空间。
SimCLR:数据增广加投影头加对比损失
SimCLR(Chen et al. 2020)把对比学习流程简化到极简:
- 对同一张图像 x 做两次随机数据增广(如随机裁剪、颜色抖动、模糊),得到两个视图 x_i 和 x_j。
- 用同一个编码器(如 ResNet)提取表征 h_i、h_j。
- 接一个可学习的投影头(projection head,通常是多层感知机),把表征映射为 z_i、z_j。
- 在 z 空间用对比损失(NT-Xent)训练,让 z_i 与 z_j 相似,与同一批次里其他样本相异。
SimCLR 的关键发现是:数据增广的组合质量决定表征上限;投影头显著提升表征质量;更大的批次与更长训练带来明显收益。其表征在 ImageNet 线性探测上达到 76.5% top-1,逼近有监督的 ResNet-50。
MoCo:动量编码器与字典队列
MoCo(He et al. 2020)把对比学习看作一个动态字典查询问题。它维护一个队列(queue)作为负样本库,并用一个动量编码器(momentum encoder)来生成相对一致、稳定的字典键。动量编码器的参数不靠梯度直接更新,而是追随主编码器参数做指数滑动平均。
这样做的好处是:不必像 SimCLR 那样依赖超大批次,就能拥有大量、一致的负样本,从而在小批次下也可训练,且学到的表征在目标检测、分割等下游任务上迁移效果优异,甚至超过有监督预训练。
对比损失直觉
下面用伪代码表达对比训练的核心循环(单对正样本、多负样本为例):
import torch
import torch.nn.functional as F
def ntxent_loss(z_i, z_j, z_negatives, temperature=0.5):
# z 已经过 L2 归一化,维度为 (dim,)
# 正样本相似度
pos_sim = torch.dot(z_i, z_j) / temperature
# 与所有负样本的相似度,形状 (num_neg,)
neg_sim = torch.matmul(z_negatives, z_i) / temperature
# 分子是正样本,分母汇总正样本与全部负样本
logits = torch.cat([pos_sim.unsqueeze(0), neg_sim])
labels = torch.zeros(1, dtype=torch.long) # 第 0 位为正样本
return F.cross_entropy(logits.unsqueeze(0), labels)
# 训练循环直觉
for x in dataloader:
view_a, view_b = augment(x), augment(x) # 两次随机增广
z_a = projection_head(encoder(view_a)) # 投影到对比空间
z_b = projection_head(encoder(view_b))
z_a = F.normalize(z_a, dim=-1)
z_b = F.normalize(z_b, dim=-1)
loss = ntxent_loss(z_a, z_b, negative_queue) # 拉近 a 与 b,推远队列
loss.backward()
update(encoder, projection_head)
掩码建模:预测被遮住的部分
掩码建模(masked modeling)的思路更直接:把输入的一部分遮住,让模型根据上下文把缺失内容还原出来,补全任务的标签天然存在于原始数据里。
BERT 的 MLM
BERT(Devlin et al. 2018)使用掩码语言建模(Masked Language Modeling, MLM)作为 pretext task。它随机把输入文本中约 15% 的词元(token)替换成特殊的 [MASK] 标记(训练时以一定概率保留原词或替换为随机词,以缓解预训练与微调的分布差异),然后让模型预测这些被遮住的词。
MLM 的关键价值在于「双向」:模型同时看到被遮词左右两侧的上下文,因此学到的表征比从左到右的自回归语言模型更充分捕捉整体语义,这也是 BERT 能用一个额外输出层微调到多种 NLP 任务 SOTA 的原因。
MAE 的像素掩码重建
MAE(He et al. 2021)把掩码思想搬到视觉。它随机遮住图像约 75% 的图块(patch),只把可见的少数图块送入编码器,再用轻量解码器重建全部像素。
MAE 的两个核心设计是:非对称编解码结构(编码器只看可见图块以省算力)和高掩码率(约 75%)。高掩码率让任务足够难且有意义,又因编码器处理的数据量大幅减少而加速训练三倍以上,最终精度与迁移性能均超过有监督预训练。
与自回归生成的联系
掩码建模与自回归生成(autoregressive generation)其实是同一枚硬币的两面:二者都基于「已知部分预测未知部分」。区别在于,MLM 是随机位置、双向上下文的填空,自回归则是固定顺序、单向上下文的续写。如今主流大语言模型多用自回归语言建模作为自监督 pretext task,本质上是「用前文预测后文」的掩码特例。
三类 pretext task 的直觉:生成式、对比式、预测式
从目标函数看,自监督的 pretext task 大致可归为三类:
- 生成式(generative):还原输入本身,如 MAE 重建像素、自编码器重构样本,关注「数据长什么样」。
- 对比式(contrastive):区分正负样本对,如 SimCLR、MoCo,关注「哪些样本是同一来源」。
- 预测式(predictive):预测结构化属性,如旋转角度、未来帧、相对位置,关注「数据的某一隐含关系」。
三者并非互斥。BERT 的 MLM 偏生成式,CLIP 等模型偏对比式,许多视频表征学习同时用预测式 pretext task。
自监督与监督、无监督、半监督的边界
- 与监督学习:监督学习的外标签来自人工标注,自监督的标签由数据变换自动产生。二者都有监督信号,但来源不同;自监督常作为预训练阶段,之后再用少量标注微调。
- 与无监督学习:经典无监督学习(聚类、密度估计)不面向具体下游表征,目标往往是数据分布描述。自监督则明确以「学到可迁移表征」为目标,常被视为无监督表征学习的子类,但动机不同。
- 与半监督学习:半监督同时使用少量标注和大量无标注数据,其无标注部分常借助自监督式 pretext task。二者常结合,但自监督本身不需任何标注。
简言之,自监督的独特性在于:标签自生,目标一致——学到可迁移表征。
大模型预训练为何几乎都是自监督
现代大模型的预训练几乎无一例外采用自监督,原因在于规模法则(scaling law):模型容量和数据量越大性能越好,而海量数据不可能被人工标注。
- 语言领域:GPT 系列用自回归语言建模,BERT 用 MLM,都是自监督。
- 视觉领域:ViT 类模型用 MAE 做像素重建预训练,效果超过有监督。
- 多模态领域:CLIP、ALIGN 用图文对比学习,把图像和文本编码到同一空间,实现零样本迁移。
自监督让「在全体互联网数据上预训练一个通用底座」成为可能,后续的指令微调、对齐(alignment)才在此基础上进行。可以说,没有自监督,就没有今天的大模型。
局限:pretext task 与下游任务的对齐 gap
自监督并非没有代价。最大的隐患是 pretext task 与最终下游任务之间可能存在对齐 gap(alignment gap):模型在代理任务上学到的表征,未必正好覆盖下游任务所需的关键信息。例如,仅用旋转预测预训练的模型,可能对纹理敏感而对形状不敏感,而分类任务恰恰需要形状线索。
此外还有几点现实问题:pretext task 的设计高度依赖经验,选错任务可能白费算力;对比学习对数据增广、批次规模、负样本库敏感,调参成本高。
这些局限不是否定自监督,而是提醒我们:pretext task 的选择应与下游目标保持对齐,并在可能时引入任务相关的验证。
小结
自监督学习用数据自身构造监督信号,免去昂贵标注,同时消化海量无标签数据,学到可迁移的通用表征。对比学习(如 SimCLR、MoCo)通过拉近正样本、推远负样本来塑造判别性嵌入空间;掩码建模(如 BERT 的 MLM、MAE 的像素重建)通过还原被遮部分迫使模型理解上下文结构。它们与生成式、对比式、预测式三类 pretext task 的直觉相通,并清晰区别于监督、无监督、半监督学习。正是自监督的可规模化,使其成为大模型预训练的事实基础,但 pretext task 与下游任务的对齐 gap 仍需持续关注。
参考与延伸阅读
- Chen et al. 2020, arXiv:2002.05709,「A Simple Framework for Contrastive Learning of Visual Representations」(SimCLR)。已核验
- He et al. 2020, arXiv:1911.05722,「Momentum Contrast for Unsupervised Visual Representation Learning」(MoCo)。已核验
- He et al. 2021, arXiv:2111.06377,「Masked Autoencoders Are Scalable Vision Learners」(MAE)。已核验
- Devlin et al. 2018, arXiv:1810.04805,「BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding」(MLM)。已核验
- Radford et al. 2021, arXiv:2103.00020,「Learning Transferable Visual Models From Natural Language Supervision」(CLIP,多模态对比学习代表,作为延伸阅读,编号未经本次核验,仅供参考)。